update_spot
Edit a spot (fields, arrival, facts, archive).
/v1/spots/{spotId}Only the fields you send change; an empty string clears a text field, null clears an object, [] clears a list. customValues, arrival, mapLinks and every list are full replacements. archived true hides the spot from buyers but keeps it editable (the safe alternative to deleting once a guide has buyers). The response carries warnings (an http link) that did not stop the write.
curl -X PATCH "https://sceniq.earth/api/v1/spots/k1709e2vj4sk8q6x0d3m5r7t9w1y3b5c" \
-H "Authorization: Bearer $SCENIQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"areaId": "area_01m3gvdap06m6mx2kp4t553d6g",
"fees": []
}'Path parameters
- spotIdstring · spot idrequired
Id of the spot (
spotIdfromlist_spots).
Body parameters
- accessModestring or nulloptional
How visitors reach the spot, shown as Accessibility:
drive_up,short_walk, hike,multi_day, boat,cable_car, train, flight,tour_only,aerial_only. null clears. Without it the cell shows the easiest required route's grade, or Drive-up only when arrival.byCardescribes a drive.drive_upshort_walkhikemulti_dayboatcable_cartrainflighttour_onlyaerial_only - archivedbooleanoptional
true hides the spot from every buyer surface.
- areaIdstringoptional
The area (park, island, region) the spot sits in, from
set_area; its rules, fees and links show on the spot. Empty string clears. How to get there, full replacement, null clears: {
byCar?: { directions, parking,walkToSpotMin,walkRoundTrip? (the minutes are there and back), none? (no car access), note? },byTrainBus?: { route,walkFromStopMin,walkRoundTrip?, none? (no public transport, which reads differently from an empty field), note? },byBoat?,byAir?: { airports? (IATA or ICAO codes), route?, minutes?,operatorUrl?,luggageKg?, none?, note? },onFoot?: { route?, minutes?,roundTrip?, none?, note? },byBike?: { same },bestTime?, operating?, approaches?: [{ label (Argentine side), country? (AR), legs?: [{ mode: car|bus|train|tram|metro|cable_car|funicular|boat|ferry|plane|helicopter|shuttle|jeep|walk|bike|taxi|other, from?, to?, minutes?,roundTrip?, price?, payment?, note? }], hours?, entry?, note?, lat?, lon? }] (at most 6, for spots with several ways in or chains of legs), rules?: [{ text, kind?: reservation|permit|guide|registration|no_independent_travel|vehicle|other, months? [1-12] (shown only then),appliesTo?: car|all,bookingOpens?,sourceUrl? }] }.Show 10 fieldsHide fieldsof Arrival
- byCarobjectoptional
Driving and parking.
Show 6 fieldsHide fields
- directionsstringoptional
The drive in words, at most 2,000 characters.
- parkingstringoptional
Where to park, at most 1,000 characters.
- walkToSpotMinnumberoptional
Minutes on foot from the car to the spot.
- walkRoundTripbooleanoptional
true when
walkToSpotMinis there and back. - nonebooleanoptional
true when the spot has no car access.
- notestringoptional
One more line about driving, at most 500 characters.
- byTrainBusobjectoptional
Public transport.
Show 5 fieldsHide fields
- routestringoptional
The connection in words, at most 2,000 characters.
- walkFromStopMinnumberoptional
Minutes on foot from the stop to the spot.
- walkRoundTripbooleanoptional
true when
walkFromStopMinis there and back. - nonebooleanoptional
true when there is no public transport.
- notestringoptional
One more line about public transport, at most 500 characters.
- byBoatstringoptional
The boat connection in words, at most 2,000 characters.
- byAirobjectoptional
Flights or helicopter.
Show 7 fieldsHide fields
- airportsarray of stringsoptional
Up to 8 IATA or ICAO codes (LUA, VNLK).
- routestringoptional
The flight in words, at most 2,000 characters.
- minutesnumberoptional
Flight time in minutes.
- operatorUrlstringoptional
The operator's page (http or https).
- luggageKgnumberoptional
The luggage limit in kilograms (1 to 200).
- nonebooleanoptional
true when there is no air access.
- notestringoptional
One more line about flying, at most 500 characters.
Walking in.
Show 5 fieldsHide fieldsof ArrivalModeBlock
- routestringoptional
The way in words, at most 2,000 characters.
- minutesnumberoptional
Minutes it takes.
- roundTripbooleanoptional
true when minutes is there and back.
- nonebooleanoptional
true when this mode is not possible.
- notestringoptional
One more line, at most 500 characters.
Cycling in.
Show 5 fieldsHide fieldsof ArrivalModeBlock
- routestringoptional
The way in words, at most 2,000 characters.
- minutesnumberoptional
Minutes it takes.
- roundTripbooleanoptional
true when minutes is there and back.
- nonebooleanoptional
true when this mode is not possible.
- notestringoptional
One more line, at most 500 characters.
- bestTimestringoptional
The best time to go in words, at most 1,000 characters.
- operatingstringoptional
When the access runs (seasons, hours of a road or a ferry), at most 2,000 characters.
- approachesarray of objectsoptional
Up to 6 ways in, for spots with several approaches or chains of legs (a flight, then a jeep, then a walk).
Show 8 fieldsHide fields
- labelstringrequired
The approach's name, at most 80 characters (Argentine side).
- countrystringoptional
ISO 3166-1 alpha-2 code of the country it starts in (AR).
- legsarray of objectsoptional
Up to 12 legs in order.
Show 8 fieldsHide fields
- modestringrequired
car, bus, train, tram, metro,
cable_car, funicular, boat, ferry, plane, helicopter, shuttle, jeep, walk, bike, taxi or other.carbustraintrammetrocable_carfunicularboatferryplanehelicoptershuttlejeepwalkbiketaxiother - fromstringoptional
Where the leg starts, at most 120 characters.
- tostringoptional
Where the leg ends, at most 120 characters.
- minutesnumberoptional
Minutes the leg takes.
- roundTripbooleanoptional
true when minutes is there and back.
- pricestringoptional
The leg's price in words, at most 80 characters.
- paymentstringoptional
How the leg is paid, at most 80 characters.
- notestringoptional
One line for the leg, at most 300 characters.
- hoursstringoptional
When the approach runs, at most 300 characters.
- entrystringoptional
What entry takes on this side, at most 300 characters.
- notestringoptional
One more line, at most 500 characters.
- latnumberoptional
Latitude of the approach's start.
- lonnumberoptional
Longitude of the approach's start.
Up to 20 access rules (reservations, permits), each shown in its months.
Show 6 fieldsHide fieldsof AccessRule
- textstringrequired
The rule in the creator's words, at most 300 characters.
- kindstringoptional
reservation, permit, guide, registration,
no_independent_travel, vehicle or other.reservationpermitguideregistrationno_independent_travelvehicleother - monthsarray of numbersoptional
The months the rule applies (1 to 12); the apps show it only then. Absent means all year.
- appliesTostringoptional
car for a rule that only binds drivers (a timed entry for vehicles), all for everyone.
carall - bookingOpensstringoptional
When booking opens, in words, at most 100 characters (90 days ahead at 07:00).
- sourceUrlstringoptional
The page that states the rule (http or https).
- cardOrientationstringoptional
portrait or landscape (photo framing in the viewer); a spot without one reads as landscape.
portraitlandscape - colorstringoptional
Optional pin color hex, e.g. #0071e3. Empty string clears.
- customNotesmap of stringsoptional
One short note per custom property value, keyed by property key, shown next to the value (walls 40 EUR, morning from viewpoint 7). Full replacement ({} clears).
- customPropsEnabledbooleanoptional
false hides custom properties from buyers; values stay stored.
- customValuesmap of valuesoptional
Object keyed by property key (
list_properties): text forshortLabelandlongSection, a number for number, epoch ms for date, one option id forsingleSelect, an array of option ids for checkbox (ids, never labels). Every required property needs a value; keys without a live property are kept unchecked. Sent for an existing spot it replaces the stored object; null for a key clears that value. Recurring or one-off events worth timing a visit for, full replacement, at most 12: [{ name, when (in words: every night at 19:45 and 20:45), dates? [YYYY-MM-DD] (the apps show the next one), months?, url?, free?, note? }].
Show 7 fieldsHide fieldsof SpotEvent
- namestringrequired
The event's name, at most 80 characters.
- whenstringrequired
When, in words, at most 200 characters (every night at 19:45 and 20:45).
- datesarray of stringsoptional
Exact dates when known (YYYY-MM-DD, up to 60). Readiness lists events whose dates have all passed.
- monthsarray of numbersoptional
The months it happens (1 to 12).
- urlstringoptional
The event's page (http or https).
- freebooleanoptional
true when it costs nothing to watch.
- notestringoptional
One line of context, at most 300 characters.
- factsCheckedOnstringoptional
The day the facts were last checked against their sources (YYYY-MM-DD). Empty string clears.
Parts of the site with their own rules (a monastery's closing day, a ticketed skyway), full replacement, at most 12: [{ name, note?, hours?, entry?, season?, fees? (as fees), status? (as status), url? }].
Show 8 fieldsHide fieldsof SpotFeature
- namestringrequired
The part's name, at most 80 characters.
- notestringoptional
What to know about it, at most 500 characters.
- hoursstringoptional
Its hours in words, at most 200 characters.
- entrystringoptional
Its entry rule or price in words, at most 200 characters.
- seasonstringoptional
When it is open in words, at most 200 characters.
Its own fees, as the spot's fees.
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).
Its own 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).
- urlstringoptional
Its own page (http or https).
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).
Why the spot lists no food places, null clears: { status: included (meals come with the lodge or boat) |
none_nearby|bring_your_own, note? }.Show 2 fieldsHide fieldsof FoodNote
- statusstringrequired
included (meals come with the lodge or boat),
none_nearby, orbring_your_own.includednone_nearbybring_your_own - notestringoptional
One line of context, at most 300 characters.
- imagesEnabledbooleanoptional
false hides the photo section from buyers; photos stay stored.
- kickerstringoptional
Short eyebrow above the title, e.g. Patagonia, Bernese Oberland or Glacier lake. Empty string clears.
- latnumberoptional
Latitude in decimal degrees (-90 to 90). From the creator's material or a cited source.
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.
- lonnumberoptional
Longitude in decimal degrees (-180 to 180).
- longDescriptionstringoptional
The full write-up in the creator's voice. Empty string clears.
Extra map links [{ label, url }] (https or an allowlisted map link), drawn as map pills. [] clears. For official, ticket or status pages use links instead.
Show 2 fieldsHide fieldsof MapLink
- labelstringrequired
The pill text, at most 40 characters.
- urlstringrequired
An https page or an allowlisted map link.
- mapsUrlstringoptional
The creator's own map link: https on Google Maps, Apple Maps, Swisstopo, OpenStreetMap or SchweizMobil, or a geo: URI. Empty string clears.
- pinLabelstringoptional
What the main pin marks for a spot that is an area or a line, shown as Pinned: <label> (Ti Top viewpoint). Empty string clears.
Extra points, full replacement ([] clears), at most 12: [{ kind: viewpoint|entrance|gate|trailhead|parking|stop|pier|summit|other, label, lat, lon, months? [1-12] (only reachable then), note? }]. Each gets its own map links and a place on the web map.
Show 6 fieldsHide fieldsof SpotPin
- kindstringrequired
viewpoint, entrance, gate, trailhead, parking, stop, pier, summit or other.
viewpointentrancegatetrailheadparkingstoppiersummitother - labelstringrequired
What buyers read next to the pin, at most 80 characters (South rim viewpoint).
- latnumberrequired
Latitude in decimal degrees (-90 to 90), from the creator's material or a cited source.
- lonnumberrequired
Longitude in decimal degrees (-180 to 180).
- monthsarray of numbersoptional
The months the point is reachable (1 to 12). Absent means all year.
- notestringoptional
One line of context, at most 300 characters.
- refstringoptional
Your own stable key for this spot (af04-abu-simbel), unique in the guide;
upsert_spotsmatches on it. Empty string clears. Rules on site, full replacement, at most 20: [{ kind:
no_photo|wide_only|no_drone|no_entry|no_stopping|no_parking|other, label, note?, lat?, lon?,radiusM?, line? ([[lon, lat], ...] for a stretch of road),sourceUrl? }].Show 8 fieldsHide fieldsof Restriction
- kindstringrequired
no_photo,wide_only(shown as Wide shots only),no_drone,no_entry,no_stopping,no_parkingor other.no_photowide_onlyno_droneno_entryno_stoppingno_parkingother - labelstringrequired
The rule as buyers read it, at most 80 characters.
- notestringoptional
More context, at most 300 characters.
- latnumberoptional
Latitude of the point the rule applies around.
- lonnumberoptional
Longitude of the point the rule applies around.
- radiusMnumberoptional
The radius around lat and lon in meters (1 to 100,000).
- linearray of array of numbersoptional
A stretch of road or trail instead of a point: 2 to 200 [lon, lat] positions.
- sourceUrlstringoptional
The page that states the rule (http or https).
- 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.
- shortDescriptionstringoptional
One or two sentences for the card. Empty string clears.
The day something at the spot changed (a bridge replaced, boats banned), null clears: { on (YYYY-MM-DD), note? }. Readiness flags photos captured before it.
Show 2 fieldsHide fieldsof SiteChange
- onstringrequired
The day of the change (YYYY-MM-DD). Required.
- notestringoptional
What changed, at most 300 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.
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).
- timeZonestringoptional
IANA zone (America/Phoenix). Derived from the pin on every write; set it only when the lookup is wrong near a border. Empty string hands it back to the pin.
- titlestringoptional
Place name as locals know it, e.g. Oeschinensee or Fushimi Inari-taisha. Cannot be empty.
The planning stats bar, null clears: {
elevationM? (meters; 0 is a stated sea level, absent is unknown),elevationRefersTo?: viewpoint|summit|ground|water|trailhead,elevationSource?, busyness? (1 quiet to 5 packed, shown as Crowdedness),bestSeason? }.Show 5 fieldsHide fieldsof TripFacts
- elevationMnumberoptional
Elevation in meters (-500 to 9,000). 0 is a stated sea level; absent is unknown.
- elevationRefersTostringoptional
What the elevation measures: viewpoint, summit, ground, water or trailhead.
viewpointsummitgroundwatertrailhead - elevationSourcestringoptional
Where the number comes from, at most 300 characters.
- busynessnumberoptional
Crowds from 1 (quiet) to 5 (packed), shown as Crowdedness.
- bestSeasonstringoptional
The best season in words, at most 200 characters.
Returns
200 OK with SpotWrite: A spot after create_spot or update_spot, with the write's warnings.
- spotIdstring · spot idrequired
The spot's id.
- spotKeystringrequired
The spot's stable key within the guide; chapters and routes reference spots by it.
- productIdstring · guide idrequired
The guide the spot belongs to.
- titlestringrequired
The place name.
- kickerstring or nullrequired
The short line above the title (region or type).
- latnumber or nullrequired
Latitude in decimal degrees, or null when the pin is not set yet.
- lonnumber or nullrequired
Longitude in decimal degrees, or null when the pin is not set yet.
- mapsUrlstring or nullrequired
The creator's own map link.
- shortDescriptionstring or nullrequired
One or two sentences for the card.
- longDescriptionstring or nullrequired
The full write-up.
- colorstring or nullrequired
Pin color as a hex value, or null for the default.
- cardOrientationstringrequired
Photo framing in the viewer.
portraitlandscape - customValuesmap of valuesrequired
Custom property values keyed by property key; option values are option ids.
The planning stats bar.
Show 5 fieldsHide fieldsof TripFacts
- elevationMnumberoptional
Elevation in meters (-500 to 9,000). 0 is a stated sea level; absent is unknown.
- elevationRefersTostringoptional
What the elevation measures: viewpoint, summit, ground, water or trailhead.
viewpointsummitgroundwatertrailhead - elevationSourcestringoptional
Where the number comes from, at most 300 characters.
- busynessnumberoptional
Crowds from 1 (quiet) to 5 (packed), shown as Crowdedness.
- bestSeasonstringoptional
The best season in words, at most 200 characters.
How to get there.
Show 10 fieldsHide fieldsof Arrival
- byCarobjectoptional
Driving and parking.
Show 6 fieldsHide fields
- directionsstringoptional
The drive in words, at most 2,000 characters.
- parkingstringoptional
Where to park, at most 1,000 characters.
- walkToSpotMinnumberoptional
Minutes on foot from the car to the spot.
- walkRoundTripbooleanoptional
true when
walkToSpotMinis there and back. - nonebooleanoptional
true when the spot has no car access.
- notestringoptional
One more line about driving, at most 500 characters.
- byTrainBusobjectoptional
Public transport.
Show 5 fieldsHide fields
- routestringoptional
The connection in words, at most 2,000 characters.
- walkFromStopMinnumberoptional
Minutes on foot from the stop to the spot.
- walkRoundTripbooleanoptional
true when
walkFromStopMinis there and back. - nonebooleanoptional
true when there is no public transport.
- notestringoptional
One more line about public transport, at most 500 characters.
- byBoatstringoptional
The boat connection in words, at most 2,000 characters.
- byAirobjectoptional
Flights or helicopter.
Show 7 fieldsHide fields
- airportsarray of stringsoptional
Up to 8 IATA or ICAO codes (LUA, VNLK).
- routestringoptional
The flight in words, at most 2,000 characters.
- minutesnumberoptional
Flight time in minutes.
- operatorUrlstringoptional
The operator's page (http or https).
- luggageKgnumberoptional
The luggage limit in kilograms (1 to 200).
- nonebooleanoptional
true when there is no air access.
- notestringoptional
One more line about flying, at most 500 characters.
Walking in.
Show 5 fieldsHide fieldsof ArrivalModeBlock
- routestringoptional
The way in words, at most 2,000 characters.
- minutesnumberoptional
Minutes it takes.
- roundTripbooleanoptional
true when minutes is there and back.
- nonebooleanoptional
true when this mode is not possible.
- notestringoptional
One more line, at most 500 characters.
Cycling in.
Show 5 fieldsHide fieldsof ArrivalModeBlock
- routestringoptional
The way in words, at most 2,000 characters.
- minutesnumberoptional
Minutes it takes.
- roundTripbooleanoptional
true when minutes is there and back.
- nonebooleanoptional
true when this mode is not possible.
- notestringoptional
One more line, at most 500 characters.
- bestTimestringoptional
The best time to go in words, at most 1,000 characters.
- operatingstringoptional
When the access runs (seasons, hours of a road or a ferry), at most 2,000 characters.
- approachesarray of objectsoptional
Up to 6 ways in, for spots with several approaches or chains of legs (a flight, then a jeep, then a walk).
Show 8 fieldsHide fields
- labelstringrequired
The approach's name, at most 80 characters (Argentine side).
- countrystringoptional
ISO 3166-1 alpha-2 code of the country it starts in (AR).
- legsarray of objectsoptional
Up to 12 legs in order.
Show 8 fieldsHide fields
- modestringrequired
car, bus, train, tram, metro,
cable_car, funicular, boat, ferry, plane, helicopter, shuttle, jeep, walk, bike, taxi or other.carbustraintrammetrocable_carfunicularboatferryplanehelicoptershuttlejeepwalkbiketaxiother - fromstringoptional
Where the leg starts, at most 120 characters.
- tostringoptional
Where the leg ends, at most 120 characters.
- minutesnumberoptional
Minutes the leg takes.
- roundTripbooleanoptional
true when minutes is there and back.
- pricestringoptional
The leg's price in words, at most 80 characters.
- paymentstringoptional
How the leg is paid, at most 80 characters.
- notestringoptional
One line for the leg, at most 300 characters.
- hoursstringoptional
When the approach runs, at most 300 characters.
- entrystringoptional
What entry takes on this side, at most 300 characters.
- notestringoptional
One more line, at most 500 characters.
- latnumberoptional
Latitude of the approach's start.
- lonnumberoptional
Longitude of the approach's start.
Up to 20 access rules (reservations, permits), each shown in its months.
Show 6 fieldsHide fieldsof AccessRule
- textstringrequired
The rule in the creator's words, at most 300 characters.
- kindstringoptional
reservation, permit, guide, registration,
no_independent_travel, vehicle or other.reservationpermitguideregistrationno_independent_travelvehicleother - monthsarray of numbersoptional
The months the rule applies (1 to 12); the apps show it only then. Absent means all year.
- appliesTostringoptional
car for a rule that only binds drivers (a timed entry for vehicles), all for everyone.
carall - bookingOpensstringoptional
When booking opens, in words, at most 100 characters (90 days ahead at 07:00).
- sourceUrlstringoptional
The page that states the rule (http or https).
Extra map links, drawn as map pills.
Show 2 fieldsHide fieldsof MapLink
- labelstringrequired
The pill text, at most 40 characters.
- urlstringrequired
An https page or an allowlisted map link.
- imagesEnabledbooleanrequired
false hides the photo section from buyers.
- customPropsEnabledbooleanrequired
false hides the custom properties from buyers.
- archivedbooleanrequired
true when the spot is hidden from buyers but kept.
- refstring or nullrequired
Your own stable key for
upsert_spots. - accessModestring or nullrequired
How visitors reach the spot, shown as Accessibility.
drive_upshort_walkhikemulti_dayboatcable_cartrainflighttour_onlyaerial_only - pinLabelstring or nullrequired
What the main pin marks, for a spot that is an area or a line.
Extra points: viewpoints, entrances, trailheads, parking.
Show 6 fieldsHide fieldsof SpotPin
- kindstringrequired
viewpoint, entrance, gate, trailhead, parking, stop, pier, summit or other.
viewpointentrancegatetrailheadparkingstoppiersummitother - labelstringrequired
What buyers read next to the pin, at most 80 characters (South rim viewpoint).
- latnumberrequired
Latitude in decimal degrees (-90 to 90), from the creator's material or a cited source.
- lonnumberrequired
Longitude in decimal degrees (-180 to 180).
- monthsarray of numbersoptional
The months the point is reachable (1 to 12). Absent means all year.
- notestringoptional
One line of context, at most 300 characters.
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.
A closure or works 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.
Parts of the site with their own rules.
Show 8 fieldsHide fieldsof SpotFeature
- namestringrequired
The part's name, at most 80 characters.
- notestringoptional
What to know about it, at most 500 characters.
- hoursstringoptional
Its hours in words, at most 200 characters.
- entrystringoptional
Its entry rule or price in words, at most 200 characters.
- seasonstringoptional
When it is open in words, at most 200 characters.
Its own fees, as the spot's fees.
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).
Its own 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).
- urlstringoptional
Its own page (http or https).
Rules on site.
Show 8 fieldsHide fieldsof Restriction
- kindstringrequired
no_photo,wide_only(shown as Wide shots only),no_drone,no_entry,no_stopping,no_parkingor other.no_photowide_onlyno_droneno_entryno_stoppingno_parkingother - labelstringrequired
The rule as buyers read it, at most 80 characters.
- notestringoptional
More context, at most 300 characters.
- latnumberoptional
Latitude of the point the rule applies around.
- lonnumberoptional
Longitude of the point the rule applies around.
- radiusMnumberoptional
The radius around lat and lon in meters (1 to 100,000).
- linearray of array of numbersoptional
A stretch of road or trail instead of a point: 2 to 200 [lon, lat] positions.
- sourceUrlstringoptional
The page that states the rule (http or https).
Events worth timing a visit for.
Show 7 fieldsHide fieldsof SpotEvent
- namestringrequired
The event's name, at most 80 characters.
- whenstringrequired
When, in words, at most 200 characters (every night at 19:45 and 20:45).
- datesarray of stringsoptional
Exact dates when known (YYYY-MM-DD, up to 60). Readiness lists events whose dates have all passed.
- monthsarray of numbersoptional
The months it happens (1 to 12).
- urlstringoptional
The event's page (http or https).
- freebooleanoptional
true when it costs nothing to watch.
- notestringoptional
One line of context, at most 300 characters.
Why the spot lists no food places.
Show 2 fieldsHide fieldsof FoodNote
- statusstringrequired
included (meals come with the lodge or boat),
none_nearby, orbring_your_own.includednone_nearbybring_your_own - notestringoptional
One line of context, at most 300 characters.
- areaIdstring or nullrequired
The area (park, island, region) the spot sits in.
- timeZonestring or nullrequired
IANA time zone, derived from the pin unless set by hand.
- timeZoneManualbooleanrequired
true when the time zone was set by hand rather than from the pin.
- customNotesmap of stringsrequired
One short note per custom property value, keyed by property key.
Research evidence for the review, 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).
The day something at the spot changed.
Show 2 fieldsHide fieldsof SiteChange
- onstringrequired
The day of the change (YYYY-MM-DD). Required.
- notestringoptional
What changed, at most 300 characters.
- createdAtnumberrequired
When the row was created (Unix time in milliseconds).
- updatedAtnumberrequired
When the row last changed (Unix time in milliseconds).
- photosarray of objectsrequired
The spot's photos in gallery order.
list_mediahas every photo field.Show 7 fieldsHide fields
- mediaIdstring · photo idrequired
The photo's id.
- urlstringrequired
The photo's URL.
- captionstring or nullrequired
Caption.
- creditstring or nullrequired
Photographer credit.
- widthnumber or nullrequired
Width in pixels.
- heightnumber or nullrequired
Height in pixels.
- ordernumberrequired
Position in the spot's gallery (ascending).
- chaptersarray of objectsrequired
The chapters and collections the spot belongs to.
Show 4 fieldsHide fields
- collectionIdstring · chapter idrequired
The chapter's or collection's id.
- namestringrequired
Its name.
- kindstringrequired
chapter carries prose; collection is a plain spot set.
collectionchapter - ordernumberrequired
The spot's position inside that chapter.
- routesarray of objectsrequired
The routes that reach the spot.
Show 4 fieldsHide fields
- routeIdstring · route idrequired
The route's id.
- namestring or nullrequired
The route's name.
- ordernumberrequired
The spot's position on the route.
- quickestbooleanrequired
true when this route is the fastest approach to the spot.
- warningsarray of stringsoptional
Notes about things the write accepted but you should look at (a plain http link). Present only when there are any.
{
"spotId": "k1709e2vj4sk8q6x0d3m5r7t9w1y3b5c",
"spotKey": "01M2Z1G0Y0QG7M2V6N9R3T5W8Y",
"productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
"title": "Grand Prismatic Spring",
"kicker": "Yellowstone, Midway Geyser Basin",
"lat": 44.5251,
"lon": -110.8382,
"mapsUrl": "https://maps.apple.com/?ll=44.5251,-110.8382&q=Grand%20Prismatic%20Spring",
"shortDescription": "The largest hot spring in the United States. See it from the boardwalk, then from the overlook above the Fairy Falls trail.",
"longDescription": "Grand Prismatic is about 110 meters across, and from the boardwalk you mostly see steam and the orange mats that run off toward the Firehole River. For the colors, park at the Fairy Falls trailhead and follow the trail to the signed spur for the overlook: about 1 km each way, 20 minutes up. The whole spring opens up below the platform. Come on a warm, dry morning; on a cold day the steam hides everything.",
"color": null,
"cardOrientation": "landscape",
"customValues": {
"best_time": "morning",
"crowds": "packed",
"photo_notes": "From the overlook a 24 mm lens takes in the whole spring. On the boardwalk, shoot the runoff channels instead of the steam."
},
"tripFacts": {
"elevationM": 2176,
"elevationRefersTo": "ground",
"busyness": 5,
"bestSeason": "Late May to September"
},
"arrival": {
"byCar": {
"directions": "Grand Loop Road, 11 km north of Old Faithful. Midway Geyser Basin lot.",
"parking": "Midway Geyser Basin lot, full by 10:00 in summer. Fairy Falls trailhead lot 1.6 km south.",
"walkToSpotMin": 10
},
"byTrainBus": {
"none": true
},
"bestTime": "Mid morning on a warm, dry day: cold air turns the steam into fog that hides the colors."
},
"mapLinks": [],
"imagesEnabled": true,
"customPropsEnabled": true,
"archived": false,
"ref": null,
"accessMode": "short_walk",
"pinLabel": null,
"pins": [
{
"kind": "viewpoint",
"label": "Grand Prismatic Overlook",
"lat": 44.5192,
"lon": -110.8391,
"note": "Platform on a spur of the Fairy Falls trail, about 1 km from the trailhead lot."
},
{
"kind": "parking",
"label": "Fairy Falls trailhead lot",
"lat": 44.5153,
"lon": -110.8325,
"note": "For the overlook. Full by mid morning in July and August."
}
],
"links": [
{
"kind": "official",
"url": "https://www.nps.gov/places/000/grand-prismatic-spring.htm",
"label": "Grand Prismatic Spring (NPS)"
},
{
"kind": "status",
"url": "https://www.nps.gov/yell/planyourvisit/conditions.htm",
"label": "Park road status"
}
],
"status": null,
"fees": [],
"schedule": null,
"features": [],
"restrictions": [
{
"kind": "no_drone",
"label": "No drones in the park",
"note": "Drones are banned in all US national parks."
},
{
"kind": "no_entry",
"label": "Stay on the boardwalk",
"note": "The crust around the spring is thin, and the water under it is scalding."
}
],
"events": [],
"food": null,
"areaId": "area_01m3gvdap06m6mx2kp4t553d6g",
"timeZone": "America/Denver",
"timeZoneManual": false,
"customNotes": {
"crowds": "Quieter before 9:00 and after 18:00"
},
"sources": [
{
"url": "https://www.nps.gov/places/000/grand-prismatic-spring.htm",
"kind": "page",
"capturedOn": "2026-09-20",
"supports": [
"arrival",
"restrictions"
]
}
],
"reviewNotes": "The overlook pin comes from your GPX of 18 September; please confirm it. The trail distance is from the NPS page (0.6 mi each way).",
"factsCheckedOn": "2026-09-20",
"reviewBy": "2027-04-01",
"siteChange": null,
"createdAt": 1789895640000,
"updatedAt": 1790586840000,
"photos": [
{
"mediaId": "kg71s3d5f7g9h1j3k5k7z9x1c3v5b7n9",
"url": "https://quiet-heron-512.convex.cloud/api/storage/grand-prismatic-overlook.webp",
"caption": "From the overlook on a clear September morning",
"credit": "Mara Lindgren",
"width": 2048,
"height": 1365,
"order": 1
},
{
"mediaId": "kg7p2p4j6v8y0t2r4e6w8q0a2s4d6f8g",
"url": "https://quiet-heron-512.convex.cloud/api/storage/grand-prismatic-aerial.webp",
"caption": "Runoff channels from the boardwalk",
"credit": "Mara Lindgren",
"width": 1365,
"height": 2048,
"order": 2
}
],
"chapters": [
{
"collectionId": "kn7e5r9t3y7v1j5p9p3a7s1d5f9g3h7j",
"name": "Yellowstone",
"kind": "chapter",
"order": 1024
},
{
"collectionId": "kn7a2s4d6f8g0h2j4k6k8z0x2c4v6b8n",
"name": "Top picks",
"kind": "collection",
"order": 1024
}
],
"routes": [
{
"routeId": "kx7f2h8j4k0k6z2x8c4v0b6n2m8q4w0e",
"name": "Fairy Falls trail",
"order": 1024,
"quickest": false
}
]
}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.