list_spots
All spots of a guide in editor order.
/v1/guides/{productId}/spotsIncludes archived spots (flagged). Each spot carries its spotKey, which chapters and routes reference.
curl "https://sceniq.earth/api/v1/guides/j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2/spots" \
-H "Authorization: Bearer $SCENIQ_API_KEY"Path parameters
- productIdstring · guide idrequired
Id of the guide (a product of type map). From
list_guidesorcreate_guide.
Returns
200 OK with this object.
- productIdstring · guide idrequired
The guide's id.
Every spot in editor order, archived ones included.
Show 42 fieldsHide fieldsof Spot
- 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).
{
"productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
"spots": [
{
"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
},
{
"spotId": "k17bc3xz8h6f4d2s0q9w7e5r3t1y2v4j",
"spotKey": "01M2Z1G0Y0R2K5P8S1V4X7Z0C3",
"productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
"title": "Tunnel View",
"kicker": "Yosemite Valley",
"lat": 37.7156,
"lon": -119.677,
"mapsUrl": "https://www.google.com/maps/search/?api=1&query=37.7156,-119.677",
"shortDescription": "El Capitan, Half Dome and Bridalveil Fall in one frame, at the east end of the Wawona Tunnel.",
"longDescription": null,
"color": null,
"cardOrientation": "landscape",
"customValues": {
"best_time": "sunset",
"crowds": "busy"
},
"tripFacts": null,
"arrival": {
"byCar": {
"directions": "Wawona Road (Highway 41), at the east end of the Wawona Tunnel.",
"parking": "Lots on both sides of the road; the north lot fills first at sunset.",
"walkToSpotMin": 1
},
"bestTime": "The hour before sunset, or when a winter storm starts to clear."
},
"mapLinks": [],
"imagesEnabled": true,
"customPropsEnabled": true,
"archived": false,
"ref": "yose-tunnel-view",
"accessMode": "drive_up",
"pinLabel": null,
"pins": [],
"links": [],
"status": null,
"fees": [],
"schedule": null,
"features": [],
"restrictions": [],
"events": [],
"food": null,
"areaId": "area_01m3gvgcb04pf38p66vz544w1b",
"timeZone": "America/Los_Angeles",
"timeZoneManual": false,
"customNotes": {},
"sources": [],
"reviewNotes": null,
"factsCheckedOn": null,
"reviewBy": null,
"siteChange": null,
"createdAt": 1789895640000,
"updatedAt": 1790586840000
},
{
"spotId": "k17rwzt006kbqwjbs5jrqk4jjf5srec9",
"spotKey": "01M3GYV6A0Y3SYC62RBPEA9S0C",
"productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
"title": "Lamar Valley",
"kicker": "Yellowstone, northeast entrance road",
"lat": null,
"lon": null,
"mapsUrl": null,
"shortDescription": null,
"longDescription": null,
"color": null,
"cardOrientation": "landscape",
"customValues": {},
"tripFacts": null,
"arrival": null,
"mapLinks": [],
"imagesEnabled": true,
"customPropsEnabled": true,
"archived": false,
"ref": null,
"accessMode": null,
"pinLabel": null,
"pins": [],
"links": [],
"status": null,
"fees": [],
"schedule": null,
"features": [],
"restrictions": [],
"events": [],
"food": null,
"areaId": null,
"timeZone": null,
"timeZoneManual": false,
"customNotes": {},
"sources": [],
"reviewNotes": "No pin yet: the creator is sending the pullout they use for the bison herds.",
"factsCheckedOn": null,
"reviewBy": null,
"siteChange": null,
"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).
- 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.
- 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.
- 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.