update_guide

Change guide settings (name, headline, tags, country).

PATCH/v1/guides/{productId}
MCP tool update_guideScope: writeStableSince 2026-09-17
Markdown

Enumerated fields only. Store tags come from the fixed vocabulary (alpine, beaches, city, food, hiking, islands, lakes, photography, road-trips, via-ferrata, waterfalls, wild-camping). Store visibility and putting a guide on sale are dashboard-only; a live guide's content edits reach buyers with publish_changes.

curl -X PATCH "https://sceniq.earth/api/v1/guides/j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2" \
  -H "Authorization: Bearer $SCENIQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "headline": "Twelve viewpoints across Yellowstone and Yosemite, timed for the light and the crowds.",
  "storeTags": [
    "photography",
    "hiking",
    "road-trips"
  ],
  "country": "US"
}'

Path parameters

Body parameters

  • clearThumbnailbooleanoptional

    true removes the store thumbnail.

  • countrystringoptional

    ISO 3166-1 alpha-2 code the guide covers (CH, IT ...); replaces any countries set in the dashboard with this one; empty string means worldwide.

  • headlinestringoptional

    One-line promise under the title on the sales page, at most 200 characters.

  • namestringoptional

    Guide title, 1-120 characters.

  • purchaseButtonTextstringoptional

    Buy button label, at most 60 characters.

  • reviewsShownbooleanoptional

    Whether buyer reviews show on the store card.

  • storeTagsarray of stringsoptional

    Full replacement list from the fixed store vocabulary.

  • thumbnailMediaIdstring · photo idoptional

    Id of a product- or listing-owned media row to use as the 4:5 store thumbnail.

Returns

200 OK with Guide: A guide: settings, region, areas, properties and price.

  • productIdstring · guide idrequired

    The guide's id.

  • namestringrequired

    The guide's title.

  • slugstringrequired

    URL slug of the sales page.

  • headlinestring or nullrequired

    One-line promise under the title on the sales page.

  • purchaseButtonTextstring or nullrequired

    The buy button label, or null for the default.

  • statusstringrequired

    draft (not on sale), published (on sale) or archived.

    draftpublishedarchived
  • visibleOnStorebooleanrequired

    Whether the guide shows in the Sceniq store (set in the studio).

  • storeReviewStatusstring or nullrequired

    The store review's state, or null before a review.

    pendingapprovedrejected
  • storeReviewNotestring or nullrequired

    The store review team's note.

  • storeTagsarray of stringsrequired

    Store tags from the fixed vocabulary.

  • countrystring or nullrequired

    ISO 3166-1 alpha-2 code of the country the guide covers; null means worldwide.

  • reviewsShownbooleanrequired

    Whether buyer reviews show on the store card.

  • buyerCountShownbooleanrequired

    Whether the buyer count shows on the sales page (set in the studio).

  • pricingobjectrequired

    How the guide is sold.

    Show 3 fields
    • oneTimeEnabledbooleanrequired

      Whether the guide sells for a one-time price.

    • subscriptionIncludedbooleanrequired

      Whether it is part of a subscription.

    • currencystringrequired

      The guide's currency.

  • originalLanguagestringrequired

    The language the guide is written in (BCP 47).

  • createdAtnumberrequired

    When the row was created (Unix time in milliseconds).

  • updatedAtnumberrequired

    When the row last changed (Unix time in milliseconds).

  • publishedAtnumber or nullrequired

    When the guide first went on sale (Unix time in milliseconds).

  • lastApiWriteAtnumber or nullrequired

    When a key last changed the guide (Unix time in milliseconds).

  • regionMapRegion or nullrequired

    The map region the viewer opens on.

    Show 5 fieldsof MapRegion
    • labelstringoptional

      A name buyers recognise for the region, at most 120 characters (Hokkaido, the Dolomites).

    • centerLatnumberoptional

      Latitude of the opening center (-90 to 90), usually the middle of the spots.

    • centerLonnumberoptional

      Longitude of the opening center (-180 to 180).

    • defaultZoomnumberoptional

      The opening zoom level, 0 to 22; 8 to 11 suits a region.

    • bboxarray of numbersoptional

      The bounding box as [west, south, east, north] in decimal degrees, exactly four numbers. It should contain every spot: readiness flags spots outside it.

  • areasarray of Arearequired

    Parks, islands and regions spots can point at.

    Show 10 fieldsof Area
    • idstringrequired

      The area's id, minted by set_area; spots point at it with areaId.

    • namestringrequired

      The area's name, at most 100 characters (Yellowstone National Park).

    • kindstringoptional

      park, reserve, island, region, city or other, shown as the area's label (Park, Island). Absent reads as other (Area).

      parkreserveislandregioncityother
    • notestringoptional

      What applies across the area, in the creator's words, at most 1,000 characters.

    • seasonstringoptional

      The area's season in words, at most 300 characters (roads open May to October).

    • rulesarray of AccessRuleoptional

      Up to 20 access rules for the whole area (permits, timed entry), each shown in its months.

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

    • feesarray of Feeoptional

      Up to 30 fees for the whole area (park entry, a vehicle pass).

      Show 14 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_site or in_tour (part of a tour price).

        onlineon_sitein_tour
      • paymentstringoptional

        How it can be paid: cash_only, card_only or cash_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).

    • linksarray of GuideLinkoptional

      Up to 12 links for the whole area.

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

    • statusStatusNoticeoptional

      A closure or works notice for the whole area.

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

    • sourcesarray of SourceRefoptional

      Up to 40 research sources, never shown to buyers.

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

  • mapStyleobject or nullrequired

    The map's style, set in the studio.

    Show 3 fields
    • basemapstringoptional

      The base map style.

    • pinStylestringoptional

      The pin style.

    • themeColorstringoptional

      The accent color.

  • propertySchemaVersionnumber or nullrequired

    Bumped on every property change.

  • propertiesarray of Propertyrequired

    Custom property definitions.

    Show 12 fieldsof Property
    • propertyDefIdstring · property idrequired

      The property's id.

    • keystringrequired

      The immutable key spots use in customValues.

    • labelstringrequired

      The label buyers see.

    • kindstringrequired

      The kind; it decides the value's type and whether buyers can filter by it.

      shortLabellongSectionnumberdatecheckboxsingleSelect
    • ordernumberrequired

      Display order (ascending).

    • requiredbooleanoptional

      true when every spot must carry a value. Absent means false.

    • filterablebooleanrequired

      Whether buyers can filter by it (number, date, checkbox and singleSelect).

    • placeholderstring or nullrequired

      Editor placeholder text.

    • numUnitstring or nullrequired

      Unit label for number properties.

    • optionsarray of objectsrequired

      Options of checkbox and singleSelect properties.

      Show 4 fields
      • idstringrequired

        The option's immutable id: the value spots store.

      • labelstringrequired

        The option's label.

      • ordernumberrequired

        Display order (ascending).

      • archivedbooleanrequired

        true when the option is retired; stored values stay.

    • archivedbooleanrequired

      true when the property is archived; stored values stay.

    • schemaVersionnumberrequired

      The guide's property schema version after the last change.

  • priceobject or nullrequired

    The active one-time price, or null when none is set.

    Show 2 fields
    • amountMinornumberrequired

      The price in minor units (2900 is 29.00).

    • currencystringrequired

      ISO 4217 code in lower case (usd, eur, chf).

  • spotCountnumberrequired

    Number of spots, archived ones included.

  • thumbnailUrlstring or nullrequired

    The 4:5 store thumbnail.

  • dashboardUrlstringrequired

    The guide in the studio.

  • salesPageUrlstringrequired

    The public sales page (live once published).

