A Curious API key: curious_sk_… (secret) or curious_pk_…
(publishable), live or test environment (curious_sk_test_…).
Publishable keys are serve-only and origin-gated; declare and
identify require a secret key. A revoked or unknown key is a 401.
The counterfactual baseline: the content you would serve without
Curious. Singular, never an array; required whenever the call creates
an experiment. A changed control supersedes the experiment.
Additional starting points beside the control: one entry or a list,
each bare content or {content, hypothesis}. Additive and idempotent:
an entry the experiment already has is skipped. Entries that duplicate
an earlier entry in the same request are skipped with an arm_invalid
warning, and so are entries that violate the format or the
requirements, or that would exceed the 50-active-arm cap. Two rules are
request errors (400): an entry whose content equals the control's, and
more than 10 distinct entries after duplicates are dropped — the limit
counts distinct contents, so the list itself is not capped here.
Show child attributes
rewards
stringobject(string | object)[]
The rewards the experiment optimizes. Shorthand: a name, an object, or
a list of either; a bare name means a binary reward with weight 1 and
a one-day window.
Minimum string length: 1
constraints
object[]
Guardrails an arm may not breach. Each (name, type, bound, properties) identity may appear once; threshold, threshold_type
and window_seconds are its adjustable fields. Changing constraints
never supersedes the experiment.
Show child attributes
requirements
object
Phrase rules every arm must satisfy. Changing them supersedes the experiment.
Show child attributes
instructions
string
element_type
enum<string> | null
The element's kind. Case-insensitive on input. Null means unset.
Available options:
push_notification,
email_subject,
email_preview,
email_body,
email,
button_cta,
hero,
landing_page,
blog_post,
paywall,
null
format
object
The structural content contract: a single field spec, or an object of
named field specs. Omitted on a first call, it is inferred from the
control; declared, the control must match it. A changed format
supersedes the experiment.
Option 1
Option 2
Option 3
Option 4
Option 5
Show child attributes
variables
string[]
Names that arm content may reference as {{name|fallback}},
substituted from the user's identifiers and attributes at decision
time. Defaults, on creation, to the identifier and attribute keys sent.
Updates in place.
Pattern: ^\w+$
parameters
object
Element-content facts fixed for the experiment and reproduced verbatim
through {{placeholders}}. Keys match ^\w+$; the namespace is
disjoint from variables. Any change supersedes the experiment.
Show child attributes
options
object
Serving-policy knobs. assignment, approval and
minimum_effect_size update in place; holdout is fixed for the
experiment's life and a differing value supersedes it. Every default
is resolved when the experiment is created and stored with it, so a
later change to a default never alters a live experiment; an omitted
key on a later call carries the stored value forward.
Show child attributes
Response
The element and its live experiment after the declaration was applied.
element_id
string<uuid>
required
experiment_id
string<uuid>
required
experiment_status
enum<string>
required
initializing until the first model is minted, then exploring; concluded is terminal.
Available options:
initializing,
exploring,
concluded
warnings
object[]
Minimum array length: 1
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Curious","description":"Curious documentation: the API, the SDKs and the concepts behind autonomous experimentation.","colors":{"primary":"#9a5b00","light":"#f5a623","dark":"#f5a623"},"logo":{"light":"https://mintcdn.com/curious-6b07e760/gO-q7UDuMBxIZmzz/logo/light.svg?fit=max\u0026auto=format\u0026n=gO-q7UDuMBxIZmzz\u0026q=85\u0026s=7ff653a8a6509841c425bf05c804f265","dark":"https://mintcdn.com/curious-6b07e760/gO-q7UDuMBxIZmzz/logo/dark.svg?fit=max\u0026auto=format\u0026n=gO-q7UDuMBxIZmzz\u0026q=85\u0026s=e82e401e8864e1dc11161e2803a79481"},"favicon":"https://mintcdn.com/curious-6b07e760/tSmuGByjY1TjRmhW/favicon.svg?fit=max\u0026auto=format\u0026n=tSmuGByjY1TjRmhW\u0026q=85\u0026s=2ae448f7bce022cc8591a771451bba6f","api":{"openapi":"openapi/curious.openapi.yaml","examples":{"languages":["bash"]}},"appearance":{"default":"dark"},"background":{"color":{"light":"#ffffff","dark":"#0a0a0b"}},"navbar":{"links":[{"href":"https://trycurious.ai","label":"Website"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.trycurious.ai"}},"footer":{"links":[{"header":"Curious","items":[{"label":"Website","href":"https://trycurious.ai"},{"label":"Dashboard","href":"https://app.trycurious.ai"}]},{"header":"Help","items":[{"label":"Contact support","href":"mailto:team@trycurious.ai"},{"label":"Troubleshooting","href":"/troubleshooting/control-always-served"},{"label":"Errors","href":"/api-reference/errors"}]},{"header":"Developers","items":[{"label":"API reference","href":"/api-reference/overview"},{"label":"llms.txt","href":"https://docs.trycurious.ai/llms.txt"},{"label":"OpenAPI contract","href":"https://docs.trycurious.ai/openapi/curious.openapi.yaml"}]}]},"seo":{"indexing":"navigable"},"fonts":{"family":"Geist"},"styling":{"codeblocks":{"theme":{"light":"min-light","dark":"vesper"}},"latex":false},"contextual":{"options":["copy","view","claude","chatgpt","cursor","vscode","mcp"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"curious-6b07e760","hasAudioNarration":false,"actualSubdomain":"curious-6b07e760","customDomains":["docs.trycurious.ai"],"gitSource":{"type":"github","owner":"trycurious","repo":"curious-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6adfe7c7d4806fe9ae226ae5"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae4da0d06013a05a330a046","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"Documentation","count":38},{"language":"default","tag":"API reference","count":12},{"language":"default","tag":"Concepts","count":12},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"SDKs","count":7},{"language":"default","tag":"Troubleshooting","count":7},{"language":"default","tag":"Server SDK","count":5},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Endpoints","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","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}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--gray-50: 250 250 250;--gray-100: 244 244 245;--gray-200: 236 236 236;--gray-300: 212 212 216;--gray-400: 162 162 170;--gray-500: 115 115 120;--gray-600: 85 85 90;--gray-700: 63 63 67;--gray-800: 36 36 39;--gray-900: 20 20 22;--gray-950: 10 10 11}code,pre,kbd,samp,.font-mono{font-family:\"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace}#topbar-cta-button a,#topbar-cta-button a *{color:#0a0a0b}.tryit-button{background-color:#f5a623;color:#0a0a0b}.tryit-button:hover{background-color:#ffb733;opacity:1}.eyebrow{font-family:\"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace;font-size:0.75rem;font-weight:500;letter-spacing:0.1em;text-transform:uppercase;color:#5f5f66}.dark .eyebrow{color:#8a8a8f}.callout{border-color:rgb(var(--gray-200));background-color:rgb(var(--gray-50))}.dark .callout{border-color:#242427;background-color:#141416}.callout [data-component-part=\"callout-content\"],.callout [data-component-part=\"callout-content\"] a{color:rgb(var(--gray-700))}.dark .callout [data-component-part=\"callout-content\"],.dark .callout [data-component-part=\"callout-content\"] a{color:#ececec}.callout [data-component-part=\"callout-icon\"] svg{color:#5f5f66}.dark .callout [data-component-part=\"callout-icon\"] svg{color:#8a8a8f}.callout:is([data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-icon\"] svg{color:#9a5b00}.dark .callout:is([data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-icon\"] svg{color:#f5a623}[data-component-part=\"card-icon\"] svg{background-color:#5f5f66}.dark [data-component-part=\"card-icon\"] svg{background-color:#8a8a8f}#sidebar li[data-active=\"true\"]>a{background-color:rgb(var(--gray-100))}.dark #sidebar li[data-active=\"true\"]>a{background-color:#141416}.nav-tag-pill-text{color:rgb(var(--gray-600));background-color:rgb(var(--gray-100))}.dark .nav-tag-pill-text{color:#a2a2aa;background-color:#1c1c1f}.method-pill,.method-nav-pill>span{font-family:\"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace;color:rgb(var(--gray-700));background-color:rgb(var(--gray-100))}.dark .method-pill,.dark .method-nav-pill>span{color:#a2a2aa;background-color:#1c1c1f}[data-component-part=\"field-name\"]{color:rgb(var(--gray-900))}.dark [data-component-part=\"field-name\"]{color:#ececec}[data-component-part=\"field-required-pill\"]{color:rgb(var(--gray-600));background-color:rgb(var(--gray-100))}.dark [data-component-part=\"field-required-pill\"]{color:#a2a2aa;background-color:#1c1c1f}html:not(.dark) pre span[style*=\"color:#D32F2F\"],html:not(.dark) pre span[style*=\"color:#1976D2\"]{color:#3f3f43!important}html:not(.dark) pre span[style*=\"color:#22863A\"],html:not(.dark) pre span[style*=\"color:#2B5581\"]{color:#55555a!important}html:not(.dark) pre span[style*=\"color:#6F42C1\"]{color:#9a5b00!important}html:not(.dark) pre span[style*=\"color:#C2C3C5\"]{color:#6b6b70!important}.dark pre span[style*=\"--shiki-dark:#99FFE4\"]{color:#c8c8cc!important}@media (max-width: 767px){[data-assistant-bar]{display:none}}@media (max-width: 1023px){#search-bar-entry-mobile,#assistant-entry-mobile,#navbar button[aria-label=\"More actions\"]{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}}[data-layout-item=\"page-header\"]>.prose{font-size:1.0625rem;line-height:1.55;color:#5f5f66}.dark [data-layout-item=\"page-header\"]>.prose{color:#a2a2aa}@media (max-width: 767px){[data-layout-item=\"page-header\"]>.prose{font-size:1rem}}html:not(.dark) :is(.code-block,.code-group,#request-example,#response-example){background-color:#f7f7f8;border-color:#e4e4e7}html:not(.dark) :is(.code-block,.code-group,#request-example,#response-example) :is(pre,div){background-color:transparent!important}html:not(.dark) .code-block-fade-overlay{background-image:linear-gradient(to right, rgb(247 247 248 / 0) 0px, rgb(247 247 248 / 0.2) 10px, rgb(247 247 248 / 0.5) 25px, rgb(247 247 248 / 0.8) 35px, #f7f7f8 45px)!important}html:not(.dark) [data-component-part=\"step-indicator\"]{background-color:#f4f4f5;box-shadow:inset 0 0 0 1px #e4e4e7}html:not(.dark) .callout{background-color:#f7f7f8;border-color:#e4e4e7}::selection{background-color:rgb(245 166 35 / 0.3)}"}],"page":{"pagePath":"api-reference/declare","slug":"/api-reference/declare","pageMetadata":{"title":"Declare","description":"Configure an element without serving a user.","openapi":"POST /declare","href":"/api-reference/declare"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Configure an element without serving a user.\"\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":{"codeStyling":{"theme":{"light":"min-light","dark":"vesper"}},"config":{},"pageMetadata":{"title":"Declare","description":"Configure an element without serving a user.","openapi":"POST /declare","href":"/api-reference/declare"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["declare"],"operationId":"declare","summary":"Configure an element without serving a user","description":"Configure an element without serving a user.","requestBody":"f492989f-218f-4201-add5-fdfae08c6d9b","responses":{"200":"96e7365b-4382-499c-ae06-1fcf37439d36","400":"a62298e8-aec6-45aa-8fcf-3265b33692f9","401":"8019369d-be7a-4a2f-8e82-bc56a8b9e600","403":"76163956-0231-4d02-9b90-516b8810625f","409":"c3ccf317-1a62-4bbf-8b8f-c49292f51d57","429":"d1ee831e-7785-4b5f-aa1f-95629a50a506","500":"cce95931-7cfe-459d-a804-91ad64ead5f2","502":"71b1f053-6ba8-421b-ac9a-07cd34434145","default":"5a262061-e139-4765-b0b2-a17f2b9aebf6"},"method":"post","type":"path","servers":["6a74dd70-0f4b-4221-8637-556d9c4897e2"],"security":["c1e0659d-4db3-451c-93be-2002caf6cb13"],"path":"/declare","baseUrlOptions":["https://api.trycurious.ai/v1"],"title":"Configure an element without serving a user","codeSamples":[],"requestExampleLanguages":["bash"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["element"],"properties":{"element":{"type":"string","minLength":1,"pattern":"\\S","isRequired":true,"uniqueKey":"element","typeLabel":"string"},"control":{"oneOf":[{"type":"object","description":"The counterfactual baseline: the content you would serve without\nCurious. Singular, never an array; required whenever the call creates\nan experiment. A changed control supersedes the experiment.\n","required":["content"],"properties":{"content":{"oneOf":[{"type":"string","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"control.oneOf.0.content.oneOf.0","typeLabel":"string"},{"type":"number","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"control.oneOf.0.content.oneOf.1","typeLabel":"number"},{"type":"object","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"control.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"control.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"control.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"control.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"control.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"control.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"control.oneOf.0","typeLabel":"object"},{"type":"string","description":"The counterfactual baseline: the content you would serve without\nCurious. Singular, never an array; required whenever the call creates\nan experiment. A changed control supersedes the experiment.\n","uniqueKey":"control.oneOf.1","typeLabel":"string"},{"type":"number","description":"The counterfactual baseline: the content you would serve without\nCurious. Singular, never an array; required whenever the call creates\nan experiment. A changed control supersedes the experiment.\n","uniqueKey":"control.oneOf.2","typeLabel":"number"},{"type":"object","description":"The counterfactual baseline: the content you would serve without\nCurious. Singular, never an array; required whenever the call creates\nan experiment. A changed control supersedes the experiment.\n","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"control.oneOf.3.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"control.oneOf.3.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"control.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"control.oneOf.3.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"control.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"control.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"control.oneOf.3","typeLabel":"object"}],"uniqueKey":"control","typeLabel":"object · string · number · object"},"arms":{"oneOf":[{"type":"object","description":"Additional starting points beside the control: one entry or a list,\neach bare content or `{content, hypothesis}`. Additive and idempotent:\nan entry the experiment already has is skipped. Entries that duplicate\nan earlier entry in the same request are skipped with an `arm_invalid`\nwarning, and so are entries that violate the format or the\nrequirements, or that would exceed the 50-active-arm cap. Two rules are\nrequest errors (400): an entry whose content equals the control's, and\nmore than 10 distinct entries after duplicates are dropped — the limit\ncounts distinct contents, so the list itself is not capped here.\n","required":["content"],"properties":{"content":{"oneOf":[{"type":"string","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"arms.oneOf.0.content.oneOf.0","typeLabel":"string"},{"type":"number","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"arms.oneOf.0.content.oneOf.1","typeLabel":"number"},{"type":"object","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"arms.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"arms.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"arms.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"arms.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"arms.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"arms.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"arms.oneOf.0","typeLabel":"object"},{"type":"string","description":"Additional starting points beside the control: one entry or a list,\neach bare content or `{content, hypothesis}`. Additive and idempotent:\nan entry the experiment already has is skipped. Entries that duplicate\nan earlier entry in the same request are skipped with an `arm_invalid`\nwarning, and so are entries that violate the format or the\nrequirements, or that would exceed the 50-active-arm cap. Two rules are\nrequest errors (400): an entry whose content equals the control's, and\nmore than 10 distinct entries after duplicates are dropped — the limit\ncounts distinct contents, so the list itself is not capped here.\n","uniqueKey":"arms.oneOf.1","typeLabel":"string"},{"type":"number","description":"Additional starting points beside the control: one entry or a list,\neach bare content or `{content, hypothesis}`. Additive and idempotent:\nan entry the experiment already has is skipped. Entries that duplicate\nan earlier entry in the same request are skipped with an `arm_invalid`\nwarning, and so are entries that violate the format or the\nrequirements, or that would exceed the 50-active-arm cap. Two rules are\nrequest errors (400): an entry whose content equals the control's, and\nmore than 10 distinct entries after duplicates are dropped — the limit\ncounts distinct contents, so the list itself is not capped here.\n","uniqueKey":"arms.oneOf.2","typeLabel":"number"},{"type":"object","description":"Additional starting points beside the control: one entry or a list,\neach bare content or `{content, hypothesis}`. Additive and idempotent:\nan entry the experiment already has is skipped. Entries that duplicate\nan earlier entry in the same request are skipped with an `arm_invalid`\nwarning, and so are entries that violate the format or the\nrequirements, or that would exceed the 50-active-arm cap. Two rules are\nrequest errors (400): an entry whose content equals the control's, and\nmore than 10 distinct entries after duplicates are dropped — the limit\ncounts distinct contents, so the list itself is not capped here.\n","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.3.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.3.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"arms.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"arms.oneOf.3.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"arms.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"arms.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"arms.oneOf.3","typeLabel":"object"},{"type":"array","items":{"oneOf":[{"type":"object","description":"Bare content, or `{content, hypothesis}`. An object with a `content` key is the wrapper.","required":["content"],"properties":{"content":{"oneOf":[{"type":"string","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.0","typeLabel":"string"},{"type":"number","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","isRequired":true,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.1","typeLabel":"number"},{"type":"object","description":"Arm content: whatever the caller's renderer displays — a string, a\nnumber, or a non-empty object of fields. Never an array or a boolean at\nthe top level; nested values follow `ContentValue`.\n","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"string","description":"Bare content, or `{content, hypothesis}`. An object with a `content` key is the wrapper.","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.1","typeLabel":"string"},{"type":"number","description":"Bare content, or `{content, hypothesis}`. An object with a `content` key is the wrapper.","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.2","typeLabel":"number"},{"type":"object","description":"Bare content, or `{content, hypothesis}`. An object with a `content` key is the wrapper.","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"object","description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","minProperties":1,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.3.items.[INDEX]","typeLabel":"any"},"description":"A content value at any depth: a string, a finite number, an object of\nvalues, or an array of values. Never a boolean or null, and never a\nfield named `type` or `__proto__` — the format grammar cannot represent\nthem. Two rules stay in prose because JSON Schema cannot state them:\narrays are homogeneous, and nesting stops at 4 container levels.\n","maxItems":100,"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"arms.oneOf.4.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"arms.oneOf.4.items.[INDEX]","typeLabel":"object · string · number · object"},"description":"Additional starting points beside the control: one entry or a list,\neach bare content or `{content, hypothesis}`. Additive and idempotent:\nan entry the experiment already has is skipped. Entries that duplicate\nan earlier entry in the same request are skipped with an `arm_invalid`\nwarning, and so are entries that violate the format or the\nrequirements, or that would exceed the 50-active-arm cap. Two rules are\nrequest errors (400): an entry whose content equals the control's, and\nmore than 10 distinct entries after duplicates are dropped — the limit\ncounts distinct contents, so the list itself is not capped here.\n","uniqueKey":"arms.oneOf.4","typeLabel":"object · string · number · object[]"}],"uniqueKey":"arms","typeLabel":"object · string · number · object · object · string · number · object[]"},"rewards":{"oneOf":[{"type":"string","description":"The rewards the experiment optimizes. Shorthand: a name, an object, or\na list of either; a bare name means a binary reward with weight 1 and\na one-day window.\n","minLength":1,"uniqueKey":"rewards.oneOf.0","typeLabel":"string"},{"type":"object","description":"The rewards the experiment optimizes. Shorthand: a name, an object, or\na list of either; a bare name means a binary reward with weight 1 and\na one-day window.\n","required":["name"],"conditionallyRequiredProperties":{"type":[{},{}]},"properties":{"name":{"type":"string","minLength":1,"description":"Past-tense event name (`purchased`, `clicked`).","isRequired":true,"uniqueKey":"rewards.oneOf.1.name","typeLabel":"string"},"type":{"type":"string","enum":["binary","count","semicontinuous","continuous"],"default":"binary","description":"The statistical shape of the reward; it selects the model.","conditionalRequirements":[{},{}],"uniqueKey":"rewards.oneOf.1.type","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","default":1,"not":{"const":0},"description":"Finite and non-zero. Negative for cost-like attribution.","uniqueKey":"rewards.oneOf.1.weight","typeLabel":"number"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"description":"Attribution window after the decision.","uniqueKey":"rewards.oneOf.1.window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"Only events whose properties match attribute to this reward.","uniqueKey":"rewards.oneOf.1.properties","typeLabel":"object"},"value":{"type":"string","pattern":"^(event\\.value|event\\.properties\\..+|arm\\.[^.\\[]+)$","description":"Value source, `semicontinuous` rewards only: `event.value`\n(default), `event.properties.\u003ckey>`, or `arm.\u003cfield>` — the served\narm's top-level content field (no nested or array paths) supplies\nthe amount, and the format must bound that field as a number with\n`min` and `max`.\n","uniqueKey":"rewards.oneOf.1.value","typeLabel":"string"},"baseline_rate":{"oneOf":[{"type":"number","description":"Optional prior information, never identity: the rate the control\ncurrently achieves, in the reward's own units. Binary and\nsemicontinuous rewards declare an occurrence probability strictly\nbetween 0 and 1; count rewards a strictly positive expected count;\ncontinuous rewards any finite value.\n","uniqueKey":"rewards.oneOf.1.baseline_rate.oneOf.0","typeLabel":"number"},{"type":"null","description":"Optional prior information, never identity: the rate the control\ncurrently achieves, in the reward's own units. Binary and\nsemicontinuous rewards declare an occurrence probability strictly\nbetween 0 and 1; count rewards a strictly positive expected count;\ncontinuous rewards any finite value.\n","uniqueKey":"rewards.oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"rewards.oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"rewards.oneOf.1","typeLabel":"object"},{"type":"array","items":{"oneOf":[{"type":"string","minLength":1,"uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"object","required":["name"],"conditionallyRequiredProperties":{"type":[{},{}]},"properties":{"name":{"type":"string","minLength":1,"description":"Past-tense event name (`purchased`, `clicked`).","isRequired":true,"uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.name","typeLabel":"string"},"type":{"type":"string","enum":["binary","count","semicontinuous","continuous"],"default":"binary","description":"The statistical shape of the reward; it selects the model.","conditionalRequirements":[{},{}],"uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","default":1,"not":{"const":0},"description":"Finite and non-zero. Negative for cost-like attribution.","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.weight","typeLabel":"number"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"description":"Attribution window after the decision.","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"Only events whose properties match attribute to this reward.","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.properties","typeLabel":"object"},"value":{"type":"string","pattern":"^(event\\.value|event\\.properties\\..+|arm\\.[^.\\[]+)$","description":"Value source, `semicontinuous` rewards only: `event.value`\n(default), `event.properties.\u003ckey>`, or `arm.\u003cfield>` — the served\narm's top-level content field (no nested or array paths) supplies\nthe amount, and the format must bound that field as a number with\n`min` and `max`.\n","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.value","typeLabel":"string"},"baseline_rate":{"oneOf":[{"type":"number","description":"Optional prior information, never identity: the rate the control\ncurrently achieves, in the reward's own units. Binary and\nsemicontinuous rewards declare an occurrence probability strictly\nbetween 0 and 1; count rewards a strictly positive expected count;\ncontinuous rewards any finite value.\n","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate.oneOf.0","typeLabel":"number"},{"type":"null","description":"Optional prior information, never identity: the rate the control\ncurrently achieves, in the reward's own units. Binary and\nsemicontinuous rewards declare an occurrence probability strictly\nbetween 0 and 1; count rewards a strictly positive expected count;\ncontinuous rewards any finite value.\n","uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"rewards.oneOf.2.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"rewards.oneOf.2.items.[INDEX]","typeLabel":"string | object"},"description":"The rewards the experiment optimizes. Shorthand: a name, an object, or\na list of either; a bare name means a binary reward with weight 1 and\na one-day window.\n","uniqueKey":"rewards.oneOf.2","typeLabel":"(string | object)[]"}],"uniqueKey":"rewards","typeLabel":"string | object | (string | object)[]"},"constraints":{"type":"array","description":"Guardrails an arm may not breach. Each `(name, type, bound,\nproperties)` identity may appear once; `threshold`, `threshold_type`\nand `window_seconds` are its adjustable fields. Changing constraints\nnever supersedes the experiment.\n","items":{"type":"object","required":["name","threshold_type","threshold","bound"],"properties":{"name":{"type":"string","minLength":1,"description":"Past-tense event name.","isRequired":true,"uniqueKey":"constraints.items.[INDEX].name","typeLabel":"string"},"threshold_type":{"type":"string","enum":["relative","absolute"],"isRequired":true,"uniqueKey":"constraints.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"threshold":{"type":"number","description":"Finite. For a binary constraint with an absolute threshold, a rate in [0, 1].","isRequired":true,"uniqueKey":"constraints.items.[INDEX].threshold","typeLabel":"number"},"bound":{"type":"string","enum":["upper","lower"],"isRequired":true,"uniqueKey":"constraints.items.[INDEX].bound","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["binary","continuous"],"default":"binary","uniqueKey":"constraints.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"uniqueKey":"constraints.items.[INDEX].window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"constraints.items.[INDEX].properties","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"constraints.items.[INDEX]","typeLabel":"object"},"uniqueKey":"constraints","typeLabel":"object[]"},"requirements":{"type":"object","description":"Phrase rules every arm must satisfy. Changing them supersedes the experiment.","properties":{"forbidden_phrases":{"type":"array","items":{"type":"string","uniqueKey":"requirements.forbidden_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"requirements.forbidden_phrases","typeLabel":"string[]"},"required_phrases":{"type":"array","items":{"type":"string","uniqueKey":"requirements.required_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"requirements.required_phrases","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"requirements","typeLabel":"object"},"instructions":{"type":"string","uniqueKey":"instructions","typeLabel":"string"},"element_type":{"oneOf":[{"type":"string","enum":["push_notification","email_subject","email_preview","email_body","email","button_cta","hero","landing_page","blog_post","paywall",null],"description":"The element's kind. Case-insensitive on input. Null means unset.","uniqueKey":"element_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["push_notification","email_subject","email_preview","email_body","email","button_cta","hero","landing_page","blog_post","paywall",null],"description":"The element's kind. Case-insensitive on input. Null means unset.","uniqueKey":"element_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"element_type","typeLabel":"enum\u003cstring> | null"},"format":{"oneOf":[{"type":"object","description":"The structural content contract: a single field spec, or an object of\nnamed field specs. Omitted on a first call, it is inferred from the\ncontrol; declared, the control must match it. A changed format\nsupersedes the experiment.\n","required":["type"],"properties":{"type":{"type":"string","enum":["text","html"],"isRequired":true,"uniqueKey":"format.oneOf.0.type","typeLabel":"enum\u003cstring>"},"min_characters":{"type":"integer","minimum":1,"uniqueKey":"format.oneOf.0.min_characters","typeLabel":"integer"},"max_characters":{"type":"integer","minimum":1,"uniqueKey":"format.oneOf.0.max_characters","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"format.oneOf.0","typeLabel":"object"},{"type":"object","description":"The structural content contract: a single field spec, or an object of\nnamed field specs. Omitted on a first call, it is inferred from the\ncontrol; declared, the control must match it. A changed format\nsupersedes the experiment.\n","required":["type"],"properties":{"type":{"type":"string","const":"number","isRequired":true,"uniqueKey":"format.oneOf.1.type","typeLabel":"string"},"min":{"type":"number","uniqueKey":"format.oneOf.1.min","typeLabel":"number"},"max":{"type":"number","uniqueKey":"format.oneOf.1.max","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"format.oneOf.1","typeLabel":"object"},{"type":"object","description":"The structural content contract: a single field spec, or an object of\nnamed field specs. Omitted on a first call, it is inferred from the\ncontrol; declared, the control must match it. A changed format\nsupersedes the experiment.\n","required":["type","values"],"properties":{"type":{"type":"string","const":"enum","isRequired":true,"uniqueKey":"format.oneOf.2.type","typeLabel":"string"},"values":{"type":"array","minItems":1,"items":{"type":"string","uniqueKey":"format.oneOf.2.values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"format.oneOf.2.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"format.oneOf.2","typeLabel":"object"},{"type":"object","description":"The structural content contract: a single field spec, or an object of\nnamed field specs. Omitted on a first call, it is inferred from the\ncontrol; declared, the control must match it. A changed format\nsupersedes the experiment.\n","required":["type","items"],"properties":{"type":{"type":"string","const":"array","isRequired":true,"uniqueKey":"format.oneOf.3.type","typeLabel":"string"},"items":{"oneOf":[{"$circularRef":"f0acf0f7-367b-4f5f-8500-8f43e8835c4c","isRequired":true}],"isRequired":true,"uniqueKey":"format.oneOf.3.\\items","typeLabel":"any"},"min_items":{"type":"integer","minimum":0,"uniqueKey":"format.oneOf.3.min_items","typeLabel":"integer"},"max_items":{"type":"integer","minimum":1,"maximum":100,"uniqueKey":"format.oneOf.3.max_items","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"format.oneOf.3","typeLabel":"object"},{"type":"object","description":"The structural content contract: a single field spec, or an object of\nnamed field specs. Omitted on a first call, it is inferred from the\ncontrol; declared, the control must match it. A changed format\nsupersedes the experiment.\n","minProperties":1,"uniqueKey":"format.oneOf.4","typeLabel":"object"}],"uniqueKey":"format","typeLabel":"object"},"variables":{"type":"array","description":"Names that arm content may reference as `{{name|fallback}}`,\nsubstituted from the user's identifiers and attributes at decision\ntime. Defaults, on creation, to the identifier and attribute keys sent.\nUpdates in place.\n","items":{"type":"string","pattern":"^\\w+$","not":{"const":{"$circularRef":"__proto__"}},"uniqueKey":"variables.items.[INDEX]","typeLabel":"string"},"uniqueKey":"variables","typeLabel":"string[]"},"parameters":{"type":"object","description":"Element-content facts fixed for the experiment and reproduced verbatim\nthrough `{{placeholders}}`. Keys match `^\\w+$`; the namespace is\ndisjoint from `variables`. Any change supersedes the experiment.\n","propertyNames":{"pattern":"^\\w+$","not":{"const":{"$circularRef":"__proto__"}}},"additionalProperties":{"description":"Any JSON value. Only non-null scalars are substituted into placeholders; structured values are visible to generation.","uniqueKey":"parameters.additionalProperties","typeLabel":"any"},"uniqueKey":"parameters","typeLabel":"object"},"options":{"type":"object","description":"Serving-policy knobs. `assignment`, `approval` and\n`minimum_effect_size` update in place; `holdout` is fixed for the\nexperiment's life and a differing value supersedes it. Every default\nis resolved when the experiment is created and stored with it, so a\nlater change to a default never alters a live experiment; an omitted\nkey on a later call carries the stored value forward.\n","properties":{"assignment":{"type":"string","enum":["static","dynamic"],"default":"static","description":"`static` (the default): the same user keeps the same arm while it stays active. `dynamic`: every call is chosen afresh, for per-send channels such as push or email.","uniqueKey":"options.assignment","typeLabel":"enum\u003cstring>"},"approval":{"type":"string","enum":["auto","manual"],"description":"Whether generated arms serve immediately or wait for operator review. Defaults to the predecessor's value, then the organization's, then `manual`.","uniqueKey":"options.approval","typeLabel":"enum\u003cstring>"},"holdout":{"type":"number","minimum":0.02,"maximum":0.2,"default":0.05,"description":"Share of users held out as the control cohort.","uniqueKey":"options.holdout","typeLabel":"number"},"minimum_effect_size":{"type":"number","minimum":0.05,"maximum":1,"default":0.2,"description":"The smallest relative difference from the control that matters to\nyou. Two arms whose contrast is confidently inside this share of the\ncontrol's composite count as practically equivalent, and one of them\nis retired. Mutable in place; never widened by the platform.\n","uniqueKey":"options.minimum_effect_size","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"options","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"declare":{"title":"declare","value":{"element":"upgrade_prompt","element_type":"paywall","control":{"content":{"headline":"Upgrade today","body":"Unlock unlimited templates with Pro."}},"rewards":[{"name":"purchased","properties":{"plan":"pro"}}],"format":{"headline":{"type":"text","max_characters":90},"body":{"type":"text"}},"options":{"approval":"manual","holdout":0.05}}}},"x-rejected-examples":{"serving_field":{"message":"Declare configures an element without a user: user_id belong on decide, not here","value":{"element":"upgrade_prompt","user_id":"user_123","control":{"content":"Upgrade today"}}},"missing_name":{"message":"element is required","value":{"control":{"content":"Upgrade today"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"96e7365b-4382-499c-ae06-1fcf37439d36":{"description":"The element and its live experiment after the declaration was applied.","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["element_id","experiment_id","experiment_status"],"properties":{"element_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"element_id","typeLabel":"string\u003cuuid>"},"experiment_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"experiment_id","typeLabel":"string\u003cuuid>"},"experiment_status":{"type":"string","enum":["initializing","exploring","concluded"],"description":"`initializing` until the first model is minted, then `exploring`; `concluded` is terminal.","isRequired":true,"uniqueKey":"experiment_status","typeLabel":"enum\u003cstring>"},"warnings":{"type":"array","minItems":1,"items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["arm_invalid","serving_control_only"],"isRequired":true,"uniqueKey":"warnings.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"warnings.items.[INDEX].message","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"uniqueKey":"warnings","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"declared":{"title":"declared","value":{"element_id":"5c4d3e2f-0000-4000-8000-00000000f001","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e001","experiment_status":"initializing"}}},"exampleType":"examples"}},"exampleType":"examples"},"a62298e8-aec6-45aa-8fcf-3265b33692f9":{"description":"The request was rejected before anything was written. `error` is\n`invalid_request` (or `invalid_json` for an unparseable body) and\n`message` the human-readable reason, the same string the examples\nquote.\n","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable, machine-readable; an SDK maps these to exception classes.","enum":["invalid_request","invalid_json","unauthorized","forbidden","not_found","method_not_allowed","conflict","idempotency_error","lock_timeout","rate_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable reason; the text this document quotes.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"unknown_field":{"title":"unknown_field","value":{"error":"invalid_request","message":"Unknown field(s): segment. Allowed: element, user_id, control, arms, rewards, constraints, requirements, instructions, identifiers, attributes, context, idempotency_key, element_type, format, variables, parameters, options"}},"invalid_json":{"title":"invalid_json","value":{"error":"invalid_json","message":"Invalid JSON body"}}},"exampleType":"examples"}},"exampleType":"examples"},"8019369d-be7a-4a2f-8e82-bc56a8b9e600":{"description":"Missing, malformed, unknown or revoked API key.","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable, machine-readable; an SDK maps these to exception classes.","enum":["invalid_request","invalid_json","unauthorized","forbidden","not_found","method_not_allowed","conflict","idempotency_error","lock_timeout","rate_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable reason; the text this document quotes.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"missing":{"title":"missing","value":{"error":"unauthorized","message":"Missing or invalid API key"}},"revoked":{"title":"revoked","value":{"error":"unauthorized","message":"API key has been revoked"}}},"exampleType":"examples"}},"exampleType":"examples"},"76163956-0231-4d02-9b90-516b8810625f":{"description":"A publishable key from an origin not on its allowlist, or a\npublishable key on an endpoint that requires a secret key.\n","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable, machine-readable; an SDK maps these to exception classes.","enum":["invalid_request","invalid_json","unauthorized","forbidden","not_found","method_not_allowed","conflict","idempotency_error","lock_timeout","rate_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable reason; the text this document quotes.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"origin":{"title":"origin","value":{"error":"forbidden","message":"Origin not allowed for this key"}},"secret_required":{"title":"secret_required","value":{"error":"forbidden","message":"Declare requires a secret key"}}},"exampleType":"examples"}},"exampleType":"examples"},"c3ccf317-1a62-4bbf-8b8f-c49292f51d57":{"description":"The experiment is at its active-arm limit.","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable, machine-readable; an SDK maps these to exception classes.","enum":["invalid_request","invalid_json","unauthorized","forbidden","not_found","method_not_allowed","conflict","idempotency_error","lock_timeout","rate_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable reason; the text this document quotes.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"arm_limit":{"title":"arm_limit","value":{"error":"conflict","message":"Experiment already has 50 active arms. Deactivate an active arm before activating another."}}},"exampleType":"examples"}},"exampleType":"examples"},"d1ee831e-7785-4b5f-aa1f-95629a50a506":{"description":"The organization exceeded its per-endpoint request rate for the\ncurrent minute. `Retry-After` says how many seconds remain in it.\n","headers":{"Retry-After":{"description":"Seconds until the current minute ends.","schema":{"type":"integer","minimum":1}},"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","const":"rate_limit_exceeded","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present when the 429 came from the API gateway rather than the service (the id is in the header either way).","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"limited":{"title":"limited","value":{"error":"rate_limit_exceeded","message":"Request rate limit exceeded for this organization; retry after the current minute ends."}}},"exampleType":"examples"}},"exampleType":"examples"},"cce95931-7cfe-459d-a804-91ad64ead5f2":{"description":"A sanitized internal fault. Quote `request_id` to support; it\ncorrelates to the server-side log and error capture. A 500 after a\nkeyed decide may mean the decision committed and the response was\nlost — retry with the same `idempotency_key` to find out.\n","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message","request_id"],"properties":{"error":{"type":"string","const":"internal_error","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Correlation handle into the server-side logs; not stored.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"fault":{"title":"fault","value":{"error":"internal_error","message":"Internal error","request_id":"2f7e9c1a-5b3d-4e8f-9a0b-1c2d3e4f5a6b"}}},"exampleType":"examples"}},"exampleType":"examples"},"71b1f053-6ba8-421b-ac9a-07cd34434145":{"description":"The API edge could not complete the call to the origin (a network\nfault between the two, or a connection dropped before the response\narrived). The outcome is ambiguous: the request may or may not have\nbeen applied. Retry only with the same `idempotency_key` (decide) or\n`id` (events), which make a retry safe either way; an unkeyed retry\ncan duplicate the write. Quote `request_id` to support.\n","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message","request_id"],"properties":{"error":{"type":"string","const":"internal_error","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Correlation handle into the server-side logs; not stored.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"unreachable":{"title":"unreachable","value":{"error":"internal_error","message":"The API could not be reached, and the request may or may not have been applied; retry only with the same idempotency_key (decide) or id (events)","request_id":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f"}}},"exampleType":"examples"}},"exampleType":"examples"},"5a262061-e139-4765-b0b2-a17f2b9aebf6":{"description":"Any other status is a response no service function produced — the\nAPI edge or its gateway answered — rewritten into this same envelope\nat the gateway's status (`error` keyed by status: `not_found` for\n404, `rate_limit_exceeded` for 429, `internal_error` for 5xx). A 4xx\nmeans the gateway refused the request before the service (a 404 for\na missing deployment, its own 429, which keeps `Retry-After`); nothing\nwas written. A 5xx is ambiguous — a gateway 502 or 504 can follow a\nservice call that committed and whose response was lost — so, as\nwith the 502 above, retry only with the same `idempotency_key`\n(decide) or `id` (events). A redirect from the gateway is never\nforwarded; it arrives as the 502 above with the message `The API\ngateway answered with a redirect, which the data plane never issues;\nnothing was written`.\n","headers":{"X-Request-Id":{"description":"The server-minted id of this request, on every response. Quote it to\nsupport; on an internal fault it equals the body's `request_id`.\nBrowsers can read it (`Access-Control-Expose-Headers`).\n","schema":{"type":"string","format":"uuid"}},"Retry-After":{"description":"On a 429 only; seconds to wait.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable, machine-readable; an SDK maps these to exception classes.","enum":["invalid_request","invalid_json","unauthorized","forbidden","not_found","method_not_allowed","conflict","idempotency_error","lock_timeout","rate_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable reason; the text this document quotes.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"outage":{"title":"outage","value":{"error":"internal_error","message":"The API could not be reached, and the request may or may not have been applied; retry only with the same idempotency_key (decide) or id (events)","request_id":"3b2a1c0d-9e8f-4a7b-8c6d-5e4f3a2b1c0d"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c1e0659d-4db3-451c-93be-2002caf6cb13":{"apiKey":{"type":"http","scheme":"bearer","description":"A Curious API key: `curious_sk_…` (secret) or `curious_pk_…`\n(publishable), `live` or `test` environment (`curious_sk_test_…`).\nPublishable keys are serve-only and origin-gated; `declare` and\n`identify` require a secret key. A revoked or unknown key is a 401.\n","scopes":[],"schemeName":"apiKey"}}},"servers":{"6a74dd70-0f4b-4221-8637-556d9c4897e2":{"url":"https://api.trycurious.ai/v1","description":"Production. The hostname is the durable abstraction; `/v1` is the published contract."}},"schemas":{"f0acf0f7-367b-4f5f-8500-8f43e8835c4c":{"oneOf":[{"type":"object","description":"A field spec is a typed spec (text, html, number, enum or array) or an\nobject mapping field names to specs. At most 4 container levels.\n","required":["type"],"properties":{"type":{"type":"string","enum":["text","html"],"isRequired":true},"min_characters":{"type":"integer","minimum":1},"max_characters":{"type":"integer","minimum":1}},"additionalProperties":false},{"type":"object","description":"A field spec is a typed spec (text, html, number, enum or array) or an\nobject mapping field names to specs. At most 4 container levels.\n","required":["type"],"properties":{"type":{"type":"string","const":"number","isRequired":true},"min":{"type":"number"},"max":{"type":"number"}},"additionalProperties":false},{"type":"object","description":"A field spec is a typed spec (text, html, number, enum or array) or an\nobject mapping field names to specs. At most 4 container levels.\n","required":["type","values"],"properties":{"type":{"type":"string","const":"enum","isRequired":true},"values":{"type":"array","minItems":1,"items":{"type":"string"},"isRequired":true}},"additionalProperties":false},{"type":"object","description":"A field spec is a typed spec (text, html, number, enum or array) or an\nobject mapping field names to specs. At most 4 container levels.\n","required":["type","items"],"properties":{"type":{"type":"string","const":"array","isRequired":true},"items":{"oneOf":[{"isRequired":true}],"isRequired":true},"min_items":{"type":"integer","minimum":0},"max_items":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},{"type":"object","description":"A field spec is a typed spec (text, html, number, enum or array) or an\nobject mapping field names to specs. At most 4 container levels.\n","minProperties":1}]}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A Curious API key: `curious_sk_…` (secret) or `curious_pk_…`\n(publishable), `live` or `test` environment (`curious_sk_test_…`).\nPublishable keys are serve-only and origin-gated; `declare` and\n`identify` require a secret key. A revoked or unknown key is a 401.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A Curious API key: `curious_sk_…` (secret) or `curious_pk_…`\n(publishable), `live` or `test` environment (`curious_sk_test_…`).\nPublishable keys are serve-only and origin-gated; `declare` and\n`identify` require a secret key. A revoked or unknown key is a 401.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi/curious.openapi.yaml"},"subdomain":"curious-6b07e760","siteName":"Curious","title":"Declare - Curious","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T17:34:55.719Z","originalFileLocation":"api-reference/declare.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=\"dark\"}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=\"Configure an element without serving a user.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Curious\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Declare - Curious\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure an element without serving a user.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Curious\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trycurious.ai/api-reference/declare\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://curious-6b07e760.mintlify.site/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=Declare\u0026amp;description=Configure+an+element+without+serving+a+user.\u0026amp;theme=03df15cacc780b41c883b740\u0026amp;signature=7d06590c636879ec07cef71aae92ae1c080c41ebbe11c414ac737daa5ac0f600\">\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=\"Declare - Curious\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure an element without serving a user.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://curious-6b07e760.mintlify.site/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=Declare\u0026amp;description=Configure+an+element+without+serving+a+user.\u0026amp;theme=03df15cacc780b41c883b740\u0026amp;signature=7d06590c636879ec07cef71aae92ae1c080c41ebbe11c414ac737daa5ac0f600\">\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/curious-6b07e760/IzaiXvtjQ8OqxFqk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Curious\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#9a5b00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trycurious.ai/api-reference/declare\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/declare.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trycurious.ai/#organization\",\"name\":\"Curious\",\"url\":\"https://docs.trycurious.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/curious-6b07e760/gO-q7UDuMBxIZmzz/logo/light.svg?fit=max\u0026auto=format\u0026n=gO-q7UDuMBxIZmzz\u0026q=85\u0026s=7ff653a8a6509841c425bf05c804f265\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trycurious.ai#website\",\"name\":\"Curious\",\"url\":\"https://docs.trycurious.ai\",\"publisher\":{\"@id\":\"https://docs.trycurious.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trycurious.ai/api-reference/declare#webpage\",\"url\":\"https://docs.trycurious.ai/api-reference/declare\",\"name\":\"Declare\",\"description\":\"Configure an element without serving a user.\",\"dateModified\":\"2026-10-27T17:34:55.719Z\",\"isPartOf\":{\"@id\":\"https://docs.trycurious.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trycurious.ai/api-reference/declare#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trycurious.ai/api-reference/declare#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.trycurious.ai/api-reference/decide\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Declare\",\"item\":\"https://docs.trycurious.ai/api-reference/declare\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trycurious.ai/api-reference/declare#apireference\",\"headline\":\"Declare\",\"name\":\"Declare\",\"description\":\"Configure an element without serving a user.\",\"url\":\"https://docs.trycurious.ai/api-reference/declare\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trycurious.ai/api-reference/declare#webpage\"},\"dateModified\":\"2026-10-27T17:34:55.719Z\",\"publisher\":{\"@id\":\"https://docs.trycurious.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trycurious.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Curious\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Curious\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/declare.md","siteName":"Curious","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"API reference","pages":[{"title":"API introduction","sidebarTitle":"Introduction","href":"/api-reference/overview"},{"title":"Errors","href":"/api-reference/errors"},{"title":"Idempotency","href":"/api-reference/idempotency"},{"title":"Rate limits","href":"/api-reference/rate-limits"}]},{"group":"Endpoints","pages":[{"title":"Decide","description":"Serve content for a user and record the decision.","openapi":"POST /decide","href":"/api-reference/decide"},{"title":"Declare","openapi":"POST /declare","href":"/api-reference/declare"},{"title":"Events","description":"Report outcomes, singly or in batches of up to 200.","openapi":"POST /events","href":"/api-reference/events"},{"title":"Identify","openapi":"POST /identify","href":"/api-reference/identify"}]}]}]},"basePath":"","title":"Declare - Curious","buildId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","deploymentId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-NXj-Rqjv.js","utils-m0thOP-_.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D13EKcfm.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema--XTdfsEb.js","snippetPresets-D3s4lmAH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-ChURybxL.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DL8CiXq2.js","shallow-DI2-YB2E.js","getApiPlaygroundDisplay-DxbW7b_y.js","CodeSnippet-CiNYS0pP.js","CodeSnippets-BT87bThu.js","Page-DSpdRuhM.js","getPastedJson-F_g_IrFQ.js","icon-CCIG5BAs.js","MethodPill-DY3E0jwx.js","DuplicateIcon-BN88xnEg.js","createIcon-VCCc5HO5.js","DynamicMarkdown-CaSwclgK.js","SectionHeading-DXV8nWhc.js","axios-vUo_bRtp.js","Markdown-CV32Re6G.js","clsx-5ydLOnhV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-pFDdfjRe.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BUGO5bPJ.js"]}