{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/api.cartgenie.com"
        }
    ],
    "info": {
        "name": "CartGenie Public API",
        "_postman_id": "58db8e27-8a57-44e3-a76d-617639b7baf7",
        "description": "This API is served over HTTPS and returns JSON. Every request needs an `Authorization: Bearer <token>` header.\n\n## Keep the token on your server\n\nA token is scoped to the whole store, not to one shopper or one record. Anything its scopes allow, it allows across every order, product and customer the store has. Treat it as a server-side credential: never ship it to a browser, a mobile app or any other client you do not control.\n\nThis matters most for shopper-facing pages such as order tracking. Call this API from your own backend, verify there that the requester owns the record, and return only that record to the page.\n\n## Pagination\n\nList endpoints are cursor-paginated. Pass `limit` (1\u2013250, default 50; `GET \/products` allows at most 50, because each product includes all of its settings) and read `meta.next_cursor` from the response; request the next page by sending that value back as `cursor`. When `meta.has_more` is `false` you have reached the end. Cursors are opaque \u2014 do not construct or modify them. Send back only the cursor the same list handed out: a cursor this list cannot read answers `422`, and one from another list that it can read returns the wrong page.\n\n## Keeping data in sync\n\n`products`, `variants`, `orders` and `customers` accept `updated_since`, an ISO-8601 date and time with an offset (`2026-08-01T00:00:00Z` or `2026-08-01T03:00:00+03:00`; encode `+` as `%2B` in a query string). Combined with cursor pagination this gives you an incremental feed of everything that changed since your last poll.\n\nThe product feed also reports removals, and `deleted_at` is the signal: drop any record that carries one, whatever its `status`. Archiving a product in the dashboard unpublishes it, so it arrives here with `deleted_at` set and belongs out of your copy too \u2014 a shopper cannot buy it. A product removed permanently arrives collapsed to `\"status\": \"deleted\"` and six fields.\n\nWebhooks and this feed cover different ground. After a missed delivery the incremental feed is the first place to look, and for most changes it returns the record. It is not a complete substitute: some dashboard actions, and some values that are derived rather than stored, raise an event without moving the timestamp the feed filters on, so a missed delivery can fail to resurface. Reconcile against a full listing on a schedule rather than treating `updated_since` as complete.\n\nA published bundle variant's stock is one of those derived values: it is computed from its components, so a sale of a component changes it without moving the bundle's `updated_at`.\n\nCustomers (`GET \/customers?updated_since=`), discounts (`GET \/discounts`) and categories (`GET \/categories`) can be reconciled by listing them. The events for subscriptions, subscription charges and abandoned carts have no endpoint behind them, so no polling reconciles one you never received and the loss is permanent. Those are the deliveries to alert on.\n\nDeliveries are retried on failure, so the same event can reach you more than once. The envelope carries no event or delivery id, so make your receiver idempotent on the payload itself. What identifies a record differs by family: a product payload carries `id`; an order payload `name` and `guid`; a customer payload `customer_email`; a category payload `slug`; a subscription or subscription-charge payload `name` together with `order_id`; an abandoned-cart payload `guid`; and a discount payload `name`, since its `code` is `null` on an automatic discount. An `inventory_updated` payload carries no identifier at all \u2014 it names the variant by `sku` and `product_name`, and a SKU is not unique within a store \u2014 so treat one as a signal to re-read `GET \/variants?sku=` rather than a value to apply directly.\n\nAn event whose retries are all exhausted is dropped, and nothing here reports that: there is no delivery-log endpoint, and a webhook's `last_dispatched_at` records the moment CartGenie queued the delivery, not that you received it. Alert on missing deliveries from your own side.\n\n## Rate limits\n\n120 requests per minute and 4 per second, counted per token. `X-RateLimit-Limit` and `X-RateLimit-Remaining` describe whichever of the two has fewer requests left, which between bursts is the per-second limit (`4`). Exceeding either limit returns `429` with a `Retry-After` header; after a burst over the per-second limit, wait one second before retrying, even when `Retry-After` is `0`.\n\n## Errors\n\nFailures return a JSON body with a `message` field, whatever the request's `Accept` header. `400` means the body is not valid JSON. `401` means the token is missing or invalid, `403` means the token or its owner lacks the required scope or permission, `404` means the record does not exist, the store is archived, or the Public API is not enabled for the store, `405` means the path exists but does not take that method, `422` means validation failed (with an `errors` object), and `409` means the request conflicts with the current state \u2014 a stale `expected_stock`, or an order status that does not allow the action. `424` means a service the request depends on could not complete it: Webflow rejected the product or category, refused the store's connection or could not list a field's items, or the payment gateway turned a refund down or left its outcome unknown. The `message` says which. `503` with `Retry-After` means that service is briefly unavailable or rate limiting; retry after the given delay.\n\nThree causes share the `404`, and the `message` tells them apart. A record that does not exist, or belongs to another store, carries `Resource not found.` as its `message`, as does an id that is not a number, even when the token is invalid. An empty `message` means the Public API is not enabled for the store; every endpoint answers that way, including `GET \/store`, so it is the first thing to check when a brand-new token gets `404` everywhere. An archived store answers `404` on every endpoint too, with `This store is archived.` as the `message`.\n\nRequests are validated strictly: any parameter that an endpoint does not define is rejected with `422` and `The <field> field is not supported.` rather than ignored. Send only the documented fields \u2014 echoing an object back with extra keys will fail. A number may also be sent as a numeric string (`\"2500\"`). A `PATCH` or `PUT` that sends no fields answers `422`. If the endpoint has a required field, the error names that field; otherwise the message is `At least one supported field is required.`\n\nOrder amounts are in the smallest unit of the order's `currency_code`; the `formatted_*` fields use the store's current currency format.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Store",
            "description": "",
            "item": [
                {
                    "name": "Get the store",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/store",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/store"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the store the token belongs to. Useful as a connection check: a\n`200` here means the token is valid, the Public API is enabled for the\nstore, and the token's owner still has access to it.\n\nA `404` with an empty `message` has one cause here: the Public API is not\nenabled for the store. Check that before suspecting the token. An archived store answers `404` as well, carrying\n`This store is archived.` as the `message`.\n\n`tax_classes` lists the store's own tax classes; their `id` is what `PUT \/products\/{id}\/tax` takes as\n`tax_class_id` with `tax_class: custom`. `domain` is `null` for a store that has no domain yet.\n\nRequires the `read_store` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"name\": \"Example Store\",\n  \"domain\": \"https:\/\/example.webflow.io\",\n  \"currency\": \"usd\",\n  \"timezone\": \"UTC\",\n  \"tax_classes\": [{\"id\": 5, \"name\": \"Reduced rate\"}],\n  \"created_at\": \"2025-11-02T08:31:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_store scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"\"}",
                            "name": "Public API is not enabled for this store"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"This store is archived.\"}",
                            "name": "Store is archived"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Products",
            "description": "",
            "item": [
                {
                    "name": "List product tax codes",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/tax-codes",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/tax-codes"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "The product tax codes of the store's tax provider (TaxJar), which\n`PUT \/products\/{id}\/tax` takes as `tax_code_id`. `default_tax_code_id` is\nthe code used for a product that has none of its own. For a store without a\ntax provider `provider` and `default_tax_code_id` are `null` and `data` is\nempty.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"provider\": \"taxjar\",\n  \"default_tax_code_id\": null,\n  \"data\": [\n    {\"id\": 41, \"code\": \"20010\", \"name\": \"Clothing\", \"description\": \"All human wearing apparel suitable for general use\"}\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List products",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u201350.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                },
                                {
                                    "key": "search",
                                    "value": "tee",
                                    "description": "Matches against product name and slug.",
                                    "disabled": false
                                },
                                {
                                    "key": "slug",
                                    "value": "classic-tee",
                                    "description": "The exact slug of one product.",
                                    "disabled": false
                                },
                                {
                                    "key": "updated_since",
                                    "value": "2026-08-01T00:00:00Z",
                                    "description": "ISO-8601 date and time with an offset (`Z` or `+02:00`). Returns products changed or deleted since then.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/products?limit=50&cursor=&search=tee&slug=classic-tee&updated_since=2026-08-01T00%3A00%3A00Z"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the store's products, oldest update first. Pass `updated_since` to\nreceive an incremental feed: the result then also carries the products the\nstore has removed, so a mirrored catalog can drop them.\n\n`deleted_at` is the removal signal \u2014 drop any record that carries one,\nwhatever its `status`. Removal reaches the feed in two shapes. A product\narchived in the dashboard keeps the full product shape and its own status. A\nproduct removed permanently collapses to `\"status\": \"deleted\"` and carries\nonly `id`, `name`, `slug`, `status`, `deleted_at` and `updated_at` \u2014 no\n`price`, `stock`, `variants`, `images`, `url` or `created_at`. Read\n`deleted_at` and `status` before any other field.\n\nArchiving is a removal here by design: it unpublishes the product, so a\nshopper cannot buy it and it belongs out of any catalog you mirror from\nthis feed. Restoring the product in the dashboard returns it to a later page\nwith `deleted_at` back to `null`, carrying whatever status the restoring\naction set: un-archiving returns it as `draft`, publishing straight out of\nthe archive returns it as `published`. It is buyable again only once it is\npublished.\n\nReconcile against a full listing on a schedule: a permanent removal is not\nguaranteed to reach the feed.\n\n`stock`, `available_stock` and `track_inventory` are product-level roll-ups\nover the variants that carry an option combination. A product with option\nsets can also hold a variant that carries none of them (`options: []`); it is\nlisted in `variants` and accepts `PUT \/variants\/{id}\/inventory`, but\ncontributes nothing to these three fields, so the totals need not match and\n`track_inventory` can differ from that variant's own. Treat the product-level\nfigures as the sellable quantity rather than deriving one from the `variants`\narray.\n\nA change this API makes to one of the product's variants moves the product's\n`updated_at`, so the product comes back in the `updated_since` feed. Stock\nchanges do not always reach it \u2014 orders selling stock down never do \u2014 so\nfollow stock with the `inventory_updated` webhook.\n\nEach product carries the fields and blocks described under `GET \/products\/{id}`.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"data\": [\n        {\n            \"id\": 364,\n            \"name\": \"Classic Tee\",\n            \"slug\": \"classic-tee\",\n            \"status\": \"published\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"stock\": 120,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"description\": \"<p>Soft cotton tee.<\/p>\",\n            \"meta_description\": \"Soft cotton tee in five colors.\",\n            \"product_type\": \"physical\",\n            \"categories\": {\n                \"category_ids\": [\n                    7,\n                    9\n                ],\n                \"primary_category_id\": 7\n            },\n            \"tax\": {\n                \"tax_class\": \"default\",\n                \"tax_class_id\": null,\n                \"tax_code_id\": 41\n            },\n            \"purchase_limits\": {\n                \"min_quantity_per_order\": 1,\n                \"max_quantity_per_order\": 5\n            },\n            \"pre_order\": {\n                \"pre_order\": false,\n                \"estimated_shipping_date\": null\n            },\n            \"feed\": {\n                \"brand\": \"Northwind\",\n                \"condition\": \"new\",\n                \"mpn\": \"NW-TEE-01\",\n                \"gtin\": null,\n                \"google_product_category_id\": 212,\n                \"include_variant_info_in_title_feed\": true,\n                \"gender\": \"unisex\",\n                \"age_group\": \"adult\"\n            },\n            \"personalization_fields\": [\n                {\n                    \"name\": \"Engraving\",\n                    \"placeholder\": \"Up to 20 letters\",\n                    \"help\": null,\n                    \"required\": false\n                }\n            ],\n            \"download\": null,\n            \"default_variant_id\": 2301,\n            \"options\": [\n                {\n                    \"id\": 31,\n                    \"name\": \"Size\",\n                    \"swatch_type\": \"button\",\n                    \"values\": [\n                        {\n                            \"id\": 88,\n                            \"value\": \"M\",\n                            \"color\": null\n                        },\n                        {\n                            \"id\": 89,\n                            \"value\": \"L\",\n                            \"color\": null\n                        }\n                    ]\n                }\n            ],\n            \"bundle\": null,\n            \"shipping\": {\n                \"requires_shipping\": true,\n                \"auto_fulfill_order\": false,\n                \"hs_code\": \"6109.10\",\n                \"country_of_origin\": \"pt\"\n            },\n            \"custom_fields\": {\n                \"12\": \"Cotton\",\n                \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n            },\n            \"images\": {\n                \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n                \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n                \"main\": {\n                    \"id\": 901,\n                    \"url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n                    \"alt_text\": \"Black cotton tee\"\n                },\n                \"extra\": [\n                    {\n                        \"id\": 902,\n                        \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\",\n                        \"alt_text\": null\n                    }\n                ]\n            },\n            \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n            \"variants\": [\n                {\n                    \"id\": 2301,\n                    \"product_id\": 364,\n                    \"sku\": \"TEE-BLK-M\",\n                    \"title\": \"black-medium\",\n                    \"published\": true,\n                    \"price\": 4900,\n                    \"formatted_price\": \"$49.00\",\n                    \"compare_at_price\": 5900,\n                    \"formatted_compare_at_price\": \"$59.00\",\n                    \"enabled\": true,\n                    \"description\": null,\n                    \"options\": [\n                        {\n                            \"option_id\": 31,\n                            \"option\": \"Size\",\n                            \"value_id\": 88,\n                            \"value\": \"M\"\n                        }\n                    ],\n                    \"subscription\": null,\n                    \"download\": null,\n                    \"images\": {\n                        \"main\": {\n                            \"id\": 903,\n                            \"url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n                            \"alt_text\": \"Black cotton tee\"\n                        },\n                        \"extra\": [],\n                        \"hide_main_image\": false,\n                        \"hide_extra_images\": false\n                    },\n                    \"stock\": 120,\n                    \"reserved_stock\": 2,\n                    \"available_stock\": 118,\n                    \"track_inventory\": true,\n                    \"requires_shipping\": true,\n                    \"dimensions\": {\n                        \"height\": 200,\n                        \"length\": 3000,\n                        \"width\": 2000,\n                        \"weight\": 18000\n                    },\n                    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n                    \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n                }\n            ],\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"deleted_at\": null,\n            \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n        }\n    ],\n    \"meta\": {\n        \"per_page\": 50,\n        \"has_more\": true,\n        \"next_cursor\": \"eyJpZCI6MzY0fQ\"\n    }\n}\n",
                            "name": "Catalog page"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"data\": [\n        {\n            \"id\": 351,\n            \"name\": \"Summer Cap\",\n            \"slug\": \"summer-cap\",\n            \"status\": \"deleted\",\n            \"deleted_at\": \"2026-08-03T14:22:09.000000Z\",\n            \"updated_at\": \"2026-08-03T14:22:09.000000Z\"\n        },\n        {\n            \"id\": 358,\n            \"name\": \"Winter Scarf\",\n            \"slug\": \"winter-scarf\",\n            \"status\": \"archived\",\n            \"published\": false,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"stock\": 120,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"description\": \"<p>Soft cotton scarf.<\/p>\",\n            \"meta_description\": \"Soft cotton scarf in grey.\",\n            \"product_type\": \"physical\",\n            \"categories\": {\n                \"category_ids\": [\n                    7,\n                    9\n                ],\n                \"primary_category_id\": 7\n            },\n            \"tax\": {\n                \"tax_class\": \"default\",\n                \"tax_class_id\": null,\n                \"tax_code_id\": 41\n            },\n            \"purchase_limits\": {\n                \"min_quantity_per_order\": 1,\n                \"max_quantity_per_order\": 5\n            },\n            \"pre_order\": {\n                \"pre_order\": false,\n                \"estimated_shipping_date\": null\n            },\n            \"feed\": {\n                \"brand\": \"Northwind\",\n                \"condition\": \"new\",\n                \"mpn\": \"NW-SCARF-01\",\n                \"gtin\": null,\n                \"google_product_category_id\": 212,\n                \"include_variant_info_in_title_feed\": true,\n                \"gender\": \"unisex\",\n                \"age_group\": \"adult\"\n            },\n            \"personalization_fields\": [\n                {\n                    \"name\": \"Engraving\",\n                    \"placeholder\": \"Up to 20 letters\",\n                    \"help\": null,\n                    \"required\": false\n                }\n            ],\n            \"download\": null,\n            \"default_variant_id\": 2288,\n            \"options\": [],\n            \"bundle\": null,\n            \"shipping\": {\n                \"requires_shipping\": true,\n                \"auto_fulfill_order\": false,\n                \"hs_code\": \"6117.10\",\n                \"country_of_origin\": \"pt\"\n            },\n            \"custom_fields\": {\n                \"12\": \"Cotton\",\n                \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n            },\n            \"images\": {\n                \"main_image\": \"https:\/\/cdn.example.com\/scarf.jpg\",\n                \"main_image_large\": \"https:\/\/cdn.example.com\/scarf-large.jpg\",\n                \"main\": {\n                    \"id\": 901,\n                    \"url\": \"https:\/\/cdn.example.com\/scarf.jpg\",\n                    \"alt_text\": \"Grey cotton scarf\"\n                },\n                \"extra\": [\n                    {\n                        \"id\": 902,\n                        \"url\": \"https:\/\/cdn.example.com\/scarf-back.jpg\",\n                        \"alt_text\": null\n                    }\n                ]\n            },\n            \"url\": \"https:\/\/store.example.com\/product\/winter-scarf\",\n            \"variants\": [\n                {\n                    \"id\": 2288,\n                    \"product_id\": 358,\n                    \"sku\": \"SCARF-GRY\",\n                    \"title\": \"SCARF-GRY\",\n                    \"published\": false,\n                    \"price\": 4900,\n                    \"formatted_price\": \"$49.00\",\n                    \"compare_at_price\": 5900,\n                    \"formatted_compare_at_price\": \"$59.00\",\n                    \"enabled\": true,\n                    \"description\": null,\n                    \"options\": [],\n                    \"subscription\": null,\n                    \"download\": null,\n                    \"images\": {\n                        \"main\": {\n                            \"id\": 903,\n                            \"url\": \"https:\/\/cdn.example.com\/scarf.jpg\",\n                            \"alt_text\": \"Grey cotton scarf\"\n                        },\n                        \"extra\": [],\n                        \"hide_main_image\": false,\n                        \"hide_extra_images\": false\n                    },\n                    \"stock\": 120,\n                    \"reserved_stock\": 2,\n                    \"available_stock\": 118,\n                    \"track_inventory\": true,\n                    \"requires_shipping\": true,\n                    \"dimensions\": {\n                        \"height\": 200,\n                        \"length\": 3000,\n                        \"width\": 2000,\n                        \"weight\": 18000\n                    },\n                    \"created_at\": \"2026-02-02T08:12:00.000000Z\",\n                    \"updated_at\": \"2026-08-04T09:15:44.000000Z\"\n                }\n            ],\n            \"created_at\": \"2026-02-02T08:12:00.000000Z\",\n            \"deleted_at\": \"2026-08-04T09:15:44.000000Z\",\n            \"updated_at\": \"2026-08-04T09:15:44.000000Z\"\n        }\n    ],\n    \"meta\": {\n        \"per_page\": 50,\n        \"has_more\": false,\n        \"next_cursor\": null\n    }\n}\n",
                            "name": "Incremental feed carrying both removal shapes"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get a product",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Includes the product's variants.\n\n`stock`, `available_stock` and `track_inventory` are product-level roll-ups over the\nvariants that carry an option combination, so they need not equal the sum of the\n`variants` array and `track_inventory` can differ from an individual variant's own.\nSee the list endpoint for the full explanation.\n\nA product carries `description`, `meta_description`, `product_type`,\n`custom_fields` and one block per settings endpoint \u2014 `categories`, `tax`,\n`shipping`, and `purchase_limits`, `pre_order`, `feed` and\n`personalization_fields` where the store has that feature turned on. Each\nblock has the shape its endpoint accepts, so you can edit a block and send\nit back; `personalization_fields` is a list, sent back as\n`{\"personalization_fields\": [...]}`. A variant's `compare_at_price` and\n`formatted_compare_at_price` are null when not set.\n\n`published` says whether the product is on sale on the storefront. It can\ndiffer from `status`: a product on sale can read `queued`, or `sync_error`\nafter Webflow refused a change, and stays on sale until it is moved to\n`draft` or archived.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Create a product",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"custom_fields\":{\"12\":\"Cotton\"},\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"A soft cotton tee.\",\"product_type\":\"physical\",\"price\":2500}"
                        },
                        "description": "Creates a draft product with one variant from the fields a product needs up\nfront: its name and price, plus the optional details `PATCH \/products\/{id}`\nalso takes. Everything else is set afterwards with its own endpoint \u2014\ncategories, tax class, shipping, then the variant's SKU, weight and\ndimensions (`PATCH \/variants\/{id}`) and stock\n(`PUT \/variants\/{id}\/inventory`) \u2014 and the product goes live with\n`PUT \/products\/{id}\/status`. Until then it exists only in CartGenie, so\ncreating it never waits on Webflow.\n\n`price` is in the store currency's smallest unit. Without `slug` one is made\nfrom the name and numbered past the store's existing slugs\n(`classic-tee-2`). A new product uses the built-in `default` tax class and\nthe `physical` type unless `product_type` says otherwise.\n\nFires the `new_product` webhook.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n    \"id\": 366,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"draft\",\n    \"published\": false,\n    \"price\": 2500,\n    \"formatted_price\": \"$25.00\",\n    \"stock\": 0,\n    \"available_stock\": 0,\n    \"track_inventory\": false,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"A soft cotton tee.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [],\n        \"primary_category_id\": null\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": null\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": null,\n        \"max_quantity_per_order\": null\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": null,\n        \"condition\": \"new\",\n        \"mpn\": null,\n        \"gtin\": null,\n        \"google_product_category_id\": null,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [],\n    \"download\": null,\n    \"default_variant_id\": 2352,\n    \"options\": [],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": false,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": null,\n        \"country_of_origin\": null\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": null\n    },\n    \"images\": {\n        \"main_image\": \"\",\n        \"main_image_large\": \"\",\n        \"main\": null,\n        \"extra\": []\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2352,\n            \"product_id\": 366,\n            \"sku\": null,\n            \"title\": null,\n            \"published\": false,\n            \"price\": 2500,\n            \"formatted_price\": \"$25.00\",\n            \"compare_at_price\": null,\n            \"formatted_compare_at_price\": null,\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": null,\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 0,\n            \"reserved_stock\": 0,\n            \"available_stock\": 0,\n            \"track_inventory\": false,\n            \"requires_shipping\": false,\n            \"dimensions\": {\n                \"height\": null,\n                \"length\": null,\n                \"width\": null,\n                \"weight\": null\n            },\n            \"created_at\": \"2026-10-06T09:00:00.000000Z\",\n            \"updated_at\": \"2026-10-06T09:00:00.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-10-06T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-10-06T09:00:00.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The slug has already been taken.\", \"errors\": {\"slug\": [\"The slug has already been taken.\"]}}",
                            "name": "Slug taken"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update a product",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"custom_fields\":{\"12\":\"Cotton\"},\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\"}"
                        },
                        "description": "Changes the product's own details. Only the fields you send change. Other\nparts of the product have their own endpoints: status\n(`PUT \/products\/{id}\/status`), categories, tax class, shipping, purchase\nlimits, pre-order, feed details and personalization fields;\nprices, SKUs, weight and dimensions live on the variants\n(`PATCH \/variants\/{id}`).\n\n`slug` is normalized the way the product editor does it (`Classic Tee!`\nbecomes `classic-tee`) and changes the product's page address on the\nsite. `product_type` is `physical`, `digital`, `service` or `advanced`.\n\nSaving works like the product editor's Save: a draft or queued product\nonly changes in CartGenie, and a published product is republished with the\nchange, Webflow included, before the response. When Webflow refuses the\nproduct nothing is saved (424); when Webflow is rate limiting the site\nnothing is saved and the call answers 503 with `Retry-After`. When the\nchange would leave a published product unable to be published (no shipping\nzones for a shippable product, no Webflow products collection), the call\nanswers 422 and nothing is saved.\n\nFires the `product_updated` webhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\", \"errors\": {\"product\": [\"The product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\"]}}",
                            "name": "Published product cannot be republished"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's status",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/status",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/status",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"status\":\"published\"}"
                        },
                        "description": "Works like the product editor's save buttons: `draft` takes the product\noff the live site, `queued` stages it for the next Webflow site publish,\nand `published` publishes it. Stores without Webflow treat `queued` as\n`published`. This is the one endpoint that sends a draft or queued product to\nWebflow; the other product endpoints only change it in CartGenie until then.\n\nThe Webflow item is written before the response. When Webflow refuses the\nproduct, the call answers 424 and the requested status is not applied. A\nproduct that was not published is then marked `sync_error`, as in the\neditor, with no webhook, and stays there until Webflow accepts a later\nstatus change. When Webflow is rate limiting the site, nothing changes and\nthe call answers 503 with `Retry-After`.\n\nFires the `product_updated` webhook when the status changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Product contains shippable variants but store has no shipping zones configured.\", \"errors\": {\"status\": [\"Product contains shippable variants but store has no shipping zones configured.\"]}}",
                            "name": "Product cannot be published"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's categories",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/categories",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/categories",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"category_ids\":[7,9],\"primary_category_id\":7}"
                        },
                        "description": "`category_ids` replaces the whole list and reads back sorted by id; send\n`[]` to remove the product from every category. `primary_category_id` is\nthe category that product feeds use and must be one of `category_ids`;\nwithout it the current primary category stays while it is still in the\nlist, otherwise the first category sent becomes primary, as in the product\neditor.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The primary category must be one of category_ids.\", \"errors\": {\"primary_category_id\": [\"The primary category must be one of category_ids.\"]}}",
                            "name": "Primary category not in the list"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's tax class and tax code",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/tax",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/tax",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"tax_class\":\"custom\",\"tax_class_id\":5,\"tax_code_id\":41}"
                        },
                        "description": "`tax_class` is `default`, `non_taxable` or `custom` with the\n`tax_class_id` of one of the store's tax classes (`GET \/store` lists\nthem). With tax-inclusive pricing, each variant keeps its price and the tax\nincluded in it follows the new class, as in the product editor.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The selected tax class id is invalid.\", \"errors\": {\"tax_class_id\": [\"The selected tax class id is invalid.\"]}}",
                            "name": "Tax class of another store"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's shipping details",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/shipping",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/shipping",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"}"
                        },
                        "description": "Only the fields you send change. `requires_shipping` applies to every\nvariant, as in the product editor. `auto_fulfill_order` marks orders\nfulfilled right after purchase and only fits a product that does not\nship: turning shipping on for such a product needs\n`auto_fulfill_order: false` in the same call. `hs_code` and\n`country_of_origin` (a two-letter code) are the customs details for\ninternational orders. A bundle takes all of these from its components and\nrefuses them.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published \u2014 for example when shipping\nis turned on and the store has no shipping zones). Fires the\n`product_updated` webhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"A product that requires shipping is fulfilled when it ships, not automatically. Send auto_fulfill_order false with requires_shipping true.\", \"errors\": {\"auto_fulfill_order\": [\"A product that requires shipping is fulfilled when it ships, not automatically. Send auto_fulfill_order false with requires_shipping true.\"]}}",
                            "name": "Automatic fulfillment on a product that ships"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's purchase limits",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/purchase-limits",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/purchase-limits",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"min_quantity_per_order\":2,\"max_quantity_per_order\":10}"
                        },
                        "description": "The smallest and largest quantity of the product one order may hold. Only\nthe fields you send change; `null` removes a limit, and both `null` turn\nlimits off. Sending a maximum to a product without limits sets the minimum\nto 1. A new minimum above 1 may not exceed the stock of a product that\ntracks inventory. A store without purchase limits enabled answers 422.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The minimum quantity per order cannot exceed the 3 currently in stock.\", \"errors\": {\"min_quantity_per_order\": [\"The minimum quantity per order cannot exceed the 3 currently in stock.\"]}}",
                            "name": "Minimum above the stock"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's pre-order settings",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/pre-order",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/pre-order",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"pre_order\":true,\"estimated_shipping_date\":\"Mid 2026\"}"
                        },
                        "description": "`pre_order: true` sells the product ahead of stock: orders placed meanwhile\nare marked as pre-orders in the cart, checkout and order confirmation.\n`estimated_shipping_date` is free text shown to shoppers (\"Mid 2026\",\n\"Jan 15, 2026\") and exists only while the product is a pre-order, so turning\npre-order off clears it. Only the fields you send change. A store without\npre-orders enabled answers 422.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it or its\npre-order fields cannot be created, 503 with `Retry-After` when Webflow is\nrate limiting the site, 422 when the change would leave the product unable\nto be published). Fires the `product_updated` webhook when something\nchanged.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"An estimated shipping date applies only to a pre-order. Send pre_order true with it.\", \"errors\": {\"estimated_shipping_date\": [\"An estimated shipping date applies only to a pre-order. Send pre_order true with it.\"]}}",
                            "name": "Date without pre-order"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's feed details",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/feed",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/feed",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":\"00012345678905\",\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"}"
                        },
                        "description": "What product feeds (Google Shopping and others) send for the product. Only\nthe fields you send change. `condition` is `new`, `used` or `refurbished`;\n`gtin` is 8 to 14 digits; `google_product_category_id` is an id from\nGoogle's product taxonomy; `gender` (`male`, `female`, `unisex`) and\n`age_group` (`newborn`, `infant`, `toddler`, `kids`, `adult`) apply to every\nvariant, as in the product editor. The primary category used by feeds is\nset with `PUT \/products\/{id}\/categories`. A store without product feeds enabled\nanswers 422.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The gtin field format is invalid.\", \"errors\": {\"gtin\": [\"The gtin field format is invalid.\"]}}",
                            "name": "Malformed GTIN"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's personalization fields",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/personalization-fields",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/personalization-fields",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":\"Printed on the back.\",\"required\":false}]}"
                        },
                        "description": "The fields a shopper fills in when adding the product to the cart, such as\nan engraving text. `personalization_fields` replaces the whole list, in\norder; send `[]` to remove them all. Up to 10 fields; names must be unique,\nignoring case. `required` defaults to false. Fields are matched by name, so\nrenaming a field replaces it with a new one. A store without personalization\nfields enabled answers 422.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Make sure that all personalization field names are unique.\", \"errors\": {\"personalization_fields\": [\"Make sure that all personalization field names are unique.\"]}}",
                            "name": "Duplicate names"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's digital download",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/download",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/download",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Pattern (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern.pdf\"}"
                        },
                        "description": "The file a buyer gets a link to after paying, by name and URL. Every variant\nwithout a file of its own gets it, as the product editor's Digital Download\ndoes; a variant with its own file (`PUT \/variants\/{id}\/download`) keeps it.\nWhere the store does not offer per-variant files, every variant gets it. A bundle is\nrefused: its buyers get the files of its components.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":364,\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"status\":\"published\",\"published\":true,\"price\":4900,\"formatted_price\":\"$49.00\",\"stock\":120,\"available_stock\":118,\"track_inventory\":true,\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\",\"categories\":{\"category_ids\":[7,9],\"primary_category_id\":7},\"tax\":{\"tax_class\":\"default\",\"tax_class_id\":null,\"tax_code_id\":41},\"purchase_limits\":{\"min_quantity_per_order\":1,\"max_quantity_per_order\":5},\"pre_order\":{\"pre_order\":false,\"estimated_shipping_date\":null},\"feed\":{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":null,\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"},\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":null,\"required\":false}],\"download\":{\"name\":\"Pattern (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern.pdf\"},\"default_variant_id\":2301,\"options\":[{\"id\":31,\"name\":\"Size\",\"swatch_type\":\"button\",\"values\":[{\"id\":88,\"value\":\"M\",\"color\":null},{\"id\":89,\"value\":\"L\",\"color\":null}]}],\"bundle\":null,\"shipping\":{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"},\"custom_fields\":{\"12\":\"Cotton\",\"13\":\"https:\\\/\\\/cdn.example.com\\\/media\\\/care-guide.pdf\"},\"images\":{\"main_image\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"main_image_large\":\"https:\\\/\\\/cdn.example.com\\\/tee-large.jpg\",\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":null}]},\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/classic-tee\",\"variants\":[{\"id\":2301,\"product_id\":364,\"sku\":\"TEE-BLK-M\",\"title\":\"black-medium\",\"published\":true,\"price\":4900,\"formatted_price\":\"$49.00\",\"compare_at_price\":5900,\"formatted_compare_at_price\":\"$59.00\",\"enabled\":true,\"description\":null,\"options\":[{\"option_id\":31,\"option\":\"Size\",\"value_id\":88,\"value\":\"M\"}],\"subscription\":null,\"download\":null,\"images\":{\"main\":{\"id\":903,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":120,\"reserved_stock\":2,\"available_stock\":118,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-01T11:20:31.000000Z\"}],\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"deleted_at\":null,\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The url field must be a valid URL.\", \"errors\": {\"url\": [\"The url field must be a valid URL.\"]}}",
                            "name": "Not a link"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Remove a product's digital download",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/download",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/download",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Removes the product's file from every variant that carries it; a variant\nwith a file of its own keeps that one.\n\nWorks like Save in the product editor, with the same responses as\n`PUT \/products\/{id}\/download`. Fires the `product_updated` webhook when\nsomething changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a product's images",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/images",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/images",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":\"Back of the tee\"}]}"
                        },
                        "description": "Replaces the main image, the extra images, or both, as the product\neditor's image uploaders do. An image is `{\"id\": \u2026}` to keep one the\nproduct has \u2014 as read under `images.main` and `images.extra` \u2014 or\n`{\"url\": \u2026}` to add a new one, downloaded from a public HTTPS address (an\nimage of up to 4 MB: JPEG, PNG, BMP, GIF, SVG, WebP or AVIF). Each takes an\n`alt_text`; left out, the image has none. Where the store does not have\nimage alt text turned on, responses leave `alt_text` out and sending it\nreturns 422; existing alt text is kept.\n\n`main` null removes the main image. `extra` is the whole gallery in order,\nup to 25: an extra image left out is deleted. Leave `main` or `extra` out to\nkeep those images as they are. The product's first variant shows the main image, as in the editor.\n\nWorks like Save in the product editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). If the republish fails, no\nimages are removed. Fires the `product_updated` webhook when something\nchanged.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The file at https:\/\/cdn.example.com\/tee.jpg could not be downloaded: the server answered 404.\", \"errors\": {\"main.url\": [\"The file at https:\/\/cdn.example.com\/tee.jpg could not be downloaded: the server answered 404.\"]}}",
                            "name": "Image could not be downloaded"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Add a product option",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/options",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/options",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Size\",\"swatch_type\":\"button\",\"values\":[{\"value\":\"M\"}]}"
                        },
                        "description": "Adds an option set \u2014 up to three per product \u2014 and makes a variant for every\nnew combination, as the product editor's options do. Each new variant copies\nthe price, SKU and settings of the existing variant it extends; when there is\nnone, it copies the product's first variant, without the SKU. A product has at\nmost 100 combinations, 200 where the store's plan allows more.\n\n`swatch_type` is `button` (default) or `color`; a color swatch needs a\n`color` (`#rrggbb`) for every value. Image swatches are set in the dashboard.\nWhere the store does not have option swatches turned on, responses leave\n`swatch_type` and `color` out, sending them returns 422, and options are\nsaved as buttons, as in the dashboard.\n\nWorks like Save in the product editor: a published product is republished\nwith its new variants before the response (424 when Webflow refuses it, 503\nwith `Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"These values make 120 combinations; a product has at most 100.\", \"errors\": {\"values\": [\"These values make 120 combinations; a product has at most 100.\"]}}",
                            "name": "Too many combinations"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Update a product option",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/options\/:option",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/options\/:option",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                },
                                {
                                    "id": "option",
                                    "key": "option",
                                    "value": 31,
                                    "description": "The option id from the product's `options`."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Size\",\"swatch_type\":\"button\",\"values\":[{\"id\":88,\"value\":\"Medium\"}],\"id\":31}"
                        },
                        "description": "Renames the option set, changes its swatch type or its values. `values`\nreplaces the list in order: a value sent with its `id` keeps its variants\nwhile its text changes, a value without an `id` is added with new\ncombinations, and a value left out is removed together with its variants.\nLeave `values` out to keep the current values. An option with image swatches\nreads back with `swatch_type: image`; leave `swatch_type` out or send\n`image` to keep them, and each kept value keeps its image.\nThe option as read can be sent back as it is, `id` included.\n\nWorks like Save in the product editor, with the same responses as\n`POST \/products\/{id}\/options`. Fires the `product_updated` webhook when\nsomething changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Option of another product"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The value id must be one of the values of this option.\", \"errors\": {\"values.0.id\": [\"The value id must be one of the values of this option.\"]}}",
                            "name": "Value of another option"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Delete a product option",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/options\/:option",
                            "query": [
                                {
                                    "key": "keep_value_id",
                                    "value": "88",
                                    "description": "The value whose variants stay.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/options\/:option?keep_value_id=88",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                },
                                {
                                    "id": "option",
                                    "key": "option",
                                    "value": 31,
                                    "description": "The option id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Deletes an option set and rebuilds the variants from the options left. If\nother options remain and the variants carry more than one of this option's\nvalues, send `keep_value_id` to choose which value's variants to keep, with their prices,\nSKUs and stock; the variants of the other values are deleted, as in the\nproduct editor. Without that choice the call answers 422 listing the values\nto choose from. Every other variant that matches no combination of the remaining\noptions is deleted too, including a variant with no options (`options: []`),\nunless it is the product's default variant.\n\nWorks like Save in the product editor. Fires the `product_updated` webhook.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Choose the value whose variants stay, as keep_value_id: 88 (M), 89 (L). The variants of the other values are deleted.\", \"errors\": {\"keep_value_id\": [\"Choose the value whose variants stay, as keep_value_id: 88 (M), 89 (L). The variants of the other values are deleted.\"]}}",
                            "name": "Value to keep not chosen"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Set a product's default variant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/default-variant",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/default-variant",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 364,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"variant_id\":2302}"
                        },
                        "description": "The variant the storefront preselects. `null` removes the choice, as\nunstarring the variant in the product editor does. A disabled variant cannot\nbe the default. Works only where the store has default variants turned on;\notherwise the call returns 422 and products carry no `default_variant_id`.\n\nWorks like Save in the product editor. Fires the `product_updated` webhook\nwhen the default changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 364,\n    \"name\": \"Classic Tee\",\n    \"slug\": \"classic-tee\",\n    \"status\": \"published\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"stock\": 120,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"description\": \"<p>Soft cotton tee.<\/p>\",\n    \"meta_description\": \"Soft cotton tee in five colors.\",\n    \"product_type\": \"physical\",\n    \"categories\": {\n        \"category_ids\": [7, 9],\n        \"primary_category_id\": 7\n    },\n    \"tax\": {\n        \"tax_class\": \"default\",\n        \"tax_class_id\": null,\n        \"tax_code_id\": 41\n    },\n    \"purchase_limits\": {\n        \"min_quantity_per_order\": 1,\n        \"max_quantity_per_order\": 5\n    },\n    \"pre_order\": {\n        \"pre_order\": false,\n        \"estimated_shipping_date\": null\n    },\n    \"feed\": {\n        \"brand\": \"Northwind\",\n        \"condition\": \"new\",\n        \"mpn\": \"NW-TEE-01\",\n        \"gtin\": null,\n        \"google_product_category_id\": 212,\n        \"include_variant_info_in_title_feed\": true,\n        \"gender\": \"unisex\",\n        \"age_group\": \"adult\"\n    },\n    \"personalization_fields\": [\n        {\"name\": \"Engraving\", \"placeholder\": \"Up to 20 letters\", \"help\": null, \"required\": false}\n    ],\n    \"download\": null,\n    \"default_variant_id\": 2301,\n    \"options\": [\n        {\n            \"id\": 31,\n            \"name\": \"Size\",\n            \"swatch_type\": \"button\",\n            \"values\": [\n                {\"id\": 88, \"value\": \"M\", \"color\": null},\n                {\"id\": 89, \"value\": \"L\", \"color\": null}\n            ]\n        }\n    ],\n    \"bundle\": null,\n    \"shipping\": {\n        \"requires_shipping\": true,\n        \"auto_fulfill_order\": false,\n        \"hs_code\": \"6109.10\",\n        \"country_of_origin\": \"pt\"\n    },\n    \"custom_fields\": {\n        \"12\": \"Cotton\",\n        \"13\": \"https:\/\/cdn.example.com\/media\/care-guide.pdf\"\n    },\n    \"images\": {\n        \"main_image\": \"https:\/\/cdn.example.com\/tee.jpg\",\n        \"main_image_large\": \"https:\/\/cdn.example.com\/tee-large.jpg\",\n        \"main\": {\"id\": 901, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n        \"extra\": [\n            {\"id\": 902, \"url\": \"https:\/\/cdn.example.com\/tee-back.jpg\", \"alt_text\": null}\n        ]\n    },\n    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n    \"variants\": [\n        {\n            \"id\": 2301,\n            \"product_id\": 364,\n            \"sku\": \"TEE-BLK-M\",\n            \"title\": \"black-medium\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": 5900,\n            \"formatted_compare_at_price\": \"$59.00\",\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n            ],\n            \"subscription\": null,\n            \"download\": null,\n            \"images\": {\n                \"main\": {\"id\": 903, \"url\": \"https:\/\/cdn.example.com\/tee.jpg\", \"alt_text\": \"Black cotton tee\"},\n                \"extra\": [],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-01T11:20:31.000000Z\"\n        }\n    ],\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"deleted_at\": null,\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"A disabled variant cannot be the default. Enable it first.\", \"errors\": {\"variant_id\": [\"A disabled variant cannot be the default. Enable it first.\"]}}",
                            "name": "Disabled variant"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Set a bundle's components",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/bundle",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/bundle",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 371,
                                    "description": "The product id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"components\":[{\"variant_id\":2301,\"quantity\":2}]}"
                        },
                        "description": "Makes the product a bundle of `components` \u2014 or, for a bundle, replaces its\ncomponents \u2014 as the product editor does. Each component is a variant of\nanother product of the store that is not itself a bundle, is paid once (not\na subscription) and is published, scheduled or queued; a product that is a\ncomponent of a bundle cannot become one. A variant of the bundle that\noverrides a component's quantity in the editor keeps its own quantity while\nthe component stays. A bundle's stock, weight, shipping and customs details\ncome from its components, and it is never fulfilled automatically, so a product\nwith automatic fulfillment must turn it off first.\n\nWorks like Save in the product editor: a published bundle is republished with\nthe change before the response, which needs every component on the live\nsite (424 when Webflow refuses it, 503 with `Retry-After` when Webflow is\nrate limiting the site). Fires the `product_updated` webhook when something\nchanged.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":371,\"name\":\"Starter kit\",\"slug\":\"starter-kit\",\"status\":\"published\",\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"stock\":40,\"available_stock\":40,\"track_inventory\":true,\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\",\"categories\":{\"category_ids\":[7,9],\"primary_category_id\":7},\"tax\":{\"tax_class\":\"default\",\"tax_class_id\":null,\"tax_code_id\":41},\"purchase_limits\":{\"min_quantity_per_order\":1,\"max_quantity_per_order\":5},\"pre_order\":{\"pre_order\":false,\"estimated_shipping_date\":null},\"feed\":{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":null,\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"},\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":null,\"required\":false}],\"download\":null,\"default_variant_id\":2380,\"options\":[],\"bundle\":{\"components\":[{\"variant_id\":2301,\"quantity\":2},{\"variant_id\":2310,\"quantity\":1}]},\"shipping\":{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"},\"custom_fields\":{\"12\":\"Cotton\",\"13\":\"https:\\\/\\\/cdn.example.com\\\/media\\\/care-guide.pdf\"},\"images\":{\"main_image\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"main_image_large\":\"https:\\\/\\\/cdn.example.com\\\/tee-large.jpg\",\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":null}]},\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/starter-kit\",\"variants\":[{\"id\":2380,\"product_id\":371,\"sku\":\"KIT-STARTER\",\"title\":null,\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[],\"subscription\":null,\"download\":null,\"images\":{\"main\":null,\"extra\":[],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":40,\"reserved_stock\":0,\"available_stock\":40,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}],\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"deleted_at\":null,\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Product bundles are not enabled for this store.\", \"errors\": {\"request\": [\"Product bundles are not enabled for this store.\"]}}",
                            "name": "Store without bundles"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\", \"errors\": {\"product\": [\"The product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\"]}}",
                            "name": "Published product could not be republished as this bundle"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Variant 2310 cannot be a component: it must be a one-time variant of another product of this store that is not a bundle and is published, scheduled or queued.\", \"errors\": {\"components.1.variant_id\": [\"Variant 2310 cannot be a component: it must be a one-time variant of another product of this store that is not a bundle and is published, scheduled or queued.\"]}}",
                            "name": "Variant cannot be a component"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Turn a bundle back into a single product",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/bundle",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/bundle",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 371,
                                    "description": "The bundle's product id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Turns a bundle back into a single product, as switching the product type in\nthe editor does: the components are dropped from every variant, and the\nproduct's own shipping and stock settings apply again. Fires the\n`product_updated` webhook.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":371,\"name\":\"Starter kit\",\"slug\":\"starter-kit\",\"status\":\"published\",\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"stock\":40,\"available_stock\":40,\"track_inventory\":true,\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\",\"categories\":{\"category_ids\":[7,9],\"primary_category_id\":7},\"tax\":{\"tax_class\":\"default\",\"tax_class_id\":null,\"tax_code_id\":41},\"purchase_limits\":{\"min_quantity_per_order\":1,\"max_quantity_per_order\":5},\"pre_order\":{\"pre_order\":false,\"estimated_shipping_date\":null},\"feed\":{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":null,\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"},\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":null,\"required\":false}],\"download\":null,\"default_variant_id\":2380,\"options\":[],\"bundle\":null,\"shipping\":{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"},\"custom_fields\":{\"12\":\"Cotton\",\"13\":\"https:\\\/\\\/cdn.example.com\\\/media\\\/care-guide.pdf\"},\"images\":{\"main_image\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"main_image_large\":\"https:\\\/\\\/cdn.example.com\\\/tee-large.jpg\",\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":null}]},\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/starter-kit\",\"variants\":[{\"id\":2380,\"product_id\":371,\"sku\":\"KIT-STARTER\",\"title\":null,\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[],\"subscription\":null,\"download\":null,\"images\":{\"main\":null,\"extra\":[],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":40,\"reserved_stock\":0,\"available_stock\":40,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}],\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"deleted_at\":null,\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This product is not a bundle.\", \"errors\": {\"product\": [\"This product is not a bundle.\"]}}",
                            "name": "Not a bundle"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Add or update a bundle component",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/bundle\/components",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/bundle\/components",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 371,
                                    "description": "The bundle's product id."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"variant_id\":2315,\"quantity\":1}"
                        },
                        "description": "Adds one variant to a bundle, or changes the quantity of one it already\nholds; the other components stay. The same rules as\n`PUT \/products\/{id}\/bundle` apply, and the product must already be a bundle.\nFires the `product_updated` webhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":371,\"name\":\"Starter kit\",\"slug\":\"starter-kit\",\"status\":\"published\",\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"stock\":40,\"available_stock\":40,\"track_inventory\":true,\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\",\"categories\":{\"category_ids\":[7,9],\"primary_category_id\":7},\"tax\":{\"tax_class\":\"default\",\"tax_class_id\":null,\"tax_code_id\":41},\"purchase_limits\":{\"min_quantity_per_order\":1,\"max_quantity_per_order\":5},\"pre_order\":{\"pre_order\":false,\"estimated_shipping_date\":null},\"feed\":{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":null,\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"},\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":null,\"required\":false}],\"download\":null,\"default_variant_id\":2380,\"options\":[],\"bundle\":{\"components\":[{\"variant_id\":2301,\"quantity\":2},{\"variant_id\":2315,\"quantity\":1}]},\"shipping\":{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"},\"custom_fields\":{\"12\":\"Cotton\",\"13\":\"https:\\\/\\\/cdn.example.com\\\/media\\\/care-guide.pdf\"},\"images\":{\"main_image\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"main_image_large\":\"https:\\\/\\\/cdn.example.com\\\/tee-large.jpg\",\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":null}]},\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/starter-kit\",\"variants\":[{\"id\":2380,\"product_id\":371,\"sku\":\"KIT-STARTER\",\"title\":null,\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[],\"subscription\":null,\"download\":null,\"images\":{\"main\":null,\"extra\":[],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":40,\"reserved_stock\":0,\"available_stock\":40,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}],\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"deleted_at\":null,\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This product is not a bundle. Make it one with PUT \/products\/{id}\/bundle.\", \"errors\": {\"product\": [\"This product is not a bundle. Make it one with PUT \/products\/{id}\/bundle.\"]}}",
                            "name": "Not a bundle"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Remove a bundle component",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/:id\/bundle\/components\/:variant",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/:id\/bundle\/components\/:variant",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 371,
                                    "description": "The bundle's product id."
                                },
                                {
                                    "id": "variant",
                                    "key": "variant",
                                    "value": 2310,
                                    "description": "The component's variant id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Takes one variant out of a bundle. A bundle keeps at least one component;\nto turn it back into a single product use `DELETE \/products\/{id}\/bundle`.\nFires the `product_updated` webhook.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":371,\"name\":\"Starter kit\",\"slug\":\"starter-kit\",\"status\":\"published\",\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"stock\":40,\"available_stock\":40,\"track_inventory\":true,\"description\":\"<p>Soft cotton tee.<\\\/p>\",\"meta_description\":\"Soft cotton tee in five colors.\",\"product_type\":\"physical\",\"categories\":{\"category_ids\":[7,9],\"primary_category_id\":7},\"tax\":{\"tax_class\":\"default\",\"tax_class_id\":null,\"tax_code_id\":41},\"purchase_limits\":{\"min_quantity_per_order\":1,\"max_quantity_per_order\":5},\"pre_order\":{\"pre_order\":false,\"estimated_shipping_date\":null},\"feed\":{\"brand\":\"Northwind\",\"condition\":\"new\",\"mpn\":\"NW-TEE-01\",\"gtin\":null,\"google_product_category_id\":212,\"include_variant_info_in_title_feed\":true,\"gender\":\"unisex\",\"age_group\":\"adult\"},\"personalization_fields\":[{\"name\":\"Engraving\",\"placeholder\":\"Up to 20 letters\",\"help\":null,\"required\":false}],\"download\":null,\"default_variant_id\":2380,\"options\":[],\"bundle\":{\"components\":[{\"variant_id\":2301,\"quantity\":2}]},\"shipping\":{\"requires_shipping\":true,\"auto_fulfill_order\":false,\"hs_code\":\"6109.10\",\"country_of_origin\":\"pt\"},\"custom_fields\":{\"12\":\"Cotton\",\"13\":\"https:\\\/\\\/cdn.example.com\\\/media\\\/care-guide.pdf\"},\"images\":{\"main_image\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"main_image_large\":\"https:\\\/\\\/cdn.example.com\\\/tee-large.jpg\",\"main\":{\"id\":901,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"alt_text\":\"Black cotton tee\"},\"extra\":[{\"id\":902,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-back.jpg\",\"alt_text\":null}]},\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/starter-kit\",\"variants\":[{\"id\":2380,\"product_id\":371,\"sku\":\"KIT-STARTER\",\"title\":null,\"published\":true,\"price\":6900,\"formatted_price\":\"$69.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[],\"subscription\":null,\"download\":null,\"images\":{\"main\":null,\"extra\":[],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":40,\"reserved_stock\":0,\"available_stock\":40,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}],\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"deleted_at\":null,\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Product belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"A bundle needs at least one component. Remove the bundle with DELETE \/products\/{id}\/bundle instead.\", \"errors\": {\"variant\": [\"A bundle needs at least one component. Remove the bundle with DELETE \/products\/{id}\/bundle instead.\"]}}",
                            "name": "Last component"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Variants",
            "description": "",
            "item": [
                {
                    "name": "List variants",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                },
                                {
                                    "key": "sku",
                                    "value": "TEE-BLK-M",
                                    "description": "Returns every variant carrying exactly this SKU; letter case counts.",
                                    "disabled": false
                                },
                                {
                                    "key": "updated_since",
                                    "value": "2026-08-01T00:00:00Z",
                                    "description": "ISO-8601 date and time with an offset (`Z` or `+02:00`).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/variants?limit=50&cursor=&sku=TEE-BLK-M&updated_since=2026-08-01T00%3A00%3A00Z"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns every variant of the store's products, archived products excepted,\noldest update first. `published` says whether the variant has a\nstorefront copy. Filter by `sku` to resolve your own identifiers into\nvariant ids. SKUs are not unique within a store, so this always returns an\narray \u2014 match on the fields you need rather than assuming a single result.\n\n`stock` is the quantity on hand, `reserved_stock` is held by checkouts in\nprogress, and `available_stock` is what a shopper can still buy.\n\nA published bundle variant holds no stock of its own: `stock`,\n`available_stock` and `track_inventory` are derived from its components. A\ndraft bundle's stock figures mean nothing until it is published.\n\n`compare_at_price` and `formatted_compare_at_price` are null when not set.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"data\": [\n        {\n            \"id\": 2302,\n            \"product_id\": 364,\n            \"sku\": \"TEE-CLUB-M\",\n            \"title\": \"m\",\n            \"published\": true,\n            \"price\": 4900,\n            \"formatted_price\": \"$49.00\",\n            \"compare_at_price\": null,\n            \"formatted_compare_at_price\": null,\n            \"enabled\": true,\n            \"description\": null,\n            \"options\": [\n                {\n                    \"option_id\": 31,\n                    \"option\": \"Size\",\n                    \"value_id\": 88,\n                    \"value\": \"M\"\n                }\n            ],\n            \"subscription\": {\n                \"interval\": \"month\",\n                \"interval_count\": 1,\n                \"term\": \"fixed_term\",\n                \"ends_after\": 12,\n                \"renewal_price\": 3900,\n                \"charge_shipping_on_renewals\": true\n            },\n            \"download\": {\n                \"name\": \"Pattern, size M (PDF)\",\n                \"url\": \"https:\/\/files.example.com\/pattern-m.pdf\"\n            },\n            \"images\": {\n                \"main\": {\n                    \"id\": 911,\n                    \"url\": \"https:\/\/cdn.example.com\/tee-m.jpg\",\n                    \"alt_text\": \"Black tee, size M\"\n                },\n                \"extra\": [\n                    {\n                        \"id\": 912,\n                        \"url\": \"https:\/\/cdn.example.com\/tee-m-back.jpg\",\n                        \"alt_text\": null\n                    }\n                ],\n                \"hide_main_image\": false,\n                \"hide_extra_images\": false\n            },\n            \"stock\": 120,\n            \"reserved_stock\": 2,\n            \"available_stock\": 118,\n            \"track_inventory\": true,\n            \"requires_shipping\": true,\n            \"dimensions\": {\n                \"height\": 200,\n                \"length\": 3000,\n                \"width\": 2000,\n                \"weight\": 18000\n            },\n            \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n            \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n        }\n    ],\n    \"meta\": {\n        \"per_page\": 50,\n        \"has_more\": false,\n        \"next_cursor\": null\n    }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update a variant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"price\":5400,\"compare_at_price\":5900,\"sku\":\"TEE-BLK-M\",\"weight\":18000,\"length\":3000,\"width\":2000,\"height\":200,\"enabled\":true,\"description\":\"<p>Black, medium.<\\\/p>\"}"
                        },
                        "description": "Changes the variant's price, compare-at price, SKU, weight, dimensions,\nwhether it is on sale (`enabled`) and its own description; only the fields\nyou send change. Prices are integers in the store currency's smallest unit.\nStock has its own endpoint (`PUT \/variants\/{id}\/inventory`). A variant\nwithout a description shows the product's.\n\n`enabled` works only where the store has variant disabling turned on, and\n`description` only where it has variant descriptions turned on; otherwise\nsending the field returns 422 and responses leave it out. Where the store\nuses default variants, the default\nvariant cannot be disabled \u2014 choose another default first. Otherwise,\ndisabling the default variant makes the first enabled variant the default,\nas the variant editor does.\n\nWhen the product is published it is republished with the change, Webflow\nincluded, before the response, as the product editor does after a variant\nsave. When Webflow refuses the product nothing is saved (424); when Webflow\nis rate limiting the site nothing is saved and the call answers 503 with\n`Retry-After`. When the change would leave a published product unable to be\npublished, the call answers 422 and nothing is saved. A draft or queued\nproduct keeps the change until it is next published.\n\nFires the `product_updated` webhook when a field changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":2302,\"product_id\":364,\"sku\":\"TEE-BLK-M\",\"title\":\"m\",\"published\":true,\"price\":5400,\"formatted_price\":\"$54.00\",\"compare_at_price\":5900,\"formatted_compare_at_price\":\"$59.00\",\"enabled\":true,\"description\":\"<p>Black, medium.<\\\/p>\",\"options\":[{\"option_id\":31,\"option\":\"Size\",\"value_id\":88,\"value\":\"M\"}],\"subscription\":{\"interval\":\"month\",\"interval_count\":1,\"term\":\"fixed_term\",\"ends_after\":12,\"renewal_price\":3900,\"charge_shipping_on_renewals\":true},\"download\":{\"name\":\"Pattern, size M (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern-m.pdf\"},\"images\":{\"main\":{\"id\":911,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m.jpg\",\"alt_text\":\"Black tee, size M\"},\"extra\":[{\"id\":912,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m-back.jpg\",\"alt_text\":null}],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":120,\"reserved_stock\":2,\"available_stock\":118,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The variant's product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\", \"errors\": {\"product\": [\"The variant's product is published and could not be republished with this change: Product contains shippable variants but store has no shipping zones configured. Move it to draft first, or fix the store setup.\"]}}",
                            "name": "Published product cannot be republished"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a variant's subscription billing",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/subscription",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/subscription",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"interval\":\"month\",\"interval_count\":1,\"term\":\"fixed_term\",\"ends_after\":12,\"renewal_price\":3900,\"charge_shipping_on_renewals\":true}"
                        },
                        "description": "Sells the variant as a subscription: the customer is charged every\n`interval_count` \u00d7 `interval` instead of once, as the Subscription billing\nmethod in the variant editor does. For a product without options, use its\nonly variant. Replaces the whole subscription: a field left out takes its\ndefault. A billing period longer than the limits below, set in the\ndashboard, reads back unchanged, but you must shorten it before sending it.\nSubscriptions already started keep the terms they started with.\n\n`term` is `renews_until_canceled` (default) or `fixed_term`, which ends\nafter `ends_after` payments (2 to 1000). `renewal_price` sets a different\nprice for renewals than for the first payment; `null`, or a value equal to\nthe variant's price, charges the variant's price for every payment. It works\nonly where the store has renewal prices turned on; otherwise sending it\nreturns 422 and responses leave it out. `charge_shipping_on_renewals`\n(default true) applies only to a variant that requires shipping.\n\nCheckout takes the first payment, and Stripe charges the next one a billing\nperiod later. Stripe allows at most 730 days for that, so a billing period\ncan be at most 730 days, 104 weeks, 23 months or 1 year.\n\nA bundle component, a variant of a bundle that holds a subscription\ncomponent, and, on a product with options, the variant that carries none of\nthem (`options: []`) cannot be billed by subscription.\n\nWorks like Save in the variant editor: a published product is republished\nwith the change before the response (424 when Webflow refuses it, 503 with\n`Retry-After` when Webflow is rate limiting the site, 422 when the change\nwould leave the product unable to be published). Fires the `product_updated`\nwebhook when something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 2302,\n    \"product_id\": 364,\n    \"sku\": \"TEE-CLUB-M\",\n    \"title\": \"m\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"compare_at_price\": null,\n    \"formatted_compare_at_price\": null,\n    \"enabled\": true,\n    \"description\": null,\n    \"options\": [\n        {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n    ],\n    \"subscription\": {\n        \"interval\": \"month\",\n        \"interval_count\": 1,\n        \"term\": \"fixed_term\",\n        \"ends_after\": 12,\n        \"renewal_price\": 3900,\n        \"charge_shipping_on_renewals\": true\n    },\n    \"download\": {\n        \"name\": \"Pattern, size M (PDF)\",\n        \"url\": \"https:\/\/files.example.com\/pattern-m.pdf\"\n    },\n    \"images\": {\n        \"main\": {\"id\": 911, \"url\": \"https:\/\/cdn.example.com\/tee-m.jpg\", \"alt_text\": \"Black tee, size M\"},\n        \"extra\": [\n            {\"id\": 912, \"url\": \"https:\/\/cdn.example.com\/tee-m-back.jpg\", \"alt_text\": null}\n        ],\n        \"hide_main_image\": false,\n        \"hide_extra_images\": false\n    },\n    \"stock\": 120,\n    \"reserved_stock\": 2,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"requires_shipping\": true,\n    \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This variant is a component of bundle(s): Gift Box. Remove it from those bundles before billing it by subscription.\", \"errors\": {\"variant\": [\"This variant is a component of bundle(s): Gift Box. Remove it from those bundles before billing it by subscription.\"]}}",
                            "name": "Bundle component"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Remove a variant's subscription billing",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/subscription",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/subscription",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Turns the variant's subscription off, as choosing One-Time Payment in the\nvariant editor does; its renewal price goes with it. Subscriptions already\nstarted keep renewing.\n\nWorks like Save in the variant editor, with the same 424 and 503 responses\nas `PATCH \/variants\/{id}`. Fires the `product_updated` webhook\nwhen something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":2302,\"product_id\":364,\"sku\":\"TEE-CLUB-M\",\"title\":\"m\",\"published\":true,\"price\":4900,\"formatted_price\":\"$49.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[{\"option_id\":31,\"option\":\"Size\",\"value_id\":88,\"value\":\"M\"}],\"subscription\":null,\"download\":{\"name\":\"Pattern, size M (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern-m.pdf\"},\"images\":{\"main\":{\"id\":911,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m.jpg\",\"alt_text\":\"Black tee, size M\"},\"extra\":[{\"id\":912,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m-back.jpg\",\"alt_text\":null}],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":120,\"reserved_stock\":2,\"available_stock\":118,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a variant's digital download",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/download",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/download",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Pattern, size M (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern-m.pdf\"}"
                        },
                        "description": "Gives the variant a file of its own in place of the product's, as the\nvariant editor's Digital Download does. The product's file is set with\n`PUT \/products\/{id}\/download`; the variant that holds it (the product's\nlowest-`id` variant, the only one of a product without options) refuses this\ncall. Works only where the store has per-variant digital downloads turned\non; otherwise the call returns 422 and variants carry no `download`. A\nbundle variant is refused: bundle buyers get the files of its components.\n\nWorks like Save in the variant editor, with the same 422, 424 and 503\nresponses as `PATCH \/variants\/{id}`. Fires the `product_updated` webhook\nwhen something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 2302,\n    \"product_id\": 364,\n    \"sku\": \"TEE-CLUB-M\",\n    \"title\": \"m\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"compare_at_price\": null,\n    \"formatted_compare_at_price\": null,\n    \"enabled\": true,\n    \"description\": null,\n    \"options\": [\n        {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n    ],\n    \"subscription\": {\n        \"interval\": \"month\",\n        \"interval_count\": 1,\n        \"term\": \"fixed_term\",\n        \"ends_after\": 12,\n        \"renewal_price\": 3900,\n        \"charge_shipping_on_renewals\": true\n    },\n    \"download\": {\n        \"name\": \"Pattern, size M (PDF)\",\n        \"url\": \"https:\/\/files.example.com\/pattern-m.pdf\"\n    },\n    \"images\": {\n        \"main\": {\"id\": 911, \"url\": \"https:\/\/cdn.example.com\/tee-m.jpg\", \"alt_text\": \"Black tee, size M\"},\n        \"extra\": [\n            {\"id\": 912, \"url\": \"https:\/\/cdn.example.com\/tee-m-back.jpg\", \"alt_text\": null}\n        ],\n        \"hide_main_image\": false,\n        \"hide_extra_images\": false\n    },\n    \"stock\": 120,\n    \"reserved_stock\": 2,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"requires_shipping\": true,\n    \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This variant holds the product's digital download. Use PUT \/products\/364\/download.\", \"errors\": {\"variant\": [\"This variant holds the product's digital download. Use PUT \/products\/364\/download.\"]}}",
                            "name": "Variant holding the product's file"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Remove a variant's digital download",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/download",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/download",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the variant to the product's file, or to none when the product has\nnone, as clearing the file in the variant editor does. Works only where the\nstore has per-variant digital downloads turned on; otherwise the call\nreturns 422.\n\nWorks like Save in the variant editor, with the same 422, 424 and 503\nresponses as `PATCH \/variants\/{id}`. Fires the `product_updated` webhook\nwhen something changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 2302,\n    \"product_id\": 364,\n    \"sku\": \"TEE-CLUB-M\",\n    \"title\": \"m\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"compare_at_price\": null,\n    \"formatted_compare_at_price\": null,\n    \"enabled\": true,\n    \"description\": null,\n    \"options\": [\n        {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n    ],\n    \"subscription\": {\n        \"interval\": \"month\",\n        \"interval_count\": 1,\n        \"term\": \"fixed_term\",\n        \"ends_after\": 12,\n        \"renewal_price\": 3900,\n        \"charge_shipping_on_renewals\": true\n    },\n    \"download\": {\n        \"name\": \"Pattern, size M (PDF)\",\n        \"url\": \"https:\/\/files.example.com\/pattern-m.pdf\"\n    },\n    \"images\": {\n        \"main\": {\"id\": 911, \"url\": \"https:\/\/cdn.example.com\/tee-m.jpg\", \"alt_text\": \"Black tee, size M\"},\n        \"extra\": [\n            {\"id\": 912, \"url\": \"https:\/\/cdn.example.com\/tee-m-back.jpg\", \"alt_text\": null}\n        ],\n        \"hide_main_image\": false,\n        \"hide_extra_images\": false\n    },\n    \"stock\": 120,\n    \"reserved_stock\": 2,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"requires_shipping\": true,\n    \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Variant digital downloads are not enabled for this store.\", \"errors\": {\"request\": [\"Variant digital downloads are not enabled for this store.\"]}}",
                            "name": "Store without per-variant downloads"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This variant holds the product's digital download. Use PUT \/products\/364\/download.\", \"errors\": {\"variant\": [\"This variant holds the product's digital download. Use PUT \/products\/364\/download.\"]}}",
                            "name": "Variant holding the product's file"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a variant's images",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/images",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/images",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"main\":{\"id\":911,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m.jpg\",\"alt_text\":\"Black tee, size M\"},\"extra\":[{\"id\":912,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m-back.jpg\",\"alt_text\":\"Back of the tee\"}],\"hide_main_image\":false,\"hide_extra_images\":false}"
                        },
                        "description": "Replaces the variant's own main image, its extra images, or both, as the\nvariant editor's image uploaders do, in the shape read under the variant's\n`images`: `{\"id\": \u2026}` keeps an image, `{\"url\": \u2026}` adds one downloaded from a\npublic HTTPS address (up to 4 MB: JPEG, PNG, BMP, GIF, SVG, WebP or AVIF),\neach with an optional `alt_text`. `main` null removes the main image;\n`extra` is the whole gallery in order, up to 25. A variant without images\nof its own shows the product's.\n\n`hide_main_image` and `hide_extra_images` hide the variant's main or extra\nimages altogether, the product's included; they work only where the store\nhas option value images turned on, as in the variant editor; otherwise\nsending them returns 422 and responses leave them out. `alt_text` works as\nin `PUT \/products\/{id}\/images`.\n\nThe product's first variant shows the product's main image, which is set\nwith `PUT \/products\/{id}\/images`; for that variant, leave `main` out or send\nit exactly as read.\n\nWorks like Save in the variant editor, with the same responses as\n`PUT \/products\/{id}\/images`. Fires the `product_updated` webhook when\nsomething changed.\n\nRequires the `write_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"id\": 2302,\n    \"product_id\": 364,\n    \"sku\": \"TEE-CLUB-M\",\n    \"title\": \"m\",\n    \"published\": true,\n    \"price\": 4900,\n    \"formatted_price\": \"$49.00\",\n    \"compare_at_price\": null,\n    \"formatted_compare_at_price\": null,\n    \"enabled\": true,\n    \"description\": null,\n    \"options\": [\n        {\"option_id\": 31, \"option\": \"Size\", \"value_id\": 88, \"value\": \"M\"}\n    ],\n    \"subscription\": {\n        \"interval\": \"month\",\n        \"interval_count\": 1,\n        \"term\": \"fixed_term\",\n        \"ends_after\": 12,\n        \"renewal_price\": 3900,\n        \"charge_shipping_on_renewals\": true\n    },\n    \"download\": {\n        \"name\": \"Pattern, size M (PDF)\",\n        \"url\": \"https:\/\/files.example.com\/pattern-m.pdf\"\n    },\n    \"images\": {\n        \"main\": {\"id\": 911, \"url\": \"https:\/\/cdn.example.com\/tee-m.jpg\", \"alt_text\": \"Black tee, size M\"},\n        \"extra\": [\n            {\"id\": 912, \"url\": \"https:\/\/cdn.example.com\/tee-m-back.jpg\", \"alt_text\": null}\n        ],\n        \"hide_main_image\": false,\n        \"hide_extra_images\": false\n    },\n    \"stock\": 120,\n    \"reserved_stock\": 2,\n    \"available_stock\": 118,\n    \"track_inventory\": true,\n    \"requires_shipping\": true,\n    \"dimensions\": {\"height\": 200, \"length\": 3000, \"width\": 2000, \"weight\": 18000},\n    \"created_at\": \"2026-01-14T09:00:00.000000Z\",\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\"\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store, its product is archived, or it does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The file at https:\/\/cdn.example.com\/tee-m.jpg is a text\/html file, which this field does not take.\", \"errors\": {\"main.url\": [\"The file at https:\/\/cdn.example.com\/tee-m.jpg is a text\/html file, which this field does not take.\"]}}",
                            "name": "Image could not be downloaded"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the product: Validation Failure\"}",
                            "name": "Webflow rejected the product"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Set a variant's inventory",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/variants\/:id\/inventory",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/variants\/:id\/inventory",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 2302,
                                    "description": "The variant id."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"stock\":120,\"expected_stock\":118}"
                        },
                        "description": "Sets the stock level to an absolute value \u2014 this is not an increment. The\nvariant must have inventory tracking enabled and must be published.\n\nSend `expected_stock` to make the write conditional: the update is applied\nonly while `stock` still matches, and a mismatch answers `409`\nwithout changing anything. The conflict response carries `actual_stock`, so\na retry needs no extra read.\n\nThe comparison is against `stock`, not `available_stock`, so checkouts\nholding reserved stock do not cause conflicts.\n\nRequires the `write_inventory` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":2302,\"product_id\":364,\"sku\":\"TEE-CLUB-M\",\"title\":\"m\",\"published\":true,\"price\":4900,\"formatted_price\":\"$49.00\",\"compare_at_price\":null,\"formatted_compare_at_price\":null,\"enabled\":true,\"description\":null,\"options\":[{\"option_id\":31,\"option\":\"Size\",\"value_id\":88,\"value\":\"M\"}],\"subscription\":{\"interval\":\"month\",\"interval_count\":1,\"term\":\"fixed_term\",\"ends_after\":12,\"renewal_price\":3900,\"charge_shipping_on_renewals\":true},\"download\":{\"name\":\"Pattern, size M (PDF)\",\"url\":\"https:\\\/\\\/files.example.com\\\/pattern-m.pdf\"},\"images\":{\"main\":{\"id\":911,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m.jpg\",\"alt_text\":\"Black tee, size M\"},\"extra\":[{\"id\":912,\"url\":\"https:\\\/\\\/cdn.example.com\\\/tee-m-back.jpg\",\"alt_text\":null}],\"hide_main_image\":false,\"hide_extra_images\":false},\"stock\":120,\"reserved_stock\":2,\"available_stock\":118,\"track_inventory\":true,\"requires_shipping\":true,\"dimensions\":{\"height\":200,\"length\":3000,\"width\":2000,\"weight\":18000},\"created_at\":\"2026-01-14T09:00:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_inventory scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Variant belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Inventory changed before the update could be applied.\", \"expected_stock\": 118, \"actual_stock\": 120}",
                            "name": "expected_stock no longer matches"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Variant must be published before inventory can be updated.\"}",
                            "name": "Variant is not published"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Inventory tracking is not enabled for this variant.\", \"errors\": {\"variant\": [\"Inventory tracking is not enabled for this variant.\"]}}",
                            "name": "Inventory tracking is off for this variant"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Orders",
            "description": "",
            "item": [
                {
                    "name": "List orders",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                },
                                {
                                    "key": "updated_since",
                                    "value": "2026-08-01T00:00:00Z",
                                    "description": "ISO-8601 date and time with an offset (`Z` or `+02:00`).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/orders?limit=50&cursor=&updated_since=2026-08-01T00%3A00%3A00Z"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the store's orders, oldest update first. Pass `updated_since` for an\nincremental feed. Orders are never removed, so a canceled order appears as\na status change rather than a deletion.\n\nEach entry is the same object `GET \/orders\/{orderName}` returns, including the\ncustom checkout fields the store marks private.\n\nRequires the `read_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"data\": [\n        {\n            \"order_id\": \"1002\",\n            \"name\": \"1002\",\n            \"guid\": \"01KSNP2NFV6DJWW6MXME27Q0KE\",\n            \"status\": \"unfulfilled\",\n            \"currency_code\": \"usd\",\n            \"coupon_code\": null,\n            \"customer_email\": \"john@example.com\",\n            \"customer_name\": \"John Doe\",\n            \"shipment\": {\n                \"tracking_url\": null,\n                \"tracking_number\": null,\n                \"provider\": null,\n                \"address\": {\n                    \"name\": \"John Doe\",\n                    \"email\": \"john@example.com\",\n                    \"phone\": \"+14155550123\",\n                    \"address_line_one\": \"1 Market St\",\n                    \"address_line_two\": null,\n                    \"city\": \"San Francisco\",\n                    \"postal_code\": \"94105\",\n                    \"state\": \"CA\",\n                    \"country\": \"us\",\n                    \"region\": \"us-ca\",\n                    \"region_name\": \"California\",\n                    \"validation_result\": null\n                }\n            },\n            \"fulfillments\": [],\n            \"billing\": {\n                \"name\": \"John Doe\",\n                \"email\": \"john@example.com\",\n                \"phone\": \"+14155550123\",\n                \"address_line_one\": \"1 Market St\",\n                \"address_line_two\": null,\n                \"city\": \"San Francisco\",\n                \"postal_code\": \"94105\",\n                \"state\": \"CA\",\n                \"country\": \"us\",\n                \"region\": \"us-ca\",\n                \"region_name\": \"California\",\n                \"validation_result\": null\n            },\n            \"payment\": {\n                \"label\": \"Visa ending in 4242\",\n                \"status\": \"paid\",\n                \"method\": \"credit_card\",\n                \"transaction_id\": \"pi_3Q1example\"\n            },\n            \"details\": {\n                \"custom_fields\": {\n                    \"Gift Message\": \"Happy birthday\"\n                },\n                \"checkout_type\": \"\"\n            },\n            \"items\": [\n                {\n                    \"sku\": \"TEE-BLK-M\",\n                    \"quantity\": 1,\n                    \"price\": 4900,\n                    \"name\": \"Classic Tee\",\n                    \"slug\": \"classic-tee\",\n                    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n                    \"image_url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n                    \"subtotal\": 4900,\n                    \"options\": [\n                        {\n                            \"name\": \"Size\",\n                            \"slug\": \"size\",\n                            \"value\": \"M\",\n                            \"value_slug\": \"m\"\n                        }\n                    ],\n                    \"weight\": 180,\n                    \"weight_unit\": \"g\",\n                    \"height\": 2,\n                    \"width\": 20,\n                    \"length\": 30,\n                    \"downloads\": [],\n                    \"has_subscription\": false,\n                    \"availability\": \"available\",\n                    \"estimated_shipping_date\": null,\n                    \"bundle_components\": [],\n                    \"fulfilled_quantity\": 0,\n                    \"remaining_fulfillment_quantity\": 1,\n                    \"fulfillment_state\": \"unfulfilled\"\n                }\n            ],\n            \"subtotal\": 4900,\n            \"formatted_subtotal\": \"$49.00\",\n            \"total\": 5391,\n            \"formatted_total\": \"$53.91\",\n            \"discount_total\": 0,\n            \"formatted_discount_total\": \"$0.00\",\n            \"shipping_total\": 0,\n            \"formatted_shipping_total\": \"$0.00\",\n            \"shipping_method_label\": \"Standard\",\n            \"tax_total\": 491,\n            \"formatted_tax_total\": \"$4.91\",\n            \"created_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"updated_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"placed_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"fulfilled_at\": null,\n            \"disputed_at\": null,\n            \"discounts\": []\n        }\n    ],\n    \"meta\": {\n        \"per_page\": 50,\n        \"has_more\": true,\n        \"next_cursor\": \"eyJpZCI6MTAwMn0\"\n    }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get an order",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Orders are identified by their `name`, not by an internal id.\n\nA `refunds` array is present only when `payment.status` is `refunded` or\n`partially_refunded`; each entry carries `id`, `amount`, `formatted_amount`,\n`quantity`, `status`, `reason` and `created_at`. Treat its absence as\n\"nothing refunded\" rather than as an error.\n\nSome fields depend on what the order contains. `shipment` is an object\nwhen the order has at least one shippable item and an empty array `[]` when\nit has none, as on a digital-only order.\n\n`shipment.address` and `billing` carry `name`, `email`, `phone`, `address_line_one`, `address_line_two`,\n`city`, `postal_code`, `state`, `country`, `region`, `region_name` and\n`validation_result`, with one `state` field for every country: a US or\nCanadian state as its code (`CA`), free text elsewhere. `region` is the\nregion id (`us-ca`) and `region_name` its name (`California`), both `null`\nwhere the address names no region the store knows.\n\nUnder `payment`, `status` always carries a value and reads `unpaid` before\nthe charge is captured, while `method` and `transaction_id` are `null` until\nthe gateway records them; an offline payment carries its own reference from\nthe start. `billing` and `payment.label` are both `null` only\non an order with no billing details recorded.\n\n`details.custom_fields` carries every custom checkout field the shopper\nfilled in, including the ones the store marks private \u2014 marking a field\nprivate hides it from the shopper, not from this API. When a private field\nhas the same name as a public one, the private value is returned. The map is always an object, empty when the\norder carries none.\n\nRequires the `read_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"order_id\": \"1002\",\n    \"name\": \"1002\",\n    \"guid\": \"01KSNP2NFV6DJWW6MXME27Q0KE\",\n    \"status\": \"unfulfilled\",\n    \"currency_code\": \"usd\",\n    \"coupon_code\": null,\n    \"customer_email\": \"john@example.com\",\n    \"customer_name\": \"John Doe\",\n    \"shipment\": {\n        \"tracking_url\": null,\n        \"tracking_number\": null,\n        \"provider\": null,\n        \"address\": {\n            \"name\": \"John Doe\",\n            \"email\": \"john@example.com\",\n            \"phone\": \"+14155550123\",\n            \"address_line_one\": \"1 Market St\",\n            \"address_line_two\": null,\n            \"city\": \"San Francisco\",\n            \"postal_code\": \"94105\",\n            \"state\": \"CA\",\n            \"country\": \"us\",\n            \"region\": \"us-ca\",\n            \"region_name\": \"California\",\n            \"validation_result\": null\n        }\n    },\n    \"fulfillments\": [],\n    \"billing\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"+14155550123\",\n        \"address_line_one\": \"1 Market St\",\n        \"address_line_two\": null,\n        \"city\": \"San Francisco\",\n        \"postal_code\": \"94105\",\n        \"state\": \"CA\",\n        \"country\": \"us\",\n        \"region\": \"us-ca\",\n        \"region_name\": \"California\",\n        \"validation_result\": null\n    },\n    \"payment\": {\n        \"label\": \"Visa ending in 4242\",\n        \"status\": \"paid\",\n        \"method\": \"credit_card\",\n        \"transaction_id\": \"pi_3Q1example\"\n    },\n    \"details\": {\n        \"custom_fields\": {\n            \"Gift Message\": \"Happy birthday\"\n        },\n        \"checkout_type\": \"\"\n    },\n    \"items\": [\n        {\n            \"sku\": \"TEE-BLK-M\",\n            \"quantity\": 1,\n            \"price\": 4900,\n            \"name\": \"Classic Tee\",\n            \"slug\": \"classic-tee\",\n            \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n            \"image_url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n            \"subtotal\": 4900,\n            \"options\": [\n                {\n                    \"name\": \"Size\",\n                    \"slug\": \"size\",\n                    \"value\": \"M\",\n                    \"value_slug\": \"m\"\n                }\n            ],\n            \"weight\": 180,\n            \"weight_unit\": \"g\",\n            \"height\": 2,\n            \"width\": 20,\n            \"length\": 30,\n            \"downloads\": [],\n            \"has_subscription\": false,\n            \"availability\": \"available\",\n            \"estimated_shipping_date\": null,\n            \"bundle_components\": [],\n            \"fulfilled_quantity\": 0,\n            \"remaining_fulfillment_quantity\": 1,\n            \"fulfillment_state\": \"unfulfilled\"\n        }\n    ],\n    \"subtotal\": 4900,\n    \"formatted_subtotal\": \"$49.00\",\n    \"total\": 5391,\n    \"formatted_total\": \"$53.91\",\n    \"discount_total\": 0,\n    \"formatted_discount_total\": \"$0.00\",\n    \"shipping_total\": 0,\n    \"formatted_shipping_total\": \"$0.00\",\n    \"shipping_method_label\": \"Standard\",\n    \"tax_total\": 491,\n    \"formatted_tax_total\": \"$4.91\",\n    \"created_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"updated_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"placed_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"fulfilled_at\": null,\n    \"disputed_at\": null,\n    \"discounts\": []\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Unknown order"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update an order's tracking",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/tracking",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/tracking",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"shipping_carrier\":\"DHL\",\"tracking_number\":\"JD014600006281230542\",\"tracking_url\":\"https:\\\/\\\/www.dhl.com\\\/track?id=JD014600006281230542\",\"fulfillment_id\":91}"
                        },
                        "description": "Adds or replaces the shipping carrier and tracking details on an order. Send\na field as `null` to clear it. The order must contain at least one shippable\nitem, and at least one of `shipping_carrier`, `tracking_number` or\n`tracking_url` must be present.\n\nWhere the details land depends on how many fulfillments the order has. With\nmore than one, or when the order is partially fulfilled, `fulfillment_id` is\nrequired and targets that fulfillment. With exactly one, omit it and the\ndetails go to that fulfillment. With none, they go to the order's shipment.\n\nFires the `order_updated` webhook and moves the order's `updated_at` on every\ncall, also when the values sent are the ones already stored.\n\nRead the tracking back from where it was written: anything stored on a\nfulfillment comes back under the matching entry in `fulfillments[]`, and\n`shipment.tracking_url`, `shipment.tracking_number` and `shipment.provider`\nare always `null` once the order has any fulfillment.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"order_id\":\"1002\",\"name\":\"1002\",\"guid\":\"01KSNP2NFV6DJWW6MXME27Q0KE\",\"status\":\"unfulfilled\",\"currency_code\":\"usd\",\"coupon_code\":null,\"customer_email\":\"john@example.com\",\"customer_name\":\"John Doe\",\"shipment\":{\"provider\":\"DHL\",\"tracking_number\":\"JD014600006281230542\",\"tracking_url\":\"https:\\\/\\\/www.dhl.com\\\/track?id=JD014600006281230542\",\"address\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null}},\"fulfillments\":[],\"billing\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null},\"payment\":{\"label\":\"Visa ending in 4242\",\"status\":\"paid\",\"method\":\"credit_card\",\"transaction_id\":\"pi_3Q1example\"},\"details\":{\"custom_fields\":{\"Gift Message\":\"Happy birthday\"},\"checkout_type\":\"\"},\"items\":[{\"sku\":\"TEE-BLK-M\",\"quantity\":1,\"price\":4900,\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/classic-tee\",\"image_url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"subtotal\":4900,\"options\":[{\"name\":\"Size\",\"slug\":\"size\",\"value\":\"M\",\"value_slug\":\"m\"}],\"weight\":180,\"weight_unit\":\"g\",\"height\":2,\"width\":20,\"length\":30,\"downloads\":[],\"has_subscription\":false,\"availability\":\"available\",\"estimated_shipping_date\":null,\"bundle_components\":[],\"fulfilled_quantity\":0,\"remaining_fulfillment_quantity\":1,\"fulfillment_state\":\"unfulfilled\"}],\"subtotal\":4900,\"formatted_subtotal\":\"$49.00\",\"total\":5391,\"formatted_total\":\"$53.91\",\"discount_total\":0,\"formatted_discount_total\":\"$0.00\",\"shipping_total\":0,\"formatted_shipping_total\":\"$0.00\",\"shipping_method_label\":\"Standard\",\"tax_total\":491,\"formatted_tax_total\":\"$4.91\",\"created_at\":\"2026-08-01T10:12:00.000000Z\",\"updated_at\":\"2026-08-14T10:05:12.000000Z\",\"placed_at\":\"2026-08-01T10:12:00.000000Z\",\"fulfilled_at\":null,\"disputed_at\":null,\"discounts\":[]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Order has no shippable items.\", \"errors\": {\"order\": [\"Order has no shippable items.\"]}}",
                            "name": "Nothing to ship"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"At least one supported field is required.\", \"errors\": {\"request\": [\"At least one supported field is required.\"]}}",
                            "name": "No tracking field sent"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The fulfillment id field is required.\", \"errors\": {\"fulfillment_id\": [\"The fulfillment id field is required.\"]}}",
                            "name": "fulfillment_id omitted on a multi-fulfillment order"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The fulfillment_id does not belong to this order.\", \"errors\": {\"fulfillment_id\": [\"The fulfillment_id does not belong to this order.\"]}}",
                            "name": "Fulfillment belongs to another order"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Fulfill an order",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/fulfill",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/fulfill",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"shipping_carrier\":\"DHL\",\"tracking_number\":\"JD014600006281230542\",\"tracking_url\":\"https:\\\/\\\/www.dhl.com\\\/track?id=JD014600006281230542\",\"send_notification\":true}"
                        },
                        "description": "Marks the whole order fulfilled and, when `send_notification` is true, emails\nthe customer. Tracking details sent here are stored alongside the fulfillment,\nso a shipment can be recorded in one call.\n\nOnly whole-order fulfillment is supported; items cannot be fulfilled one by\none through this endpoint. As in the dashboard, a refunded order can still be\nfulfilled. Fires the `order_updated` and `order_fulfillment_updated` webhooks.\n\nEach `fulfillments[].items[].order_item_id` identifies the order line it\ncovers; it is not repeated in `items[]`, which carries no id. A line covering\na bundle also carries `components[]`, one entry per bundled variant with its\n`name` and `quantity`; their `live_product_variant_id` identifies the\ncomponent within the order and is not a variant id from `GET \/variants`.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"order_id\": \"1002\",\n    \"name\": \"1002\",\n    \"guid\": \"01KSNP2NFV6DJWW6MXME27Q0KE\",\n    \"status\": \"fulfilled\",\n    \"currency_code\": \"usd\",\n    \"coupon_code\": null,\n    \"customer_email\": \"john@example.com\",\n    \"customer_name\": \"John Doe\",\n    \"shipment\": {\n        \"tracking_url\": null,\n        \"tracking_number\": null,\n        \"provider\": null,\n        \"address\": {\n            \"name\": \"John Doe\",\n            \"email\": \"john@example.com\",\n            \"phone\": \"+14155550123\",\n            \"address_line_one\": \"1 Market St\",\n            \"address_line_two\": null,\n            \"city\": \"San Francisco\",\n            \"postal_code\": \"94105\",\n            \"state\": \"CA\",\n            \"country\": \"us\",\n            \"region\": \"us-ca\",\n            \"region_name\": \"California\",\n            \"validation_result\": null\n        }\n    },\n    \"fulfillments\": [\n        {\n            \"id\": 91,\n            \"provider\": \"DHL\",\n            \"tracking_number\": \"JD014600006281230542\",\n            \"tracking_url\": \"https:\/\/www.dhl.com\/track?id=JD014600006281230542\",\n            \"fulfilled_at\": \"2026-08-14T10:05:12.000000Z\",\n            \"items\": [\n                {\n                    \"order_item_id\": 5501,\n                    \"name\": \"Classic Tee\",\n                    \"quantity\": 1\n                }\n            ]\n        }\n    ],\n    \"billing\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"+14155550123\",\n        \"address_line_one\": \"1 Market St\",\n        \"address_line_two\": null,\n        \"city\": \"San Francisco\",\n        \"postal_code\": \"94105\",\n        \"state\": \"CA\",\n        \"country\": \"us\",\n        \"region\": \"us-ca\",\n        \"region_name\": \"California\",\n        \"validation_result\": null\n    },\n    \"payment\": {\n        \"label\": \"Visa ending in 4242\",\n        \"status\": \"paid\",\n        \"method\": \"credit_card\",\n        \"transaction_id\": \"pi_3Q1example\"\n    },\n    \"details\": {\n        \"custom_fields\": {\n            \"Gift Message\": \"Happy birthday\"\n        },\n        \"checkout_type\": \"\"\n    },\n    \"items\": [\n        {\n            \"sku\": \"TEE-BLK-M\",\n            \"quantity\": 1,\n            \"price\": 4900,\n            \"name\": \"Classic Tee\",\n            \"slug\": \"classic-tee\",\n            \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n            \"image_url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n            \"subtotal\": 4900,\n            \"options\": [\n                {\n                    \"name\": \"Size\",\n                    \"slug\": \"size\",\n                    \"value\": \"M\",\n                    \"value_slug\": \"m\"\n                }\n            ],\n            \"weight\": 180,\n            \"weight_unit\": \"g\",\n            \"height\": 2,\n            \"width\": 20,\n            \"length\": 30,\n            \"downloads\": [],\n            \"has_subscription\": false,\n            \"availability\": \"available\",\n            \"estimated_shipping_date\": null,\n            \"bundle_components\": [],\n            \"fulfilled_quantity\": 1,\n            \"remaining_fulfillment_quantity\": 0,\n            \"fulfillment_state\": \"fulfilled\"\n        }\n    ],\n    \"subtotal\": 4900,\n    \"formatted_subtotal\": \"$49.00\",\n    \"total\": 5391,\n    \"formatted_total\": \"$53.91\",\n    \"discount_total\": 0,\n    \"formatted_discount_total\": \"$0.00\",\n    \"shipping_total\": 0,\n    \"formatted_shipping_total\": \"$0.00\",\n    \"shipping_method_label\": \"Standard\",\n    \"tax_total\": 491,\n    \"formatted_tax_total\": \"$4.91\",\n    \"created_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"updated_at\": \"2026-08-14T10:05:12.000000Z\",\n    \"placed_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"fulfilled_at\": \"2026-08-14T10:05:12.000000Z\",\n    \"disputed_at\": null,\n    \"discounts\": []\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be fulfilled from status canceled.\"}",
                            "name": "Order is in a status that cannot be fulfilled"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The tracking url field must be a valid URL.\", \"errors\": {\"tracking_url\": [\"The tracking url field must be a valid URL.\"]}}",
                            "name": "Tracking link is not a URL"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Unfulfill an order",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/unfulfill",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/unfulfill",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns a fulfilled or partially fulfilled order to the unfulfilled state.\nTracking stored on the order's shipment is kept; tracking recorded on a\nfulfillment is removed with the fulfillment. Fires the `order_updated` and\n`order_fulfillment_updated` webhooks.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"order_id\":\"1002\",\"name\":\"1002\",\"guid\":\"01KSNP2NFV6DJWW6MXME27Q0KE\",\"status\":\"unfulfilled\",\"currency_code\":\"usd\",\"coupon_code\":null,\"customer_email\":\"john@example.com\",\"customer_name\":\"John Doe\",\"shipment\":{\"provider\":\"DHL\",\"tracking_number\":\"JD014600006281230542\",\"tracking_url\":\"https:\\\/\\\/www.dhl.com\\\/track?id=JD014600006281230542\",\"address\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null}},\"fulfillments\":[],\"billing\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null},\"payment\":{\"label\":\"Visa ending in 4242\",\"status\":\"paid\",\"method\":\"credit_card\",\"transaction_id\":\"pi_3Q1example\"},\"details\":{\"custom_fields\":{\"Gift Message\":\"Happy birthday\"},\"checkout_type\":\"\"},\"items\":[{\"sku\":\"TEE-BLK-M\",\"quantity\":1,\"price\":4900,\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/classic-tee\",\"image_url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"subtotal\":4900,\"options\":[{\"name\":\"Size\",\"slug\":\"size\",\"value\":\"M\",\"value_slug\":\"m\"}],\"weight\":180,\"weight_unit\":\"g\",\"height\":2,\"width\":20,\"length\":30,\"downloads\":[],\"has_subscription\":false,\"availability\":\"available\",\"estimated_shipping_date\":null,\"bundle_components\":[],\"fulfilled_quantity\":0,\"remaining_fulfillment_quantity\":1,\"fulfillment_state\":\"unfulfilled\"}],\"subtotal\":4900,\"formatted_subtotal\":\"$49.00\",\"total\":5391,\"formatted_total\":\"$53.91\",\"discount_total\":0,\"formatted_discount_total\":\"$0.00\",\"shipping_total\":0,\"formatted_shipping_total\":\"$0.00\",\"shipping_method_label\":\"Standard\",\"tax_total\":491,\"formatted_tax_total\":\"$4.91\",\"created_at\":\"2026-08-01T10:12:00.000000Z\",\"updated_at\":\"2026-08-14T10:41:03.000000Z\",\"placed_at\":\"2026-08-01T10:12:00.000000Z\",\"fulfilled_at\":null,\"disputed_at\":null,\"discounts\":[]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be unfulfilled from status unfulfilled.\"}",
                            "name": "Order was never fulfilled"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Cancel an order",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/cancel",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/cancel",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Moves the order to the canceled status, fires the `order_updated` webhook\nand sends the cancellation email, as canceling in the dashboard does.\n\nThis is a status change only. It does **not** refund the payment, return\nstock to inventory, remove fulfillments, or cancel subscriptions created by\nthe order \u2014 handle those separately if your flow needs them.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"order_id\":\"1002\",\"name\":\"1002\",\"guid\":\"01KSNP2NFV6DJWW6MXME27Q0KE\",\"status\":\"canceled\",\"currency_code\":\"usd\",\"coupon_code\":null,\"customer_email\":\"john@example.com\",\"customer_name\":\"John Doe\",\"shipment\":{\"tracking_url\":null,\"tracking_number\":null,\"provider\":null,\"address\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null}},\"fulfillments\":[],\"billing\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null},\"payment\":{\"label\":\"Visa ending in 4242\",\"status\":\"paid\",\"method\":\"credit_card\",\"transaction_id\":\"pi_3Q1example\"},\"details\":{\"custom_fields\":{\"Gift Message\":\"Happy birthday\"},\"checkout_type\":\"\"},\"items\":[{\"sku\":\"TEE-BLK-M\",\"quantity\":1,\"price\":4900,\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/classic-tee\",\"image_url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"subtotal\":4900,\"options\":[{\"name\":\"Size\",\"slug\":\"size\",\"value\":\"M\",\"value_slug\":\"m\"}],\"weight\":180,\"weight_unit\":\"g\",\"height\":2,\"width\":20,\"length\":30,\"downloads\":[],\"has_subscription\":false,\"availability\":\"available\",\"estimated_shipping_date\":null,\"bundle_components\":[],\"fulfilled_quantity\":0,\"remaining_fulfillment_quantity\":1,\"fulfillment_state\":\"unfulfilled\"}],\"subtotal\":4900,\"formatted_subtotal\":\"$49.00\",\"total\":5391,\"formatted_total\":\"$53.91\",\"discount_total\":0,\"formatted_discount_total\":\"$0.00\",\"shipping_total\":0,\"formatted_shipping_total\":\"$0.00\",\"shipping_method_label\":\"Standard\",\"tax_total\":491,\"formatted_tax_total\":\"$4.91\",\"created_at\":\"2026-08-01T10:12:00.000000Z\",\"updated_at\":\"2026-08-14T11:02:47.000000Z\",\"placed_at\":\"2026-08-01T10:12:00.000000Z\",\"fulfilled_at\":null,\"disputed_at\":null,\"discounts\":[]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be canceled from status canceled.\"}",
                            "name": "Order already reached a final status"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Mark an order as paid",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/mark-paid",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/mark-paid",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"send_notification\":true}"
                        },
                        "description": "Records the payment for an order placed with an offline payment method, the\nsame as **Mark as paid** in the dashboard: the order moves to `unfulfilled`,\nstock is taken, the order is sent to your shipping and tax providers, and,\nwhen `send_notification` is true, the customer gets the payment confirmation\nemail.\n\nOnly orders paid offline that are still unpaid can be marked paid. Fires the\n`order_payment_updated` webhook.\n\nWhen the order was marked unpaid earlier and the stock returned then has since\nsold, the call answers 409 and the order stays unpaid.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"order_id\": \"1002\",\n    \"name\": \"1002\",\n    \"guid\": \"01KSNP2NFV6DJWW6MXME27Q0KE\",\n    \"status\": \"unfulfilled\",\n    \"currency_code\": \"usd\",\n    \"coupon_code\": null,\n    \"customer_email\": \"john@example.com\",\n    \"customer_name\": \"John Doe\",\n    \"shipment\": {\n        \"tracking_url\": null,\n        \"tracking_number\": null,\n        \"provider\": null,\n        \"address\": {\n            \"name\": \"John Doe\",\n            \"email\": \"john@example.com\",\n            \"phone\": \"+14155550123\",\n            \"address_line_one\": \"1 Market St\",\n            \"address_line_two\": null,\n            \"city\": \"San Francisco\",\n            \"postal_code\": \"94105\",\n            \"state\": \"CA\",\n            \"country\": \"us\",\n            \"region\": \"us-ca\",\n            \"region_name\": \"California\",\n            \"validation_result\": null\n        }\n    },\n    \"fulfillments\": [],\n    \"billing\": {\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"phone\": \"+14155550123\",\n        \"address_line_one\": \"1 Market St\",\n        \"address_line_two\": null,\n        \"city\": \"San Francisco\",\n        \"postal_code\": \"94105\",\n        \"state\": \"CA\",\n        \"country\": \"us\",\n        \"region\": \"us-ca\",\n        \"region_name\": \"California\",\n        \"validation_result\": null\n    },\n    \"payment\": {\n        \"label\": \"Visa ending in 4242\",\n        \"status\": \"paid\",\n        \"method\": \"credit_card\",\n        \"transaction_id\": \"pi_3Q1example\"\n    },\n    \"details\": {\n        \"custom_fields\": {\n            \"Gift Message\": \"Happy birthday\"\n        },\n        \"checkout_type\": \"\"\n    },\n    \"items\": [\n        {\n            \"sku\": \"TEE-BLK-M\",\n            \"quantity\": 1,\n            \"price\": 4900,\n            \"name\": \"Classic Tee\",\n            \"slug\": \"classic-tee\",\n            \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n            \"image_url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n            \"subtotal\": 4900,\n            \"options\": [\n                {\n                    \"name\": \"Size\",\n                    \"slug\": \"size\",\n                    \"value\": \"M\",\n                    \"value_slug\": \"m\"\n                }\n            ],\n            \"weight\": 180,\n            \"weight_unit\": \"g\",\n            \"height\": 2,\n            \"width\": 20,\n            \"length\": 30,\n            \"downloads\": [],\n            \"has_subscription\": false,\n            \"availability\": \"available\",\n            \"estimated_shipping_date\": null,\n            \"bundle_components\": [],\n            \"fulfilled_quantity\": 0,\n            \"remaining_fulfillment_quantity\": 1,\n            \"fulfillment_state\": \"unfulfilled\"\n        }\n    ],\n    \"subtotal\": 4900,\n    \"formatted_subtotal\": \"$49.00\",\n    \"total\": 5391,\n    \"formatted_total\": \"$53.91\",\n    \"discount_total\": 0,\n    \"formatted_discount_total\": \"$0.00\",\n    \"shipping_total\": 0,\n    \"formatted_shipping_total\": \"$0.00\",\n    \"shipping_method_label\": \"Standard\",\n    \"tax_total\": 491,\n    \"formatted_tax_total\": \"$4.91\",\n    \"created_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"updated_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"placed_at\": \"2026-08-01T10:12:00.000000Z\",\n    \"fulfilled_at\": null,\n    \"disputed_at\": null,\n    \"discounts\": []\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Only orders paid offline can be marked paid.\"}",
                            "name": "Order was not paid offline"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be marked paid from payment status paid and status unfulfilled.\"}",
                            "name": "Order is already paid or canceled"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Not enough stock to mark the order paid: T-shirt: Red needs 2, 0 available.\"}",
                            "name": "Stock returned when the order was marked unpaid has since sold"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The send notification field must be true or false.\", \"errors\": {\"send_notification\": [\"The send notification field must be true or false.\"]}}",
                            "name": "Not a boolean"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Mark an order as unpaid",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/mark-unpaid",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/mark-unpaid",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Reverses **Mark as paid** for an order placed with an offline payment method:\npayment status goes back to `unpaid` and the order to the status the offline\npayment method places new orders in (`pending` or `unfulfilled`), its stock is\nreturned to inventory, it no longer counts toward your order quota, and its\ntransaction is removed from your tax provider. Emails already sent are not\nrecalled. Marking the order paid again runs the payment steps afresh.\n\nOnly paid, unfulfilled orders paid offline and without refunds can be marked\nunpaid. Fires the `order_payment_updated` webhook.\n\nRequires the `write_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"order_id\":\"1002\",\"name\":\"1002\",\"guid\":\"01KSNP2NFV6DJWW6MXME27Q0KE\",\"status\":\"pending\",\"currency_code\":\"usd\",\"coupon_code\":null,\"customer_email\":\"john@example.com\",\"customer_name\":\"John Doe\",\"shipment\":{\"tracking_url\":null,\"tracking_number\":null,\"provider\":null,\"address\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null}},\"fulfillments\":[],\"billing\":{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"phone\":\"+14155550123\",\"address_line_one\":\"1 Market St\",\"address_line_two\":null,\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\",\"region\":\"us-ca\",\"region_name\":\"California\",\"validation_result\":null},\"payment\":{\"label\":\"Bank transfer\",\"status\":\"unpaid\",\"method\":\"offline\",\"transaction_id\":null},\"details\":{\"custom_fields\":{\"Gift Message\":\"Happy birthday\"},\"checkout_type\":\"\"},\"items\":[{\"sku\":\"TEE-BLK-M\",\"quantity\":1,\"price\":4900,\"name\":\"Classic Tee\",\"slug\":\"classic-tee\",\"url\":\"https:\\\/\\\/store.example.com\\\/product\\\/classic-tee\",\"image_url\":\"https:\\\/\\\/cdn.example.com\\\/tee.jpg\",\"subtotal\":4900,\"options\":[{\"name\":\"Size\",\"slug\":\"size\",\"value\":\"M\",\"value_slug\":\"m\"}],\"weight\":180,\"weight_unit\":\"g\",\"height\":2,\"width\":20,\"length\":30,\"downloads\":[],\"has_subscription\":false,\"availability\":\"available\",\"estimated_shipping_date\":null,\"bundle_components\":[],\"fulfilled_quantity\":0,\"remaining_fulfillment_quantity\":1,\"fulfillment_state\":\"unfulfilled\"}],\"subtotal\":4900,\"formatted_subtotal\":\"$49.00\",\"total\":5391,\"formatted_total\":\"$53.91\",\"discount_total\":0,\"formatted_discount_total\":\"$0.00\",\"shipping_total\":0,\"formatted_shipping_total\":\"$0.00\",\"shipping_method_label\":\"Standard\",\"tax_total\":491,\"formatted_tax_total\":\"$4.91\",\"created_at\":\"2026-08-01T10:12:00.000000Z\",\"updated_at\":\"2026-08-01T10:12:00.000000Z\",\"placed_at\":\"2026-08-01T10:12:00.000000Z\",\"fulfilled_at\":null,\"disputed_at\":null,\"discounts\":[]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Only orders paid offline can be marked unpaid.\"}",
                            "name": "Order was not paid offline"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be marked unpaid from payment status paid and status fulfilled.\"}",
                            "name": "Order is fulfilled, refunded or not paid"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List an order's refunds",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/refunds",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/refunds",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Every refund recorded on the order, oldest first, including `failed` ones \u2014\nunlike the order's `refunds` field, which lists them only once the order is\nrefunded.\n\nRequires the `read_orders` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 88,\n      \"amount\": 1500,\n      \"formatted_amount\": \"$15.00\",\n      \"quantity\": null,\n      \"status\": \"completed\",\n      \"reason\": \"Damaged in transit\",\n      \"created_at\": \"2026-10-06T09:00:00.000000Z\"\n    }\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_orders scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Refund an order",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/orders\/:orderName\/refund",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/orders\/:orderName\/refund",
                            "variable": [
                                {
                                    "id": "orderName",
                                    "key": "orderName",
                                    "value": "1002",
                                    "description": "The order's `name`."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "zap-run-42"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"amount\":1500,\"restock\":false,\"reason\":\"Damaged in transit\"}"
                        },
                        "description": "Refunds any paid order, the same as **Issue Refund** in the dashboard. Leave\n`amount` out to refund everything not yet refunded, or send part of it;\nfurther partial refunds are allowed until the total is reached. Send an\n`Idempotency-Key` header to make a retry safe: a repeat with the same key\nwithin a day gets the first answer back (`Idempotency-Replay: true`) instead\nof a second refund, including a 424 whose outcome is unknown; the same key\nwith a different body is a 422. Only a refund that went through, or whose\noutcome is unknown, is remembered; any other refusal (409, 422, or a 424 the\ngateway refused) can be retried with the same key. The order's\n`payment.status` becomes `partially_refunded` or `refunded`, and the\n`refund_issued` webhook fires.\n\nWhat happens to the money depends on how the order was paid:\n\n- Stripe: the amount goes back to the customer's card.\n- PayPal: refund the order in PayPal, as in the dashboard; CartGenie records\n  the refund when PayPal reports it. The call answers 409.\n- An offline payment method: CartGenie cannot move the money. The refund is\n  recorded so the order, reports and webhooks reflect it \u2014 return the money\n  to the customer yourself.\n\nWhen the gateway turns the refund down the call answers 424 and the refund\nis recorded as `failed`.\n\n`restock: true` returns the order's items to inventory with a full refund,\nwhere the store has returning items to inventory turned on; it is refused with 422 on a partial\nrefund or when the order has no tracked items left to return. Items go back\nafter the money does, so if that step fails the refund still stands and\n`restocked` says whether the items are back \u2014 when it is `false`, return\nthem in the dashboard. A refund does not cancel the order or its\nsubscriptions.\n\nRequires the `write_refunds` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"id\": 88,\n  \"amount\": 1500,\n  \"formatted_amount\": \"$15.00\",\n  \"quantity\": null,\n  \"status\": \"completed\",\n  \"reason\": \"Damaged in transit\",\n  \"created_at\": \"2026-10-06T09:00:00.000000Z\",\n  \"restocked\": false\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_refunds scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Order belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Order cannot be refunded from payment status refunded.\"}",
                            "name": "Order already refunded"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Nothing is left to refund on this order.\"}",
                            "name": "Nothing left to refund"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"A request with this Idempotency-Key is still in progress; retry once it has answered.\"}",
                            "name": "Same Idempotency-Key still in progress"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Refund PayPal orders in PayPal; the refund is recorded here when PayPal reports it.\"}",
                            "name": "Paid with PayPal"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"The store no longer has the order's payment method set up, so the refund cannot be recorded.\"}",
                            "name": "Payment method removed from the store"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The amount may not be greater than 1500.\", \"errors\": {\"amount\": [\"The amount may not be greater than 1500.\"]}}",
                            "name": "More than is left"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Returning items to inventory is not enabled for this store.\", \"errors\": {\"restock\": [\"Returning items to inventory is not enabled for this store.\"]}}",
                            "name": "Store does not return items on refund"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The order has no tracked items left to return to inventory; leave restock out.\", \"errors\": {\"restock\": [\"The order has no tracked items left to return to inventory; leave restock out.\"]}}",
                            "name": "Nothing to return to inventory"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"This key was used with a different request.\", \"errors\": {\"Idempotency-Key\": [\"This key was used with a different request.\"]}}",
                            "name": "Idempotency key reused with a different request"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Items go back to inventory only with a full refund; leave restock out.\", \"errors\": {\"restock\": [\"Items go back to inventory only with a full refund; leave restock out.\"]}}",
                            "name": "Restock with a partial refund"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"The payment gateway refused the refund.\"}",
                            "name": "Gateway refused the refund"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"The refund could not be completed, and the money may have moved. Check the payment gateway before retrying.\"}",
                            "name": "Refund could not be completed"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Webhooks",
            "description": "",
            "item": [
                {
                    "name": "Get sample deliveries for an event",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks\/sample",
                            "query": [
                                {
                                    "key": "event",
                                    "value": "new_category",
                                    "description": "The event to sample, from the list under \"Create a webhook subscription\".",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks\/sample?event=new_category"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns delivery bodies for one event in exactly the shape a live delivery\ncarries, so you can map fields before the first real event arrives.\n\n`new_order`, `order_updated`, `order_fulfillment_updated`,\n`order_payment_updated` and `refund_issued` return up to 3 of the store's\nlatest matching orders \u2014 orders with a fulfillment for\n`order_fulfillment_updated`, orders placed with an offline payment method\nfor `order_payment_updated`, orders with a completed refund for `refund_issued`.\nWhen the store has none, and for every other event, the\nresponse holds one representative example instead of a real record.\n\nDeliveries keep a format of their own, which differs from this API's\nresponses for the same record: product and category `status` is a display\nlabel (`Draft`, `Sync Error`) rather than the API's value; product,\ncategory, customer and discount timestamps carry a `+00:00` offset while\norder timestamps carry `Z`; and addresses carry `state` as a state name or\na region id (`us-ca`), next to `region` and `region_name`, where\nthe API answers with the state code (`CA`). Map fields from these samples,\nnot from the API's responses.\n\nThe token needs the read scope that matches the event: `read_orders` for\norder, refund, fulfillment and abandoned-cart events, `read_customers`,\n`read_subscriptions`, `read_discounts`, `read_categories`, or\n`read_products` for product and inventory events. Its owner needs the\nmatching view permission in the store."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"type\": \"new_category\",\n      \"payload\": {\n        \"name\": \"Mugs\",\n        \"slug\": \"mugs\",\n        \"status\": \"Published\",\n        \"published_at\": \"2025-05-28T11:00:00+00:00\",\n        \"created_at\": \"2025-05-25T10:00:00+00:00\",\n        \"updated_at\": \"2025-05-28T11:00:00+00:00\",\n        \"description\": null,\n        \"meta_description\": null\n      }\n    }\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\": \"This token does not have the read_categories scope required for the new_category event.\"}",
                            "name": "Token lacks the scope for this event"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The selected event is invalid.\", \"errors\": {\"event\": [\"The selected event is invalid.\"]}}",
                            "name": "Unknown event"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List webhook subscriptions",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks?limit=50&cursor="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 7,\n      \"name\": \"Order sync\",\n      \"url\": \"https:\/\/example.com\/hooks\/cartgenie\",\n      \"description\": null,\n      \"enabled\": true,\n      \"events\": [\"new_order\", \"order_updated\"],\n      \"last_dispatched_at\": \"2026-08-14T09:12:00.000000Z\",\n      \"created_at\": \"2026-07-01T12:00:00.000000Z\",\n      \"updated_at\": \"2026-08-14T09:12:00.000000Z\"\n    }\n  ],\n  \"meta\": {\"per_page\": 50, \"has_more\": false, \"next_cursor\": null}\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get a webhook subscription",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks\/:webhook",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks\/:webhook",
                            "variable": [
                                {
                                    "id": "webhook",
                                    "key": "webhook",
                                    "value": 7,
                                    "description": "The subscription id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Order sync\",\n  \"url\": \"https:\/\/example.com\/hooks\/cartgenie\",\n  \"description\": null,\n  \"enabled\": true,\n  \"events\": [\"new_order\", \"order_updated\"],\n  \"last_dispatched_at\": \"2026-08-14T09:12:00.000000Z\",\n  \"created_at\": \"2026-07-01T12:00:00.000000Z\",\n  \"updated_at\": \"2026-08-14T09:12:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Subscription belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Create a webhook subscription",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Order sync\",\"url\":\"https:\\\/\\\/example.com\\\/hooks\\\/cartgenie\",\"description\":\"Feeds our ERP\",\"enabled\":true,\"events\":[\"new_order\",\"order_updated\"]}"
                        },
                        "description": "Registers a URL to receive the events you list. The URL must be a publicly\nreachable HTTPS endpoint \u2014 private and loopback addresses are rejected.\n\n## Receiving deliveries\n\nThe request body is `{\"type\": \"<event>\", \"payload\": { ... }}`. Every delivery\ncarries a `Signature` header holding an HMAC-SHA256 of the raw JSON body,\nkeyed with your store's webhook secret from **Settings \u2192 Webhooks**. Compute\nthe same digest over the body you received and compare before trusting it.\n\nA delivery is attempted up to three times with exponential backoff and a 10\nsecond timeout, so your endpoint should answer quickly and be safe to call\ntwice with the same event.\n\n## Available events\n\n`new_order`, `order_updated`, `order_fulfillment_updated` (the order was\nfulfilled, partially fulfilled or unfulfilled; `order_updated` fires as\nwell), `new_customer`, `customer_updated`, `new_subscription`,\n`subscription_updated`, `new_subscription_charge`, `new_discount`,\n`discount_updated`, `new_category`, `category_updated`, `new_product`,\n`product_updated`, `new_abandoned_cart`, `refund_issued`,\n`inventory_updated` and `order_payment_updated` (an order paid with an\noffline payment method was marked paid or unpaid).\n\n`new_product` and `product_updated` carry the product's id, name, slug,\nstatus, price, `hs_code`, `country_of_origin`, dates and `url`, not its\nvariants or settings; read `GET \/products\/{id}` for the whole product.\n\nRequires the `write_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Order sync\",\n  \"url\": \"https:\/\/example.com\/hooks\/cartgenie\",\n  \"description\": \"Feeds our ERP\",\n  \"enabled\": true,\n  \"events\": [\"new_order\", \"order_updated\"],\n  \"last_dispatched_at\": null,\n  \"created_at\": \"2026-08-14T09:12:00.000000Z\",\n  \"updated_at\": \"2026-08-14T09:12:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The url must be a publicly reachable HTTPS URL.\", \"errors\": {\"url\": [\"The url must be a publicly reachable HTTPS URL.\"]}}",
                            "name": "Endpoint is not publicly reachable over HTTPS"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update a webhook subscription",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks\/:webhook",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks\/:webhook",
                            "variable": [
                                {
                                    "id": "webhook",
                                    "key": "webhook",
                                    "value": 7,
                                    "description": "The subscription id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Order sync\",\"url\":\"https:\\\/\\\/example.com\\\/hooks\\\/cartgenie\",\"description\":\"Feeds our ERP\",\"enabled\":false,\"events\":[\"new_order\"]}"
                        },
                        "description": "Only the fields you send are changed. Sending `events` replaces the whole\nlist rather than adding to it.\n\nRequires the `write_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Order sync\",\n  \"url\": \"https:\/\/example.com\/hooks\/cartgenie\",\n  \"description\": \"Feeds our ERP\",\n  \"enabled\": false,\n  \"events\": [\"new_order\"],\n  \"last_dispatched_at\": \"2026-08-14T09:12:00.000000Z\",\n  \"created_at\": \"2026-07-01T12:00:00.000000Z\",\n  \"updated_at\": \"2026-08-15T08:30:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Subscription belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The url must be a publicly reachable HTTPS URL.\", \"errors\": {\"url\": [\"The url must be a publicly reachable HTTPS URL.\"]}}",
                            "name": "Endpoint is not publicly reachable over HTTPS"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Delete a webhook subscription",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks\/:webhook",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks\/:webhook",
                            "variable": [
                                {
                                    "id": "webhook",
                                    "key": "webhook",
                                    "value": 7,
                                    "description": "The subscription id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `write_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "{}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Subscription belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Send a test webhook delivery",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/webhooks\/:webhook\/test",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/webhooks\/:webhook\/test",
                            "variable": [
                                {
                                    "id": "webhook",
                                    "key": "webhook",
                                    "value": 7,
                                    "description": "The subscription id."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"event\":\"new_order\"}"
                        },
                        "description": "Queues one delivery of the chosen event to this subscription, carrying\nrepresentative sample data rather than a real record. Use it to verify your\nendpoint and your signature check before going live.\n\nThe event must already be one this subscription listens for. The destination\nis re-validated at this point, so a URL that has since become unreachable is\nrejected here rather than failing silently later. The test is delivered even\nwhile the subscription is paused (`enabled: false`).\n\nRequires the `write_webhooks` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 202,
                            "body": "{\"queued\": true, \"event\": \"new_order\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_webhooks scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Subscription belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Event is not configured for this webhook.\", \"errors\": {\"event\": [\"Event is not configured for this webhook.\"]}}",
                            "name": "Subscription does not listen for that event"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"Webhook destination must be a publicly reachable HTTPS URL.\", \"errors\": {\"url\": [\"Webhook destination must be a publicly reachable HTTPS URL.\"]}}",
                            "name": "Destination is no longer reachable"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Categories",
            "description": "",
            "item": [
                {
                    "name": "List categories",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories",
                            "query": [
                                {
                                    "key": "slug",
                                    "value": "summer-collection",
                                    "description": "A category slug.",
                                    "disabled": false
                                },
                                {
                                    "key": "name",
                                    "value": "Summer collection",
                                    "description": "A category name.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/categories?slug=summer-collection&name=Summer%20collection&limit=50&cursor="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Archived categories are not listed. Pass `slug` or `name` to find one\ncategory; `name` matches case-insensitively. `status` is `draft`,\n`queued`, `published` or `scheduled`, or `sync_error` after Webflow refused\nthe category, or `imported` for a category imported from Webflow that was\nnever saved.\n\nThe list leaves out `product_ids`, which can hold every product of the\nstore; read them from `GET \/categories\/{category}`.\n\nRequires the `read_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 7,\n      \"name\": \"Summer collection\",\n      \"slug\": \"summer-collection\",\n      \"description\": \"Light fabrics for hot days.\",\n      \"meta_description\": \"Summer clothing\",\n      \"status\": \"published\",\n      \"image_url\": \"https:\/\/cdn.example.com\/categories\/7\/summer.jpg\",\n      \"custom_fields\": {\"21\": \"Light fabrics for hot days\"},\n      \"published_at\": \"2026-06-01T09:00:00.000000Z\",\n      \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n      \"updated_at\": \"2026-06-01T09:00:00.000000Z\"\n    }\n  ],\n  \"meta\": {\"per_page\": 50, \"has_more\": false, \"next_cursor\": null}\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get a category",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories\/:category",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/categories\/:category",
                            "variable": [
                                {
                                    "id": "category",
                                    "key": "category",
                                    "value": 7,
                                    "description": "The category id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Summer collection\",\n  \"slug\": \"summer-collection\",\n  \"description\": \"Light fabrics for hot days.\",\n  \"meta_description\": \"Summer clothing\",\n  \"status\": \"published\",\n  \"product_ids\": [12, 15],\n  \"image_url\": \"https:\/\/cdn.example.com\/categories\/7\/summer.jpg\",\n  \"custom_fields\": {\"21\": \"Light fabrics for hot days\"},\n  \"published_at\": \"2026-06-01T09:00:00.000000Z\",\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-06-01T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Category belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Create a category",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/categories"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"custom_fields\":{\"21\":\"Light fabrics for hot days\"},\"name\":\"Summer collection\",\"slug\":\"summer-collection\",\"description\":\"Light fabrics for hot days.\",\"meta_description\":\"Summer clothing\",\"status\":\"published\",\"product_ids\":[12,15]}"
                        },
                        "description": "Saves the category and applies `status` the way the dashboard's save\nbuttons do: `draft` (the default) keeps it off the live site, `queued`\nstages it for the next Webflow site publish, and `published` publishes it\nnow. Stores without Webflow treat `queued` as `published`. On a Webflow\nstore the category is written to the Webflow categories collection before\nthe response returns. `custom_fields` takes the store's category custom\nfields (`GET \/categories\/custom-fields`), which a category also reads back;\nimages are not set through the API.\n\nFires the `new_category` webhook.\n\nRequires the `write_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Summer collection\",\n  \"slug\": \"summer-collection\",\n  \"description\": \"Light fabrics for hot days.\",\n  \"meta_description\": \"Summer clothing\",\n  \"status\": \"published\",\n  \"product_ids\": [12, 15],\n  \"image_url\": \"https:\/\/cdn.example.com\/categories\/7\/summer.jpg\",\n  \"custom_fields\": {\"21\": \"Light fabrics for hot days\"},\n  \"published_at\": \"2026-06-01T09:00:00.000000Z\",\n  \"created_at\": \"2026-06-01T09:00:00.000000Z\",\n  \"updated_at\": \"2026-06-01T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The slug has already been taken.\", \"errors\": {\"slug\": [\"The slug has already been taken.\"]}}",
                            "name": "Slug already used"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the category: Validation Failure\"}",
                            "name": "Webflow rejected the category"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                },
                {
                    "name": "Update a category",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories\/:category",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/categories\/:category",
                            "variable": [
                                {
                                    "id": "category",
                                    "key": "category",
                                    "value": 7,
                                    "description": "The category id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"custom_fields\":{\"21\":\"Light fabrics for hot days\"},\"name\":\"Summer collection\",\"slug\":\"summer-collection\",\"description\":\"Light fabrics for hot days.\",\"meta_description\":\"Summer clothing\",\"status\":\"published\",\"product_ids\":[12,15]}"
                        },
                        "description": "Only the fields you send change; `product_ids` replaces the whole list. A\nproduct added without a primary category gets this one as its primary\ncategory, and a product removed from its primary category falls back to\nanother of its categories, as in the product editor.\nWithout `status`, the category keeps its current status and is saved again\nwith it, so a published category is updated in Webflow too. A scheduled,\nimported or `sync_error` category, or a published or queued one on a store\nwhose Webflow categories collection is disconnected, is saved in CartGenie\nonly. A request that changes nothing leaves the category, and its Webflow\nitem, untouched.\n\nFires the `category_updated` webhook once when anything changed \u2014 a field,\nthe products or the status.\n\nRequires the `write_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 7,\n  \"name\": \"Summer collection\",\n  \"slug\": \"summer-collection\",\n  \"description\": \"Light fabrics for hot days.\",\n  \"meta_description\": \"Summer clothing\",\n  \"status\": \"published\",\n  \"product_ids\": [12, 15],\n  \"image_url\": \"https:\/\/cdn.example.com\/categories\/7\/summer.jpg\",\n  \"custom_fields\": {\"21\": \"Light fabrics for hot days\"},\n  \"published_at\": \"2026-06-01T09:00:00.000000Z\",\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-06-01T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Category belongs to another store, is archived or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The slug has already been taken.\", \"errors\": {\"slug\": [\"The slug has already been taken.\"]}}",
                            "name": "Slug already used"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"Webflow rejected the category: Validation Failure\"}",
                            "name": "Webflow rejected the category"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\"message\": \"Webflow is rate limiting this site. Nothing was saved; retry in a minute.\"}",
                            "name": "Webflow rate limit"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Customers",
            "description": "",
            "item": [
                {
                    "name": "List customers",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers",
                            "query": [
                                {
                                    "key": "email",
                                    "value": "jane@example.com",
                                    "description": "An email address to look up.",
                                    "disabled": false
                                },
                                {
                                    "key": "search",
                                    "value": "jane",
                                    "description": "Part of a name or email.",
                                    "disabled": false
                                },
                                {
                                    "key": "updated_since",
                                    "value": "2026-08-01T00:00:00Z",
                                    "description": "ISO-8601 date and time with an offset (`Z` or `+02:00`).",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/customers?email=jane%40example.com&search=jane&updated_since=2026-08-01T00%3A00%3A00Z&limit=50&cursor="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the store's customers, oldest update first. A customer is created\nthe first time someone checks out with a new email, or with\n`POST \/customers`. Pass\n`updated_since` for an incremental feed; `email` finds one customer by\naddress, case-insensitively, and `search` matches part of a name or email.\n\nRequires the `read_customers` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 312,\n      \"name\": \"Jane Doe\",\n      \"email\": \"jane@example.com\",\n      \"phone\": \"+1 555 0100\",\n      \"billing_address\": {\n        \"name\": \"Jane Doe\",\n        \"phone\": \"+1 555 0100\",\n        \"address_line_one\": \"1 Market St\",\n        \"address_line_two\": null,\n        \"city\": \"San Francisco\",\n        \"postal_code\": \"94105\",\n        \"state\": \"CA\",\n        \"country\": \"us\"\n      },\n      \"shipping_address\": null,\n      \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n      \"updated_at\": \"2026-05-20T09:00:00.000000Z\"\n    }\n  ],\n  \"meta\": {\"per_page\": 50, \"has_more\": false, \"next_cursor\": null}\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_customers scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get a customer",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers\/:customer",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/customers\/:customer",
                            "variable": [
                                {
                                    "id": "customer",
                                    "key": "customer",
                                    "value": 312,
                                    "description": "The customer id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_customers` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 312,\n  \"name\": \"Jane Doe\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"+1 555 0100\",\n  \"billing_address\": null,\n  \"shipping_address\": null,\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-05-20T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_customers scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Customer belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List a customer's orders",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers\/:customer\/orders",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                },
                                {
                                    "key": "updated_since",
                                    "value": "2026-08-01T00:00:00Z",
                                    "description": "ISO-8601 date and time with an offset (`Z` or `+02:00`).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/customers\/:customer\/orders?limit=50&cursor=&updated_since=2026-08-01T00%3A00%3A00Z",
                            "variable": [
                                {
                                    "id": "customer",
                                    "key": "customer",
                                    "value": 312,
                                    "description": "The customer id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "The customer's orders, with the same shape, sort order and `updated_since`\nfilter as `GET \/orders`. Needs `read_orders` as well as `read_customers`.\n\nRequires the `read_customers` and `read_orders` token scopes."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n    \"data\": [\n        {\n            \"order_id\": \"1002\",\n            \"name\": \"1002\",\n            \"guid\": \"01KSNP2NFV6DJWW6MXME27Q0KE\",\n            \"status\": \"unfulfilled\",\n            \"currency_code\": \"usd\",\n            \"coupon_code\": null,\n            \"customer_email\": \"john@example.com\",\n            \"customer_name\": \"John Doe\",\n            \"shipment\": {\n                \"tracking_url\": null,\n                \"tracking_number\": null,\n                \"provider\": null,\n                \"address\": {\n                    \"name\": \"John Doe\",\n                    \"email\": \"john@example.com\",\n                    \"phone\": \"+14155550123\",\n                    \"address_line_one\": \"1 Market St\",\n                    \"address_line_two\": null,\n                    \"city\": \"San Francisco\",\n                    \"postal_code\": \"94105\",\n                    \"state\": \"CA\",\n                    \"country\": \"us\",\n                    \"region\": \"us-ca\",\n                    \"region_name\": \"California\",\n                    \"validation_result\": null\n                }\n            },\n            \"fulfillments\": [],\n            \"billing\": {\n                \"name\": \"John Doe\",\n                \"email\": \"john@example.com\",\n                \"phone\": \"+14155550123\",\n                \"address_line_one\": \"1 Market St\",\n                \"address_line_two\": null,\n                \"city\": \"San Francisco\",\n                \"postal_code\": \"94105\",\n                \"state\": \"CA\",\n                \"country\": \"us\",\n                \"region\": \"us-ca\",\n                \"region_name\": \"California\",\n                \"validation_result\": null\n            },\n            \"payment\": {\n                \"label\": \"Visa ending in 4242\",\n                \"status\": \"paid\",\n                \"method\": \"credit_card\",\n                \"transaction_id\": \"pi_3Q1example\"\n            },\n            \"details\": {\n                \"custom_fields\": {\n                    \"Gift Message\": \"Happy birthday\"\n                },\n                \"checkout_type\": \"\"\n            },\n            \"items\": [\n                {\n                    \"sku\": \"TEE-BLK-M\",\n                    \"quantity\": 1,\n                    \"price\": 4900,\n                    \"name\": \"Classic Tee\",\n                    \"slug\": \"classic-tee\",\n                    \"url\": \"https:\/\/store.example.com\/product\/classic-tee\",\n                    \"image_url\": \"https:\/\/cdn.example.com\/tee.jpg\",\n                    \"subtotal\": 4900,\n                    \"options\": [\n                        {\n                            \"name\": \"Size\",\n                            \"slug\": \"size\",\n                            \"value\": \"M\",\n                            \"value_slug\": \"m\"\n                        }\n                    ],\n                    \"weight\": 180,\n                    \"weight_unit\": \"g\",\n                    \"height\": 2,\n                    \"width\": 20,\n                    \"length\": 30,\n                    \"downloads\": [],\n                    \"has_subscription\": false,\n                    \"availability\": \"available\",\n                    \"estimated_shipping_date\": null,\n                    \"bundle_components\": [],\n                    \"fulfilled_quantity\": 0,\n                    \"remaining_fulfillment_quantity\": 1,\n                    \"fulfillment_state\": \"unfulfilled\"\n                }\n            ],\n            \"subtotal\": 4900,\n            \"formatted_subtotal\": \"$49.00\",\n            \"total\": 5391,\n            \"formatted_total\": \"$53.91\",\n            \"discount_total\": 0,\n            \"formatted_discount_total\": \"$0.00\",\n            \"shipping_total\": 0,\n            \"formatted_shipping_total\": \"$0.00\",\n            \"shipping_method_label\": \"Standard\",\n            \"tax_total\": 491,\n            \"formatted_tax_total\": \"$4.91\",\n            \"created_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"updated_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"placed_at\": \"2026-08-01T10:12:00.000000Z\",\n            \"fulfilled_at\": null,\n            \"disputed_at\": null,\n            \"discounts\": []\n        }\n    ],\n    \"meta\": {\n        \"per_page\": 50,\n        \"has_more\": true,\n        \"next_cursor\": \"eyJpZCI6MTAwMn0\"\n    }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_customers and read_orders scopes required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Customer belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Create a customer",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/customers"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Jane Doe\",\"email\":\"jane@example.com\",\"phone\":\"+1 555 0100\",\"billing_address\":{\"name\":\"Jane Doe\",\"phone\":\"+1 555 0100\",\"address_line_one\":\"1 Market St\",\"address_line_two\":\"Suite 4\",\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\"},\"shipping_address\":{\"name\":\"Jane Doe\",\"phone\":\"+1 555 0100\",\"address_line_one\":\"500 Howard St\",\"address_line_two\":\"Floor 2\",\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\"}}"
                        },
                        "description": "Adds a customer before they have ordered, for example from a CRM. Their\nfirst checkout with the same email attaches to this customer. Emails are\nunique per store and stored lowercase. No webhook is sent: `new_customer`\nstill fires when the customer's first order is paid.\n\nAn address is read and written with the same fields, so an address taken\nfrom a response can be sent back as it is. It needs `country`, a two-letter\ncode such as `us`. `state` is one field for every country: in the United\nStates and Canada it must be one of the country's states, sent as its code\n(`CA`), region id (`us-ca`) or name (`California`), and always reads back\nas the code; elsewhere it is free text, kept as sent. An address field not\nlisted below is refused with 422.\n\nRequires the `write_customers` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"id\": 312,\n  \"name\": \"Jane Doe\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"+1 555 0100\",\n  \"billing_address\": {\"name\": \"Jane Doe\", \"phone\": \"+1 555 0100\", \"address_line_one\": \"1 Market St\", \"address_line_two\": \"Suite 4\", \"city\": \"San Francisco\", \"postal_code\": \"94105\", \"state\": \"CA\", \"country\": \"us\"},\n  \"shipping_address\": {\"name\": \"Jane Doe\", \"phone\": \"+1 555 0100\", \"address_line_one\": \"500 Howard St\", \"address_line_two\": \"Floor 2\", \"city\": \"San Francisco\", \"postal_code\": \"94105\", \"state\": \"CA\", \"country\": \"us\"},\n  \"created_at\": \"2026-10-06T09:00:00.000000Z\",\n  \"updated_at\": \"2026-10-06T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_customers scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The email has already been taken.\", \"errors\": {\"email\": [\"The email has already been taken.\"]}}",
                            "name": "Email already taken"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The state must be a state of us, as a code, region id or name, such as CA.\", \"errors\": {\"billing_address.state\": [\"The state must be a state of us, as a code, region id or name, such as CA.\"]}}",
                            "name": "Unknown US state"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update a customer",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers\/:customer",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/customers\/:customer",
                            "variable": [
                                {
                                    "id": "customer",
                                    "key": "customer",
                                    "value": 312,
                                    "description": "The customer id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Jane Smith\",\"email\":\"jane.smith@example.com\",\"phone\":\"+1 555 0101\",\"billing_address\":{\"name\":\"Jane Smith\",\"phone\":\"+1 555 0101\",\"address_line_one\":\"1 Market St\",\"address_line_two\":\"Suite 4\",\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\"},\"shipping_address\":{\"name\":\"Jane Smith\",\"phone\":\"+1 555 0101\",\"address_line_one\":\"500 Howard St\",\"address_line_two\":\"Floor 2\",\"city\":\"San Francisco\",\"postal_code\":\"94105\",\"state\":\"CA\",\"country\":\"us\"}}"
                        },
                        "description": "Only the fields you send change; an address you send replaces the stored\none whole, and `null` clears it. An address sent back exactly as it reads\nchanges nothing. Fires the `customer_updated` webhook when something changed.\n\nRequires the `write_customers` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 312,\n  \"name\": \"Jane Smith\",\n  \"email\": \"jane.smith@example.com\",\n  \"phone\": \"+1 555 0101\",\n  \"billing_address\": {\"name\": \"Jane Smith\", \"phone\": \"+1 555 0101\", \"address_line_one\": \"1 Market St\", \"address_line_two\": \"Suite 4\", \"city\": \"San Francisco\", \"postal_code\": \"94105\", \"state\": \"CA\", \"country\": \"us\"},\n  \"shipping_address\": {\"name\": \"Jane Smith\", \"phone\": \"+1 555 0101\", \"address_line_one\": \"500 Howard St\", \"address_line_two\": \"Floor 2\", \"city\": \"San Francisco\", \"postal_code\": \"94105\", \"state\": \"CA\", \"country\": \"us\"},\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-10-06T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_customers scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Customer belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The email has already been taken.\", \"errors\": {\"email\": [\"The email has already been taken.\"]}}",
                            "name": "Email already taken"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Erase a customer",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/customers\/:customer",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/customers\/:customer",
                            "variable": [
                                {
                                    "id": "customer",
                                    "key": "customer",
                                    "value": 312,
                                    "description": "The customer id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "For a data-erasure request. Removes the customer's name, phone, addresses\nand notes, and unlinks their saved payment details; the email becomes\n`erased-{id}@erased.invalid`, including on discount codes issued to that\nemail. Carts with that email that never checked out lose the email and\naddresses. The customer\nand their orders stay, because orders are the store's financial records:\nan order keeps the addresses it was placed with, and its customer email\nreads as the erased one. The customer record at the payment provider is not\ndeleted; remove it there if the request covers it. Refused while the\ncustomer has a subscription that can still charge, since renewals need the\nsaved payment details. There is no undo.\n\nRequires the `write_customers` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "",
                            "name": "Erased"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_customers scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Customer belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"The customer has a subscription that can still renew; cancel it before erasing the customer.\"}",
                            "name": "Live subscription"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Custom fields",
            "description": "",
            "item": [
                {
                    "name": "List product custom fields",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/custom-fields",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/custom-fields"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "The fields the store has added to its products, in the order the dashboard\nshows them. `custom_fields` on `POST \/products` and `PATCH \/products\/{id}`\ntakes a value per field `id`; a `required` field needs one when a product is\ncreated and cannot be cleared, and a `PATCH` is refused while one is still\nempty. A field sent back exactly as it reads is left as it is.\n\nValues by `type`: `text`, `rich_text` (HTML), `email`, `phone`, `link`,\n`video_link` and `color` (`#rrggbb`) are strings; `number` is a number\n(whole when `integer` is true) between `min` and `max`; `switch` is a\nboolean; `date` is an ISO 8601 date (`2026-10-06` or `2026-10-06T09:30:00+02:00`);\n`option` is one of `options`; `reference` is the id of one item from\n`GET \/products\/custom-fields\/{field}\/items` and `multi-reference` a list of\nthem; `image` and `file` are the public HTTPS URL of a file CartGenie\ndownloads and stores, and `multi_image` a list of up to 10 image URLs. Any\nother list, a reordered one included, replaces every file of the field.\n`null` clears a field. `min` and `max` bound the length of `text` and\n`rich_text`.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\"id\": 12, \"label\": \"Material\", \"type\": \"option\", \"required\": true, \"help_text\": null, \"options\": [\"Cotton\", \"Linen\"], \"min\": null, \"max\": null, \"integer\": null},\n    {\"id\": 13, \"label\": \"Care guide\", \"type\": \"file\", \"required\": false, \"help_text\": \"PDF, up to 10 MB\", \"options\": null, \"min\": null, \"max\": null, \"integer\": null}\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List a product reference field's items",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/products\/custom-fields\/:field\/items",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/products\/custom-fields\/:field\/items",
                            "variable": [
                                {
                                    "id": "field",
                                    "key": "field",
                                    "value": 14,
                                    "description": "The custom field id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "For a `reference` or `multi-reference` field: the items of the Webflow\ncollection it refers to, read from Webflow on each call.\n\nRequires the `read_products` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"data\": [{\"id\": \"64f1c2a9b3e5d7a1c2e3f4a5\", \"name\": \"Summer collection\"}]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_products scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Not a reference field of this store"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"The items could not be read from Webflow; try again later.\"}",
                            "name": "Webflow could not be read"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List category custom fields",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories\/custom-fields",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/categories\/custom-fields"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "The fields the store has added to its categories. `custom_fields` on\n`POST \/categories` and `PATCH \/categories\/{category}` takes a value per\nfield `id`, in the same types as product custom fields.\n\nRequires the `read_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\"id\": 21, \"label\": \"Banner caption\", \"type\": \"text\", \"required\": false, \"help_text\": null, \"options\": null, \"min\": null, \"max\": 120, \"integer\": null}\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List a category reference field's items",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/categories\/custom-fields\/:field\/items",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/categories\/custom-fields\/:field\/items",
                            "variable": [
                                {
                                    "id": "field",
                                    "key": "field",
                                    "value": 22,
                                    "description": "The custom field id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_categories` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"data\": [{\"id\": \"64f1c2a9b3e5d7a1c2e3f4a5\", \"name\": \"Classic Tee\"}]}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_categories scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Not a reference field of this store"
                        },
                        {
                            "header": [],
                            "code": 424,
                            "body": "{\"message\": \"The items could not be read from Webflow; try again later.\"}",
                            "name": "Webflow could not be read"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Discounts",
            "description": "",
            "item": [
                {
                    "name": "List discounts",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts",
                            "query": [
                                {
                                    "key": "code",
                                    "value": "SUMMER10",
                                    "description": "A coupon code to look up.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts?code=SUMMER10&limit=50&cursor="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Pass `code` to find the discount a coupon code belongs to; codes match\ncase-insensitively. Automatic discounts have no code, so filtering by `code`\nleaves them out.\n\nPercentage values are in percent (`12.5` is 12.5%). Fixed values and every\norder-value limit are integers in the store currency's smallest unit, the\nsame as order totals.\n\nRequires the `read_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 41,\n      \"name\": \"Summer sale\",\n      \"notes\": null,\n      \"activation\": \"code\",\n      \"code\": \"SUMMER10\",\n      \"coupon_name\": null,\n      \"type\": \"percentage\",\n      \"value\": 12.5,\n      \"formatted_value\": \"12.5%\",\n      \"application_mode\": \"once_per_order\",\n      \"target\": \"products\",\n      \"category_ids\": [],\n      \"product_ids\": [12, 15],\n      \"starts_at\": \"2026-06-01T00:00:00.000000Z\",\n      \"ends_at\": null,\n      \"min_order_value\": 5000,\n      \"formatted_min_order_value\": \"$50.00\",\n      \"max_discount_value\": 2000,\n      \"formatted_max_discount_value\": \"$20.00\",\n      \"min_quantity\": 2,\n      \"max_uses\": 100,\n      \"max_uses_per_customer\": 1,\n      \"times_used\": 12,\n      \"enabled\": true,\n      \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n      \"updated_at\": \"2026-05-20T09:00:00.000000Z\"\n    }\n  ],\n  \"meta\": {\"per_page\": 50, \"has_more\": false, \"next_cursor\": null}\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Get a discount",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `read_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 41,\n  \"name\": \"Summer sale\",\n  \"notes\": null,\n  \"activation\": \"code\",\n  \"code\": \"SUMMER10\",\n  \"coupon_name\": null,\n  \"type\": \"percentage\",\n  \"value\": 10,\n  \"formatted_value\": \"10%\",\n  \"application_mode\": \"once_per_order\",\n  \"target\": \"all\",\n  \"category_ids\": [],\n  \"product_ids\": [],\n  \"starts_at\": \"2026-06-01T00:00:00.000000Z\",\n  \"ends_at\": \"2026-08-31T23:59:00.000000Z\",\n  \"min_order_value\": 5000,\n  \"formatted_min_order_value\": \"$50.00\",\n  \"max_discount_value\": 2000,\n  \"formatted_max_discount_value\": \"$20.00\",\n  \"min_quantity\": 2,\n  \"max_uses\": 100,\n  \"max_uses_per_customer\": 1,\n  \"times_used\": 12,\n  \"enabled\": false,\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-05-20T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Discount belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Create a discount",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Summer sale\",\"notes\":\"Newsletter campaign\",\"activation\":\"code\",\"code\":\"SUMMER10\",\"type\":\"percentage\",\"value\":10,\"application_mode\":\"once_per_order\",\"target\":\"all\",\"starts_at\":\"2026-06-01T00:00:00Z\",\"ends_at\":\"2026-08-31T23:59:00Z\",\"min_order_value\":5000,\"max_discount_value\":2000,\"min_quantity\":2,\"max_uses\":100,\"max_uses_per_customer\":1,\"enabled\":true}"
                        },
                        "description": "Creates a coupon-code discount, or an automatic one where the store has\nautomatic discounts enabled. `value` is in percent for `percentage` and in\nthe currency's smallest unit for `fixed`; `free_shipping` takes no value and\nalways targets shipping. `product_ids` are the ids from `GET \/products` and\nmust be published; `category_ids` are the store's category ids.\n\nFires the `new_discount` webhook.\n\nRequires the `write_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"id\": 41,\n  \"name\": \"Summer sale\",\n  \"notes\": null,\n  \"activation\": \"code\",\n  \"code\": \"SUMMER10\",\n  \"coupon_name\": null,\n  \"type\": \"percentage\",\n  \"value\": 12.5,\n  \"formatted_value\": \"12.5%\",\n  \"application_mode\": \"once_per_order\",\n  \"target\": \"products\",\n  \"category_ids\": [],\n  \"product_ids\": [12, 15],\n  \"starts_at\": \"2026-06-01T00:00:00.000000Z\",\n  \"ends_at\": null,\n  \"min_order_value\": 5000,\n  \"formatted_min_order_value\": \"$50.00\",\n  \"max_discount_value\": 2000,\n  \"formatted_max_discount_value\": \"$20.00\",\n  \"min_quantity\": 2,\n  \"max_uses\": 100,\n  \"max_uses_per_customer\": 1,\n  \"times_used\": 0,\n  \"enabled\": true,\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-05-20T09:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The coupon code already exists.\", \"errors\": {\"code\": [\"The coupon code already exists.\"]}}",
                            "name": "Code already used by another discount"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Update a discount",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Summer sale\",\"notes\":\"Extended to August\",\"activation\":\"code\",\"code\":\"SUMMER15\",\"type\":\"percentage\",\"value\":15,\"application_mode\":\"once_per_order\",\"target\":\"all\",\"starts_at\":\"2026-06-01T00:00:00Z\",\"ends_at\":\"2026-09-30T23:59:00Z\",\"min_order_value\":5000,\"max_discount_value\":2000,\"min_quantity\":2,\"max_uses\":200,\"max_uses_per_customer\":1,\"enabled\":false}"
                        },
                        "description": "Only the fields you send change; the result must still be a valid discount,\nso changing `type` may require `value`, and `target: products` requires\n`product_ids`. Send `enabled: false` to turn the discount off and `true` to\nturn it back on. A discount whose `type` is `free` or whose `target` is\n`variants` keeps that value when updated, and sending it back unchanged is\naccepted; neither value can be chosen for another discount.\n\nFires the `discount_updated` webhook when something changed.\n\nRequires the `write_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"id\": 41,\n  \"name\": \"Summer sale\",\n  \"notes\": \"Extended to August\",\n  \"activation\": \"code\",\n  \"code\": \"SUMMER15\",\n  \"coupon_name\": null,\n  \"type\": \"percentage\",\n  \"value\": 15,\n  \"formatted_value\": \"15%\",\n  \"application_mode\": \"once_per_order\",\n  \"target\": \"all\",\n  \"category_ids\": [],\n  \"product_ids\": [],\n  \"starts_at\": \"2026-06-01T00:00:00.000000Z\",\n  \"ends_at\": \"2026-09-30T23:59:00.000000Z\",\n  \"min_order_value\": 5000,\n  \"formatted_min_order_value\": \"$50.00\",\n  \"max_discount_value\": 2000,\n  \"formatted_max_discount_value\": \"$20.00\",\n  \"min_quantity\": 2,\n  \"max_uses\": 200,\n  \"max_uses_per_customer\": 1,\n  \"times_used\": 12,\n  \"enabled\": true,\n  \"created_at\": \"2026-05-20T09:00:00.000000Z\",\n  \"updated_at\": \"2026-07-01T10:30:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Discount belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The coupon code already exists.\", \"errors\": {\"code\": [\"The coupon code already exists.\"]}}",
                            "name": "Code already used by another discount"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "List a discount's codes",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount\/codes",
                            "query": [
                                {
                                    "key": "kind",
                                    "value": "generated",
                                    "description": "`primary` or `generated`.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "Results per page, 1\u2013250.",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "",
                                    "description": "Opaque cursor from `meta.next_cursor` of the previous page.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount\/codes?kind=generated&limit=50&cursor=",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Every code that applies the discount: its own code (`kind: primary`) and the\ncodes issued with `POST \/discounts\/{discount}\/codes` (`kind: generated`). An\nautomatic discount has no code of its own, so its list is empty.\n`times_used` counts the orders placed with that code, paid or awaiting an\noffline payment, so it attributes redemptions to the recipient the code was\nsent to.\n\nRequires the `read_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 905,\n      \"discount_id\": 41,\n      \"code\": \"WELCOME-7KQ2M9XHTA\",\n      \"kind\": \"generated\",\n      \"max_uses\": 1,\n      \"times_used\": 1,\n      \"expires_at\": \"2026-11-05T09:00:00.000000Z\",\n      \"email\": \"jane@example.com\",\n      \"created_at\": \"2026-10-06T09:00:00.000000Z\"\n    }\n  ],\n  \"meta\": {\"per_page\": 50, \"has_more\": false, \"next_cursor\": null}\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the read_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Discount belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"The cursor is invalid.\", \"errors\": {\"cursor\": [\"The cursor is invalid.\"]}}",
                            "name": "Malformed cursor"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Delete a discount",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Deletes the discount with every code that applies it, including issued ones.\nCarts holding any of those codes are repriced; orders already placed keep the\ndiscount they were given. There is no undo.\n\nRequires the `write_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "",
                            "name": "Deleted"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Discount belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Issue discount codes",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount\/codes",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount\/codes",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"count\":1,\"prefix\":\"WELCOME-\",\"max_uses\":1,\"expires_in_days\":30,\"email\":\"jane@example.com\"}"
                        },
                        "description": "Issues `count` unique random codes that each apply the discount, for an email\nor SMS tool that hands one code to each recipient. Every code carries the\ndiscount's own rules (dates, minimum order, total `max_uses` of the discount)\nplus the limits sent here:\n\n- `max_uses` caps how often that one code can be redeemed; `1` makes it single-use.\n- `expires_in_days` counts from the moment the code is issued, so every\n  recipient gets the same window whenever the message goes out. The discount's\n  own `ends_at` still applies when it is earlier.\n- `email` restricts the code to a checkout with that email address. A\n  restricted code is issued one at a time (`count: 1`).\n\nCodes are uppercase: the prefix is uppercased and followed by 10 characters\nfrom `A\u2013Z` and `2\u20139` without look-alikes (`0`, `1`, `I`, `O`). A discount holds\nat most 100,000 issued codes; delete unused ones to issue more. Only a discount\nactivated by code can issue codes.\n\nRequires the `write_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"data\": [\n    {\n      \"id\": 905,\n      \"discount_id\": 41,\n      \"code\": \"WELCOME-7KQ2M9XHTA\",\n      \"kind\": \"generated\",\n      \"max_uses\": 1,\n      \"times_used\": 0,\n      \"expires_at\": \"2026-11-05T09:00:00.000000Z\",\n      \"email\": \"jane@example.com\",\n      \"created_at\": \"2026-10-06T09:00:00.000000Z\"\n    }\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\"message\":\"The request body is not valid JSON.\"}",
                            "name": "Body that is not valid JSON"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Discount belongs to another store or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Codes can only be issued for a discount activated by code.\"}",
                            "name": "Automatic discount"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\": \"A discount holds at most 100,000 issued codes; this one already has 99,990.\", \"errors\": {\"count\": [\"A discount holds at most 100,000 issued codes; this one already has 99,990.\"]}}",
                            "name": "Too many codes on the discount"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                },
                {
                    "name": "Delete an issued discount code",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "public\/v1\/discounts\/:discount\/codes\/:code",
                            "query": [],
                            "raw": "{{baseUrl}}\/public\/v1\/discounts\/:discount\/codes\/:code",
                            "variable": [
                                {
                                    "id": "discount",
                                    "key": "discount",
                                    "value": 41,
                                    "description": "The discount id."
                                },
                                {
                                    "id": "code",
                                    "key": "code",
                                    "value": 905,
                                    "description": "The code id from the code list."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "The code stops applying at once; carts holding it are repriced. A discount's\nown code (`kind: primary`) is changed with `PATCH \/discounts\/{discount}` and\ncannot be deleted here.\n\nRequires the `write_discounts` token scope."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "",
                            "name": "Deleted"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": "Missing or invalid token"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\"message\":\"This token does not have the write_discounts scope required for this endpoint.\"}",
                            "name": "Token without the required scope"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"Resource not found.\"}",
                            "name": "Code belongs to another discount or does not exist"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"A discount's own code cannot be deleted; change it with PATCH \/discounts\/{discount}.\"}",
                            "name": "The discount's own code"
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Too Many Attempts.\"}",
                            "name": "Rate limit exceeded"
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}