Response 200
{
  "productId": "j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
  "name": "American West: Parks at First Light",
  "slug": "american-west-first-light",
  "headline": "Twelve viewpoints across Yellowstone and Yosemite, timed for the light and the crowds.",
  "purchaseButtonText": null,
  "status": "draft",
  "visibleOnStore": false,
  "storeReviewStatus": null,
  "storeReviewNote": null,
  "storeTags": [
    "photography",
    "hiking",
    "road-trips"
  ],
  "country": "US",
  "reviewsShown": true,
  "buyerCountShown": false,
  "pricing": {
    "oneTimeEnabled": true,
    "subscriptionIncluded": false,
    "currency": "usd"
  },
  "originalLanguage": "en",
  "createdAt": 1789895640000,
  "updatedAt": 1790673240000,
  "publishedAt": null,
  "lastApiWriteAt": 1790586840000,
  "region": {
    "label": "Yellowstone and Yosemite",
    "centerLat": 41.2,
    "centerLon": -115,
    "defaultZoom": 5,
    "bbox": [
      -120,
      37.4,
      -109.8,
      45.2
    ]
  },
  "areas": [
    {
      "id": "area_01m3gvdap06m6mx2kp4t553d6g",
      "name": "Yellowstone National Park",
      "kind": "park",
      "note": "One entrance pass covers every spot in the Yellowstone chapter. Cell coverage is patchy between the geyser basins; download the guide before you drive in.",
      "season": "Most park roads are open to cars from May to early November.",
      "rules": [
        {
          "text": "Stay on boardwalks and marked trails in every thermal area.",
          "kind": "other",
          "sourceUrl": "https://www.nps.gov/yell/planyourvisit/safety.htm"
        }
      ],
      "fees": [
        {
          "label": "Park entrance, private vehicle, 7 days",
          "amount": 35,
          "currency": "USD",
          "per": "vehicle",
          "paidWhere": "online",
          "sourceUrl": "https://www.nps.gov/yell/planyourvisit/fees.htm",
          "checkedOn": "2026-09-20"
        }
      ],
      "links": [
        {
          "kind": "official",
          "url": "https://www.nps.gov/yell/index.htm",
          "label": "Yellowstone National Park (NPS)"
        },
        {
          "kind": "status",
          "url": "https://www.nps.gov/yell/planyourvisit/conditions.htm",
          "label": "Park road status"
        }
      ],
      "sources": [
        {
          "url": "https://www.nps.gov/yell/planyourvisit/fees.htm",
          "kind": "page",
          "capturedOn": "2026-09-20",
          "supports": [
            "fees"
          ]
        }
      ]
    },
    {
      "id": "area_01m3gvgcb04pf38p66vz544w1b",
      "name": "Yosemite National Park",
      "kind": "park",
      "season": "Open all year. Glacier Point Road and Tioga Road close to cars in winter.",
      "rules": [
        {
          "text": "Glacier Point Road and Tioga Road are closed to cars in winter, usually from November to late May.",
          "kind": "vehicle",
          "months": [
            11,
            12,
            1,
            2,
            3,
            4,
            5
          ],
          "appliesTo": "car",
          "sourceUrl": "https://www.nps.gov/yose/planyourvisit/conditions.htm"
        }
      ],
      "fees": [
        {
          "label": "Park entrance, private vehicle, 7 days",
          "amount": 35,
          "currency": "USD",
          "per": "vehicle",
          "sourceUrl": "https://www.nps.gov/yose/planyourvisit/fees.htm",
          "checkedOn": "2026-09-20"
        }
      ],
      "links": [
        {
          "kind": "official",
          "url": "https://www.nps.gov/yose/index.htm",
          "label": "Yosemite National Park (NPS)"
        },
        {
          "kind": "timetable",
          "url": "https://yarts.com/",
          "label": "YARTS buses into the valley"
        }
      ]
    }
  ],
  "mapStyle": null,
  "propertySchemaVersion": 6,
  "properties": [
    {
      "propertyDefId": "kh75t2w9q4r6y8v0j1p3p5a7s9d1f3g5",
      "key": "best_time",
      "label": "Best time",
      "kind": "singleSelect",
      "order": 0,
      "required": false,
      "filterable": true,
      "placeholder": null,
      "numUnit": null,
      "options": [
        {
          "id": "sunrise",
          "label": "Sunrise",
          "order": 0,
          "archived": false
        },
        {
          "id": "morning",
          "label": "Morning",
          "order": 1,
          "archived": false
        },
        {
          "id": "midday",
          "label": "Midday",
          "order": 2,
          "archived": false
        },
        {
          "id": "sunset",
          "label": "Sunset",
          "order": 3,
          "archived": false
        }
      ],
      "archived": false,
      "schemaVersion": 2
    },
    {
      "propertyDefId": "kh7b3n5m7q9w1e3r5t7y9v1j3p5p7a9s",
      "key": "crowds",
      "label": "Crowds",
      "kind": "singleSelect",
      "order": 1,
      "required": false,
      "filterable": true,
      "placeholder": null,
      "numUnit": null,
      "options": [
        {
          "id": "quiet",
          "label": "Quiet",
          "order": 0,
          "archived": false
        },
        {
          "id": "busy",
          "label": "Busy",
          "order": 1,
          "archived": false
        },
        {
          "id": "packed",
          "label": "Packed",
          "order": 2,
          "archived": false
        }
      ],
      "archived": false,
      "schemaVersion": 3
    },
    {
      "propertyDefId": "kh75b789hrwaq3kafenm0xbb6v34gh06",
      "key": "photo_notes",
      "label": "Photo notes",
      "kind": "longSection",
      "order": 2,
      "required": false,
      "filterable": false,
      "placeholder": "Lens, framing, where to stand",
      "numUnit": null,
      "options": [],
      "archived": false,
      "schemaVersion": 4
    },
    {
      "propertyDefId": "kh7v7h8st8cr913jb2kzb839yxjtpkdf",
      "key": "lens",
      "label": "Lens",
      "kind": "shortLabel",
      "order": 3,
      "required": false,
      "filterable": false,
      "placeholder": "16-35 mm",
      "numUnit": null,
      "options": [],
      "archived": true,
      "schemaVersion": 6
    }
  ],
  "price": {
    "amountMinor": 2900,
    "currency": "usd"
  },
  "spotCount": 13,
  "thumbnailUrl": null,
  "dashboardUrl": "https://creators.sceniq.earth/products/j5738kd1q9x2m7v4c6b8n0p3r5t1w9y2",
  "salesPageUrl": "https://sceniq.earth/mara-lindgren/american-west-first-light"
}

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.