create_facility
Add a place: a stay, transport, tour, food or parking.
/v1/guides/{productId}/facilitiescostRaw and openRaw stay the creator's own words (180 USD a night, June to October); they are never parsed. website is optional and may be http (accepted with a warning); a place with only a map link is fine. mapsUrl is an allowlisted map link; give lat and lon too so the apps can map the place and show its distance to the spot (a text search link can open a namesake). Link it to routes with set_route_facilities, to spots with spotKeys. The response carries warnings that did not stop the write.
curl -X POST "https://sceniq.earth/api/v1/guides/j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2/facilities" \
-H "Authorization: Bearer $SCENIQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "hut",
"type": "hotel",
"name": "Old Faithful Inn",
"operator": "Yellowstone National Park Lodges",
"description": "The 1904 log lodge next to Old Faithful, 15 minutes by car from the Fairy Falls trailhead. Old House rooms sell out first.",
"costRaw": "From 190 USD a night, Old House room with a shared bath (summer 2026)",
"costUnit": "per_night",
"openRaw": "Early May to early October",
"website": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"mapsUrl": "https://maps.apple.com/?ll=44.4598,-110.8311&q=Old%20Faithful%20Inn",
"lat": 44.4598,
"lon": -110.8311,
"country": "US",
"spotKeys": [
"01M2Z1G0Y0QG7M2V6N9R3T5W8Y"
],
"bookingRequired": true,
"bookingUrl": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"links": [
{
"kind": "booking",
"label": "Book a room",
"url": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/"
},
{
"kind": "official",
"label": "Old Faithful area (NPS)",
"url": "https://www.nps.gov/yell/planyourvisit/exploreoldfaithful.htm"
}
],
"schedule": {
"hours": [
{
"closed": true,
"note": "Closed in winter"
},
{
"from": "05-08",
"to": "10-04",
"note": "Open to overnight guests. Check-in from 16:00."
}
],
"validFrom": "2026-05-08",
"validUntil": "2026-10-04",
"sourceUrl": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"checkedOn": "2026-09-20"
},
"sources": [
{
"url": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"kind": "page",
"capturedOn": "2026-09-20",
"supports": [
"costRaw",
"openRaw",
"schedule"
]
}
],
"factsCheckedOn": "2026-09-20",
"reviewBy": "2027-03-01"
}'Path parameters
- productIdstring · guide idrequired
Id of the guide (a product of type map). From
list_guidesorcreate_guide.
Body parameters
- kindstringrequired
hut (a stay),
cable_car(transport), activity (tours and activities), food (food and drink) or parking.hutcable_caractivityfoodparking - namestringrequired
Name of the place. Cannot be empty.
Tours and activities (kind activity), null clears: {
meetingPoint?,meetingLat?,meetingLon?,durationMin?, departures?,requiredToSee? (the only way to see the spot),authorizedBy?,authorizedByUrl? }.Show 8 fieldsHide fieldsof ActivityInfo
- meetingPointstringoptional
Where to meet, at most 200 characters, shown as Meeting point.
- meetingLatnumberoptional
Latitude of the meeting point. Give
meetingLatandmeetingLontogether. - meetingLonnumberoptional
Longitude of the meeting point.
- durationMinnumberoptional
How long it takes in minutes (1 to 100,000), shown as Duration.
- departuresstringoptional
When it departs, in words, at most 300 characters (daily at 09:00 and 14:00), shown as Departures.
- requiredToSeebooleanoptional
true when a tour is the only way to see the spot (authorized tours at Antelope Canyon), shown as Needed to see the spot.
- authorizedBystringoptional
Who authorizes the operator, at most 120 characters, shown as Authorized by <name>.
- authorizedByUrlstringoptional
The authorizing body's page (http or https), linked from that line.
- bookingRequiredbooleanoptional
true shows Booking required.
- bookingUrlstringoptional
The page to book on (http or https).
null clears: {
minAge?,guestsOnly?,swimmersOnly?,luggageKg?,soldAsPackage?,cashOnly? }, shown as chips.Show 6 fieldsHide fieldsof PlaceConditions
- minAgenumberoptional
Minimum age, a whole number from 1 to 99, shown as Age 16+.
- guestsOnlybooleanoptional
true shows Guests only.
- swimmersOnlybooleanoptional
true shows Swimmers only.
- luggageKgnumberoptional
The luggage limit in kilograms (1 to 200), shown as Luggage up to 15 kg.
- soldAsPackagebooleanoptional
true shows Sold as a package.
- cashOnlybooleanoptional
true shows Cash only.
- costRawstringoptional
Price as the creator states it, e.g. 180 USD a night or 92 CHF half board; never parsed (
costUnitsays what it counts). Empty string clears. - costUnitstring or nulloptional
What
costRawcounts:per_person,per_night,per_person_night,per_room,per_vehicle,per_trip,per_hour,per_day. null clears.per_personper_nightper_person_nightper_roomper_vehicleper_tripper_hourper_day - countrystringoptional
ISO 3166-1 alpha-2 code (AR, BR): places on two sides of a border read right.
- descriptionstringoptional
The place in the creator's words. Empty string clears.
- extraKindsarray of stringsoptional
Further roles of the same place (a hut that is also a restaurant): [hut|
cable_car|activity|food|parking]. It then shows under each.hutcable_caractivityfoodparking Free label and value rows shown on the card, full replacement ([] clears), at most 24: [{ label (at most 60 characters), value (at most 500) }]. A row with both sides empty is dropped, a half-empty one refused.
Show 2 fieldsHide fieldsof ExtraProp
- labelstringrequired
The row's label, at most 60 characters.
- valuestringrequired
The row's value, at most 500 characters.
- factsCheckedOnstringoptional
The day the facts were last checked against their sources (YYYY-MM-DD). Empty string clears.
Fees and tickets, full replacement ([] clears), at most 30: [{ label, amount? (major units, e.g. 40 or 12.5; needs currency), currency? (EUR), free?,
seeOfficial? (a price left to the official page on purpose), per?: person|vehicle|night|group|entry|day|hour, audience?: all|adult|child|foreign|domestic|resident|student|senior,paidWhere?: online|on_site|in_tour, payment?:cash_only|card_only|cash_or_card, note?,validFrom?,validUntil?,sourceUrl?,checkedOn? }]. Buyers see the amount with an as-of date; readiness flags rows pastvalidUntilor unchecked for a year.Show 14 fieldsHide fieldsof Fee
- labelstringrequired
What the fee is for, at most 80 characters (Adult entry, Car park, Boat transfer).
- amountnumberoptional
The price in major units (40, 12.5). Needs currency. Absent when the fee is free or left to the official page.
- currencystringoptional
ISO 4217 code (USD, EUR, ARS). Required with amount.
- freebooleanoptional
true for no charge. Cannot be combined with an amount.
- seeOfficialbooleanoptional
true for a price the guide leaves to the official page on purpose (it changes too often to copy).
- perstringoptional
What one amount pays for: person, vehicle, night, group, entry, day or hour.
personvehiclenightgroupentrydayhour - audiencestringoptional
Who pays this rate: all, adult, child, foreign, domestic, resident, student or senior.
alladultchildforeigndomesticresidentstudentsenior - paidWherestringoptional
Where it is paid: online,
on_siteorin_tour(part of a tour price).onlineon_sitein_tour - paymentstringoptional
How it can be paid:
cash_only,card_onlyorcash_or_card.cash_onlycard_onlycash_or_card - notestringoptional
One line of context, at most 300 characters (free on the first Sunday of the month).
- validFromstringoptional
The first day the price applies (YYYY-MM-DD).
- validUntilstringoptional
The last day the price applies (YYYY-MM-DD). Readiness flags the row after it.
- sourceUrlstringoptional
The page the price comes from (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
- gatewayTownstringoptional
The town the place sits in when it is far from the spot on purpose (Ushuaia for an Antarctic cruise); no distance is shown then. Empty string clears.
- googlePlaceIdstringoptional
Google place id the pin came from, as a reference.
- insideIdstring or null · place idoptional
facilityIdof the place this one sits inside (a restaurant inside a lodge); one level only. null clears. - latnumber or nulloptional
The place's own latitude. With lon, the apps show it on the map and compute its distance to the spot; null clears.
Links with a purpose, full replacement ([] clears), at most 12: [{ kind: official|website|tickets|booking|status|timetable|tide|listing|social|authority|app|other, label?, url? (http or https; http is accepted with a warning), value? (a channel that is not a URL, e.g. WeChat mini program: Li River boats), note? }]. Each needs a url or a value.
Show 5 fieldsHide fieldsof GuideLink
- kindstringrequired
What the link is for. official and website are the place's own pages; tickets and booking sell entry or rooms; status, timetable and tide carry live conditions; listing, social, authority and app cover the rest.
officialwebsiteticketsbookingstatustimetabletidelistingsocialauthorityappother - labelstringoptional
The link text buyers see, at most 60 characters. Without it the apps name the link by its kind.
- urlstringoptional
An http or https page. http is accepted with a warning.
- valuestringoptional
A channel that is not a URL, at most 200 characters, for example a WeChat mini program and its search term.
- notestringoptional
One line of context shown under the link, at most 300 characters.
- lonnumber or nulloptional
The place's own longitude.
- mapsUrlstringoptional
Map link: https on Google Maps, Apple Maps, Swisstopo, OpenStreetMap or SchweizMobil, or a geo: URI. Give lat and lon too. Empty string clears.
- needsParentTicketbooleanoptional
true when entering needs the parent place's ticket.
- openRawstringoptional
Season or hours as text, never parsed (schedule holds structured hours). Empty string clears.
- operatorstringoptional
Who runs it. Empty string clears.
- osmIdstringoptional
OpenStreetMap reference the pin came from: node/123, way/456 or relation/789.
Parking places, null clears: {
fillsBy? (10:00), rule? (the only legal pullout) }.Show 2 fieldsHide fieldsof ParkingInfo
- fillsBystringoptional
When the lot is usually full, at most 80 characters (10:00, by 9 in summer), shown as Fills by.
- rulestringoptional
What is allowed, at most 300 characters (the only legal pullout).
- reviewBystringoptional
The day the facts need a new check (YYYY-MM-DD), e.g. when a season, fare or timetable runs out.
get_guide_readinessandget_publish_statuswarn once it has passed. Empty string clears. - reviewNotesstringoptional
Notes for the creator's review (why a value was chosen, what could not be verified). Never shown to buyers;
get_guide_readinesslists them. Empty string clears. Structured opening hours, null clears; the free-text hours stay the fallback: { hours?: [{ from? (MM-DD), to? (MM-DD, may wrap over the new year), weekdays? [1-7], closed?, open? (HH:MM or sunrise|sunset), close? (HH:MM or sunrise|sunset),
openOffsetMin?,closeOffsetMin? (minutes around a sun anchor, -60 = an hour before),lastEntry? (HH:MM),leaveBy? (HH:MM), note? }],specialDays?: [{ date? or rule? (first Sunday of the month), closed?, open?, close?, note? }], slots?: { first, last,everyMin, cap?, note? },validFrom?,validUntil?,sourceUrl?,checkedOn?, note? }. The last matching band wins, so list the year-round band first and exceptions after it. The apps show today's hours in the spot's time zone.Show 8 fieldsHide fieldsof Schedule
Up to 24 bands; the last matching band wins.
Show 11 fieldsHide fieldsof HoursBand
- fromstringoptional
First day of the band as MM-DD. Absent means the start of the year.
- tostringoptional
Last day of the band as MM-DD. May wrap over the new year (from 11-01 to 03-31).
- weekdaysarray of numbersoptional
The weekdays it covers, 1 (Monday) to 7 (Sunday). Absent means every day.
- closedbooleanoptional
true when the place is closed in this band. Otherwise open and close are required.
- openstringoptional
Opening time as HH:MM, or sunrise or sunset.
- closestringoptional
Closing time as HH:MM, or sunrise or sunset.
- openOffsetMinnumberoptional
Minutes around a sun anchor for open (-240 to 240; -60 is an hour before sunrise).
- closeOffsetMinnumberoptional
Minutes around a sun anchor for close (-240 to 240).
- lastEntrystringoptional
Last entry as HH:MM.
- leaveBystringoptional
The time visitors must be out as HH:MM.
- notestringoptional
One line for the band, at most 200 characters.
- specialDaysarray of objectsoptional
Up to 40 days that differ from the bands: a date or a rule, closed or with their own times.
Show 6 fieldsHide fields
- datestringoptional
The day (YYYY-MM-DD). Give a date or a rule.
- rulestringoptional
A recurring day in words, at most 120 characters (first Sunday of the month).
- closedbooleanoptional
true when the place is closed that day.
- openstringoptional
Opening time that day as HH:MM, or sunrise or sunset.
- closestringoptional
Closing time that day as HH:MM, or sunrise or sunset.
- notestringoptional
One line for the day, at most 200 characters.
- slotsobjectoptional
Timed entry: entries every
everyMinminutes from first to last.Show 5 fieldsHide fields
- firststringrequired
The first entry time as HH:MM.
- laststringrequired
The last entry time as HH:MM.
- everyMinnumberrequired
Minutes between entries.
- capnumberoptional
People per slot, when the source states it (1 to 100,000).
- notestringoptional
One line about booking a slot, at most 200 characters.
- validFromstringoptional
The first day these hours apply (YYYY-MM-DD).
- validUntilstringoptional
The last day these hours apply (YYYY-MM-DD).
- sourceUrlstringoptional
The page the hours come from (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
- notestringoptional
A note for the whole schedule, at most 500 characters.
Research evidence for reviewers, never shown to buyers; full replacement, at most 40: [{ url? or title?, kind?: page|api|archive|document|other,
capturedOn?, note?, supports? (which facts it backs, e.g. fees, arrival.operating, lat/lon), conflict? (true when it disagrees with another source on those facts) }].Show 7 fieldsHide fieldsof SourceRef
- urlstringoptional
The page, API or archive copy the facts come from (http or https).
- titlestringoptional
A name for a source without a URL (a park leaflet, a phone call with the operator), at most 200 characters.
- kindstringoptional
page, api, archive, document or other.
pageapiarchivedocumentother - capturedOnstringoptional
The day the source was read (YYYY-MM-DD).
- notestringoptional
What the source says or why it was chosen, at most 500 characters.
- supportsarray of stringsoptional
Which facts it backs, up to 12 entries of at most 60 characters (fees, arrival.operating, lat/lon).
- conflictbooleanoptional
true when this source disagrees with another on the facts it backs. Say which one the value follows in note or
reviewNotes.
- spotKeysarray of stringsoptional
spotKeysof the spots it serves directly (a hotel near a viewpoint), in order and each once, full replacement ([] clears), at most 200. Archived spots are allowed. Closure or works notice, null clears: { state: open|
partly_closed|closed|reopening, note?, since?, until? (the day the state is expected to end; buyers stop seeing the notice after it),sourceUrl?,checkedOn? }. reopening with until means reopens on that day.Show 6 fieldsHide fieldsof StatusNotice
- statestringrequired
open,
partly_closed, closed or reopening. reopening with until means it reopens on that day.openpartly_closedclosedreopening - notestringoptional
What is closed or changed, in the creator's words, at most 500 characters.
- sincestringoptional
The day the state began (YYYY-MM-DD).
- untilstringoptional
The day the state is expected to end (YYYY-MM-DD). Must not be before since.
- sourceUrlstringoptional
The page that announced it (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
Transport places, null clears: { stops?: [{ name, lat?, lon?,
registerId? (NSR or GTFS stop id), note? }],serviceDays? [1-7],timetableUrl?,timetableValidFrom?,timetableValidUntil?,verifyBeforeTravel? }.Show 6 fieldsHide fieldsof TransportInfo
- stopsarray of objectsoptional
Up to 30 stops, in the order buyers see them.
Show 5 fieldsHide fields
- namestringrequired
The stop's name, at most 100 characters. Required.
- latnumberoptional
Latitude of the stop. Give lat and lon together; the stop then links to a map.
- lonnumberoptional
Longitude of the stop.
- registerIdstringoptional
The stop's id in a public register (an NSR or GTFS stop id), at most 80 characters.
- notestringoptional
One line about the stop, at most 200 characters.
- serviceDaysarray of numbersoptional
The weekdays it runs, 1 (Monday) to 7 (Sunday). On fewer than seven days buyers see Runs Mon to Fri.
- timetableUrlstringoptional
The timetable page (http or https), shown as a Timetable link.
- timetableValidFromstringoptional
The first day the timetable applies (YYYY-MM-DD).
- timetableValidUntilstringoptional
The last day the timetable applies (YYYY-MM-DD), not before
timetableValidFrom. Buyers see Timetable valid until that day. - verifyBeforeTravelbooleanoptional
true shows Check the timetable before you travel.
- typestringoptional
Optional sub-type. Stays: hotel, guesthouse, hostel, hut, campsite, rental, liveaboard, pontoon. Transport:
cable_car, chairlift, funicular,cog_railway, train, bus, ferry, shuttle, flight, helicopter, tram, metro, taxi,bike_rental, jeep, elevator, toboggan, hub. Tours and activities:guided_tour,boat_tour, balloon,scenic_flight,jeep_safari,gear_rental. Food: restaurant, cafe, bar, bakery, grocery, market,picnic_site. Parking:parking_lot,parking_garage, street, campervan. A place without one reads as its kind's default (hut,cable_car,guided_tour, restaurant orparking_lot); empty string clears. - websitestringoptional
Link to the official site (https, or http with a warning). Empty string clears.
Returns
201 Created with PlaceWrite: A place after create_facility, with the write's warnings.
- facilityIdstring · place idrequired
The place's id.
- kindstringrequired
hut (a stay),
cable_car(transport), activity (tours), food or parking.hutcable_caractivityfoodparking - typestring or nullrequired
The sub-type (hotel, ferry, restaurant ...), or null for the kind's default.
- spotKeysarray of stringsrequired
The spots it serves directly, in order.
- namestringrequired
The place's name.
- operatorstring or nullrequired
Who runs it.
- descriptionstring or nullrequired
The place in the creator's words.
- costRawstring or nullrequired
The price as the creator states it.
- openRawstring or nullrequired
Season or hours as text.
- websitestring or nullrequired
The official site.
- mapsUrlstring or nullrequired
Map link.
Free label and value rows.
Show 2 fieldsHide fieldsof ExtraProp
- labelstringrequired
The row's label, at most 60 characters.
- valuestringrequired
The row's value, at most 500 characters.
- latnumber or nullrequired
The place's own latitude.
- lonnumber or nullrequired
The place's own longitude.
- osmIdstring or nullrequired
OpenStreetMap reference.
- googlePlaceIdstring or nullrequired
Google place id.
- countrystring or nullrequired
ISO 3166-1 alpha-2 code.
- timeZonestring or nullrequired
IANA time zone, from the pin.
Links with a purpose.
Show 5 fieldsHide fieldsof GuideLink
- kindstringrequired
What the link is for. official and website are the place's own pages; tickets and booking sell entry or rooms; status, timetable and tide carry live conditions; listing, social, authority and app cover the rest.
officialwebsiteticketsbookingstatustimetabletidelistingsocialauthorityappother - labelstringoptional
The link text buyers see, at most 60 characters. Without it the apps name the link by its kind.
- urlstringoptional
An http or https page. http is accepted with a warning.
- valuestringoptional
A channel that is not a URL, at most 200 characters, for example a WeChat mini program and its search term.
- notestringoptional
One line of context shown under the link, at most 300 characters.
- bookingRequiredbooleanrequired
true shows Booking required.
- bookingUrlstring or nullrequired
The page to book on.
- extraKindsarray of stringsrequired
Further roles of the same place.
hutcable_caractivityfoodparking - insideIdstring or null · place idrequired
The place this one sits inside.
- needsParentTicketbooleanrequired
true when entering needs the parent place's ticket.
Conditions shown as chips.
Show 6 fieldsHide fieldsof PlaceConditions
- minAgenumberoptional
Minimum age, a whole number from 1 to 99, shown as Age 16+.
- guestsOnlybooleanoptional
true shows Guests only.
- swimmersOnlybooleanoptional
true shows Swimmers only.
- luggageKgnumberoptional
The luggage limit in kilograms (1 to 200), shown as Luggage up to 15 kg.
- soldAsPackagebooleanoptional
true shows Sold as a package.
- cashOnlybooleanoptional
true shows Cash only.
- costUnitstring or nullrequired
What
costRawcounts.per_personper_nightper_person_nightper_roomper_vehicleper_tripper_hourper_day Parking details.
Show 2 fieldsHide fieldsof ParkingInfo
- fillsBystringoptional
When the lot is usually full, at most 80 characters (10:00, by 9 in summer), shown as Fills by.
- rulestringoptional
What is allowed, at most 300 characters (the only legal pullout).
Transport details.
Show 6 fieldsHide fieldsof TransportInfo
- stopsarray of objectsoptional
Up to 30 stops, in the order buyers see them.
Show 5 fieldsHide fields
- namestringrequired
The stop's name, at most 100 characters. Required.
- latnumberoptional
Latitude of the stop. Give lat and lon together; the stop then links to a map.
- lonnumberoptional
Longitude of the stop.
- registerIdstringoptional
The stop's id in a public register (an NSR or GTFS stop id), at most 80 characters.
- notestringoptional
One line about the stop, at most 200 characters.
- serviceDaysarray of numbersoptional
The weekdays it runs, 1 (Monday) to 7 (Sunday). On fewer than seven days buyers see Runs Mon to Fri.
- timetableUrlstringoptional
The timetable page (http or https), shown as a Timetable link.
- timetableValidFromstringoptional
The first day the timetable applies (YYYY-MM-DD).
- timetableValidUntilstringoptional
The last day the timetable applies (YYYY-MM-DD), not before
timetableValidFrom. Buyers see Timetable valid until that day. - verifyBeforeTravelbooleanoptional
true shows Check the timetable before you travel.
Tour and activity details.
Show 8 fieldsHide fieldsof ActivityInfo
- meetingPointstringoptional
Where to meet, at most 200 characters, shown as Meeting point.
- meetingLatnumberoptional
Latitude of the meeting point. Give
meetingLatandmeetingLontogether. - meetingLonnumberoptional
Longitude of the meeting point.
- durationMinnumberoptional
How long it takes in minutes (1 to 100,000), shown as Duration.
- departuresstringoptional
When it departs, in words, at most 300 characters (daily at 09:00 and 14:00), shown as Departures.
- requiredToSeebooleanoptional
true when a tour is the only way to see the spot (authorized tours at Antelope Canyon), shown as Needed to see the spot.
- authorizedBystringoptional
Who authorizes the operator, at most 120 characters, shown as Authorized by <name>.
- authorizedByUrlstringoptional
The authorizing body's page (http or https), linked from that line.
- gatewayTownstring or nullrequired
The town the place sits in when it is far from the spot on purpose.
A closure notice.
Show 6 fieldsHide fieldsof StatusNotice
- statestringrequired
open,
partly_closed, closed or reopening. reopening with until means it reopens on that day.openpartly_closedclosedreopening - notestringoptional
What is closed or changed, in the creator's words, at most 500 characters.
- sincestringoptional
The day the state began (YYYY-MM-DD).
- untilstringoptional
The day the state is expected to end (YYYY-MM-DD). Must not be before since.
- sourceUrlstringoptional
The page that announced it (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
Fees and tickets.
Show 14 fieldsHide fieldsof Fee
- labelstringrequired
What the fee is for, at most 80 characters (Adult entry, Car park, Boat transfer).
- amountnumberoptional
The price in major units (40, 12.5). Needs currency. Absent when the fee is free or left to the official page.
- currencystringoptional
ISO 4217 code (USD, EUR, ARS). Required with amount.
- freebooleanoptional
true for no charge. Cannot be combined with an amount.
- seeOfficialbooleanoptional
true for a price the guide leaves to the official page on purpose (it changes too often to copy).
- perstringoptional
What one amount pays for: person, vehicle, night, group, entry, day or hour.
personvehiclenightgroupentrydayhour - audiencestringoptional
Who pays this rate: all, adult, child, foreign, domestic, resident, student or senior.
alladultchildforeigndomesticresidentstudentsenior - paidWherestringoptional
Where it is paid: online,
on_siteorin_tour(part of a tour price).onlineon_sitein_tour - paymentstringoptional
How it can be paid:
cash_only,card_onlyorcash_or_card.cash_onlycard_onlycash_or_card - notestringoptional
One line of context, at most 300 characters (free on the first Sunday of the month).
- validFromstringoptional
The first day the price applies (YYYY-MM-DD).
- validUntilstringoptional
The last day the price applies (YYYY-MM-DD). Readiness flags the row after it.
- sourceUrlstringoptional
The page the price comes from (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
Structured opening hours.
Show 8 fieldsHide fieldsof Schedule
Up to 24 bands; the last matching band wins.
Show 11 fieldsHide fieldsof HoursBand
- fromstringoptional
First day of the band as MM-DD. Absent means the start of the year.
- tostringoptional
Last day of the band as MM-DD. May wrap over the new year (from 11-01 to 03-31).
- weekdaysarray of numbersoptional
The weekdays it covers, 1 (Monday) to 7 (Sunday). Absent means every day.
- closedbooleanoptional
true when the place is closed in this band. Otherwise open and close are required.
- openstringoptional
Opening time as HH:MM, or sunrise or sunset.
- closestringoptional
Closing time as HH:MM, or sunrise or sunset.
- openOffsetMinnumberoptional
Minutes around a sun anchor for open (-240 to 240; -60 is an hour before sunrise).
- closeOffsetMinnumberoptional
Minutes around a sun anchor for close (-240 to 240).
- lastEntrystringoptional
Last entry as HH:MM.
- leaveBystringoptional
The time visitors must be out as HH:MM.
- notestringoptional
One line for the band, at most 200 characters.
- specialDaysarray of objectsoptional
Up to 40 days that differ from the bands: a date or a rule, closed or with their own times.
Show 6 fieldsHide fields
- datestringoptional
The day (YYYY-MM-DD). Give a date or a rule.
- rulestringoptional
A recurring day in words, at most 120 characters (first Sunday of the month).
- closedbooleanoptional
true when the place is closed that day.
- openstringoptional
Opening time that day as HH:MM, or sunrise or sunset.
- closestringoptional
Closing time that day as HH:MM, or sunrise or sunset.
- notestringoptional
One line for the day, at most 200 characters.
- slotsobjectoptional
Timed entry: entries every
everyMinminutes from first to last.Show 5 fieldsHide fields
- firststringrequired
The first entry time as HH:MM.
- laststringrequired
The last entry time as HH:MM.
- everyMinnumberrequired
Minutes between entries.
- capnumberoptional
People per slot, when the source states it (1 to 100,000).
- notestringoptional
One line about booking a slot, at most 200 characters.
- validFromstringoptional
The first day these hours apply (YYYY-MM-DD).
- validUntilstringoptional
The last day these hours apply (YYYY-MM-DD).
- sourceUrlstringoptional
The page the hours come from (http or https).
- checkedOnstringoptional
The day the value was last checked against its source (YYYY-MM-DD).
- notestringoptional
A note for the whole schedule, at most 500 characters.
Research evidence, never shown to buyers.
Show 7 fieldsHide fieldsof SourceRef
- urlstringoptional
The page, API or archive copy the facts come from (http or https).
- titlestringoptional
A name for a source without a URL (a park leaflet, a phone call with the operator), at most 200 characters.
- kindstringoptional
page, api, archive, document or other.
pageapiarchivedocumentother - capturedOnstringoptional
The day the source was read (YYYY-MM-DD).
- notestringoptional
What the source says or why it was chosen, at most 500 characters.
- supportsarray of stringsoptional
Which facts it backs, up to 12 entries of at most 60 characters (fees, arrival.operating, lat/lon).
- conflictbooleanoptional
true when this source disagrees with another on the facts it backs. Say which one the value follows in note or
reviewNotes.
- reviewNotesstring or nullrequired
Notes for the creator's review, never shown to buyers.
- factsCheckedOnstring or nullrequired
The day the facts were last checked (YYYY-MM-DD).
- reviewBystring or nullrequired
The day the facts need a new check (YYYY-MM-DD).
- createdAtnumberrequired
When the row was created (Unix time in milliseconds).
- updatedAtnumberrequired
When the row last changed (Unix time in milliseconds).
- warningsarray of stringsoptional
Notes about things the write accepted but you should look at (a plain http link). Present only when there are any.
{
"facilityId": "km73j9h5g1f7d3s9a5p1p7j3v9y5t1r7",
"kind": "hut",
"type": "hotel",
"spotKeys": [
"01M2Z1G0Y0QG7M2V6N9R3T5W8Y"
],
"name": "Old Faithful Inn",
"operator": "Yellowstone National Park Lodges",
"description": "The 1904 log lodge next to Old Faithful, 15 minutes by car from the Fairy Falls trailhead. Old House rooms sell out first.",
"costRaw": "From 190 USD a night, Old House room with a shared bath (summer 2026)",
"openRaw": "Early May to early October",
"website": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"mapsUrl": "https://maps.apple.com/?ll=44.4598,-110.8311&q=Old%20Faithful%20Inn",
"extraProps": [],
"lat": 44.4598,
"lon": -110.8311,
"osmId": null,
"googlePlaceId": null,
"country": "US",
"timeZone": "America/Denver",
"links": [
{
"kind": "booking",
"label": "Book a room",
"url": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/"
},
{
"kind": "official",
"label": "Old Faithful area (NPS)",
"url": "https://www.nps.gov/yell/planyourvisit/exploreoldfaithful.htm"
}
],
"bookingRequired": true,
"bookingUrl": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"extraKinds": [],
"insideId": null,
"needsParentTicket": false,
"conditions": null,
"costUnit": "per_night",
"parking": null,
"transport": null,
"activity": null,
"gatewayTown": null,
"status": null,
"fees": [],
"schedule": {
"hours": [
{
"closed": true,
"note": "Closed in winter"
},
{
"from": "05-08",
"to": "10-04",
"note": "Open to overnight guests. Check-in from 16:00."
}
],
"validFrom": "2026-05-08",
"validUntil": "2026-10-04",
"sourceUrl": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"checkedOn": "2026-09-20"
},
"sources": [
{
"url": "https://www.yellowstonenationalparklodges.com/lodging/summer-lodges/old-faithful-inn/",
"kind": "page",
"capturedOn": "2026-09-20",
"supports": [
"costRaw",
"openRaw",
"schedule"
]
}
],
"reviewNotes": null,
"factsCheckedOn": "2026-09-20",
"reviewBy": "2027-03-01",
"createdAt": 1789895640000,
"updatedAt": 1789895640000
}Errors
Every error is { error: { code, message } }. Act on the code.
- 400invalid_argumentA required field is missing, a field is unknown, or a value does not match its type (the Convex validator's path and value are in the message).
- 400invalid_requestA writer refused a value: a map link on a host that is not allowed, a title that is too long, a date that does not exist, too many items in a list. The message is the writer's own sentence.
- 401unauthenticatedThe request carries no key. Send it as Authorization: Bearer sk_sceniq_... (or X-Api-Key).
- 401invalid_api_keyThe key is unknown, revoked or expired.
- 403api_scope_requiredA read-only key called a write operation, or a key without the publish option called publish_changes.
- 403forbiddenThe key belongs to a creator account that is no longer active.
- 404not_foundThe id does not exist or belongs to another creator. The two answers are identical on purpose, so ids never reveal what exists.
- 413payload_too_largeA JSON body over 2 MB, an image over 6 MB, a batch upload over 19 MB, or an MCP message over 2 MB.
- 429rate_limitedOver a limit: requests per key per minute, per creator per hour, uploads per key per minute, or check_links per guide per hour.
- 500internal_errorAn unexpected failure. The message is hidden on purpose.