get_sales_page
The default sales page: draft, published state, media map.
/v1/guides/{productId}/sales-pageReturns the listing row (draftConfig is what you edit; publishedConfig is live) and the media rows it may reference. null listing means no draft exists yet; save_sales_page_draft creates it.
curl "https://sceniq.earth/api/v1/guides/j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2/sales-page" \
-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 SalesPage: The default sales page and the photos it may use.
- productIdstring · guide idrequired
The guide's id.
- listingobject or nullrequired
The default sales page, or null before a draft exists.
Show 12 fieldsHide fields
- listingIdstring · sales page idrequired
The sales page's id.
- statusstringrequired
Whether a version is live.
publishedunpublished - baseLanguagestringrequired
The language of
draftConfig. The draft: what
save_sales_page_draftreplaces.Show 8 fieldsHide fieldsof ListingConfig
The top of the page, always shown.
Show 6 fieldsHide fieldsof HeroSection
Up to 12 slides that turn automatically. Publishing needs at least one.
Show 3 fieldsHide fieldsof ListingSlide
- mediaIdstring · photo idrequired
A product- or listing-owned photo of this guide (
list_mediawithmarketingOnlytrue). Spot and chapter photos are refused. - captionstringoptional
The caption for this slide. Absent means the photo's own caption.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- titlestringrequired
The page title, usually the guide's name. Publishing needs one.
- headlinestringoptional
One line under the title, at most 200 characters. Absent or empty falls back to the guide's headline (
update_guide). - kickerstringoptional
An eyebrow above the title.
- bulletsarray of objectsrequired
The selling points: at most 6 on save, 2 to 6 and none empty to publish.
Show 2 fieldsHide fields
- textstringrequired
One selling point.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- collectionMediaIdstring · photo idoptional
An optional collage image, a product- or listing-owned photo of this guide, shown on the buy card beside the page on wide screens.
What's inside: boxes with a title, text and a photo or icon. Can be switched off.
Show 5 fieldsHide fieldsof PitchSection
- enabledbooleanrequired
false hides the section. Publishing an enabled section needs at least one box, each with a title.
- titlestringoptional
The section heading. Absent or empty shows What's inside.
- descriptionstringoptional
A line under the heading.
- imageAspectstringoptional
The crop of every box photo: 3:2, 1:1 or 4:5 (the default).
3:21:14:5 - boxesarray of objectsrequired
Up to 24 boxes.
Show 5 fieldsHide fields
- mediaIdstring · photo idoptional
An optional photo on top of the box, a product- or listing-owned photo of this guide.
- emojistringoptional
An emoji the creator chose for the box's icon tile, shown when the box has no photo (beside the title when it has one). Agents leave it empty (no emoji in any field); without one the page picks an icon from the title.
- titlestringrequired
The box title. Publishing needs one on every box.
- descriptionstringoptional
The box text.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
Testimonials. Can be switched off.
Show 4 fieldsHide fieldsof ReviewsSection
- enabledbooleanrequired
false hides the section and the star rating under the hero title.
- sourcestringrequired
Where the testimonials come from: custom (the creator's own quotes in custom), platform (testimonials Sceniq curates) or product (labelled Buyer Reviews; the page currently shows the curated platform testimonials for it too).
productplatformcustom - headingstringoptional
The section heading. Absent or empty shows the source's default: What people say (custom), Platform Reviews (platform) or Buyer Reviews (product).
The creator's testimonials, up to 12, shown when source is custom. Publishing an enabled custom section needs at least one.
Show 9 fieldsHide fieldsof CustomReview
- namestringrequired
The reviewer's name. Publishing needs one.
- quotestringrequired
The quote, word for word. Publishing needs one; quotes over 140 characters collapse behind Read more.
- ratingnumberoptional
Stars as a whole number from 1 to 5; stars show only when it is set. Never invent one.
- verifiedbooleanoptional
Ignored: every save removes it, so testimonials the creator enters never show a verified badge.
- platformstringoptional
instagram, tiktok or youtube. With a handle, the handle links to the profile.
instagramtiktokyoutube - handlestringoptional
The reviewer's handle, shown with a leading @.
- followerCountnumberoptional
The reviewer's followers as a whole number from 0, shown next to the handle (12K).
- avatarMediaIdstring · photo idoptional
The reviewer's photo, a product- or listing-owned photo of this guide.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
Full-screen photos with captions. Can be switched off; off in a new draft.
Show 4 fieldsHide fieldsof GallerySection
- enabledbooleanrequired
false hides the section. Publishing an enabled gallery needs at least one slide.
- titlestringoptional
The section heading. Absent or empty shows From the field.
- descriptionstringoptional
A line under the heading.
Up to 48 slides.
Show 3 fieldsHide fieldsof ListingSlide
- mediaIdstring · photo idrequired
A product- or listing-owned photo of this guide (
list_mediawithmarketingOnlytrue). Spot and chapter photos are refused. - captionstringoptional
The caption for this slide. Absent means the photo's own caption.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
The creator's bio, social links and video, with per-page overrides. Can be switched off.
Show 4 fieldsHide fieldsof AboutCreatorSection
- enabledbooleanrequired
false hides the section. Publishing an enabled section needs a bio, social links or a video.
- descriptionOverridestringoptional
The about text for this page only. Absent means the creator's profile bio.
Social links for this page only; [] shows none. Absent means the profile's social links.
Show 4 fieldsHide fieldsof SocialLink
- platformstringrequired
instagram, tiktok or youtube.
instagramtiktokyoutube - handlestringrequired
The account name (@name). Required on the profile; the link pill shows it when there is no follower count.
- urlstringrequired
The profile page (https;
set_profile_socialsrefuses other links). An empty url on a sales page falls back to the link built from platform and handle. - followerCountnumberoptional
Followers as the creator states them, a whole number from 0, shown on the pill (12K) instead of the handle.
A video for the section. Absent shows no video.
Show 6 fieldsHide fieldsof IntroVideo
- providerstringrequired
youtube, vimeo or upload (a video file stored on Sceniq).
youtubevimeoupload - youtubeIdstringoptional
For youtube: the video id (the v= value of a watch link), never a URL or an embed code.
- vimeoIdstringoptional
For vimeo: the numeric id from the video's link. The player loads only after a click.
- storageIdstring · stored file idoptional
For upload: the stored video file. The API cannot upload videos; keep the value you read.
- fileUrlstringoptional
For upload: a direct link to the video file, used when there is no
storageId. - captionstringoptional
A line under the video.
The buy section with the checkout, always shown.
Show 3 fieldsHide fieldsof BuyFormSection
- ctaLabelstringoptional
The label of every buy button on the page, at most 60 characters. Absent or empty falls back to the guide's
purchaseButtonText, then Get the guide. - reassuranceTextstringoptional
A short line over the bottom of the checkout photo, or above the checkout without one.
- imageMediaIdstring · photo idoptional
A photo above the checkout in a 3:2 crop, a product- or listing-owned photo of this guide.
Questions and answers below the buy form. Can be switched off; off in a new draft. Absent on drafts saved before the section existed.
Show 3 fieldsHide fieldsof FaqSection
- enabledbooleanrequired
false hides the section. Publishing an enabled FAQ needs at least one item, each with a question and an answer.
- titlestringoptional
The section heading. Absent or empty shows Common questions.
- itemsarray of objectsrequired
Up to 12 items.
Show 3 fieldsHide fields
- questionstringrequired
The question.
- answerstringrequired
The answer.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- sectionOrderarray of stringsoptional
The page order of the sections below the hero: pitch, reviews, gallery,
aboutCreator,buyFormand faq, each at most once. Missing sections follow in that default order; absent means the default.pitchreviewsgalleryaboutCreatorbuyFormfaq
- draftUpdatedAtnumberrequired
When the draft last changed.
What buyers see.
Show 8 fieldsHide fieldsof ListingConfig
The top of the page, always shown.
Show 6 fieldsHide fieldsof HeroSection
Up to 12 slides that turn automatically. Publishing needs at least one.
Show 3 fieldsHide fieldsof ListingSlide
- mediaIdstring · photo idrequired
A product- or listing-owned photo of this guide (
list_mediawithmarketingOnlytrue). Spot and chapter photos are refused. - captionstringoptional
The caption for this slide. Absent means the photo's own caption.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- titlestringrequired
The page title, usually the guide's name. Publishing needs one.
- headlinestringoptional
One line under the title, at most 200 characters. Absent or empty falls back to the guide's headline (
update_guide). - kickerstringoptional
An eyebrow above the title.
- bulletsarray of objectsrequired
The selling points: at most 6 on save, 2 to 6 and none empty to publish.
Show 2 fieldsHide fields
- textstringrequired
One selling point.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- collectionMediaIdstring · photo idoptional
An optional collage image, a product- or listing-owned photo of this guide, shown on the buy card beside the page on wide screens.
What's inside: boxes with a title, text and a photo or icon. Can be switched off.
Show 5 fieldsHide fieldsof PitchSection
- enabledbooleanrequired
false hides the section. Publishing an enabled section needs at least one box, each with a title.
- titlestringoptional
The section heading. Absent or empty shows What's inside.
- descriptionstringoptional
A line under the heading.
- imageAspectstringoptional
The crop of every box photo: 3:2, 1:1 or 4:5 (the default).
3:21:14:5 - boxesarray of objectsrequired
Up to 24 boxes.
Show 5 fieldsHide fields
- mediaIdstring · photo idoptional
An optional photo on top of the box, a product- or listing-owned photo of this guide.
- emojistringoptional
An emoji the creator chose for the box's icon tile, shown when the box has no photo (beside the title when it has one). Agents leave it empty (no emoji in any field); without one the page picks an icon from the title.
- titlestringrequired
The box title. Publishing needs one on every box.
- descriptionstringoptional
The box text.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
Testimonials. Can be switched off.
Show 4 fieldsHide fieldsof ReviewsSection
- enabledbooleanrequired
false hides the section and the star rating under the hero title.
- sourcestringrequired
Where the testimonials come from: custom (the creator's own quotes in custom), platform (testimonials Sceniq curates) or product (labelled Buyer Reviews; the page currently shows the curated platform testimonials for it too).
productplatformcustom - headingstringoptional
The section heading. Absent or empty shows the source's default: What people say (custom), Platform Reviews (platform) or Buyer Reviews (product).
The creator's testimonials, up to 12, shown when source is custom. Publishing an enabled custom section needs at least one.
Show 9 fieldsHide fieldsof CustomReview
- namestringrequired
The reviewer's name. Publishing needs one.
- quotestringrequired
The quote, word for word. Publishing needs one; quotes over 140 characters collapse behind Read more.
- ratingnumberoptional
Stars as a whole number from 1 to 5; stars show only when it is set. Never invent one.
- verifiedbooleanoptional
Ignored: every save removes it, so testimonials the creator enters never show a verified badge.
- platformstringoptional
instagram, tiktok or youtube. With a handle, the handle links to the profile.
instagramtiktokyoutube - handlestringoptional
The reviewer's handle, shown with a leading @.
- followerCountnumberoptional
The reviewer's followers as a whole number from 0, shown next to the handle (12K).
- avatarMediaIdstring · photo idoptional
The reviewer's photo, a product- or listing-owned photo of this guide.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
Full-screen photos with captions. Can be switched off; off in a new draft.
Show 4 fieldsHide fieldsof GallerySection
- enabledbooleanrequired
false hides the section. Publishing an enabled gallery needs at least one slide.
- titlestringoptional
The section heading. Absent or empty shows From the field.
- descriptionstringoptional
A line under the heading.
Up to 48 slides.
Show 3 fieldsHide fieldsof ListingSlide
- mediaIdstring · photo idrequired
A product- or listing-owned photo of this guide (
list_mediawithmarketingOnlytrue). Spot and chapter photos are refused. - captionstringoptional
The caption for this slide. Absent means the photo's own caption.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
The creator's bio, social links and video, with per-page overrides. Can be switched off.
Show 4 fieldsHide fieldsof AboutCreatorSection
- enabledbooleanrequired
false hides the section. Publishing an enabled section needs a bio, social links or a video.
- descriptionOverridestringoptional
The about text for this page only. Absent means the creator's profile bio.
Social links for this page only; [] shows none. Absent means the profile's social links.
Show 4 fieldsHide fieldsof SocialLink
- platformstringrequired
instagram, tiktok or youtube.
instagramtiktokyoutube - handlestringrequired
The account name (@name). Required on the profile; the link pill shows it when there is no follower count.
- urlstringrequired
The profile page (https;
set_profile_socialsrefuses other links). An empty url on a sales page falls back to the link built from platform and handle. - followerCountnumberoptional
Followers as the creator states them, a whole number from 0, shown on the pill (12K) instead of the handle.
A video for the section. Absent shows no video.
Show 6 fieldsHide fieldsof IntroVideo
- providerstringrequired
youtube, vimeo or upload (a video file stored on Sceniq).
youtubevimeoupload - youtubeIdstringoptional
For youtube: the video id (the v= value of a watch link), never a URL or an embed code.
- vimeoIdstringoptional
For vimeo: the numeric id from the video's link. The player loads only after a click.
- storageIdstring · stored file idoptional
For upload: the stored video file. The API cannot upload videos; keep the value you read.
- fileUrlstringoptional
For upload: a direct link to the video file, used when there is no
storageId. - captionstringoptional
A line under the video.
The buy section with the checkout, always shown.
Show 3 fieldsHide fieldsof BuyFormSection
- ctaLabelstringoptional
The label of every buy button on the page, at most 60 characters. Absent or empty falls back to the guide's
purchaseButtonText, then Get the guide. - reassuranceTextstringoptional
A short line over the bottom of the checkout photo, or above the checkout without one.
- imageMediaIdstring · photo idoptional
A photo above the checkout in a 3:2 crop, a product- or listing-owned photo of this guide.
Questions and answers below the buy form. Can be switched off; off in a new draft. Absent on drafts saved before the section existed.
Show 3 fieldsHide fieldsof FaqSection
- enabledbooleanrequired
false hides the section. Publishing an enabled FAQ needs at least one item, each with a question and an answer.
- titlestringoptional
The section heading. Absent or empty shows Common questions.
- itemsarray of objectsrequired
Up to 12 items.
Show 3 fieldsHide fields
- questionstringrequired
The question.
- answerstringrequired
The answer.
- ordernumberrequired
Sort key, ascending; fractional values are fine.
- sectionOrderarray of stringsoptional
The page order of the sections below the hero: pitch, reviews, gallery,
aboutCreator,buyFormand faq, each at most once. Missing sections follow in that default order; absent means the default.pitchreviewsgalleryaboutCreatorbuyFormfaq
- publishedAtnumber or nullrequired
When it was last published.
- publishedConfigVersionnumberrequired
The live version's number.
- localesarray of stringsrequired
Published translations as language codes, besides
baseLanguage([] for a page in one language). - metaTitlestring or nullrequired
The search result title.
- metaDescriptionstring or nullrequired
The search result description.
- updatedAtnumberrequired
When the row last changed (Unix time in milliseconds).
- mediaMapmap of objectsrequired
The photos the sales page may use, keyed by
mediaId.Show 7 fieldsHide fields
- idstring · photo idrequired
The photo's id.
- urlstringrequired
The photo's URL.
- captionstringoptional
Caption.
- creditstringoptional
Photographer credit.
- widthnumberoptional
Width in pixels.
- heightnumberoptional
Height in pixels.
- ordernumberrequired
Position.
- publishingstringrequired
Who publishes the sales page (the creator, in the studio).
{
"productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
"listing": {
"listingId": "kr7w1e3r5t7y9v1j3p5p7a9s1d3f5g7h",
"status": "published",
"baseLanguage": "en",
"draftConfig": {
"hero": {
"carousel": [
{
"mediaId": "kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g",
"order": 1024
},
{
"mediaId": "kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k",
"caption": "Tunnel View, Yosemite, at first light",
"order": 2048
},
{
"mediaId": "kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s",
"order": 3072
}
],
"title": "American West: Parks at First Light",
"headline": "Twelve viewpoints across Yellowstone and Yosemite, timed for the light and the crowds.",
"kicker": "A map guide by Mara Lindgren",
"bullets": [
{
"text": "Twelve viewpoints in Yellowstone and Yosemite, each with an exact pin",
"order": 1
},
{
"text": "The best hour for every view, and when the crowds arrive",
"order": 2
},
{
"text": "Trailheads, parking and the time each lot fills",
"order": 3
},
{
"text": "Fees, opening hours and closures checked in September 2026",
"order": 4
}
]
},
"pitch": {
"enabled": true,
"title": "Built for the hour you are there",
"description": "Every spot says when to arrive, where to park and how long the walk takes, so the good light finds you at the viewpoint, not in the parking lot.",
"imageAspect": "4:5",
"boxes": [
{
"mediaId": "kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s",
"title": "One map for both parks",
"description": "Pins for every viewpoint, trailhead and lot, in the Sceniq app and in your browser.",
"order": 1
},
{
"mediaId": "kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g",
"title": "Timed for the light",
"description": "Grand Prismatic mid morning once the steam lifts, Tunnel View at first light.",
"order": 2
},
{
"title": "Parking that works",
"description": "Which lot to use, when it fills, and where to go when it does.",
"order": 3
}
]
},
"reviews": {
"enabled": true,
"source": "product",
"heading": "What buyers say"
},
"gallery": {
"enabled": false,
"slides": []
},
"aboutCreator": {
"enabled": true
},
"buyForm": {
"ctaLabel": "Get the guide",
"reassuranceText": "One payment. Open it in the Sceniq app or in your browser.",
"imageMediaId": "kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k"
},
"faq": {
"enabled": true,
"title": "Common questions",
"items": [
{
"question": "Do I need a car?",
"answer": "Yes. Every spot lists where to park, how early the lot fills and how long the walk is from there.",
"order": 1
},
{
"question": "Does the guide work without signal?",
"answer": "Download it in the Sceniq app before you go. The map, the spots and the photos then open without signal, which most of these viewpoints do not have.",
"order": 2
},
{
"question": "When should I go?",
"answer": "Late May to September for both parks. Each spot lists its best months and the hour it looks its best.",
"order": 3
}
]
}
},
"draftUpdatedAt": 1790586840000,
"publishedConfig": {
"hero": {
"carousel": [
{
"mediaId": "kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g",
"order": 1024
},
{
"mediaId": "kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k",
"caption": "Tunnel View, Yosemite, at first light",
"order": 2048
},
{
"mediaId": "kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s",
"order": 3072
}
],
"title": "American West: Parks at First Light",
"headline": "Twelve viewpoints across Yellowstone and Yosemite, timed for the light and the crowds.",
"kicker": "A map guide by Mara Lindgren",
"bullets": [
{
"text": "Twelve viewpoints in Yellowstone and Yosemite, each with an exact pin",
"order": 1
},
{
"text": "The best hour for every view, and when the crowds arrive",
"order": 2
},
{
"text": "Trailheads, parking and the time each lot fills",
"order": 3
}
]
},
"pitch": {
"enabled": true,
"title": "Built for the hour you are there",
"description": "Every spot says when to arrive, where to park and how long the walk takes, so the good light finds you at the viewpoint, not in the parking lot.",
"imageAspect": "4:5",
"boxes": [
{
"mediaId": "kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s",
"title": "One map for both parks",
"description": "Pins for every viewpoint, trailhead and lot, in the Sceniq app and in your browser.",
"order": 1
},
{
"mediaId": "kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g",
"title": "Timed for the light",
"description": "Grand Prismatic mid morning once the steam lifts, Tunnel View at first light.",
"order": 2
},
{
"title": "Parking that works",
"description": "Which lot to use, when it fills, and where to go when it does.",
"order": 3
}
]
},
"reviews": {
"enabled": true,
"source": "product",
"heading": "What buyers say"
},
"gallery": {
"enabled": false,
"slides": []
},
"aboutCreator": {
"enabled": true
},
"buyForm": {
"ctaLabel": "Get the guide",
"reassuranceText": "One payment. Open it in the Sceniq app or in your browser.",
"imageMediaId": "kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k"
},
"faq": {
"enabled": false,
"items": []
}
},
"publishedAt": 1790241240000,
"publishedConfigVersion": 3,
"locales": [],
"metaTitle": "American West: Parks at First Light: a map guide by Mara Lindgren",
"metaDescription": "Twelve viewpoints across Yellowstone and Yosemite with the best hour, the parking and the fees for each.",
"updatedAt": 1790586840000
},
"mediaMap": {
"kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g": {
"id": "kg7q8w6e4r2t0y8v6j4p2p0a8s6d4f2g",
"url": "https://quiet-heron-512.convex.cloud/api/storage/hero-grand-prismatic.webp",
"caption": "Grand Prismatic Spring from the overlook",
"credit": "Mara Lindgren",
"width": 2048,
"height": 1365,
"order": 1024
},
"kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s": {
"id": "kg7b4n6m8q0w2e4r6t8y0v2j4p6p8a0s",
"url": "https://quiet-heron-512.convex.cloud/api/storage/guide-map-yellowstone.webp",
"caption": "The guide's map of Yellowstone in the Sceniq app",
"width": 1638,
"height": 2048,
"order": 1024
},
"kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k": {
"id": "kg7t5y7v9j1p3p5a7s9d1f3g5h7j9k1k",
"url": "https://quiet-heron-512.convex.cloud/api/storage/tunnel-view-first-light.webp",
"caption": "Tunnel View at first light",
"credit": "Mara Lindgren",
"width": 2048,
"height": 1365,
"order": 2048
}
},
"publishing": "The creator publishes the sales page in the dashboard; save_sales_page_draft only updates the draft."
}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.