Records a signup through a lead form: the shopper’s email address, their answers to the form’s
questions, and the consents they gave. The shopper is added to the store’s subscribers, and the
submission, with the form’s labels and consent wording as they were at that moment, is kept for
the merchant.
Auth: accepts both publishable (tybrite_pk_*) and secret (tybrite_sk_*) API keys. No
customer session is required.
Validation: the form’s field definitions decide what is accepted. A key in answers that
the form does not define is ignored. Phone answers are converted to E.164 using the store’s
country when the shopper omits a country code. Consent is recorded only from the consents
booleans; the wording stored is the form’s own.
Uniform response: a first signup and a repeat signup by the same email both return 200 with
the same shape. Every submission appends to the form’s history.
Spam protection: the field named by hp_field on the form is rendered hidden; a submission
that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission
that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one
whose answers are mostly links or whose email address is a throwaway domain. Where the form
reports captcha.available, it may also require a challenge: send the widget’s result as
captcha_token; when a challenge is required and verification is unavailable, the request answers
503. Where captcha.available is false no challenge is asked for and the other protections apply.
Rate limits: per address and per form, and per email address per form. A secret key is
called from the merchant’s server, so it should send the shopper’s address in
X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is
ignored on a publishable key, which is called from the shopper’s own browser.
Idempotency: a request that repeats an Idempotency-Key with the same body returns the
original result without recording a second submission; the same key with a different body answers 409.
{
"error": {
"code": "forbidden",
"message": "This form is not available for this store.",
"details": {
"reason": "plan_required"
}
}
}
{
"error": {
"code": "not_found",
"message": "This form does not exist or is not available."
}
}
{
"error": {
"code": "conflict",
"message": "This Idempotency-Key was already used with a different submission."
}
}
{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}
{
"error": {
"code": "server_error",
"message": "The form could not be submitted."
}
}
{
"error": {
"code": "service_unavailable",
"message": "The check could not be completed right now. Please try again shortly."
}
}
The token returned by POST /v1/lead-forms/{slug}/token. A submission with an invalid token is acknowledged and discarded; one with no token is accepted but held to a tighter per-address limit and answers 429 past it.
{
"error": {
"code": "forbidden",
"message": "This form is not available for this store.",
"details": {
"reason": "plan_required"
}
}
}
{
"error": {
"code": "not_found",
"message": "This form does not exist or is not available."
}
}
{
"error": {
"code": "conflict",
"message": "This Idempotency-Key was already used with a different submission."
}
}
{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}
{
"error": {
"code": "server_error",
"message": "The form could not be submitted."
}
}
{
"error": {
"code": "service_unavailable",
"message": "The check could not be completed right now. Please try again shortly."
}
}
{"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":"6ad0fd97d63b31e6ddb49a7c","collectionId":"0b2cb80c-c342-4abb-a26c-884012e5280a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad0fd97d63b31e6ddb49a7c"},"entitlements":{},"buildId":"6adf091ed7cf896c8ad79534","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API Reference","count":208},{"language":"default","tag":"TypeScript SDK","count":36},{"language":"default","tag":"Getting Started","count":35},{"language":"default","tag":"Agent","count":29},{"language":"default","tag":"Sandbox","count":13},{"language":"default","tag":"Marketplace","count":12},{"language":"default","tag":"Authentication","count":12},{"language":"default","tag":"B2B","count":12},{"language":"default","tag":"Discovery","count":11},{"language":"default","tag":"Cart \u0026 Wishlist","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"editor-nav-generations","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":"editor-agent-model-picker","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":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/cms/submit-a-lead-form","slug":"/api-reference/cms/submit-a-lead-form","pageMetadata":{"title":"Submit a lead form","description":"Records a signup through a lead form: the shopper's email address, their answers to the form's\nquestions, and the consents they gave. The shopper is added to the store's subscribers, and the\nsubmission, with the form's labels and consent wording as they were at that moment, is kept for\nthe merchant.\n\n**Auth:** accepts both publishable (`tybrite_pk_*`) and secret (`tybrite_sk_*`) API keys. No\ncustomer session is required.\n\n**Validation:** the form's field definitions decide what is accepted. A key in `answers` that\nthe form does not define is ignored. Phone answers are converted to E.164 using the store's\ncountry when the shopper omits a country code. Consent is recorded only from the `consents`\nbooleans; the wording stored is the form's own.\n\n**Uniform response:** a first signup and a repeat signup by the same email both return `200` with\nthe same shape. Every submission appends to the form's history.\n\n**Spam protection:** the field named by `hp_field` on the form is rendered hidden; a submission\nthat fills it is acknowledged with a normal `200` and discarded. The same applies to a submission\nthat carries a `form_token` that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one\nwhose answers are mostly links or whose email address is a throwaway domain. Where the form\nreports `captcha.available`, it may also require a challenge: send the widget's result as\n`captcha_token`; when a challenge is required and verification is unavailable, the request answers\n`503`. Where `captcha.available` is false no challenge is asked for and the other protections apply.\n\n**Rate limits:** per address and per form, and per email address per form. A secret key is\ncalled from the merchant's server, so it should send the shopper's address in\n`X-Forwarded-Shopper-Ip`; without it, every request on that key counts as one address. The header is\nignored on a publishable key, which is called from the shopper's own browser.\n\n**Idempotency:** a request that repeats an `Idempotency-Key` with the same body returns the\noriginal result without recording a second submission; the same key with a different body answers `409`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/lead-forms/{slug}/submit","href":"/api-reference/cms/submit-a-lead-form","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: [_jsx(_components.p, {\n children: \"Records a signup through a lead form: the shopper’s email address, their answers to the form’s\\nquestions, and the consents they gave. The shopper is added to the store’s subscribers, and the\\nsubmission, with the form’s labels and consent wording as they were at that moment, is kept for\\nthe merchant.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Auth:\"\n }), \" accepts both publishable (\", _jsx(_components.code, {\n children: \"tybrite_pk_*\"\n }), \") and secret (\", _jsx(_components.code, {\n children: \"tybrite_sk_*\"\n }), \") API keys. No\\ncustomer session is required.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Validation:\"\n }), \" the form’s field definitions decide what is accepted. A key in \", _jsx(_components.code, {\n children: \"answers\"\n }), \" that\\nthe form does not define is ignored. Phone answers are converted to E.164 using the store’s\\ncountry when the shopper omits a country code. Consent is recorded only from the \", _jsx(_components.code, {\n children: \"consents\"\n }), \"\\nbooleans; the wording stored is the form’s own.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Uniform response:\"\n }), \" a first signup and a repeat signup by the same email both return \", _jsx(_components.code, {\n children: \"200\"\n }), \" with\\nthe same shape. Every submission appends to the form’s history.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Spam protection:\"\n }), \" the field named by \", _jsx(_components.code, {\n children: \"hp_field\"\n }), \" on the form is rendered hidden; a submission\\nthat fills it is acknowledged with a normal \", _jsx(_components.code, {\n children: \"200\"\n }), \" and discarded. The same applies to a submission\\nthat carries a \", _jsx(_components.code, {\n children: \"form_token\"\n }), \" that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one\\nwhose answers are mostly links or whose email address is a throwaway domain. Where the form\\nreports \", _jsx(_components.code, {\n children: \"captcha.available\"\n }), \", it may also require a challenge: send the widget’s result as\\n\", _jsx(_components.code, {\n children: \"captcha_token\"\n }), \"; when a challenge is required and verification is unavailable, the request answers\\n\", _jsx(_components.code, {\n children: \"503\"\n }), \". Where \", _jsx(_components.code, {\n children: \"captcha.available\"\n }), \" is false no challenge is asked for and the other protections apply.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Rate limits:\"\n }), \" per address and per form, and per email address per form. A secret key is\\ncalled from the merchant’s server, so it should send the shopper’s address in\\n\", _jsx(_components.code, {\n children: \"X-Forwarded-Shopper-Ip\"\n }), \"; without it, every request on that key counts as one address. The header is\\nignored on a publishable key, which is called from the shopper’s own browser.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Idempotency:\"\n }), \" a request that repeats an \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" with the same body returns the\\noriginal result without recording a second submission; the same key with a different body answers \", _jsx(_components.code, {\n children: \"409\"\n }), \".\"]\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":"Submit a lead form","description":"Records a signup through a lead form: the shopper's email address, their answers to the form's\nquestions, and the consents they gave. The shopper is added to the store's subscribers, and the\nsubmission, with the form's labels and consent wording as they were at that moment, is kept for\nthe merchant.\n\n**Auth:** accepts both publishable (`tybrite_pk_*`) and secret (`tybrite_sk_*`) API keys. No\ncustomer session is required.\n\n**Validation:** the form's field definitions decide what is accepted. A key in `answers` that\nthe form does not define is ignored. Phone answers are converted to E.164 using the store's\ncountry when the shopper omits a country code. Consent is recorded only from the `consents`\nbooleans; the wording stored is the form's own.\n\n**Uniform response:** a first signup and a repeat signup by the same email both return `200` with\nthe same shape. Every submission appends to the form's history.\n\n**Spam protection:** the field named by `hp_field` on the form is rendered hidden; a submission\nthat fills it is acknowledged with a normal `200` and discarded. The same applies to a submission\nthat carries a `form_token` that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one\nwhose answers are mostly links or whose email address is a throwaway domain. Where the form\nreports `captcha.available`, it may also require a challenge: send the widget's result as\n`captcha_token`; when a challenge is required and verification is unavailable, the request answers\n`503`. Where `captcha.available` is false no challenge is asked for and the other protections apply.\n\n**Rate limits:** per address and per form, and per email address per form. A secret key is\ncalled from the merchant's server, so it should send the shopper's address in\n`X-Forwarded-Shopper-Ip`; without it, every request on that key counts as one address. The header is\nignored on a publishable key, which is called from the shopper's own browser.\n\n**Idempotency:** a request that repeats an `Idempotency-Key` with the same body returns the\noriginal result without recording a second submission; the same key with a different body answers `409`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/lead-forms/{slug}/submit","href":"/api-reference/cms/submit-a-lead-form","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/tybritelabs/af1ac4e439492905/sync.js"],"openApiReferenceData":{"operation":{"operationId":"submitLeadForm","tags":["CMS"],"summary":"Submit a lead form","description":"Records a signup through a lead form: the shopper's email address, their answers to the form's\nquestions, and the consents they gave. The shopper is added to the store's subscribers, and the\nsubmission, with the form's labels and consent wording as they were at that moment, is kept for\nthe merchant.\n\n**Auth:** accepts both publishable (`tybrite_pk_*`) and secret (`tybrite_sk_*`) API keys. No\ncustomer session is required.\n\n**Validation:** the form's field definitions decide what is accepted. A key in `answers` that\nthe form does not define is ignored. Phone answers are converted to E.164 using the store's\ncountry when the shopper omits a country code. Consent is recorded only from the `consents`\nbooleans; the wording stored is the form's own.\n\n**Uniform response:** a first signup and a repeat signup by the same email both return `200` with\nthe same shape. Every submission appends to the form's history.\n\n**Spam protection:** the field named by `hp_field` on the form is rendered hidden; a submission\nthat fills it is acknowledged with a normal `200` and discarded. The same applies to a submission\nthat carries a `form_token` that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one\nwhose answers are mostly links or whose email address is a throwaway domain. Where the form\nreports `captcha.available`, it may also require a challenge: send the widget's result as\n`captcha_token`; when a challenge is required and verification is unavailable, the request answers\n`503`. Where `captcha.available` is false no challenge is asked for and the other protections apply.\n\n**Rate limits:** per address and per form, and per email address per form. A secret key is\ncalled from the merchant's server, so it should send the shopper's address in\n`X-Forwarded-Shopper-Ip`; without it, every request on that key counts as one address. The header is\nignored on a publishable key, which is called from the shopper's own browser.\n\n**Idempotency:** a request that repeats an `Idempotency-Key` with the same body returns the\noriginal result without recording a second submission; the same key with a different body answers `409`.\n","security":["3fa655e1-cf92-4d6d-b2cc-164e0c2e9d90"],"parameters":["9956a83d-250d-4b83-add3-9ac10c20b15f","dabfb73f-cb6d-49cb-8842-d05664b553a0","7536b102-3385-491c-ab56-177ef66f5491"],"requestBody":"4fd6f1d2-d1fb-4aab-9366-7aa2b37aea97","responses":{"200":"61d9c000-257d-46b3-9aac-38522cb88c61","400":"8e07a998-7038-43ac-bbf8-5c8e1be33078","401":"4229b87c-f7ad-4d1d-a079-a813cb4b115d","403":"61073ceb-45df-45b1-a15b-defe2c6ea32f","404":"22fe1d18-640e-4541-9f5d-ebd29eb9f9ec","409":"aab3738c-06af-4caf-8c6b-944714339f8a","429":"d51099a3-7cc2-42aa-8df9-af1a0766ee9b","500":"4a6325b5-a09c-434e-8d2e-835a639bf1ae","503":"bc1560f2-00ab-4ea7-8601-fbc036528e0e"},"method":"post","type":"path","servers":["62901a8b-054a-46ad-9e18-4cc277f3085e"],"path":"/v1/lead-forms/{slug}/submit","baseUrlOptions":["https://api.tybritelabs.com"],"title":"Submit a lead form","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"9956a83d-250d-4b83-add3-9ac10c20b15f":{"name":"slug","in":"path","required":true,"description":"The form's address.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$","isRequired":true,"description":"The form's address.","uniqueKey":"","typeLabel":"string"},"example":"spring-lookbook"},"dabfb73f-cb6d-49cb-8842-d05664b553a0":{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique string of 1 to 255 printable characters that identifies this submission.","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"A unique string of 1 to 255 printable characters that identifies this submission.","uniqueKey":"","typeLabel":"string"},"example":"6b0b5f2e-9c0d-4a77-8b62-2f5f1b1a7d10"},"7536b102-3385-491c-ab56-177ef66f5491":{"name":"X-Forwarded-Shopper-Ip","in":"header","required":false,"description":"The shopper's IP address. Honoured on a secret key only.","schema":{"type":"string","isRequired":false,"description":"The shopper's IP address. Honoured on a secret key only.","uniqueKey":"","typeLabel":"string"},"example":"203.0.113.42"}},"requestBody":{"required":true,"description":"Up to 16 KB of JSON, sent as `application/json`.","content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"The shopper's email address.","example":"john.doe@example.com","isRequired":true,"uniqueKey":"email","typeLabel":"string\u003cemail>"},"answers":{"type":"object","description":"Answers keyed by field `name`, at most 30. A `multiselect` answer is an array.","additionalProperties":true,"example":{"first_name":"John","interests":["Menswear"]},"uniqueKey":"answers","typeLabel":"object"},"consents":{"type":"object","description":"The consents the shopper gave.","properties":{"email":{"type":"boolean","example":true,"uniqueKey":"consents.email","typeLabel":"boolean"},"sms":{"type":"boolean","example":false,"uniqueKey":"consents.sms","typeLabel":"boolean"}},"uniqueKey":"consents","typeLabel":"object"},"captcha_token":{"type":"string","description":"The challenge widget's result. Required when the form's `captcha.required` is true, or when a refusal with reason `captcha_required` asks for it.","uniqueKey":"captcha_token","typeLabel":"string"},"form_token":{"type":"string","description":"The token returned by `POST /v1/lead-forms/{slug}/token`. A submission with an invalid token is acknowledged and discarded; one with no token is accepted but held to a tighter per-address limit and answers `429` past it.","uniqueKey":"form_token","typeLabel":"string"},"website_url":{"type":"string","description":"The hidden field named by the form's `hp_field`. Leave empty.","uniqueKey":"website_url","typeLabel":"string"},"source":{"type":"string","description":"A label for where the signup happened. At most 200 characters.","example":"post:summer-style-guide","uniqueKey":"source","typeLabel":"string"},"page_url":{"type":"string","description":"The page the form was on. At most 500 characters.","example":"https://shop.example.com/pages/lookbook","uniqueKey":"page_url","typeLabel":"string"},"utm":{"type":"object","description":"Campaign parameters, up to 10 string entries.","additionalProperties":{"type":"string","uniqueKey":"utm.additionalProperties","typeLabel":"string"},"example":{"utm_source":"instagram"},"uniqueKey":"utm","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"email":"john.doe@example.com","answers":{"first_name":"John","interests":["Menswear"]},"consents":{"email":true,"sms":false},"captcha_token":"\u003cstring>","form_token":"\u003cstring>","website_url":"\u003cstring>","source":"post:summer-style-guide","page_url":"https://shop.example.com/pages/lookbook","utm":{"utm_source":"instagram"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"61d9c000-257d-46b3-9aac-38522cb88c61":{"description":"The submission was accepted.","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":["submitted","pending_confirmation","message","submission_id"],"properties":{"submitted":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"submitted","typeLabel":"boolean"},"pending_confirmation":{"type":"boolean","description":"True when the signup is waiting for the shopper to confirm from an email.","example":false,"isRequired":true,"uniqueKey":"pending_confirmation","typeLabel":"boolean"},"message":{"type":"string","description":"The form's success message, for display.","example":"Thanks, check your inbox.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"submission_id":{"type":"string","format":"uuid","example":"7c1f6a52-3b0e-4d8e-9d55-0f4a9a2c3e11","isRequired":true,"uniqueKey":"submission_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"","typeLabel":"object"},"example":{"submitted":true,"pending_confirmation":false,"message":"Thanks, check your inbox.","submission_id":"7c1f6a52-3b0e-4d8e-9d55-0f4a9a2c3e11"},"examples":{"Example":{"title":"Example","value":{"submitted":true,"pending_confirmation":false,"message":"Thanks, check your inbox.","submission_id":"7c1f6a52-3b0e-4d8e-9d55-0f4a9a2c3e11"}}},"exampleType":"examples"}},"exampleType":"examples"},"8e07a998-7038-43ac-bbf8-5c8e1be33078":{"description":"The submission is not valid. `details.field` names the answer and `details.reason` says why.","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"invalid_request","message":"Please enter a valid email address.","details":{"field":"email","reason":"invalid_email"}}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"Please enter a valid email address.","details":{"field":"email","reason":"invalid_email"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"4229b87c-f7ad-4d1d-a079-a813cb4b115d":{"description":"Authentication failed - invalid or missing API 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":{"type":"string","example":"The 'email' field is required","uniqueKey":"error.details","typeLabel":"string"},"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":"unauthorized","message":"Missing or invalid Authorization header"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Missing or invalid Authorization header"}}}},"exampleType":"examples"}},"exampleType":"examples"},"61073ceb-45df-45b1-a15b-defe2c6ea32f":{"description":"The store's plan does not include lead forms (`details.reason` is `plan_required`).","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"forbidden","message":"This form is not available for this store.","details":{"reason":"plan_required"}}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"forbidden","message":"This form is not available for this store.","details":{"reason":"plan_required"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"22fe1d18-640e-4541-9f5d-ebd29eb9f9ec":{"description":"The form does not exist or is not available.","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"not_found","message":"This form does not exist or is not available."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"This form does not exist or is not available."}}}},"exampleType":"examples"}},"exampleType":"examples"},"aab3738c-06af-4caf-8c6b-944714339f8a":{"description":"The `Idempotency-Key` was already used with a different submission.","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"conflict","message":"This Idempotency-Key was already used with a different submission."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"conflict","message":"This Idempotency-Key was already used with a different submission."}}}},"exampleType":"examples"}},"exampleType":"examples"},"d51099a3-7cc2-42aa-8df9-af1a0766ee9b":{"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":{"type":"string","example":"The 'email' field is required","uniqueKey":"error.details","typeLabel":"string"},"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"},"4a6325b5-a09c-434e-8d2e-835a639bf1ae":{"description":"The form could not be submitted.","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"server_error","message":"The form could not be submitted."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"server_error","message":"The form could not be submitted."}}}},"exampleType":"examples"}},"exampleType":"examples"},"bc1560f2-00ab-4ea7-8601-fbc036528e0e":{"description":"The challenge could not be verified. The submission was not recorded; retry shortly.","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","description":"A sentence suitable for showing to the shopper.","example":"Please enter a valid email address.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","properties":{"field":{"type":"string","description":"The answer the error refers to: `email`, `answers`, `captcha_token`, `consents.email`, `phone`, or the `name` of a form field.","example":"email","uniqueKey":"error.details.field","typeLabel":"string"},"reason":{"type":"string","description":"Why the submission was refused.\n\n- `invalid_email`: the address is missing or malformed.\n- `invalid_value`: an answer has the wrong type, is outside the field's rules or is not one of the listed options.\n- `invalid_phone`: a phone answer cannot be read as a phone number.\n- `required`: a required answer is missing.\n- `consent_required`: a required consent is unchecked.\n- `captcha_required`: the form asks for a challenge token and none was sent.\n- `captcha_failed`: the challenge token did not pass verification.\n- `plan_required`: the store's plan does not include lead forms (status `403`).\n","enum":["invalid_email","invalid_value","invalid_phone","required","consent_required","captcha_required","captcha_failed","plan_required"],"example":"invalid_email","uniqueKey":"error.details.reason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"service_unavailable","message":"The check could not be completed right now. Please try again shortly."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"service_unavailable","message":"The check could not be completed right now. Please try again shortly."}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"3fa655e1-cf92-4d6d-b2cc-164e0c2e9d90":{"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":{"62901a8b-054a-46ad-9e18-4cc277f3085e":{"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":"Submit a lead form - Galactic Core API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T08:02:49.278Z","originalFileLocation":"api-reference/cms/submit-a-lead-form.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 a signup through a lead form: the shopper\u0026#x27;s email address, their answers to the form\u0026#x27;s questions, and the consents they gave. The shopper is added to the store\u0026#x27;s subscribers, and the submission, with the form\u0026#x27;s labels and consent wording as they were at that moment, is kept for the merchant. Auth: accepts both publishable (tybrite_pk_) and secret (tybrite_sk_) API keys. No customer session is required. Validation: the form\u0026#x27;s field definitions decide what is accepted. A key in answers that the form does not define is ignored. Phone answers are converted to E.164 using the store\u0026#x27;s country when the shopper omits a country code. Consent is recorded only from the consents booleans; the wording stored is the form\u0026#x27;s own. Uniform response: a first signup and a repeat signup by the same email both return 200 with the same shape. Every submission appends to the form\u0026#x27;s history. Spam protection: the field named by hp_field on the form is rendered hidden; a submission that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one whose answers are mostly links or whose email address is a throwaway domain. Where the form reports captcha.available, it may also require a challenge: send the widget\u0026#x27;s result as captcha_token; when a challenge is required and verification is unavailable, the request answers 503. Where captcha.available is false no challenge is asked for and the other protections apply. Rate limits: per address and per form, and per email address per form. A secret key is called from the merchant\u0026#x27;s server, so it should send the shopper\u0026#x27;s address in X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is ignored on a publishable key, which is called from the shopper\u0026#x27;s own browser. Idempotency: a request that repeats an Idempotency-Key with the same body returns the original result without recording a second submission; the same key with a different body answers 409.\">\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=\"Submit a lead form - Galactic Core API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Records a signup through a lead form: the shopper\u0026#x27;s email address, their answers to the form\u0026#x27;s questions, and the consents they gave. The shopper is added to the store\u0026#x27;s subscribers, and the submission, with the form\u0026#x27;s labels and consent wording as they were at that moment, is kept for the merchant. Auth: accepts both publishable (tybrite_pk_) and secret (tybrite_sk_) API keys. No customer session is required. Validation: the form\u0026#x27;s field definitions decide what is accepted. A key in answers that the form does not define is ignored. Phone answers are converted to E.164 using the store\u0026#x27;s country when the shopper omits a country code. Consent is recorded only from the consents booleans; the wording stored is the form\u0026#x27;s own. Uniform response: a first signup and a repeat signup by the same email both return 200 with the same shape. Every submission appends to the form\u0026#x27;s history. Spam protection: the field named by hp_field on the form is rendered hidden; a submission that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one whose answers are mostly links or whose email address is a throwaway domain. Where the form reports captcha.available, it may also require a challenge: send the widget\u0026#x27;s result as captcha_token; when a challenge is required and verification is unavailable, the request answers 503. Where captcha.available is false no challenge is asked for and the other protections apply. Rate limits: per address and per form, and per email address per form. A secret key is called from the merchant\u0026#x27;s server, so it should send the shopper\u0026#x27;s address in X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is ignored on a publishable key, which is called from the shopper\u0026#x27;s own browser. Idempotency: a request that repeats an Idempotency-Key with the same body returns the original result without recording a second submission; the same key with a different body answers 409.\">\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/cms/submit-a-lead-form\">\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=CMS\u0026amp;title=Submit+a+lead+form\u0026amp;description=Records+a+signup+through+a+lead+form%3A+the+shopper%27s+email+address%2C+their+answers+to+the+form%27s%0Aquestions%2C+and+the+consents+they+gave.+The+shopper+is+added+to+th\u0026amp;theme=b0c5a7325a83e0755b69afc3\u0026amp;signature=dd61d97784ec89cd23f281ddfde97687c22f948decc942c6ad91bdc4eafbf1f4\">\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=\"Submit a lead form - Galactic Core API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Records a signup through a lead form: the shopper\u0026#x27;s email address, their answers to the form\u0026#x27;s questions, and the consents they gave. The shopper is added to the store\u0026#x27;s subscribers, and the submission, with the form\u0026#x27;s labels and consent wording as they were at that moment, is kept for the merchant. Auth: accepts both publishable (tybrite_pk_) and secret (tybrite_sk_) API keys. No customer session is required. Validation: the form\u0026#x27;s field definitions decide what is accepted. A key in answers that the form does not define is ignored. Phone answers are converted to E.164 using the store\u0026#x27;s country when the shopper omits a country code. Consent is recorded only from the consents booleans; the wording stored is the form\u0026#x27;s own. Uniform response: a first signup and a repeat signup by the same email both return 200 with the same shape. Every submission appends to the form\u0026#x27;s history. Spam protection: the field named by hp_field on the form is rendered hidden; a submission that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one whose answers are mostly links or whose email address is a throwaway domain. Where the form reports captcha.available, it may also require a challenge: send the widget\u0026#x27;s result as captcha_token; when a challenge is required and verification is unavailable, the request answers 503. Where captcha.available is false no challenge is asked for and the other protections apply. Rate limits: per address and per form, and per email address per form. A secret key is called from the merchant\u0026#x27;s server, so it should send the shopper\u0026#x27;s address in X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is ignored on a publishable key, which is called from the shopper\u0026#x27;s own browser. Idempotency: a request that repeats an Idempotency-Key with the same body returns the original result without recording a second submission; the same key with a different body answers 409.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tybritelabs.mintlify.app/_mintlify/api/og/v2?division=CMS\u0026amp;title=Submit+a+lead+form\u0026amp;description=Records+a+signup+through+a+lead+form%3A+the+shopper%27s+email+address%2C+their+answers+to+the+form%27s%0Aquestions%2C+and+the+consents+they+gave.+The+shopper+is+added+to+th\u0026amp;theme=b0c5a7325a83e0755b69afc3\u0026amp;signature=dd61d97784ec89cd23f281ddfde97687c22f948decc942c6ad91bdc4eafbf1f4\">\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/cms/submit-a-lead-form\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/cms/submit-a-lead-form.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/cms/submit-a-lead-form#webpage\",\"url\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form\",\"name\":\"Submit a lead form\",\"description\":\"Records a signup through a lead form: the shopper's email address, their answers to the form's questions, and the consents they gave. The shopper is added to the store's subscribers, and the submission, with the form's labels and consent wording as they were at that moment, is kept for the merchant. Auth: accepts both publishable (tybrite_pk_) and secret (tybrite_sk_) API keys. No customer session is required. Validation: the form's field definitions decide what is accepted. A key in answers that the form does not define is ignored. Phone answers are converted to E.164 using the store's country when the shopper omits a country code. Consent is recorded only from the consents booleans; the wording stored is the form's own. Uniform response: a first signup and a repeat signup by the same email both return 200 with the same shape. Every submission appends to the form's history. Spam protection: the field named by hp_field on the form is rendered hidden; a submission that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one whose answers are mostly links or whose email address is a throwaway domain. Where the form reports captcha.available, it may also require a challenge: send the widget's result as captcha_token; when a challenge is required and verification is unavailable, the request answers 503. Where captcha.available is false no challenge is asked for and the other protections apply. Rate limits: per address and per form, and per email address per form. A secret key is called from the merchant's server, so it should send the shopper's address in X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is ignored on a publishable key, which is called from the shopper's own browser. Idempotency: a request that repeats an Idempotency-Key with the same body returns the original result without recording a second submission; the same key with a different body answers 409.\",\"dateModified\":\"2026-10-26T08:02:49.278Z\",\"isPartOf\":{\"@id\":\"https://docs.tybritelabs.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"CMS\",\"item\":\"https://docs.tybritelabs.com/api-reference/cms/list-blog-posts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Submit a lead form\",\"item\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form#apireference\",\"headline\":\"Submit a lead form\",\"name\":\"Submit a lead form\",\"description\":\"Records a signup through a lead form: the shopper's email address, their answers to the form's questions, and the consents they gave. The shopper is added to the store's subscribers, and the submission, with the form's labels and consent wording as they were at that moment, is kept for the merchant. Auth: accepts both publishable (tybrite_pk_) and secret (tybrite_sk_) API keys. No customer session is required. Validation: the form's field definitions decide what is accepted. A key in answers that the form does not define is ignored. Phone answers are converted to E.164 using the store's country when the shopper omits a country code. Consent is recorded only from the consents booleans; the wording stored is the form's own. Uniform response: a first signup and a repeat signup by the same email both return 200 with the same shape. Every submission appends to the form's history. Spam protection: the field named by hp_field on the form is rendered hidden; a submission that fills it is acknowledged with a normal 200 and discarded. The same applies to a submission that carries a form_token that is forged, issued for another form, or older than seven days, one made within two seconds of the token being issued, and (once the platform requires it) one with no token, and one whose answers are mostly links or whose email address is a throwaway domain. Where the form reports captcha.available, it may also require a challenge: send the widget's result as captcha_token; when a challenge is required and verification is unavailable, the request answers 503. Where captcha.available is false no challenge is asked for and the other protections apply. Rate limits: per address and per form, and per email address per form. A secret key is called from the merchant's server, so it should send the shopper's address in X-Forwarded-Shopper-Ip; without it, every request on that key counts as one address. The header is ignored on a publishable key, which is called from the shopper's own browser. Idempotency: a request that repeats an Idempotency-Key with the same body returns the original result without recording a second submission; the same key with a different body answers 409.\",\"url\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tybritelabs.com/api-reference/cms/submit-a-lead-form#webpage\"},\"dateModified\":\"2026-10-26T08:02:49.278Z\",\"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","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"}]},{"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":"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":"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"}]},{"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"}]},{"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","description":"Returns the signed token a submission must carry. Request it when the form is shown, so that it\nis at least two seconds old by the time the shopper submits. A token is valid for one form on one\nstore for seven days and carries no data. The response is never cached.\n\n**Auth:** accepts both publishable (`tybrite_pk_*`) and secret (`tybrite_sk_*`) API keys.\n\n**Rate limits:** per address and store. A secret key is called from the merchant's server and\nshould send the shopper's address in `X-Forwarded-Shopper-Ip`.\n","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","description":"Calculate dynamic prices for products based on customer segment, location, volume, and geographic currency detection.\n \n**Multi-Currency Support:**\n- Automatically detects currency based on customer location (coordinates or place name)\n- Converts prices from store's base currency to detected currency\n- Falls back to store's default currency if no location provided\n- Works with both simple and multi-variant products\n \n**Multi-Variant Support:**\n- Returns flat structure with default variant data (keeps payload small for browsing)\n- Use `has_variants` flag to determine if detail fetch needed\n- For full variant pricing, use GET /v1/prices/products/:id endpoint\n \n**Dynamic Pricing:**\n- Customer segment-based pricing (RFM segmentation)\n- Customer tier-based pricing (Gold, Silver, Bronze)\n- Volume/quantity-based discounts\n- Region-specific pricing rules\n- Time-based promotions\n- Rules adjust the variant's online price (its online sale price when one applies); a rule never reads the in-store price\n \n**Field Filtering:**\n- Use `fields` parameter to reduce bandwidth by 50-90%\n- Supports nested fields with dot notation\n- Example: `fields=name,display_price,display_currency,price_breakdown.base_price`\n","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"}]},{"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":"Submit a lead form - Galactic Core API Documentation","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-DKJwRUt2.js","utils-CWD_VS3u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-oFjciODD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C76WsxC3.js","snippetPresets-DvPMxpX_.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-7TwLLapg.js","ApiExamples-CuNQfndH.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BVFpVUoF.js","shallow-t59Jg5Kr.js","getApiPlaygroundDisplay-C_JZ4amX.js","CodeSnippet-CLRDnx_h.js","CodeSnippets-C2myU4kc.js","getPastedJson-B-JaVXw7.js","icon-BA-iDhH3.js","MethodPill-D4qZABFp.js","DuplicateIcon-THIDKO1O.js","createIcon-CYYJwgFd.js","DynamicMarkdown-UGQuxDKp.js","SectionHeading-jYELb23h.js","axios-vUo_bRtp.js","Markdown-DKsLa3wy.js","clsx-CefdjKz2.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BaREnp3o.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-sgx_0XzF.js"]}