Records the email address a guest enters at the first step of checkout, with the cart they are buying and
whether they agreed to hear from the store. The store uses it to follow up when the checkout is left
unfinished: a checkout.abandoned event carrying the address is emitted after the store’s waiting period,
and, when marketing_consent is true, the store can send the shopper one reminder email containing a link
back to their cart.
Send the cart as cart_id (the cart’s X-Session-Id) or as lines. Calling again for the same address and
cart updates the one record, so the storefront can call it each time the details change. The response is the
same for a new and a repeated record.
marketing_consent is required and must be exactly what the shopper chose: an unticked box is false.
A box that is ticked in advance is not consent. A later call with false withdraws it.
recovery_url is the storefront page the reminder link opens, and must be on one of the store’s own storefront
addresses (https, no port; a test key may also use http and localhost). Any other address is refused with
400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value
to POST /v1/cart/checkout-recover to restore the cart.
Auth / key type: publishable key (tybrite_pk_*) or secret key (tybrite_sk_*). No customer credential
is needed. Test keys write test records, which never send email.
Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Galactic Core API Documentation","colors":{"primary":"#3b82f6","light":"#60a5fa","dark":"#3b82f6"},"logo":{"light":"https://mintcdn.com/tybritelabs/9cNSmgnBxs-QU_UC/branding/gc-long-blue.png?fit=max\u0026auto=format\u0026n=9cNSmgnBxs-QU_UC\u0026q=85\u0026s=88d64ea989973d874ed73437459487f7","dark":"https://mintcdn.com/tybritelabs/9cNSmgnBxs-QU_UC/branding/gc-long-white.png?fit=max\u0026auto=format\u0026n=9cNSmgnBxs-QU_UC\u0026q=85\u0026s=051cafe35073e2d41a7bfb963b3ad22b"},"favicon":"https://mintcdn.com/tybritelabs/9cNSmgnBxs-QU_UC/favicon.svg?fit=max\u0026auto=format\u0026n=9cNSmgnBxs-QU_UC\u0026q=85\u0026s=83f32264cd55e429e1a14f9d0ee78689","navbar":{"links":[{"href":"https://gc.tybritelabs.com/dashboard","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"/quickstart"}},"footer":{"socials":{"github":"https://github.com/tybrite","twitter":"https://twitter.com/tybrite","linkedin":"https://linkedin.com/company/tybrite"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"gauge","href":"https://gc.tybritelabs.com/dashboard"},{"anchor":"GitHub","icon":"github","href":"https://github.com/tybrite"},{"anchor":"Support","icon":"envelope","href":"mailto:support@tybrite.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tybritelabs","hasAudioNarration":false,"actualSubdomain":"tybritelabs","customDomains":["docs.tybritelabs.com"],"gitSource":{"type":"github","owner":"tybrite","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae29374ccd05bb29c32195f","collectionId":"4098f26a-cfe4-4b4a-9faa-6739b8243d6f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae29374ccd05bb29c32195f"},"entitlements":{},"buildId":"6ae294a0e37b7de26e467673","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Reference","count":234},{"language":"default","tag":"Getting Started","count":37},{"language":"default","tag":"TypeScript SDK","count":36},{"language":"default","tag":"Agent","count":36},{"language":"default","tag":"Customers","count":20},{"language":"default","tag":"Authentication","count":13},{"language":"default","tag":"Cart \u0026 Wishlist","count":13},{"language":"default","tag":"Sandbox","count":13},{"language":"default","tag":"Marketplace","count":12},{"language":"default","tag":"B2B","count":12}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout","slug":"/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout","pageMetadata":{"title":"Record a guest's contact details at checkout","description":"Records the email address a guest enters at the first step of checkout, with the cart they are buying and\nwhether they agreed to hear from the store. The store uses it to follow up when the checkout is left\nunfinished: a `checkout.abandoned` event carrying the address is emitted after the store's waiting period,\nand, when `marketing_consent` is `true`, the store can send the shopper one reminder email containing a link\nback to their cart.\n\nSend the cart as `cart_id` (the cart's `X-Session-Id`) or as `lines`. Calling again for the same address and\ncart updates the one record, so the storefront can call it each time the details change. The response is the\nsame for a new and a repeated record.\n\n`marketing_consent` is required and must be exactly what the shopper chose: an unticked box is `false`.\nA box that is ticked in advance is not consent. A later call with `false` withdraws it.\n\n`recovery_url` is the storefront page the reminder link opens, and must be on one of the store's own storefront\naddresses (`https`, no port; a test key may also use `http` and `localhost`). Any other address is refused with\n`400` (`recovery_url_not_allowed`). The reminder appends a `cart_recovery` query parameter to it; pass that value\nto `POST /v1/cart/checkout-recover` to restore the cart.\n\n**Auth / key type:** publishable key (`tybrite_pk_*`) or secret key (`tybrite_sk_*`). No customer credential\nis needed. Test keys write test records, which never send email.\n\n**Rate limits:** 60 requests per hour per IP address and 20 per hour per email address, each within one store.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout-contact","href":"/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and\\nwhether they agreed to hear from the store. The store uses it to follow up when the checkout is left\\nunfinished: a \", _jsx(_components.code, {\n children: \"checkout.abandoned\"\n }), \" event carrying the address is emitted after the store’s waiting period,\\nand, when \", _jsx(_components.code, {\n children: \"marketing_consent\"\n }), \" is \", _jsx(_components.code, {\n children: \"true\"\n }), \", the store can send the shopper one reminder email containing a link\\nback to their cart.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send the cart as \", _jsx(_components.code, {\n children: \"cart_id\"\n }), \" (the cart’s \", _jsx(_components.code, {\n children: \"X-Session-Id\"\n }), \") or as \", _jsx(_components.code, {\n children: \"lines\"\n }), \". Calling again for the same address and\\ncart updates the one record, so the storefront can call it each time the details change. The response is the\\nsame for a new and a repeated record.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"marketing_consent\"\n }), \" is required and must be exactly what the shopper chose: an unticked box is \", _jsx(_components.code, {\n children: \"false\"\n }), \".\\nA box that is ticked in advance is not consent. A later call with \", _jsx(_components.code, {\n children: \"false\"\n }), \" withdraws it.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"recovery_url\"\n }), \" is the storefront page the reminder link opens, and must be on one of the store’s own storefront\\naddresses (\", _jsx(_components.code, {\n children: \"https\"\n }), \", no port; a test key may also use \", _jsx(_components.code, {\n children: \"http\"\n }), \" and \", _jsx(_components.code, {\n children: \"localhost\"\n }), \"). Any other address is refused with\\n\", _jsx(_components.code, {\n children: \"400\"\n }), \" (\", _jsx(_components.code, {\n children: \"recovery_url_not_allowed\"\n }), \"). The reminder appends a \", _jsx(_components.code, {\n children: \"cart_recovery\"\n }), \" query parameter to it; pass that value\\nto \", _jsx(_components.code, {\n children: \"POST /v1/cart/checkout-recover\"\n }), \" to restore the cart.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Auth / key type:\"\n }), \" publishable key (\", _jsx(_components.code, {\n children: \"tybrite_pk_*\"\n }), \") or secret key (\", _jsx(_components.code, {\n children: \"tybrite_sk_*\"\n }), \"). No customer credential\\nis needed. Test keys write test records, which never send email.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Rate limits:\"\n }), \" 60 requests per hour per IP address and 20 per hour per email address, each within one store.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Record a guest's contact details at checkout","description":"Records the email address a guest enters at the first step of checkout, with the cart they are buying and\nwhether they agreed to hear from the store. The store uses it to follow up when the checkout is left\nunfinished: a `checkout.abandoned` event carrying the address is emitted after the store's waiting period,\nand, when `marketing_consent` is `true`, the store can send the shopper one reminder email containing a link\nback to their cart.\n\nSend the cart as `cart_id` (the cart's `X-Session-Id`) or as `lines`. Calling again for the same address and\ncart updates the one record, so the storefront can call it each time the details change. The response is the\nsame for a new and a repeated record.\n\n`marketing_consent` is required and must be exactly what the shopper chose: an unticked box is `false`.\nA box that is ticked in advance is not consent. A later call with `false` withdraws it.\n\n`recovery_url` is the storefront page the reminder link opens, and must be on one of the store's own storefront\naddresses (`https`, no port; a test key may also use `http` and `localhost`). Any other address is refused with\n`400` (`recovery_url_not_allowed`). The reminder appends a `cart_recovery` query parameter to it; pass that value\nto `POST /v1/cart/checkout-recover` to restore the cart.\n\n**Auth / key type:** publishable key (`tybrite_pk_*`) or secret key (`tybrite_sk_*`). No customer credential\nis needed. Test keys write test records, which never send email.\n\n**Rate limits:** 60 requests per hour per IP address and 20 per hour per email address, each within one store.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout-contact","href":"/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/tybritelabs/af1ac4e439492905/sync.js"],"openApiReferenceData":{"operation":{"operationId":"captureCheckoutContact","tags":["Cart \u0026 Wishlist"],"summary":"Record a guest's contact details at checkout","description":"Records the email address a guest enters at the first step of checkout, with the cart they are buying and\nwhether they agreed to hear from the store. The store uses it to follow up when the checkout is left\nunfinished: a `checkout.abandoned` event carrying the address is emitted after the store's waiting period,\nand, when `marketing_consent` is `true`, the store can send the shopper one reminder email containing a link\nback to their cart.\n\nSend the cart as `cart_id` (the cart's `X-Session-Id`) or as `lines`. Calling again for the same address and\ncart updates the one record, so the storefront can call it each time the details change. The response is the\nsame for a new and a repeated record.\n\n`marketing_consent` is required and must be exactly what the shopper chose: an unticked box is `false`.\nA box that is ticked in advance is not consent. A later call with `false` withdraws it.\n\n`recovery_url` is the storefront page the reminder link opens, and must be on one of the store's own storefront\naddresses (`https`, no port; a test key may also use `http` and `localhost`). Any other address is refused with\n`400` (`recovery_url_not_allowed`). The reminder appends a `cart_recovery` query parameter to it; pass that value\nto `POST /v1/cart/checkout-recover` to restore the cart.\n\n**Auth / key type:** publishable key (`tybrite_pk_*`) or secret key (`tybrite_sk_*`). No customer credential\nis needed. Test keys write test records, which never send email.\n\n**Rate limits:** 60 requests per hour per IP address and 20 per hour per email address, each within one store.\n","security":["17da02b7-5b29-4922-af6e-97c604bad56b"],"requestBody":"fff77eab-19d5-4ca4-9f20-7700914cab11","responses":{"200":"2bbe3259-30ea-42a7-b416-4ba0b2729892","400":"a06e44f9-cb93-4e30-9a23-8d1c919604dd","401":"43bf1051-b6cc-44d0-b9b8-0a4526861974","403":"a724b2c3-d582-4333-83c0-8e2ddc583108","429":"4e13753e-6ccd-4ce8-873b-1ebfca3770f9","500":"1528bdb6-5e04-4ed1-af64-09edf2a4ce41"},"method":"post","type":"path","servers":["3fc3189e-b8c3-4e23-a374-4038943c6525"],"path":"/v1/cart/checkout-contact","baseUrlOptions":["https://api.tybritelabs.com"],"title":"Record a guest's contact details at checkout","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","marketing_consent","recovery_url"],"properties":{"email":{"type":"string","format":"email","description":"The guest's email address. Stored lower-cased.","example":"john.doe@example.com","isRequired":true,"uniqueKey":"email","typeLabel":"string\u003cemail>"},"marketing_consent":{"type":"boolean","description":"Whether the shopper ticked the box agreeing to hear from the store. Without `true` no reminder is sent.","example":true,"isRequired":true,"uniqueKey":"marketing_consent","typeLabel":"boolean"},"recovery_url":{"type":"string","format":"uri","maxLength":2048,"description":"The storefront page the reminder link opens. Must be on one of the store's own storefront addresses.","example":"https://shop.example.com/checkout","isRequired":true,"uniqueKey":"recovery_url","typeLabel":"string\u003curi>"},"name":{"type":"string","maxLength":120,"description":"The guest's name, used to greet them in the reminder.","example":"John Doe","uniqueKey":"name","typeLabel":"string"},"cart_id":{"type":"string","maxLength":128,"description":"The cart's session id (the `X-Session-Id` the storefront uses for cart calls). Its current items are recorded. Send this or `lines`.","example":"sess_3f9a1c","uniqueKey":"cart_id","typeLabel":"string"},"lines":{"type":"array","maxItems":50,"description":"The items being bought, when the storefront holds the cart itself. Send this or `cart_id`. Variants the store does not sell online are dropped.","items":{"type":"object","required":["variant_id","quantity"],"properties":{"variant_id":{"type":"string","format":"uuid","example":"9a47e047-b1b6-4c35-9617-820629e22e04","isRequired":true,"uniqueKey":"lines.items.[INDEX].variant_id","typeLabel":"string\u003cuuid>"},"quantity":{"type":"integer","minimum":1,"maximum":999,"example":2,"isRequired":true,"uniqueKey":"lines.items.[INDEX].quantity","typeLabel":"integer"}},"uniqueKey":"lines.items.[INDEX]","typeLabel":"object"},"uniqueKey":"lines","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"email":"john.doe@example.com","marketing_consent":true,"recovery_url":"https://shop.example.com/checkout","name":"John Doe","cart_id":"sess_3f9a1c","lines":[{"variant_id":"9a47e047-b1b6-4c35-9617-820629e22e04","quantity":2}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"2bbe3259-30ea-42a7-b416-4ba0b2729892":{"description":"The details are recorded, or were already recorded.","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"}},"content":{"application/json":{"schema":{"type":"object","required":["capture_id"],"properties":{"capture_id":{"type":"string","format":"uuid","description":"Identifies the record. The same for every call for this address and cart.","isRequired":true,"uniqueKey":"capture_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"","typeLabel":"object"},"example":{"capture_id":"3b0c2c34-6a3d-4a51-9d0e-7e7b8d5f6a10"},"examples":{"Example":{"title":"Example","value":{"capture_id":"3b0c2c34-6a3d-4a51-9d0e-7e7b8d5f6a10"}}},"exampleType":"examples"}},"exampleType":"examples"},"a06e44f9-cb93-4e30-9a23-8d1c919604dd":{"description":"The request is not valid. `code` is `invalid_request`, `cart_empty` (none of the items are sold by the\nstore), or `recovery_url_not_allowed`.\n","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Missing required field","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","uniqueKey":"error.details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","additionalProperties":true,"uniqueKey":"error.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"error.details","typeLabel":"string | object"},"hint":{"type":"string","description":"Additional guidance on how to resolve the error.","uniqueKey":"error.hint","typeLabel":"string"},"available_stock":{"type":"integer","description":"Current stock level (present on insufficient_stock errors).","uniqueKey":"error.available_stock","typeLabel":"integer"},"current_cart_quantity":{"type":"integer","description":"Quantity already in cart (present on insufficient_stock errors).","uniqueKey":"error.current_cart_quantity","typeLabel":"integer"},"limit":{"type":"integer","description":"Rate limit ceiling (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"Requests remaining in the current window (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.remaining","typeLabel":"integer"},"reset":{"type":"integer","description":"Unix timestamp when the rate limit / quota window resets (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.reset","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"recovery_url_not_allowed","message":"recovery_url must be a link to this store's storefront."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"recovery_url_not_allowed","message":"recovery_url must be a link to this store's storefront."}}}},"exampleType":"examples"}},"exampleType":"examples"},"43bf1051-b6cc-44d0-b9b8-0a4526861974":{"description":"Authentication failed. `unauthorized` means the API key is missing or invalid, or the `x-auth-token` header is absent. `invalid_token` means the `x-auth-token` is not a valid sign-in token for this store and environment: expired, revoked, issued by another store, or malformed. A storefront refreshes the session once with `POST /v1/auth/refresh` and treats the shopper as signed out if that fails.","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Missing required field","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","uniqueKey":"error.details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","additionalProperties":true,"uniqueKey":"error.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"error.details","typeLabel":"string | object"},"hint":{"type":"string","description":"Additional guidance on how to resolve the error.","uniqueKey":"error.hint","typeLabel":"string"},"available_stock":{"type":"integer","description":"Current stock level (present on insufficient_stock errors).","uniqueKey":"error.available_stock","typeLabel":"integer"},"current_cart_quantity":{"type":"integer","description":"Quantity already in cart (present on insufficient_stock errors).","uniqueKey":"error.current_cart_quantity","typeLabel":"integer"},"limit":{"type":"integer","description":"Rate limit ceiling (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"Requests remaining in the current window (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.remaining","typeLabel":"integer"},"reset":{"type":"integer","description":"Unix timestamp when the rate limit / quota window resets (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.reset","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_token":{"title":"invalid_token","value":{"error":{"code":"invalid_token","message":"Invalid or expired customer token","hint":"Refresh the token via POST /v1/auth/refresh once; if that fails, treat the shopper as signed out and re-authenticate."}}},"unauthorized":{"title":"unauthorized","value":{"error":{"code":"unauthorized","message":"Missing or invalid Authorization header"}}}},"exampleType":"examples"}},"exampleType":"examples"},"a724b2c3-d582-4333-83c0-8e2ddc583108":{"description":"Insufficient permissions - operation requires secret key","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Missing required field","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","uniqueKey":"error.details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","additionalProperties":true,"uniqueKey":"error.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"error.details","typeLabel":"string | object"},"hint":{"type":"string","description":"Additional guidance on how to resolve the error.","uniqueKey":"error.hint","typeLabel":"string"},"available_stock":{"type":"integer","description":"Current stock level (present on insufficient_stock errors).","uniqueKey":"error.available_stock","typeLabel":"integer"},"current_cart_quantity":{"type":"integer","description":"Quantity already in cart (present on insufficient_stock errors).","uniqueKey":"error.current_cart_quantity","typeLabel":"integer"},"limit":{"type":"integer","description":"Rate limit ceiling (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"Requests remaining in the current window (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.remaining","typeLabel":"integer"},"reset":{"type":"integer","description":"Unix timestamp when the rate limit / quota window resets (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.reset","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"forbidden","message":"This operation requires a secret key. Publishable keys cover catalogue reads and the actions a shopper takes for themselves."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"forbidden","message":"This operation requires a secret key. Publishable keys cover catalogue reads and the actions a shopper takes for themselves."}}}},"exampleType":"examples"}},"exampleType":"examples"},"4e13753e-6ccd-4ce8-873b-1ebfca3770f9":{"description":"Too many requests. Two distinct `429` codes: `rate_limited` (an abuse throttle — too many requests too fast; carries an `X-RateLimit-Scope: abuse` header and is NOT counted against your monthly quota) and `quota_exceeded` (your plan's monthly request allowance is reached).","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"},"Retry-After":{"description":"Seconds until the limit that refused the request resets. Sent with `rate_limited`.","schema":{"type":"integer"},"example":540}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Missing required field","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","uniqueKey":"error.details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","additionalProperties":true,"uniqueKey":"error.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"error.details","typeLabel":"string | object"},"hint":{"type":"string","description":"Additional guidance on how to resolve the error.","uniqueKey":"error.hint","typeLabel":"string"},"available_stock":{"type":"integer","description":"Current stock level (present on insufficient_stock errors).","uniqueKey":"error.available_stock","typeLabel":"integer"},"current_cart_quantity":{"type":"integer","description":"Quantity already in cart (present on insufficient_stock errors).","uniqueKey":"error.current_cart_quantity","typeLabel":"integer"},"limit":{"type":"integer","description":"Rate limit ceiling (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"Requests remaining in the current window (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.remaining","typeLabel":"integer"},"reset":{"type":"integer","description":"Unix timestamp when the rate limit / quota window resets (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.reset","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Too many requests for this API key. Please slow down and try again shortly.","remaining":0,"reset":1706198400}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Too many requests for this API key. Please slow down and try again shortly.","remaining":0,"reset":1706198400}}}},"exampleType":"examples"}},"exampleType":"examples"},"1528bdb6-5e04-4ed1-af64-09edf2a4ce41":{"description":"Internal server error","headers":{"Tybrite-Environment":{"description":"Confirms which environment your API key resolved to. Use this to verify that test keys\nare hitting sandbox data and live keys are hitting production data.\n\n- `production` — requests are scoped to live data; real orders, customers, and payments\n- `sandbox` — requests are scoped to isolated test data; no real money is moved\n\nPresent on every authenticated response, including error responses.\n","schema":{"type":"string","enum":["production","sandbox"]},"example":"sandbox"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","example":"Missing required field","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{"type":"string","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","uniqueKey":"error.details.oneOf.0","typeLabel":"string"},{"type":"object","description":"Further detail about the error: a sentence, or for some errors an object (for example the `missing` list of `billing_location_required` or the `item_index` and `field_name` of `line_field_required`).","example":"The 'email' field is required","additionalProperties":true,"uniqueKey":"error.details.oneOf.1","typeLabel":"object"}],"uniqueKey":"error.details","typeLabel":"string | object"},"hint":{"type":"string","description":"Additional guidance on how to resolve the error.","uniqueKey":"error.hint","typeLabel":"string"},"available_stock":{"type":"integer","description":"Current stock level (present on insufficient_stock errors).","uniqueKey":"error.available_stock","typeLabel":"integer"},"current_cart_quantity":{"type":"integer","description":"Quantity already in cart (present on insufficient_stock errors).","uniqueKey":"error.current_cart_quantity","typeLabel":"integer"},"limit":{"type":"integer","description":"Rate limit ceiling (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.limit","typeLabel":"integer"},"remaining":{"type":"integer","description":"Requests remaining in the current window (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.remaining","typeLabel":"integer"},"reset":{"type":"integer","description":"Unix timestamp when the rate limit / quota window resets (present on rate_limited / quota_exceeded errors).","uniqueKey":"error.reset","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"server_error","message":"An unexpected error occurred"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"server_error","message":"An unexpected error occurred"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"17da02b7-5b29-4922-af6e-97c604bad56b":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"**API Key Authentication**\n \nUse your API key in the Authorization header:\n```\nAuthorization: Bearer tybrite_sk_live_YOUR_KEY\n```\n \n**Key Types:**\n \n**Secret Keys (Server-Side Only):**\n- Format: `tybrite_sk_live_*` (production) or `tybrite_sk_test_*` (sandbox)\n- Full read/write access to all endpoints\n- ⚠️ NEVER expose in client-side code or public repositories\n- Required for: every write a shopper does not make for themselves, authentication, payment verification, AI recommendations\n \n**Publishable Keys (Client-Safe):**\n- Format: `tybrite_pk_live_*` (production) or `tybrite_pk_test_*` (sandbox)\n- Catalogue reads, plus the actions a shopper takes for themselves\n- ✅ Safe for client-side JavaScript, mobile apps, and public code\n- Allowed for: browsing products, search, CMS content, pricing queries, cart and wishlist,\n reviews, storefront events, and the Agent API's quotes, cart drafts and checkout intents\n \n**Endpoint-Specific Requirements:**\n- **Authentication endpoints** (`/v1/auth/*`): Secret key required\n- **Payment verification** (`POST /v1/payments/verify`): Secret key required\n- **AI Recommendations** (`POST /v1/recommendations`): Secret key required\n- **Semantic Search** (`POST /v1/search`): Both key types allowed (read-only operation)\n- **Shopper actions** (cart, wishlist, reviews, storefront events, Agent API quotes, cart drafts and checkout intents): Both key types allowed\n- **All other write operations**: Secret key required\n- **All read operations**: Both key types allowed\n \nUsing a publishable key for restricted operations returns 403 Forbidden.\n","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"3fc3189e-b8c3-4e23-a374-4038943c6525":{"url":"https://api.tybritelabs.com","description":"Production API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"**API Key Authentication**\n \nUse your API key in the Authorization header:\n```\nAuthorization: Bearer tybrite_sk_live_YOUR_KEY\n```\n \n**Key Types:**\n \n**Secret Keys (Server-Side Only):**\n- Format: `tybrite_sk_live_*` (production) or `tybrite_sk_test_*` (sandbox)\n- Full read/write access to all endpoints\n- ⚠️ NEVER expose in client-side code or public repositories\n- Required for: every write a shopper does not make for themselves, authentication, payment verification, AI recommendations\n \n**Publishable Keys (Client-Safe):**\n- Format: `tybrite_pk_live_*` (production) or `tybrite_pk_test_*` (sandbox)\n- Catalogue reads, plus the actions a shopper takes for themselves\n- ✅ Safe for client-side JavaScript, mobile apps, and public code\n- Allowed for: browsing products, search, CMS content, pricing queries, cart and wishlist,\n reviews, storefront events, and the Agent API's quotes, cart drafts and checkout intents\n \n**Endpoint-Specific Requirements:**\n- **Authentication endpoints** (`/v1/auth/*`): Secret key required\n- **Payment verification** (`POST /v1/payments/verify`): Secret key required\n- **AI Recommendations** (`POST /v1/recommendations`): Secret key required\n- **Semantic Search** (`POST /v1/search`): Both key types allowed (read-only operation)\n- **Shopper actions** (cart, wishlist, reviews, storefront events, Agent API quotes, cart drafts and checkout intents): Both key types allowed\n- **All other write operations**: Secret key required\n- **All read operations**: Both key types allowed\n \nUsing a publishable key for restricted operations returns 403 Forbidden.\n","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"**API Key Authentication**\n \nUse your API key in the Authorization header:\n```\nAuthorization: Bearer tybrite_sk_live_YOUR_KEY\n```\n \n**Key Types:**\n \n**Secret Keys (Server-Side Only):**\n- Format: `tybrite_sk_live_*` (production) or `tybrite_sk_test_*` (sandbox)\n- Full read/write access to all endpoints\n- ⚠️ NEVER expose in client-side code or public repositories\n- Required for: every write a shopper does not make for themselves, authentication, payment verification, AI recommendations\n \n**Publishable Keys (Client-Safe):**\n- Format: `tybrite_pk_live_*` (production) or `tybrite_pk_test_*` (sandbox)\n- Catalogue reads, plus the actions a shopper takes for themselves\n- ✅ Safe for client-side JavaScript, mobile apps, and public code\n- Allowed for: browsing products, search, CMS content, pricing queries, cart and wishlist,\n reviews, storefront events, and the Agent API's quotes, cart drafts and checkout intents\n \n**Endpoint-Specific Requirements:**\n- **Authentication endpoints** (`/v1/auth/*`): Secret key required\n- **Payment verification** (`POST /v1/payments/verify`): Secret key required\n- **AI Recommendations** (`POST /v1/recommendations`): Secret key required\n- **Semantic Search** (`POST /v1/search`): Both key types allowed (read-only operation)\n- **Shopper actions** (cart, wishlist, reviews, storefront events, Agent API quotes, cart drafts and checkout intents): Both key types allowed\n- **All other write operations**: Secret key required\n- **All read operations**: Both key types allowed\n \nUsing a publishable key for restricted operations returns 403 Forbidden.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"tybritelabs","siteName":"Galactic Core API Documentation","title":"Record a guest's contact details at checkout - Galactic Core API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T00:30:04.990Z","originalFileLocation":"api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and whether they agreed to hear from the store. The store uses it to follow up when the checkout is left unfinished: a checkout.abandoned event carrying the address is emitted after the store\u0026#x27;s waiting period, and, when marketing_consent is true, the store can send the shopper one reminder email containing a link back to their cart. Send the cart as cart_id (the cart\u0026#x27;s X-Session-Id) or as lines. Calling again for the same address and cart updates the one record, so the storefront can call it each time the details change. The response is the same for a new and a repeated record. marketing_consent is required and must be exactly what the shopper chose: an unticked box is false. A box that is ticked in advance is not consent. A later call with false withdraws it. recovery_url is the storefront page the reminder link opens, and must be on one of the store\u0026#x27;s own storefront addresses (https, no port; a test key may also use http and localhost). Any other address is refused with 400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value to POST /v1/cart/checkout-recover to restore the cart. Auth / key type: publishable key (tybrite_pk_) or secret key (tybrite_sk_). No customer credential is needed. Test keys write test records, which never send email. Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Galactic Core API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Record a guest\u0026#x27;s contact details at checkout - Galactic Core API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and whether they agreed to hear from the store. The store uses it to follow up when the checkout is left unfinished: a checkout.abandoned event carrying the address is emitted after the store\u0026#x27;s waiting period, and, when marketing_consent is true, the store can send the shopper one reminder email containing a link back to their cart. Send the cart as cart_id (the cart\u0026#x27;s X-Session-Id) or as lines. Calling again for the same address and cart updates the one record, so the storefront can call it each time the details change. The response is the same for a new and a repeated record. marketing_consent is required and must be exactly what the shopper chose: an unticked box is false. A box that is ticked in advance is not consent. A later call with false withdraws it. recovery_url is the storefront page the reminder link opens, and must be on one of the store\u0026#x27;s own storefront addresses (https, no port; a test key may also use http and localhost). Any other address is refused with 400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value to POST /v1/cart/checkout-recover to restore the cart. Auth / key type: publishable key (tybrite_pk_) or secret key (tybrite_sk_). No customer credential is needed. Test keys write test records, which never send email. Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Galactic Core API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tybritelabs.com/api-reference/cart-\u0026amp;-wishlist/record-a-guests-contact-details-at-checkout\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tybritelabs.mintlify.app/_mintlify/api/og/v2?division=Cart+%26+Wishlist\u0026amp;title=Record+a+guest%27s+contact+details+at+checkout\u0026amp;description=Records+the+email+address+a+guest+enters+at+the+first+step+of+checkout%2C+with+the+cart+they+are+buying+and%0Awhether+they+agreed+to+hear+from+the+store.+The+store+\u0026amp;theme=b0c5a7325a83e0755b69afc3\u0026amp;signature=9273efd51bf90cfb35e97763029ab82e2a612105905bc3cb8a19cff5cf06dc2b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Record a guest\u0026#x27;s contact details at checkout - Galactic Core API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and whether they agreed to hear from the store. The store uses it to follow up when the checkout is left unfinished: a checkout.abandoned event carrying the address is emitted after the store\u0026#x27;s waiting period, and, when marketing_consent is true, the store can send the shopper one reminder email containing a link back to their cart. Send the cart as cart_id (the cart\u0026#x27;s X-Session-Id) or as lines. Calling again for the same address and cart updates the one record, so the storefront can call it each time the details change. The response is the same for a new and a repeated record. marketing_consent is required and must be exactly what the shopper chose: an unticked box is false. A box that is ticked in advance is not consent. A later call with false withdraws it. recovery_url is the storefront page the reminder link opens, and must be on one of the store\u0026#x27;s own storefront addresses (https, no port; a test key may also use http and localhost). Any other address is refused with 400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value to POST /v1/cart/checkout-recover to restore the cart. Auth / key type: publishable key (tybrite_pk_) or secret key (tybrite_sk_). No customer credential is needed. Test keys write test records, which never send email. Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tybritelabs.mintlify.app/_mintlify/api/og/v2?division=Cart+%26+Wishlist\u0026amp;title=Record+a+guest%27s+contact+details+at+checkout\u0026amp;description=Records+the+email+address+a+guest+enters+at+the+first+step+of+checkout%2C+with+the+cart+they+are+buying+and%0Awhether+they+agreed+to+hear+from+the+store.+The+store+\u0026amp;theme=b0c5a7325a83e0755b69afc3\u0026amp;signature=9273efd51bf90cfb35e97763029ab82e2a612105905bc3cb8a19cff5cf06dc2b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/tybritelabs/d0xYWWdjx3Q9ZfW_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Galactic Core API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3b82f6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tybritelabs.com/api-reference/cart-\u0026amp;-wishlist/record-a-guests-contact-details-at-checkout\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/cart-%26-wishlist/record-a-guests-contact-details-at-checkout.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tybritelabs.com/#organization\",\"name\":\"Galactic Core API Documentation\",\"url\":\"https://docs.tybritelabs.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tybritelabs/9cNSmgnBxs-QU_UC/branding/gc-long-blue.png?fit=max\u0026auto=format\u0026n=9cNSmgnBxs-QU_UC\u0026q=85\u0026s=88d64ea989973d874ed73437459487f7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tybritelabs.com#website\",\"name\":\"Galactic Core API Documentation\",\"url\":\"https://docs.tybritelabs.com\",\"publisher\":{\"@id\":\"https://docs.tybritelabs.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout#webpage\",\"url\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout\",\"name\":\"Record a guest's contact details at checkout\",\"description\":\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and whether they agreed to hear from the store. The store uses it to follow up when the checkout is left unfinished: a checkout.abandoned event carrying the address is emitted after the store's waiting period, and, when marketing_consent is true, the store can send the shopper one reminder email containing a link back to their cart. Send the cart as cart_id (the cart's X-Session-Id) or as lines. Calling again for the same address and cart updates the one record, so the storefront can call it each time the details change. The response is the same for a new and a repeated record. marketing_consent is required and must be exactly what the shopper chose: an unticked box is false. A box that is ticked in advance is not consent. A later call with false withdraws it. recovery_url is the storefront page the reminder link opens, and must be on one of the store's own storefront addresses (https, no port; a test key may also use http and localhost). Any other address is refused with 400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value to POST /v1/cart/checkout-recover to restore the cart. Auth / key type: publishable key (tybrite_pk_) or secret key (tybrite_sk_). No customer credential is needed. Test keys write test records, which never send email. Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.\",\"dateModified\":\"2026-10-29T00:30:04.990Z\",\"isPartOf\":{\"@id\":\"https://docs.tybritelabs.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Cart \u0026 Wishlist\",\"item\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/get-cart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Record a guest's contact details at checkout\",\"item\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout#apireference\",\"headline\":\"Record a guest's contact details at checkout\",\"name\":\"Record a guest's contact details at checkout\",\"description\":\"Records the email address a guest enters at the first step of checkout, with the cart they are buying and whether they agreed to hear from the store. The store uses it to follow up when the checkout is left unfinished: a checkout.abandoned event carrying the address is emitted after the store's waiting period, and, when marketing_consent is true, the store can send the shopper one reminder email containing a link back to their cart. Send the cart as cart_id (the cart's X-Session-Id) or as lines. Calling again for the same address and cart updates the one record, so the storefront can call it each time the details change. The response is the same for a new and a repeated record. marketing_consent is required and must be exactly what the shopper chose: an unticked box is false. A box that is ticked in advance is not consent. A later call with false withdraws it. recovery_url is the storefront page the reminder link opens, and must be on one of the store's own storefront addresses (https, no port; a test key may also use http and localhost). Any other address is refused with 400 (recovery_url_not_allowed). The reminder appends a cart_recovery query parameter to it; pass that value to POST /v1/cart/checkout-recover to restore the cart. Auth / key type: publishable key (tybrite_pk_) or secret key (tybrite_sk_). No customer credential is needed. Test keys write test records, which never send email. Rate limits: 60 requests per hour per IP address and 20 per hour per email address, each within one store.\",\"url\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tybritelabs.com/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout#webpage\"},\"dateModified\":\"2026-10-29T00:30:04.990Z\",\"publisher\":{\"@id\":\"https://docs.tybritelabs.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tybritelabs.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Galactic Core API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Galactic Core API Documentation","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"gauge","href":"https://gc.tybritelabs.com/dashboard"},{"anchor":"GitHub","icon":"github","href":"https://github.com/tybrite"},{"anchor":"Support","icon":"envelope","href":"mailto:support@tybrite.com"}]},"tabs":[{"tab":"Getting Started","pages":[{"title":"Getting Started","href":""}]},{"tab":"API Reference","groups":[{"group":"Reference","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"System","pages":[{"title":"API information","deprecated":null,"version":null,"openapi":"/openapi.yaml get /","href":"/api-reference/system/api-information"},{"title":"Health check","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/health","href":"/api-reference/system/health-check"},{"title":"Get comprehensive store information","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/store/info","href":"/api-reference/system/get-comprehensive-store-information"}]},{"group":"Store","pages":[{"title":"Get the store profile","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/store/profile","href":"/api-reference/store/get-the-store-profile"},{"title":"List published policies","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/store/policies","href":"/api-reference/store/list-published-policies"},{"title":"Get a published policy","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/store/policies/{slug}","href":"/api-reference/store/get-a-published-policy"}]},{"group":"Products","pages":[{"title":"List products with filtering and pagination","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products","href":"/api-reference/products/list-products-with-filtering-and-pagination"},{"title":"List brands","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/brands","href":"/api-reference/products/list-brands"},{"title":"List the values a product list can be filtered by","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products/facets","href":"/api-reference/products/list-the-values-a-product-list-can-be-filtered-by"},{"title":"Get product by ID or variant ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products/{id}","href":"/api-reference/products/get-product-by-id-or-variant-id"},{"title":"Get product by SEO-friendly slug","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products/by-slug/{slug}","href":"/api-reference/products/get-product-by-seo-friendly-slug"},{"title":"Get a variant's specifications","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products/{id}/specifications","href":"/api-reference/products/get-a-variants-specifications"},{"title":"Get a product's custom fields","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/products/{id}/custom-fields","href":"/api-reference/products/get-a-products-custom-fields"},{"title":"List product specifications","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/product-specifications","href":"/api-reference/products/list-product-specifications"},{"title":"List product collections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/product-collections","href":"/api-reference/products/list-product-collections"},{"title":"Get product collection by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/product-collections/{id}","href":"/api-reference/products/get-product-collection-by-id"},{"title":"Get items in a product collection","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/product-collections/{id}/items","href":"/api-reference/products/get-items-in-a-product-collection"}]},{"group":"Taxonomy","pages":[{"title":"List categories","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/categories","href":"/api-reference/taxonomy/list-categories"},{"title":"Get category","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/categories/{id}","href":"/api-reference/taxonomy/get-category"},{"title":"List subcategories","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/subcategories","href":"/api-reference/taxonomy/list-subcategories"},{"title":"Get subcategory by ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/subcategories/{id}","href":"/api-reference/taxonomy/get-subcategory-by-id"}]},{"group":"Orders","pages":[{"title":"List orders","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/orders","href":"/api-reference/orders/list-orders"},{"title":"Create order","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/orders","href":"/api-reference/orders/create-order"},{"title":"Get order details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/orders/{id}","href":"/api-reference/orders/get-order-details"},{"title":"Update order","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/orders/{id}","href":"/api-reference/orders/update-order"},{"title":"Reserve stock for checkout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/checkout/reserve","href":"/api-reference/orders/reserve-stock-for-checkout"}]},{"group":"Payments","pages":[{"title":"Get available payment methods","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/payments/methods","href":"/api-reference/payments/get-available-payment-methods"},{"title":"Initialize payment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/payments/initialize","href":"/api-reference/payments/initialize-payment"},{"title":"Verify payment status","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/payments/verify","href":"/api-reference/payments/verify-payment-status"}]},{"group":"Cart \u0026 Wishlist","pages":[{"title":"Get cart","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/cart","href":"/api-reference/cart-\u0026-wishlist/get-cart"},{"title":"Clear cart","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/cart","href":"/api-reference/cart-\u0026-wishlist/clear-cart"},{"title":"Add to cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/items","href":"/api-reference/cart-\u0026-wishlist/add-to-cart"},{"title":"Remove cart item","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/cart/items/{id}","href":"/api-reference/cart-\u0026-wishlist/remove-cart-item"},{"title":"Update cart item","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/cart/items/{id}","href":"/api-reference/cart-\u0026-wishlist/update-cart-item"},{"title":"Merge carts","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/merge","href":"/api-reference/cart-\u0026-wishlist/merge-carts"},{"title":"Get wishlist","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/wishlist","href":"/api-reference/cart-\u0026-wishlist/get-wishlist"},{"title":"Add to wishlist","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/wishlist","href":"/api-reference/cart-\u0026-wishlist/add-to-wishlist"},{"title":"Remove from wishlist","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/wishlist/{id}","href":"/api-reference/cart-\u0026-wishlist/remove-from-wishlist"},{"title":"Move wishlist item to cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/wishlist/move-to-cart","href":"/api-reference/cart-\u0026-wishlist/move-wishlist-item-to-cart"},{"title":"Ask to be told when a variant is back in stock","description":"Records a shopper's request for one email when a sold-out variant is available again. The email\naddress is the only identity needed, so it works for an anonymous visitor and a signed-in customer\nalike; send `customer_id` with a customer credential to attach the request to a customer record.\n\nA request is not marketing consent. It subscribes the address to nothing and results in exactly one\nmessage, sent when the variant's stock goes from nothing to something. After that message the shopper\ncan ask again.\n\nThe response is the same `200` whether the address has asked before, already holds the maximum number\nof open requests for the store, or is new. The request is refused with `409` when the variant is in\nstock, with `404` when the variant is not sold online by the store, and with `404` (`not_available`)\nwhen the store has no way to deliver the message. Sandbox keys read their sandbox stock level and\nnever trigger a message.\n\n**Auth / key type:** publishable key (`tybrite_pk_*`) or secret key (`tybrite_sk_*`). A customer\ncredential is needed only when `customer_id` is sent.\n\n**Rate limits:** 20 requests per hour per IP address and 6 per hour per email address, each within\none store.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/variants/{id}/notify-when-available","href":"/api-reference/cart-\u0026-wishlist/ask-to-be-told-when-a-variant-is-back-in-stock"},{"title":"Record a guest's contact details at checkout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout-contact","href":"/api-reference/cart-\u0026-wishlist/record-a-guests-contact-details-at-checkout"},{"title":"Restore the cart behind a recovery link","description":"Returns the items of the cart a reminder email linked to, priced from the store's current catalogue. Pass the\n`cart_recovery` query parameter of the page the shopper arrived on as `token`. The storefront re-adds the\nreturned items with `POST /v1/cart/items`.\n\nThe token is the only credential. A token that is unknown, expired (30 days) or issued to another store\nanswers the same `404`. The response carries no email address or name.\n\n**Auth / key type:** publishable key (`tybrite_pk_*`) or secret key (`tybrite_sk_*`). Test keys read test records.\n\n**Rate limits:** 60 requests per hour per IP address, within one store.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout-recover","href":"/api-reference/cart-\u0026-wishlist/restore-the-cart-behind-a-recovery-link"}]},{"group":"Marketplace","pages":[{"title":"Check out a multi-merchant cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout","href":"/api-reference/marketplace/check-out-a-multi-merchant-cart"},{"title":"Quote a multi-merchant checkout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/cart/checkout/quote","href":"/api-reference/marketplace/quote-a-multi-merchant-checkout"},{"title":"Get the signed-in shopper's unified marketplace profile","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/me","href":"/api-reference/marketplace/get-the-signed-in-shoppers-unified-marketplace-profile"},{"title":"Get the signed-in shopper's marketplace wallet","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/me/wallet","href":"/api-reference/marketplace/get-the-signed-in-shoppers-marketplace-wallet"},{"title":"Get marketplace information","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/marketplace/info","href":"/api-reference/marketplace/get-marketplace-information"},{"title":"Get placements for a slot","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/marketplace/ad-slots/{slot_key}","href":"/api-reference/marketplace/get-placements-for-a-slot"},{"title":"Log an ad impression or click","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/marketplace/ad-events","href":"/api-reference/marketplace/log-an-ad-impression-or-click"},{"title":"List operator-curated merchandising sections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/marketplace/collections","href":"/api-reference/marketplace/list-operator-curated-merchandising-sections"},{"title":"Get one curated section with its members","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/marketplace/collections/{slug}","href":"/api-reference/marketplace/get-one-curated-section-with-its-members"}]},{"group":"Recommendations","pages":[{"title":"Get product recommendations","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/recommendations","href":"/api-reference/recommendations/get-product-recommendations"}]},{"group":"Discovery","pages":[{"title":"Most-viewed products (windowed)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/discovery/most-viewed","href":"/api-reference/discovery/most-viewed-products-windowed"},{"title":"Most-added-to-cart products (windowed)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/discovery/most-added-to-cart","href":"/api-reference/discovery/most-added-to-cart-products-windowed"},{"title":"Best-converting products (windowed)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/discovery/best-converting","href":"/api-reference/discovery/best-converting-products-windowed"}]},{"group":"Events","pages":[{"title":"Record a storefront product event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/events","href":"/api-reference/events/record-a-storefront-product-event"}]},{"group":"Tax","pages":[{"title":"Preview tax for a cart before checkout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/tax/preview","href":"/api-reference/tax/preview-tax-for-a-cart-before-checkout"}]},{"group":"Analytics","pages":[{"title":"Record a storefront analytics event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/analytics/collect","href":"/api-reference/analytics/record-a-storefront-analytics-event"}]},{"group":"Agent","pages":[{"title":"List the agent tools","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/capabilities","href":"/api-reference/agent/list-the-agent-tools"},{"title":"Search by constraints","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/search","href":"/api-reference/agent/search-by-constraints"},{"title":"Turn a request into search constraints","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/interpret","href":"/api-reference/agent/turn-a-request-into-search-constraints"},{"title":"Get a product dossier","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/products/{id}/context","href":"/api-reference/agent/get-a-product-dossier"},{"title":"Compare products","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/compare","href":"/api-reference/agent/compare-products"},{"title":"Check a product against constraints","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/fit","href":"/api-reference/agent/check-a-product-against-constraints"},{"title":"Find alternatives to a product","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/alternatives","href":"/api-reference/agent/find-alternatives-to-a-product"},{"title":"Price a basket","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/quote","href":"/api-reference/agent/price-a-basket"},{"title":"Create a cart draft","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/cart-drafts","href":"/api-reference/agent/create-a-cart-draft"},{"title":"Draft a cart from an intent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/cart-drafts/from-intent","href":"/api-reference/agent/draft-a-cart-from-an-intent"},{"title":"Get a cart draft","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/cart-drafts/{id}","href":"/api-reference/agent/get-a-cart-draft"},{"title":"Add a draft to the shopper's cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/cart-drafts/{id}/apply","href":"/api-reference/agent/add-a-draft-to-the-shoppers-cart"},{"title":"Get insights on a cart","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/cart-insights","href":"/api-reference/agent/get-insights-on-a-cart"},{"title":"Get the shopper's personalisation consent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/consent","href":"/api-reference/agent/get-the-shoppers-personalisation-consent"},{"title":"Grant or revoke personalisation consent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/consent","href":"/api-reference/agent/grant-or-revoke-personalisation-consent"},{"title":"Get the shopper's own context","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/context","href":"/api-reference/agent/get-the-shoppers-own-context"},{"title":"Get wishlist insights","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/wishlist-insights","href":"/api-reference/agent/get-wishlist-insights"},{"title":"Get reorder suggestions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/reorder-suggestions","href":"/api-reference/agent/get-reorder-suggestions"},{"title":"Get an order's status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/orders/{id}/status","href":"/api-reference/agent/get-an-orders-status"},{"title":"Request a return for an order","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/orders/{id}/returns","href":"/api-reference/agent/request-a-return-for-an-order"},{"title":"List the shopper's standing instructions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/mandates","href":"/api-reference/agent/list-the-shoppers-standing-instructions"},{"title":"Create a standing instruction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/mandates","href":"/api-reference/agent/create-a-standing-instruction"},{"title":"Cancel a standing instruction","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/mandates/{id}/cancel","href":"/api-reference/agent/cancel-a-standing-instruction"},{"title":"Subscribe \u0026 Save offers on a product","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/products/{id}/subscribe-save","href":"/api-reference/agent/subscribe-\u0026-save-offers-on-a-product"},{"title":"List the shopper's Subscribe \u0026 Save subscriptions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/me/shopper-subscriptions","href":"/api-reference/agent/list-the-shoppers-subscribe-\u0026-save-subscriptions"},{"title":"Start a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/shopper-subscriptions","href":"/api-reference/agent/start-a-subscribe-\u0026-save-subscription"},{"title":"Pause a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/shopper-subscriptions/{id}/pause","href":"/api-reference/agent/pause-a-subscribe-\u0026-save-subscription"},{"title":"Skip the next Subscribe \u0026 Save delivery","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/shopper-subscriptions/{id}/skip","href":"/api-reference/agent/skip-the-next-subscribe-\u0026-save-delivery"},{"title":"Cancel a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/shopper-subscriptions/{id}/cancel","href":"/api-reference/agent/cancel-a-subscribe-\u0026-save-subscription"},{"title":"Change a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/me/shopper-subscriptions/{id}/update","href":"/api-reference/agent/change-a-subscribe-\u0026-save-subscription"},{"title":"Create a checkout intent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/checkout-intents","href":"/api-reference/agent/create-a-checkout-intent"},{"title":"Get a checkout intent","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/checkout-intents/{id}","href":"/api-reference/agent/get-a-checkout-intent"},{"title":"Confirm a checkout intent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/checkout-intents/{id}/confirm","href":"/api-reference/agent/confirm-a-checkout-intent"},{"title":"Cancel a checkout intent","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent/checkout-intents/{id}/cancel","href":"/api-reference/agent/cancel-a-checkout-intent"},{"title":"Get the store's policies","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/store-policies","href":"/api-reference/agent/get-the-stores-policies"},{"title":"Get AI credit usage","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent/usage","href":"/api-reference/agent/get-ai-credit-usage"}]},{"group":"Search","pages":[{"title":"Simple text search","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/search","href":"/api-reference/search/simple-text-search"},{"title":"Semantic search","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/search","href":"/api-reference/search/semantic-search"},{"title":"Type-ahead suggestions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/search/autocomplete","href":"/api-reference/search/type-ahead-suggestions"}]},{"group":"Authentication","pages":[{"title":"Register customer account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/register","href":"/api-reference/authentication/register-customer-account"},{"title":"Confirm a new account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/register/verify","href":"/api-reference/authentication/confirm-a-new-account"},{"title":"Resend the confirmation email","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/register/resend","href":"/api-reference/authentication/resend-the-confirmation-email"},{"title":"Create an account from a guest order","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/claim-account","href":"/api-reference/authentication/create-an-account-from-a-guest-order"},{"title":"Login with email and password","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/login","href":"/api-reference/authentication/login-with-email-and-password"},{"title":"Logout current session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/logout","href":"/api-reference/authentication/logout-current-session"},{"title":"Send a sign-in code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/magic-link","href":"/api-reference/authentication/send-a-sign-in-code"},{"title":"Verify a sign-in code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/verify-otp","href":"/api-reference/authentication/verify-a-sign-in-code"},{"title":"Request a password reset","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/password/forgot","href":"/api-reference/authentication/request-a-password-reset"},{"title":"Reset a password","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/password/reset","href":"/api-reference/authentication/reset-a-password"},{"title":"Change or set a password","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/password/change","href":"/api-reference/authentication/change-or-set-a-password"},{"title":"Refresh access token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/refresh","href":"/api-reference/authentication/refresh-access-token"},{"title":"Get current user","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/auth/me","href":"/api-reference/authentication/get-current-user"}]},{"group":"Customers","pages":[{"title":"Create customer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers","href":"/api-reference/customers/create-customer"},{"title":"Get customer details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}","href":"/api-reference/customers/get-customer-details"},{"title":"Update customer","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/customers/{id}","href":"/api-reference/customers/update-customer"},{"title":"List a shopper's saved addresses","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}/addresses","href":"/api-reference/customers/list-a-shoppers-saved-addresses"},{"title":"Save a new address","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/addresses","href":"/api-reference/customers/save-a-new-address"},{"title":"Delete a saved address","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/customers/{id}/addresses/{addressId}","href":"/api-reference/customers/delete-a-saved-address"},{"title":"Update a saved address","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/customers/{id}/addresses/{addressId}","href":"/api-reference/customers/update-a-saved-address"},{"title":"List a shopper's Subscribe \u0026 Save subscriptions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}/shopper-subscriptions","href":"/api-reference/customers/list-a-shoppers-subscribe-\u0026-save-subscriptions"},{"title":"Get a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}/shopper-subscriptions/{subscriptionId}","href":"/api-reference/customers/get-a-subscribe-\u0026-save-subscription"},{"title":"Change a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/customers/{id}/shopper-subscriptions/{subscriptionId}","href":"/api-reference/customers/change-a-subscribe-\u0026-save-subscription"},{"title":"Pause a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/shopper-subscriptions/{subscriptionId}/pause","href":"/api-reference/customers/pause-a-subscribe-\u0026-save-subscription"},{"title":"Resume a paused Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/shopper-subscriptions/{subscriptionId}/resume","href":"/api-reference/customers/resume-a-paused-subscribe-\u0026-save-subscription"},{"title":"Skip the next Subscribe \u0026 Save delivery","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/shopper-subscriptions/{subscriptionId}/skip-next","href":"/api-reference/customers/skip-the-next-subscribe-\u0026-save-delivery"},{"title":"Cancel a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/shopper-subscriptions/{subscriptionId}/cancel","href":"/api-reference/customers/cancel-a-subscribe-\u0026-save-subscription"},{"title":"Add a card to a Subscribe \u0026 Save subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/shopper-subscriptions/{subscriptionId}/payment-method","href":"/api-reference/customers/add-a-card-to-a-subscribe-\u0026-save-subscription"},{"title":"List a shopper's saved cards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}/payment-methods","href":"/api-reference/customers/list-a-shoppers-saved-cards"},{"title":"Remove a saved card","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/customers/{id}/payment-methods/{paymentMethodId}","href":"/api-reference/customers/remove-a-saved-card"},{"title":"List a shopper's delivered items","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/customers/{id}/fulfilments","href":"/api-reference/customers/list-a-shoppers-delivered-items"},{"title":"Reveal the codes of a delivered item","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/customers/{id}/fulfilments/{fulfilment_id}/reveal","href":"/api-reference/customers/reveal-the-codes-of-a-delivered-item"},{"title":"Download a file the shopper bought","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/fulfilment/downloads/{fulfilment_id}/{asset_id}","href":"/api-reference/customers/download-a-file-the-shopper-bought"}]},{"group":"Gift Cards","pages":[{"title":"List gift cards","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/gift-cards","href":"/api-reference/gift-cards/list-gift-cards"},{"title":"Check gift card balance","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/gift-cards/check","href":"/api-reference/gift-cards/check-gift-card-balance"}]},{"group":"Promotions","pages":[{"title":"List promotions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/promotions","href":"/api-reference/promotions/list-promotions"},{"title":"Get promotion details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/promotions/{id}","href":"/api-reference/promotions/get-promotion-details"},{"title":"Calculate a promotion's discount for a cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/promotions/{id}/calculate","href":"/api-reference/promotions/calculate-a-promotions-discount-for-a-cart"},{"title":"Find the best promotion for a cart","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/promotions/calculate-best","href":"/api-reference/promotions/find-the-best-promotion-for-a-cart"},{"title":"List the Subscribe \u0026 Save offers for a product","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/subscribe-save/offers","href":"/api-reference/promotions/list-the-subscribe-\u0026-save-offers-for-a-product"},{"title":"Quote the price of a Subscribe \u0026 Save offer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/subscribe-save/quote","href":"/api-reference/promotions/quote-the-price-of-a-subscribe-\u0026-save-offer"}]},{"group":"Campaigns","pages":[{"title":"List running campaigns","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/campaigns","href":"/api-reference/campaigns/list-running-campaigns"},{"title":"Get a running campaign","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/campaigns/{id}","href":"/api-reference/campaigns/get-a-running-campaign"}]},{"group":"CMS","pages":[{"title":"List blog posts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/posts","href":"/api-reference/cms/list-blog-posts"},{"title":"Get blog post by slug","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/posts/{slug}","href":"/api-reference/cms/get-blog-post-by-slug"},{"title":"Most-read blog posts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/posts/trending","href":"/api-reference/cms/most-read-blog-posts"},{"title":"Posts related to this one","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/posts/{slug}/related","href":"/api-reference/cms/posts-related-to-this-one"},{"title":"List lookbooks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lookbooks","href":"/api-reference/cms/list-lookbooks"},{"title":"Get lookbook details by slug","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lookbooks/{slug}","href":"/api-reference/cms/get-lookbook-details-by-slug"},{"title":"Subscribe an email to the store's newsletter","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/newsletter/subscribe","href":"/api-reference/cms/subscribe-an-email-to-the-stores-newsletter"},{"title":"Get a lead form","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lead-forms/{slug}","href":"/api-reference/cms/get-a-lead-form"},{"title":"Get a lead form token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/lead-forms/{slug}/token","href":"/api-reference/cms/get-a-lead-form-token"},{"title":"Submit a lead form","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/lead-forms/{slug}/submit","href":"/api-reference/cms/submit-a-lead-form"}]},{"group":"Pricing","pages":[{"title":"Get prices for multiple products with dynamic pricing and multi-currency support","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/prices/products","href":"/api-reference/pricing/get-prices-for-multiple-products-with-dynamic-pricing-and-multi-currency-support"},{"title":"Get single product pricing with dynamic pricing and multi-currency support","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/prices/products/{id}","href":"/api-reference/pricing/get-single-product-pricing-with-dynamic-pricing-and-multi-currency-support"},{"title":"Get product pricing by SEO-friendly slug with dynamic pricing and multi-currency support","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/prices/products/by-slug/{slug}","href":"/api-reference/pricing/get-product-pricing-by-seo-friendly-slug-with-dynamic-pricing-and-multi-currency-support"}]},{"group":"Messaging","pages":[{"title":"List message threads","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/messaging/threads","href":"/api-reference/messaging/list-message-threads"},{"title":"Get thread details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/messaging/threads/{id}","href":"/api-reference/messaging/get-thread-details"},{"title":"Update thread","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/messaging/threads/{id}","href":"/api-reference/messaging/update-thread"},{"title":"Get messages in a thread","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/messaging/threads/{id}/messages","href":"/api-reference/messaging/get-messages-in-a-thread"},{"title":"Send a message to a thread","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/messaging/threads/{id}/messages","href":"/api-reference/messaging/send-a-message-to-a-thread"},{"title":"Start a new conversation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/messaging/conversations","href":"/api-reference/messaging/start-a-new-conversation"},{"title":"Mark thread as read","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/messaging/threads/{id}/read","href":"/api-reference/messaging/mark-thread-as-read"},{"title":"Delete message","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/messaging/messages/{id}","href":"/api-reference/messaging/delete-message"},{"title":"Edit message","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/messaging/messages/{id}","href":"/api-reference/messaging/edit-message"},{"title":"Subscribe to a thread's new messages in realtime (WebSocket)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/messaging/threads/{id}/subscribe","href":"/api-reference/messaging/subscribe-to-a-threads-new-messages-in-realtime-websocket"}]},{"group":"Shipping","pages":[{"title":"Get shipping zones and pricing tiers","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/shipping/zones","href":"/api-reference/shipping/get-shipping-zones-and-pricing-tiers"},{"title":"Calculate shipping fee","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/shipping/calculate","href":"/api-reference/shipping/calculate-shipping-fee"},{"title":"Track a shipment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/shipping/tracking/{carrier}/{number}","href":"/api-reference/shipping/track-a-shipment"}]},{"group":"GC Connect","pages":[{"title":"Validate an authorization request","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/connect/authorize","href":"/api-reference/gc-connect/validate-an-authorization-request"},{"title":"Approve the authorization (merchant consent)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/connect/authorize","href":"/api-reference/gc-connect/approve-the-authorization-merchant-consent"},{"title":"Exchange authorization code for API keys","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/connect/token","href":"/api-reference/gc-connect/exchange-authorization-code-for-api-keys"},{"title":"Revoke a store connection","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/connect/revoke","href":"/api-reference/gc-connect/revoke-a-store-connection"},{"title":"List active store connections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/connect/sessions","href":"/api-reference/gc-connect/list-active-store-connections"},{"title":"List the linked store's team","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/connect/team","href":"/api-reference/gc-connect/list-the-linked-stores-team"}]},{"group":"Reviews","pages":[{"title":"List reviews for a product","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/reviews","href":"/api-reference/reviews/list-reviews-for-a-product"},{"title":"Submit a product review","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/reviews","href":"/api-reference/reviews/submit-a-product-review"},{"title":"Get a single review","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/reviews/{id}","href":"/api-reference/reviews/get-a-single-review"},{"title":"Delete your own review","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/reviews/{id}","href":"/api-reference/reviews/delete-your-own-review"},{"title":"Mark a review as helpful","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/reviews/{id}/helpful","href":"/api-reference/reviews/mark-a-review-as-helpful"}]},{"group":"Returns","pages":[{"title":"List return reason codes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/returns/reasons","href":"/api-reference/returns/list-return-reason-codes"},{"title":"Check whether an order can still be returned","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/returns/eligibility","href":"/api-reference/returns/check-whether-an-order-can-still-be-returned"},{"title":"Get the customer's store credit balance","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/returns/store-credit","href":"/api-reference/returns/get-the-customers-store-credit-balance"},{"title":"List the signed-in customer's returns","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/returns","href":"/api-reference/returns/list-the-signed-in-customers-returns"},{"title":"Lodge a return","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/returns","href":"/api-reference/returns/lodge-a-return"},{"title":"Get one of the customer's returns","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/returns/{id}","href":"/api-reference/returns/get-one-of-the-customers-returns"},{"title":"Accept a store credit offer","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/returns/{id}/accept-credit","href":"/api-reference/returns/accept-a-store-credit-offer"},{"title":"Request a refund instead of store credit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/returns/{id}/request-refund","href":"/api-reference/returns/request-a-refund-instead-of-store-credit"}]},{"group":"Disputes","pages":[{"title":"List dispute reason codes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/disputes/reasons","href":"/api-reference/disputes/list-dispute-reason-codes"},{"title":"List the shopper's disputes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/disputes","href":"/api-reference/disputes/list-the-shoppers-disputes"},{"title":"Open a dispute","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/disputes","href":"/api-reference/disputes/open-a-dispute"},{"title":"Get a dispute","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/disputes/{id}","href":"/api-reference/disputes/get-a-dispute"},{"title":"Cancel a dispute","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/disputes/{id}/cancel","href":"/api-reference/disputes/cancel-a-dispute"},{"title":"Add a message to a dispute","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/disputes/{id}/messages","href":"/api-reference/disputes/add-a-message-to-a-dispute"}]},{"group":"B2B","pages":[{"title":"List your requests for quote","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/rfqs","href":"/api-reference/b2b/list-your-requests-for-quote"},{"title":"Request a quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/b2b/rfqs","href":"/api-reference/b2b/request-a-quote"},{"title":"Get one of your RFQs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/rfqs/{id}","href":"/api-reference/b2b/get-one-of-your-rfqs"},{"title":"Get a quote addressed to you","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/quotes/{id}","href":"/api-reference/b2b/get-a-quote-addressed-to-you"},{"title":"Accept a quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/b2b/quotes/{id}/accept","href":"/api-reference/b2b/accept-a-quote"},{"title":"Reject a quote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/b2b/quotes/{id}/reject","href":"/api-reference/b2b/reject-a-quote"},{"title":"List your purchase orders","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/purchase-orders","href":"/api-reference/b2b/list-your-purchase-orders"},{"title":"Get one of your purchase orders","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/purchase-orders/{id}","href":"/api-reference/b2b/get-one-of-your-purchase-orders"},{"title":"List your invoices","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/invoices","href":"/api-reference/b2b/list-your-invoices"},{"title":"Get one of your invoices","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/b2b/invoices/{id}","href":"/api-reference/b2b/get-one-of-your-invoices"},{"title":"Start paying an invoice","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/b2b/invoices/{id}/pay","href":"/api-reference/b2b/start-paying-an-invoice"},{"title":"Place a wholesale order directly (self-serve checkout)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/b2b/orders","href":"/api-reference/b2b/place-a-wholesale-order-directly-self-serve-checkout"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/webhook_endpoints","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/webhook_endpoints","href":"/api-reference/webhooks/create-a-webhook-endpoint"},{"title":"Get a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/webhook_endpoints/{id}","href":"/api-reference/webhooks/get-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/webhook_endpoints/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/webhook_endpoints/{id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/webhook_endpoints/{id}/test","href":"/api-reference/webhooks/send-a-test-event"},{"title":"List webhook events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/webhook_events","href":"/api-reference/webhooks/list-webhook-events"},{"title":"Get a webhook event","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/webhook_events/{id}","href":"/api-reference/webhooks/get-a-webhook-event"},{"title":"Retry a webhook event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/webhook_events/{id}/retry","href":"/api-reference/webhooks/retry-a-webhook-event"}]},{"group":"Ingestion","pages":[{"title":"Ingest a batch of products","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/ingest/products","href":"/api-reference/ingestion/ingest-a-batch-of-products"},{"title":"Get a sample product feed","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/ingest/sample","href":"/api-reference/ingestion/get-a-sample-product-feed"},{"title":"Validate a product feed (no writes)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/ingest/test","href":"/api-reference/ingestion/validate-a-product-feed-no-writes"}]},{"group":"Feeds","pages":[{"title":"Public catalog feed (JSON)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/feeds/{store}/products.json","href":"/api-reference/feeds/public-catalog-feed-json"},{"title":"Public catalog feed (XML)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/feeds/{store}/products.xml","href":"/api-reference/feeds/public-catalog-feed-xml"},{"title":"Store summary for AI assistants (llms.txt)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/feeds/{store}/llms.txt","href":"/api-reference/feeds/store-summary-for-ai-assistants-llmstxt"},{"title":"Full catalog for AI assistants (llms-full.txt)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/feeds/{store}/llms-full.txt","href":"/api-reference/feeds/full-catalog-for-ai-assistants-llms-fulltxt"},{"title":"How an AI assistant connects to a store (agent.json)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/feeds/{store}/agent.json","href":"/api-reference/feeds/how-an-ai-assistant-connects-to-a-store-agentjson"}]},{"group":"Sandbox","pages":[{"title":"Reset your sandbox data","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/reset","href":"/api-reference/sandbox/reset-your-sandbox-data"},{"title":"Reset your sandbox data (alias)","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/sandbox/data","href":"/api-reference/sandbox/reset-your-sandbox-data-alias"},{"title":"Fast-forward sandbox time","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/time","href":"/api-reference/sandbox/fast-forward-sandbox-time"},{"title":"Replay a sandbox webhook event","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/webhooks/replay","href":"/api-reference/sandbox/replay-a-sandbox-webhook-event"},{"title":"Create a sandbox promotion","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/seed/promotion","href":"/api-reference/sandbox/create-a-sandbox-promotion"},{"title":"Create a sandbox gift card","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/seed/gift-card","href":"/api-reference/sandbox/create-a-sandbox-gift-card"},{"title":"Create a sandbox campaign","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/seed/campaign","href":"/api-reference/sandbox/create-a-sandbox-campaign"},{"title":"Create a sandbox B2B buyer account","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/seed/b2b-buyer-account","href":"/api-reference/sandbox/create-a-sandbox-b2b-buyer-account"},{"title":"Create a sandbox dynamic-pricing rule","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/seed/pricing-rule","href":"/api-reference/sandbox/create-a-sandbox-dynamic-pricing-rule"},{"title":"List sandbox stock levels","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/sandbox/stock","href":"/api-reference/sandbox/list-sandbox-stock-levels"},{"title":"Set sandbox stock levels","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/sandbox/stock","href":"/api-reference/sandbox/set-sandbox-stock-levels"},{"title":"Remove every sandbox stock level","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/sandbox/stock","href":"/api-reference/sandbox/remove-every-sandbox-stock-level"},{"title":"Remove one sandbox stock level","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/sandbox/stock/{variant_id}","href":"/api-reference/sandbox/remove-one-sandbox-stock-level"}]}]},{"tab":"TypeScript SDK","pages":[{"title":"TypeScript SDK","href":"/sdk/introduction"}]},{"tab":"Workflow Examples","pages":[{"title":"Workflow Examples","href":"/workflows/introduction"}]}]},"title":"Record a guest's contact details at checkout - Galactic Core API Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-CBCH2P7b.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}