get_sales_page

The default sales page: draft, published state, media map.

GET/v1/guides/{productId}/sales-page
MCP tool get_sales_pageScope: readStableSince 2026-09-17
Markdown

Returns 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

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 fields
    • listingIdstring · sales page idrequired

      The sales page's id.

    • statusstringrequired

      Whether a version is live.

      publishedunpublished
    • baseLanguagestringrequired

      The language of draftConfig.

    • draftConfigListingConfigrequired

      The draft: what save_sales_page_draft replaces.

      Show 8 fieldsof ListingConfig
      • heroHeroSectionrequired

        The top of the page, always shown.

        Show 6 fieldsof HeroSection
        • carouselarray of ListingSliderequired

          Up to 12 slides that turn automatically. Publishing needs at least one.

          Show 3 fieldsof ListingSlide
          • mediaIdstring · photo idrequired

            A product- or listing-owned photo of this guide (list_media with marketingOnly true). 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 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.

      • pitchPitchSectionrequired

        What's inside: boxes with a title, text and a photo or icon. Can be switched off.

        Show 5 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 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.

      • reviewsReviewsSectionrequired

        Testimonials. Can be switched off.

        Show 4 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).

        • customarray of CustomReviewoptional

          The creator's testimonials, up to 12, shown when source is custom. Publishing an enabled custom section needs at least one.

          Show 9 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.

      • galleryGallerySectionrequired

        Full-screen photos with captions. Can be switched off; off in a new draft.

        Show 4 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.

        • slidesarray of ListingSliderequired

          Up to 48 slides.

          Show 3 fieldsof ListingSlide
          • mediaIdstring · photo idrequired

            A product- or listing-owned photo of this guide (list_media with marketingOnly true). 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.

      • aboutCreatorAboutCreatorSectionrequired

        The creator's bio, social links and video, with per-page overrides. Can be switched off.

        Show 4 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.

        • socialsOverridearray of SocialLinkoptional

          Social links for this page only; [] shows none. Absent means the profile's social links.

          Show 4 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_socials refuses 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.

        • videoIntroVideooptional

          A video for the section. Absent shows no video.

          Show 6 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.

      • buyFormBuyFormSectionrequired

        The buy section with the checkout, always shown.

        Show 3 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.

      • faqFaqSectionoptional

        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 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 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, buyForm and faq, each at most once. Missing sections follow in that default order; absent means the default.

        pitchreviewsgalleryaboutCreatorbuyFormfaq
    • draftUpdatedAtnumberrequired

      When the draft last changed.

    • publishedConfigListingConfig or nullrequired

      What buyers see.

      Show 8 fieldsof ListingConfig
      • heroHeroSectionrequired

        The top of the page, always shown.

        Show 6 fieldsof HeroSection
        • carouselarray of ListingSliderequired

          Up to 12 slides that turn automatically. Publishing needs at least one.

          Show 3 fieldsof ListingSlide
          • mediaIdstring · photo idrequired

            A product- or listing-owned photo of this guide (list_media with marketingOnly true). 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 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.

      • pitchPitchSectionrequired

        What's inside: boxes with a title, text and a photo or icon. Can be switched off.

        Show 5 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 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.

      • reviewsReviewsSectionrequired

        Testimonials. Can be switched off.

        Show 4 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).

        • customarray of CustomReviewoptional

          The creator's testimonials, up to 12, shown when source is custom. Publishing an enabled custom section needs at least one.

          Show 9 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.

      • galleryGallerySectionrequired

        Full-screen photos with captions. Can be switched off; off in a new draft.

        Show 4 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.

        • slidesarray of ListingSliderequired

          Up to 48 slides.

          Show 3 fieldsof ListingSlide
          • mediaIdstring · photo idrequired

            A product- or listing-owned photo of this guide (list_media with marketingOnly true). 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.

      • aboutCreatorAboutCreatorSectionrequired

        The creator's bio, social links and video, with per-page overrides. Can be switched off.

        Show 4 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.

        • socialsOverridearray of SocialLinkoptional

          Social links for this page only; [] shows none. Absent means the profile's social links.

          Show 4 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_socials refuses 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.

        • videoIntroVideooptional

          A video for the section. Absent shows no video.

          Show 6 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.

      • buyFormBuyFormSectionrequired

        The buy section with the checkout, always shown.

        Show 3 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.

      • faqFaqSectionoptional

        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 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 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, buyForm and 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 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).

Response 200
{
  "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.