{
"content": {
"headline": "Don't lose your 47 saved templates",
"body": "Upgrade to Pro and keep every one of them."
},
"arm_id": "3f1c2b6e-0000-4000-8000-00000000a001",
"arm_type": "variant",
"decision_id": "8a7b6c5d-0000-4000-8000-00000000d001",
"experiment_id": "1e2d3c4b-0000-4000-8000-00000000e001",
"experiment_status": "exploring"
}
{
"content": {
"headline": "Don't lose your 47 saved templates",
"body": "Upgrade to Pro and keep every one of them."
},
"arm_id": "3f1c2b6e-0000-4000-8000-00000000a001",
"arm_type": "variant",
"decision_id": "8a7b6c5d-0000-4000-8000-00000000d001",
"experiment_id": "1e2d3c4b-0000-4000-8000-00000000e001",
"experiment_status": "exploring"
}
Authorizations
Authorization
string
header
required
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.
Body
application/json
Option 1
Option 2
element
string
required
Identifier of the surface being optimized.
Minimum string length: 1
Pattern: \S
user_id
string
required
The caller's identifier for the user.
Minimum string length: 1
Pattern: \S
identifiers
object
Durable identity (email, name, phone); merged into the user.
attributes
object
Durable user state (plan, company_size); merged into the user and used for personalization.
context
object
Situational facts for this decision only (device, page); wins over stored attributes on a key collision.
idempotency_key
string
An opaque key, 1–255 characters, generated before the first attempt
and reused on every retry of the same logical request. Same key and
same request replays the original decision; same key and a
different request is a 409. A UUID is the recommended shape. The
key may not contain U+0000 or an unpaired surrogate.
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
Guidance for future generation rounds. Updates in place.
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 decision (singular form), or the per-item results (batch
form). A replayed decision is the original response verbatim plus
replayed: true.
Option 1
Option 2
content
stringnumberobject
required
The selected arm's content after {{variable}} substitution.
arm_id
string<uuid>
required
arm_type
enum<string> | null
required
Available options:
control,
variant,
null
decision_id
string<uuid>
required
The id of the decision row this call committed. Repeated serves of the same arm carry different ids.
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[]
Present only when non-empty.
Minimum array length: 1
Show child attributes
replayed
boolean
Present only when this is the stored response to an earlier request with the same idempotency_key.
{"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/decide","slug":"/api-reference/decide","pageMetadata":{"title":"Decide","description":"Serve content for a user and record the decision.","openapi":"POST /decide","href":"/api-reference/decide"},"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: \"Serve content for a user and record the decision.\"\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":"Decide","description":"Serve content for a user and record the decision.","openapi":"POST /decide","href":"/api-reference/decide"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["decide"],"operationId":"decide","summary":"Decide what content to serve a user","description":"Serve content for a user and record the decision.","requestBody":"eb66d994-c8d9-4acc-b3dd-4f03a273dd47","responses":{"200":"81a53c1d-5301-4e72-8a77-63b26da7232d","400":"281ca419-f339-4149-ab3a-ad14265ed13d","401":"683a41fa-ccbf-4d05-9dd0-6b3991a073f3","403":"bdfc6e2f-218a-46e3-a788-9f6c854e073d","409":"eb9f2253-97f2-44b2-aadb-8be5c8d390ac","429":"56d804f9-942b-463e-9446-2b2da5f58f8c","500":"2ff965db-2945-4fa3-bd27-a56995ecfe03","502":"685598dc-94b5-46e7-a7b9-9c585a52ce35","default":"60459209-cc2d-46ee-b65d-08e3512c3100"},"method":"post","type":"path","servers":["6a74dd70-0f4b-4221-8637-556d9c4897e2"],"security":["c1e0659d-4db3-451c-93be-2002caf6cb13"],"path":"/decide","baseUrlOptions":["https://api.trycurious.ai/v1"],"title":"Decide what content to serve a user","codeSamples":[],"requestExampleLanguages":["bash"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["element","user_id"],"properties":{"element":{"type":"string","minLength":1,"pattern":"\\S","description":"Identifier of the surface being optimized.","isRequired":true,"uniqueKey":"oneOf.0.element","typeLabel":"string"},"user_id":{"type":"string","minLength":1,"pattern":"\\S","description":"The caller's identifier for the user.","isRequired":true,"uniqueKey":"oneOf.0.user_id","typeLabel":"string"},"identifiers":{"type":"object","description":"Durable identity (email, name, phone); merged into the user.","uniqueKey":"oneOf.0.identifiers","typeLabel":"object"},"attributes":{"type":"object","description":"Durable user state (plan, company_size); merged into the user and used for personalization.","uniqueKey":"oneOf.0.attributes","typeLabel":"object"},"context":{"type":"object","description":"Situational facts for this decision only (device, page); wins over stored attributes on a key collision.","uniqueKey":"oneOf.0.context","typeLabel":"object"},"idempotency_key":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^\\u0000\\uD800-\\uDFFF]*$","description":"An opaque key, 1–255 characters, generated before the first attempt\nand reused on every retry of the same logical request. Same key and\nsame request replays the original decision; same key and a\ndifferent request is a 409. A UUID is the recommended shape. The\nkey may not contain U+0000 or an unpaired surrogate.\n","uniqueKey":"oneOf.0.idempotency_key","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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.control.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.0.control.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.0.control.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.0.control.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.0.control.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.control.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.control.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.control.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.control.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.0.control.oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.arms.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.0.arms.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.0.arms.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.0.arms.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.0.arms.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.arms.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.arms.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.arms.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.arms.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.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":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.0.arms.oneOf.4.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.0.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":"oneOf.0.arms.oneOf.4","typeLabel":"object · string · number · object[]"}],"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.rewards.oneOf.1.weight","typeLabel":"number"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"description":"Attribution window after the decision.","uniqueKey":"oneOf.0.rewards.oneOf.1.window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"Only events whose properties match attribute to this reward.","uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.rewards.oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.rewards.oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0.rewards.oneOf.1","typeLabel":"object"},{"type":"array","items":{"oneOf":[{"type":"string","minLength":1,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0.rewards.oneOf.2.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.0.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":"oneOf.0.rewards.oneOf.2","typeLabel":"(string | object)[]"}],"uniqueKey":"oneOf.0.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":"oneOf.0.constraints.items.[INDEX].name","typeLabel":"string"},"threshold_type":{"type":"string","enum":["relative","absolute"],"isRequired":true,"uniqueKey":"oneOf.0.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":"oneOf.0.constraints.items.[INDEX].threshold","typeLabel":"number"},"bound":{"type":"string","enum":["upper","lower"],"isRequired":true,"uniqueKey":"oneOf.0.constraints.items.[INDEX].bound","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["binary","continuous"],"default":"binary","uniqueKey":"oneOf.0.constraints.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"uniqueKey":"oneOf.0.constraints.items.[INDEX].window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.0.constraints.items.[INDEX].properties","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.0.constraints.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.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":"oneOf.0.requirements.forbidden_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.requirements.forbidden_phrases","typeLabel":"string[]"},"required_phrases":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.requirements.required_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.requirements.required_phrases","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"oneOf.0.requirements","typeLabel":"object"},"instructions":{"type":"string","description":"Guidance for future generation rounds. Updates in place.","uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.element_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.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":"oneOf.0.format.oneOf.0.type","typeLabel":"enum\u003cstring>"},"min_characters":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.format.oneOf.0.min_characters","typeLabel":"integer"},"max_characters":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.format.oneOf.0.max_characters","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.format.oneOf.1.type","typeLabel":"string"},"min":{"type":"number","uniqueKey":"oneOf.0.format.oneOf.1.min","typeLabel":"number"},"max":{"type":"number","uniqueKey":"oneOf.0.format.oneOf.1.max","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.format.oneOf.2.type","typeLabel":"string"},"values":{"type":"array","minItems":1,"items":{"type":"string","uniqueKey":"oneOf.0.format.oneOf.2.values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.0.format.oneOf.2.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.format.oneOf.3.type","typeLabel":"string"},"items":{"oneOf":[{"$circularRef":"f0acf0f7-367b-4f5f-8500-8f43e8835c4c","isRequired":true}],"isRequired":true,"uniqueKey":"oneOf.0.format.oneOf.3.\\items","typeLabel":"any"},"min_items":{"type":"integer","minimum":0,"uniqueKey":"oneOf.0.format.oneOf.3.min_items","typeLabel":"integer"},"max_items":{"type":"integer","minimum":1,"maximum":100,"uniqueKey":"oneOf.0.format.oneOf.3.max_items","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"oneOf.0.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":"oneOf.0.format.oneOf.4","typeLabel":"object"}],"uniqueKey":"oneOf.0.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":"oneOf.0.variables.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.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":"oneOf.0.parameters.additionalProperties","typeLabel":"any"},"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.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":"oneOf.0.options.minimum_effect_size","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"oneOf.0.options","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["elements"],"properties":{"elements":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","description":"A singular request. `element` is required per item; `user_id` may\ncome from the envelope. This schema describes a valid\nitem, the shape a client should send; the endpoint itself accepts any\nJSON per item and reports an item that fails validation inside the 200\nenvelope rather than rejecting the request.\n","required":["element"],"properties":{"element":{"type":"string","minLength":1,"pattern":"\\S","isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].element","typeLabel":"string"},"user_id":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"oneOf.1.elements.items.[INDEX].user_id","typeLabel":"string"},"identifiers":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.elements.items.[INDEX].identifiers","typeLabel":"object"},"attributes":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.elements.items.[INDEX].attributes","typeLabel":"object"},"context":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.elements.items.[INDEX].context","typeLabel":"object"},"idempotency_key":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^\\u0000\\uD800-\\uDFFF]*$","uniqueKey":"oneOf.1.elements.items.[INDEX].idempotency_key","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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].control.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].control.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].control.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.1.elements.items.[INDEX].control.oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.content","typeLabel":"string | number | object"},"hypothesis":{"oneOf":[{"type":"string","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.hypothesis.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this content is testing. Blank is stored as null.","uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.0.hypothesis","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.3.additionalProperties","typeLabel":"string | number | object | any[]"},"uniqueKey":"oneOf.1.elements.items.[INDEX].arms.oneOf.4.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].arms.oneOf.4","typeLabel":"object · string · number · object[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].rewards.oneOf.1.weight","typeLabel":"number"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"description":"Attribution window after the decision.","uniqueKey":"oneOf.1.elements.items.[INDEX].rewards.oneOf.1.window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"Only events whose properties match attribute to this reward.","uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].rewards.oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].rewards.oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].rewards.oneOf.1","typeLabel":"object"},{"type":"array","items":{"oneOf":[{"type":"string","minLength":1,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].rewards.oneOf.2.items.[INDEX].oneOf.1.baseline_rate","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].rewards.oneOf.2.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].rewards.oneOf.2","typeLabel":"(string | object)[]"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].name","typeLabel":"string"},"threshold_type":{"type":"string","enum":["relative","absolute"],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].threshold","typeLabel":"number"},"bound":{"type":"string","enum":["upper","lower"],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].bound","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["binary","continuous"],"default":"binary","uniqueKey":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"window_seconds":{"type":"integer","minimum":1,"default":86400,"uniqueKey":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].window_seconds","typeLabel":"integer"},"properties":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX].properties","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].constraints.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].requirements.forbidden_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.elements.items.[INDEX].requirements.forbidden_phrases","typeLabel":"string[]"},"required_phrases":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.1.elements.items.[INDEX].requirements.required_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.elements.items.[INDEX].requirements.required_phrases","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].requirements","typeLabel":"object"},"instructions":{"type":"string","uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].element_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].format.oneOf.0.type","typeLabel":"enum\u003cstring>"},"min_characters":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.0.min_characters","typeLabel":"integer"},"max_characters":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.0.max_characters","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].format.oneOf.1.type","typeLabel":"string"},"min":{"type":"number","uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.1.min","typeLabel":"number"},"max":{"type":"number","uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.1.max","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].format.oneOf.2.type","typeLabel":"string"},"values":{"type":"array","minItems":1,"items":{"type":"string","uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.2.values.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.2.values","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].format.oneOf.3.type","typeLabel":"string"},"items":{"oneOf":[{"$circularRef":"f0acf0f7-367b-4f5f-8500-8f43e8835c4c","isRequired":true}],"isRequired":true,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.3.\\items","typeLabel":"any"},"min_items":{"type":"integer","minimum":0,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.3.min_items","typeLabel":"integer"},"max_items":{"type":"integer","minimum":1,"maximum":100,"uniqueKey":"oneOf.1.elements.items.[INDEX].format.oneOf.3.max_items","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].format.oneOf.4","typeLabel":"object"}],"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].variables.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].parameters.additionalProperties","typeLabel":"any"},"uniqueKey":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].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":"oneOf.1.elements.items.[INDEX].options.minimum_effect_size","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX].options","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.1.elements.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.elements","typeLabel":"object[]"},"user_id":{"type":"string","minLength":1,"pattern":"\\S","description":"Default for items that omit it.","uniqueKey":"oneOf.1.user_id","typeLabel":"string"},"identifiers":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.identifiers","typeLabel":"object"},"attributes":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.attributes","typeLabel":"object"},"context":{"type":"object","description":"An open JSON object. Values may be any JSON.","uniqueKey":"oneOf.1.context","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":"oneOf.1.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":"oneOf.1.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":"oneOf.1.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":"oneOf.1.options.minimum_effect_size","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"oneOf.1.options","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"first_call":{"title":"first_call","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"headline":"Upgrade today","body":"Unlock unlimited templates with Pro."},"hypothesis":"Direct and to the point"},"rewards":[{"name":"purchased","properties":{"plan":"pro"},"weight":1,"window_seconds":86400},{"name":"refunded","weight":-0.5,"window_seconds":2592000}],"constraints":[{"name":"support_ticket_created","threshold_type":"relative","threshold":0.1,"bound":"upper"}],"format":{"headline":{"type":"text","max_characters":90},"body":{"type":"text"}},"requirements":{"forbidden_phrases":["Limited Time"]},"instructions":"Optimize for enterprise SaaS buyers evaluating upgrade","identifiers":{"email":"alice@example.com"},"attributes":{"plan":"pro","company_size":150},"context":{"device":"mobile","page":"/pricing"},"options":{"assignment":"static"}}},"serve_only":{"title":"serve_only","value":{"user_id":"user_123","element":"upgrade_prompt","context":{"device":"mobile","page":"/pricing"}}},"keyed_retry":{"title":"keyed_retry","value":{"user_id":"user_123","element":"upgrade_prompt","idempotency_key":"7d1f8e4c-2b6a-4e0d-9c3f-5a1b2c3d4e5f","context":{"device":"mobile"}}},"null_baseline_rate":{"title":"null_baseline_rate","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":[{"name":"purchased","baseline_rate":null},{"name":"added_seats","type":"count","baseline_rate":null}]}},"declared_arms":{"title":"declared_arms","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"headline":"Upgrade today","body":"Unlock Pro."}},"arms":[{"content":{"headline":"Don't lose your templates","body":"Upgrade keeps them."},"hypothesis":"Loss aversion"},{"content":{"headline":"Join 12,000 teams on Pro","body":"Upgrade today."}}],"rewards":"purchased"}},"batch":{"title":"batch","value":{"user_id":"user_123","attributes":{"plan":"pro"},"elements":[{"element":"upgrade_prompt","context":{"page":"/pricing"}},{"element":"onboarding_banner","control":{"content":"Welcome to Curious"},"rewards":["clicked"],"idempotency_key":"0b3c1f0a-9d8e-4b7c-a6f5-e4d3c2b1a0f9"},{"element":"upgrade_prompt","user_id":"user_456"}]}}},"x-rejected-examples":{"missing_user":{"message":"element and user_id are required","value":{"element":"upgrade_prompt"}},"null_in_idempotency_key":{"message":"idempotency_key must not contain U+0000 or unpaired surrogate code units","value":{"user_id":"user_123","element":"upgrade_prompt","idempotency_key":"retry\u0000one"}},"unknown_field":{"message":"Unknown field(s): segment","value":{"user_id":"user_123","element":"upgrade_prompt","segment":"enterprise"}},"bad_holdout":{"message":"options.holdout must be a number in [0.02, 0.2]","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"options":{"holdout":0.5}}},"bad_reward_type":{"message":"reward type must be one of: binary, count, semicontinuous, continuous","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":[{"name":"purchased","type":"money"}]}},"empty_batch":{"message":"elements must be a non-empty array","value":{"user_id":"user_123","elements":[]}},"wrapper_typo":{"message":"Received unknown parameter: control.hypothesi","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today","hypothesi":"Direct"}}},"array_without_items":{"message":"items is required when type is \"array\"","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"bullets":["One","Two"]}},"format":{"bullets":{"type":"array"}}}},"value_source_on_binary":{"message":"reward value sources are only valid with type 'semicontinuous'","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":[{"name":"purchased","type":"binary","value":"event.value"}]}},"zero_weight":{"message":"reward weight must be non-zero","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":[{"name":"purchased","weight":0}]}},"baseline_rate_out_of_range":{"message":"reward baseline_rate must be a probability strictly between 0 and 1","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":[{"name":"purchased","baseline_rate":1}]}},"arm_duplicates_control":{"message":"arms: an entry duplicates the declared control's content","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"arms":[{"content":"Upgrade today","hypothesis":"Same as control"}]}},"nested_arm_value_source":{"message":"must name a top-level content field","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"price":{"usd":49}}},"format":{"price":{"usd":{"type":"number","min":1,"max":500}}},"rewards":[{"name":"purchased","type":"semicontinuous","value":"arm.price.usd"}]}},"nested_boolean_content":{"message":"is a boolean, which the format grammar does not","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"settings":{"enabled":true}}}}},"reserved_content_field":{"message":"contains a field named 'type', which the format","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":{"type":"copy","headline":"Upgrade today"}}}},"absolute_binary_threshold_over_one":{"message":"a binary constraint's absolute threshold is a rate in [0, 1]","value":{"user_id":"user_123","element":"upgrade_prompt","control":{"content":"Upgrade today"},"rewards":"purchased","constraints":[{"name":"failed","threshold_type":"absolute","threshold":2,"bound":"upper"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"81a53c1d-5301-4e72-8a77-63b26da7232d":{"description":"The decision (singular form), or the per-item results (batch\nform). A replayed decision is the original response verbatim plus\n`replayed: true`.\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":{"oneOf":[{"type":"object","required":["content","arm_id","arm_type","decision_id","experiment_id","experiment_status"],"properties":{"content":{"oneOf":[{"type":"string","description":"The selected arm's content after `{{variable}}` substitution.","isRequired":true,"uniqueKey":"oneOf.0.content.oneOf.0","typeLabel":"string"},{"type":"number","description":"The selected arm's content after `{{variable}}` substitution.","isRequired":true,"uniqueKey":"oneOf.0.content.oneOf.1","typeLabel":"number"},{"type":"object","description":"The selected arm's content after `{{variable}}` substitution.","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":"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":"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":"oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"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":"oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.0.content","typeLabel":"string | number | object"},"arm_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"oneOf.0.arm_id","typeLabel":"string\u003cuuid>"},"arm_type":{"oneOf":[{"type":"string","enum":["control","variant",null],"isRequired":true,"uniqueKey":"oneOf.0.arm_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["control","variant",null],"isRequired":true,"uniqueKey":"oneOf.0.arm_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.arm_type","typeLabel":"enum\u003cstring> | null"},"decision_id":{"type":"string","format":"uuid","description":"The id of the decision row this call committed. Repeated serves of the same arm carry different ids.","isRequired":true,"uniqueKey":"oneOf.0.decision_id","typeLabel":"string\u003cuuid>"},"experiment_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"oneOf.0.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":"oneOf.0.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":"oneOf.0.warnings.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.warnings.items.[INDEX].message","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.warnings.items.[INDEX]","typeLabel":"object"},"description":"Present only when non-empty.","uniqueKey":"oneOf.0.warnings","typeLabel":"object[]"},"replayed":{"type":"boolean","const":true,"description":"Present only when this is the stored response to an earlier request with the same `idempotency_key`.","uniqueKey":"oneOf.0.replayed","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["results","replayed"],"properties":{"results":{"type":"array","description":"One result per item, in input order.","items":{"oneOf":[{"type":"object","required":["index","element","status","content","arm_id","arm_type","decision_id","experiment_id","experiment_status"],"properties":{"index":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.index","typeLabel":"integer"},"element":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.element","typeLabel":"string"},"status":{"type":"string","const":"ok","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.status","typeLabel":"string"},"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":"oneOf.1.results.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":"oneOf.1.results.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":"oneOf.1.results.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":"oneOf.1.results.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":"oneOf.1.results.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.2","typeLabel":"object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"oneOf.1.results.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":"oneOf.1.results.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties.oneOf.3","typeLabel":"any[]"}],"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.content.oneOf.2.additionalProperties","typeLabel":"string | number | object | any[]"},"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.content.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.content","typeLabel":"string | number | object"},"arm_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.arm_id","typeLabel":"string\u003cuuid>"},"arm_type":{"oneOf":[{"type":"string","enum":["control","variant",null],"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.arm_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["control","variant",null],"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.arm_type.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.arm_type","typeLabel":"enum\u003cstring> | null"},"decision_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.decision_id","typeLabel":"string\u003cuuid>"},"experiment_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.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":"oneOf.1.results.items.[INDEX].oneOf.0.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":"oneOf.1.results.items.[INDEX].oneOf.0.warnings.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.warnings.items.[INDEX].message","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.warnings.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.warnings","typeLabel":"object[]"},"replayed":{"type":"boolean","const":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0.replayed","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["index","status","error","message"],"properties":{"index":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.index","typeLabel":"integer"},"status":{"type":"string","const":"error","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.status","typeLabel":"string"},"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":"oneOf.1.results.items.[INDEX].oneOf.1.error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"The human-readable reason.","isRequired":true,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.message","typeLabel":"string"},"element":{"oneOf":[{"type":"string","description":"The item's element name as sent; absent when the item was not an object.","uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.element.oneOf.0","typeLabel":"string"},{"type":"null","description":"The item's element name as sent; absent when the item was not an object.","uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.element.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.element","typeLabel":"string | null"},"request_id":{"type":"string","format":"uuid","description":"Present on internal faults only.","uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1.request_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"oneOf.1.results.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.results.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.results","typeLabel":"object[]"},"replayed":{"type":"integer","minimum":0,"description":"How many items were replays.","isRequired":true,"uniqueKey":"oneOf.1.replayed","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"decision":{"title":"decision","value":{"content":{"headline":"Don't lose your 47 saved templates","body":"Upgrade to Pro and keep every one of them."},"arm_id":"3f1c2b6e-0000-4000-8000-00000000a001","arm_type":"variant","decision_id":"8a7b6c5d-0000-4000-8000-00000000d001","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e001","experiment_status":"exploring"}},"with_warnings":{"title":"with_warnings","value":{"content":"Upgrade today","arm_id":"3f1c2b6e-0000-4000-8000-00000000a000","arm_type":"control","decision_id":"8a7b6c5d-0000-4000-8000-00000000d002","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e001","experiment_status":"initializing","warnings":[{"code":"arm_invalid","message":"arms[1] ({\"headline\":\"Join 12,000 teams on Pro\",\"body\":\"Upgrade tod...) was skipped: it duplicates arms[0] in the same request"}]}},"replayed":{"title":"replayed","value":{"content":"Upgrade today","arm_id":"3f1c2b6e-0000-4000-8000-00000000a000","arm_type":"control","decision_id":"8a7b6c5d-0000-4000-8000-00000000d001","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e001","experiment_status":"exploring","replayed":true}},"batch":{"title":"batch","value":{"results":[{"index":0,"element":"upgrade_prompt","status":"ok","content":"Upgrade today","arm_id":"3f1c2b6e-0000-4000-8000-00000000a000","arm_type":"control","decision_id":"8a7b6c5d-0000-4000-8000-00000000d003","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e001","experiment_status":"exploring"},{"index":1,"element":"onboarding_banner","status":"ok","content":"Welcome to Curious","arm_id":"3f1c2b6e-0000-4000-8000-00000000a010","arm_type":"control","decision_id":"8a7b6c5d-0000-4000-8000-00000000d004","experiment_id":"1e2d3c4b-0000-4000-8000-00000000e002","experiment_status":"initializing","replayed":true},{"index":2,"element":"upgrade_prompt","status":"error","error":"invalid_request","message":"Duplicate item: elements[2] resolves to the same user and element as elements[0]. A batch may carry each user and element pair once."}],"replayed":1}}},"exampleType":"examples"}},"exampleType":"examples"},"281ca419-f339-4149-ab3a-ad14265ed13d":{"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"},"683a41fa-ccbf-4d05-9dd0-6b3991a073f3":{"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"},"bdfc6e2f-218a-46e3-a788-9f6c854e073d":{"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"},"eb9f2253-97f2-44b2-aadb-8be5c8d390ac":{"description":"`idempotency_error`: the key was already used with a different\nrequest. `lock_timeout`: the user's identity changed while the\ndecision was selecting an arm; the same request succeeds on a\nretry — the one retryable 409. Otherwise `conflict`: the element\nhas no live experiment (publishable keys are serve-only), or the\nexperiment is at its active-arm limit.\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":{"idempotency":{"title":"idempotency","value":{"error":"idempotency_error","message":"idempotency_key was already used with a different request"}},"no_live_experiment":{"title":"no_live_experiment","value":{"error":"conflict","message":"No live experiment for element \"upgrade_prompt\" — publishable keys are serve-only; declare the element first with a secret-key decide call or POST /declare"}},"lock_timeout":{"title":"lock_timeout","value":{"error":"lock_timeout","message":"Identity changed during selection; retry the request"}}},"exampleType":"examples"}},"exampleType":"examples"},"56d804f9-942b-463e-9446-2b2da5f58f8c":{"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"},"2ff965db-2945-4fa3-bd27-a56995ecfe03":{"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"},"685598dc-94b5-46e7-a7b9-9c585a52ce35":{"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"},"60459209-cc2d-46ee-b65d-08e3512c3100":{"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":"Decide - Curious","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T17:34:55.713Z","originalFileLocation":"api-reference/decide.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=\"Serve content for a user and record the decision.\">\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=\"Decide - Curious\">\u003cmeta data-mint-head property=\"og:description\" content=\"Serve content for a user and record the decision.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Curious\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trycurious.ai/api-reference/decide\">\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=Decide\u0026amp;description=Serve+content+for+a+user+and+record+the+decision.\u0026amp;theme=03df15cacc780b41c883b740\u0026amp;signature=7a11ca356c44589acbd6f6e3f1cb4b2392b24e34b39baa7e1ca67b3426020b0f\">\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=\"Decide - Curious\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Serve content for a user and record the decision.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://curious-6b07e760.mintlify.site/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=Decide\u0026amp;description=Serve+content+for+a+user+and+record+the+decision.\u0026amp;theme=03df15cacc780b41c883b740\u0026amp;signature=7a11ca356c44589acbd6f6e3f1cb4b2392b24e34b39baa7e1ca67b3426020b0f\">\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/decide\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/decide.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/decide#webpage\",\"url\":\"https://docs.trycurious.ai/api-reference/decide\",\"name\":\"Decide\",\"description\":\"Serve content for a user and record the decision.\",\"dateModified\":\"2026-10-27T17:34:55.713Z\",\"isPartOf\":{\"@id\":\"https://docs.trycurious.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trycurious.ai/api-reference/decide#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trycurious.ai/api-reference/decide#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Curious\",\"item\":\"https://docs.trycurious.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Decide\",\"item\":\"https://docs.trycurious.ai/api-reference/decide\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trycurious.ai/api-reference/decide#apireference\",\"headline\":\"Decide\",\"name\":\"Decide\",\"description\":\"Serve content for a user and record the decision.\",\"url\":\"https://docs.trycurious.ai/api-reference/decide\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trycurious.ai/api-reference/decide#webpage\"},\"dateModified\":\"2026-10-27T17:34:55.713Z\",\"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/decide.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","description":"The per-organization request limit, the 429 response and its Retry-After header, what counts as a request, and how to stay under the limit by batching.","href":"/api-reference/rate-limits"}]},{"group":"Endpoints","pages":[{"title":"Decide","openapi":"POST /decide","href":"/api-reference/decide"},{"title":"Declare","description":"Configure an element without serving a user.","openapi":"POST /declare","href":"/api-reference/declare"},{"title":"Events","openapi":"POST /events","href":"/api-reference/events"},{"title":"Identify","openapi":"POST /identify","href":"/api-reference/identify"}]}]}]},"basePath":"","title":"Decide - 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"]}