Updates a library question’s wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).
Your brand id (brd_...). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with 400, and an unknown or foreign brand with 404.
edit body for an existing qualification question — every field optional; omitted fields are unchanged. The bound fact and control are fixed at creation (delete and recreate to change them).
replace the serve condition (omitted means unchanged)
Show child attributes
Response
the updated library question
the saved question under data, plus non-blocking duplicate notices when another question already collects the same fact (the write still succeeds — warnings never block)
A client-authored screening question — a library definition or an offering-local copy. It binds a fact by its stable code (the code must resolve in your authoring fact catalog) and a display control, and carries your own wording. Copy and option labels are yours to author.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Purple Label MD","description":"Public API reference for building a patient storefront on the platform. Generated from the platform's own API contracts, and matches the newest staging release.","colors":{"primary":"#6D28D9","light":"#A78BFA","dark":"#5B21B6"},"logo":{"light":"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/light.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=3c0569e3f76e49e04d232187908c2e2e","dark":"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/dark.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=c11f42bb461c28528be896c7c1a80efa"},"favicon":"https://mintcdn.com/purplelabelmd/MUdvgTlYoCGY54e8/favicon.svg?fit=max\u0026auto=format\u0026n=MUdvgTlYoCGY54e8\u0026q=85\u0026s=3bd633ab20ff170e0ebebec0406e6972","footer":{"socials":{}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"purplelabelmd","hasAudioNarration":false,"actualSubdomain":"purplelabelmd","customDomains":["docs.purplelabelmd.com"],"gitSource":{"type":"github","owner":"purple-label-md","repo":"purple-doc","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af545312fc9183f3253a260","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API reference","count":50},{"language":"default","tag":"Guides","count":21},{"language":"default","tag":"Offering configuration","count":18},{"language":"default","tag":"Integrate","count":16},{"language":"default","tag":"Brand configuration","count":9},{"language":"default","tag":"Webhooks","count":7},{"language":"default","tag":"Payments","count":4},{"language":"default","tag":"Intake","count":3},{"language":"default","tag":"Onboarding","count":3},{"language":"default","tag":"Sessions \u0026 authentication","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"llms-txt-v2","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}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"@media (prefers-reduced-motion: no-preference){.plmd-logo{transform-origin:center;transition:transform 0.12s ease}.plmd-logo .plmd-mark path{transform-box:fill-box;transform-origin:center}.plmd-logo-link:active .plmd-logo{transform:scale(0.85)}.plmd-logo-link:hover .plmd-logo .plmd-mark path:last-child{animation:plmd-carrot-hop 0.55s ease}.plmd-logo-link:hover .plmd-logo .plmd-mark path:nth-child(-n+6){animation:plmd-carrot-twinkle 0.5s ease}.plmd-logo-link:hover .plmd-logo .plmd-mark path:nth-child(even){animation-delay:0.08s}}@keyframes plmd-carrot-hop{0%{transform:translateY(0) rotate(0)}30%{transform:translateY(-14%) rotate(-9deg)}55%{transform:translateY(0) rotate(6deg)}78%{transform:translateY(-5%) rotate(-2deg)}100%{transform:translateY(0) rotate(0)}}@keyframes plmd-carrot-twinkle{0%,100%{transform:scale(1);opacity:1}45%{transform:scale(1.6);opacity:0.7}}"}],"page":{"pagePath":"api-reference/offering-configuration/edit-a-qualification-library-question","slug":"/api-reference/offering-configuration/edit-a-qualification-library-question","pageMetadata":{"title":"Edit a qualification library question","description":"Updates a library question's wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/edit-a-qualification-library-question","autogeneratedByOpenApi":true},"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: \"Updates a library question’s wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Edit a qualification library question","description":"Updates a library question's wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/edit-a-qualification-library-question","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/purplelabelmd/3b4d4a495cd0c48d/brand.js"],"openApiReferenceData":{"operation":{"description":"Updates a library question's wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).","operationId":"updateQualificationLibraryQuestion","parameters":["ed990498-551b-44d7-988d-04d42c4d4946","7bfff03f-a5ca-4edd-87f6-f5c8b265ce80"],"requestBody":"d5277c73-ea4d-43b0-ab3c-9ec85c320418","responses":{"200":"8f7bce97-62da-472f-9d43-dcec40635c1c","400":"1d6c9836-9046-4e4c-be4c-47e298984cf4","404":"b7cba519-4429-4c08-957b-9c19bcc77103","422":"6037a41c-8974-439f-8131-c4aa0acac4c6","503":"4a314e72-7009-4831-ae1f-6bb4cdb7c35a"},"security":["3ec2407b-c4ad-444d-8534-5c04d4dc5679"],"summary":"Edit a qualification library question","tags":["Offering configuration"],"method":"patch","type":"path","servers":["76f2c082-b62c-4aea-a087-a046f1378296"],"path":"/v1/account/question-library/questions/{question_id}","baseUrlOptions":["https://api.staging.purplelabelmd.com"],"title":"Edit a qualification library question","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ed990498-551b-44d7-988d-04d42c4d4946":{"in":"path","name":"question_id","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"7bfff03f-a5ca-4edd-87f6-f5c8b265ce80":{"description":"Your brand id (`brd_...`). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with `400`, and an unknown or foreign brand with `404`.","in":"header","name":"X-Brand-Id","required":true,"schema":{"pattern":"^brd_[A-Za-z0-9][A-Za-z0-9_-]*$","type":"string","isRequired":true,"description":"Your brand id (`brd_...`). It must be one of the brands your API key's account owns; with a publishable key it must be the one brand the key was issued for. A missing or malformed value is refused with `400`, and an unknown or foreign brand with `404`.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"description":"edit body for an existing qualification question — every field optional; omitted fields are unchanged. The bound fact and control are fixed at creation (delete and recreate to change them).","properties":{"copy":{"additionalProperties":{"type":"string","uniqueKey":"copy.additionalProperties","typeLabel":"string"},"description":"replacement display copy (the question wording rides the `prompt` slot)","type":"object","uniqueKey":"copy","typeLabel":"object"},"option_labels":{"additionalProperties":{"type":"string","uniqueKey":"option_labels.additionalProperties","typeLabel":"string"},"type":"object","uniqueKey":"option_labels","typeLabel":"object"},"options":{"items":{"type":"string","uniqueKey":"options.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"options","typeLabel":"string[]"},"required":{"type":"boolean","uniqueKey":"required","typeLabel":"boolean"},"when":{"type":"object","description":"replace the serve condition (omitted means unchanged)","required":["kind"],"properties":{"kind":{"description":"the kind of condition node (comparison, presence check, boolean combination, or if/else)","enum":["compare","null","bool","cond"],"type":"string","isRequired":true,"uniqueKey":"when.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":true,"uniqueKey":"when","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"copy":{},"option_labels":{},"options":["\u003cstring>"],"required":true}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"8f7bce97-62da-472f-9d43-dcec40635c1c":{"content":{"application/json":{"schema":{"description":"the saved question under `data`, plus non-blocking duplicate notices when another question already collects the same fact (the write still succeeds — warnings never block)","properties":{"data":{"description":"A client-authored screening question — a library definition or an offering-local copy. It binds a fact by its stable code (the code must resolve in your authoring fact catalog) and a display control, and carries your own wording. Copy and option labels are yours to author.","properties":{"control":{"enum":["single_select_cards","multi_select_cards","scale","number","number_pair","date","text","long_text","file_capture","address","phone","email","search_select"],"type":"string","isRequired":true,"uniqueKey":"data.control","typeLabel":"enum\u003cstring>"},"fact":{"description":"the stable code of the catalog fact this question collects (must resolve)","type":"string","isRequired":true,"uniqueKey":"data.fact","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"data.id","typeLabel":"string"},"copy":{"additionalProperties":{"type":"string","uniqueKey":"data.copy.additionalProperties","typeLabel":"string"},"description":"your display copy (the question prompt rides the `prompt` slot)","type":"object","uniqueKey":"data.copy","typeLabel":"object"},"option_labels":{"additionalProperties":{"type":"string","uniqueKey":"data.option_labels.additionalProperties","typeLabel":"string"},"description":"your per-option labels, keyed by option code (labels never bind logic)","type":"object","uniqueKey":"data.option_labels","typeLabel":"object"},"options":{"description":"stable option codes offered as answers — a subset of the bound fact's own codes","items":{"type":"string","uniqueKey":"data.options.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"data.options","typeLabel":"string[]"},"required":{"type":"boolean","uniqueKey":"data.required","typeLabel":"boolean"},"when":{"type":"object","description":"an optional condition — show this question only when an earlier screening answer calls for it (for example, ask \"how long have you used one?\" only after \"have you used one?\" is yes). A condition may use only facts collected by questions shown EARLIER in this offering; never a medical-intake answer or another brand's fact. When the condition is not met the question is skipped; with no condition the question is always shown. Accepted and validated at authoring now; conditional serving activates in a coming release (see the changelog).","required":["kind"],"properties":{"kind":{"description":"the kind of condition node (comparison, presence check, boolean combination, or if/else)","enum":["compare","null","bool","cond"],"type":"string","isRequired":true,"uniqueKey":"data.when.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":true,"uniqueKey":"data.when","typeLabel":"object"}},"required":["id","fact","control"],"type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"object"},"warnings":{"items":{"properties":{"code":{"enum":["DUPLICATE_FACT"],"type":"string","isRequired":true,"uniqueKey":"warnings.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"fact":{"type":"string","isRequired":true,"uniqueKey":"warnings.items.[INDEX].fact","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"warnings.items.[INDEX].message","typeLabel":"string"}},"required":["code","fact","message"],"type":"object","uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"warnings","typeLabel":"object[]"}},"required":["data"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"control":"single_select_cards","fact":"\u003cstring>","id":"\u003cstring>","copy":{},"option_labels":{},"options":["\u003cstring>"],"required":true,"when":{"kind":"compare"}},"warnings":[{"code":"DUPLICATE_FACT","fact":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"the updated library question","exampleType":"generated"},"1d6c9836-9046-4e4c-be4c-47e298984cf4":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem, extended with the structured compile issue list","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"code":{"description":"Present only on a refusal that shares its `type` with another condition and needs a finer name, e.g. the decision refusals `decision.bundle_intake_disagrees`, `decision.bundle_unknown`, `decision.bundle_mismatch` and `decision.bundle_unprojectable`. Branch on `type` first.","type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation of this occurrence. PROSE — never parse it to discriminate a condition; use `type`.","type":"string","uniqueKey":"detail","typeLabel":"string"},"issues":{"items":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].message","typeLabel":"string"},"where":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].where","typeLabel":"string"},"already_asked":{"description":"Present ONLY on question.fact_already_asked and question.ask_again_alias_only, absent on every other issue. On ask_again_alias_only, `asked_as` is the other spelling the intake asks the fact under. The question (or communications consent) that already asks the fact, as data, so a consumer words the refusal from it instead of parsing `message` (prose, unchanged). `asked_by` and `asked_as` mean what they mean on QualificationAskAgain: the asking node's id, and the fact spelling it asks under (equal to the requested fact, or another spelling of the same fact). `section_id` is the section it is asked in (for a shared-shell section, the section that includes the shell); `section_title` is that section's authored title, absent when it has none. `prompt` is the words a member is shown for that node (a question's `copy.prompt`, a consent's `text_ref.headline`), absent when it carries none. Definitions only, never a member's answer.","example":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"properties":{"asked_as":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_as","typeLabel":"string"},"asked_by":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_by","typeLabel":"string"},"section_id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.section_id","typeLabel":"string"},"prompt":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.prompt","typeLabel":"string"},"section_title":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.section_title","typeLabel":"string"}},"required":["asked_by","asked_as","section_id"],"type":"object","uniqueKey":"issues.items.[INDEX].already_asked","typeLabel":"object"},"missing_values":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are a declared list of option codes, absent on every other issue. The option codes the fact can hold that the question does not offer, in catalog order; never empty.","example":["US-AL","US-AK"],"items":{"type":"string","uniqueKey":"issues.items.[INDEX].missing_values.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"issues.items.[INDEX].missing_values","typeLabel":"string[]"},"readers":{"description":"WI-INTAKE-QUESTION-EDITOR-01 acceptance 2 / Amendments 8 and 10 — present ONLY on remove.answer_has_readers and when.answer_has_readers, absent on every other issue. The reader that issue names, as data, so a consumer names it in words from the bundle content it already holds instead of parsing `message` (prose, unchanged). Those refusals carry one issue per reader, so this array holds exactly one entry; issue order is the walk's (rules in ruleset order, then conditions and displays in document order, then rule-decided facts, then the registration). `id` resolves in the served bundle content (GET /instrument-bundles/current `content`): rule → `ruleset.rules[].id` (words: `rationale`); condition → the gated node's id in `instrument.sections[].items[]` or `shells.components[].items[]` (words: a question's `copy.prompt`, a display's `content.headline`, a consent's `text_ref.headline`); display → that display node's id (same lookup); derivation → `overlay.derivations[].produces` (words: `rationale`); registration → always `prescriber_patient_registration`, which has NO bundle-resident words — the consumer words it itself (\"the prescriber's patient record\").","items":{"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].id","typeLabel":"string"},"kind":{"enum":["rule","condition","display","registration","derivation"],"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].kind","typeLabel":"enum\u003cstring>"}},"required":["kind","id"],"type":"object","uniqueKey":"issues.items.[INDEX].readers.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues.items.[INDEX].readers","typeLabel":"object[]"},"refresh_policy":{"description":"Present ONLY on question.ask_again_suppressed and question.ask_again_collects_blank, absent on every other issue. The fact's refresh policy as served (static, confirm_if_stale, never_prefill, or any other value the catalog holds), so a consumer can say why the ask-again would not be shown as a confirm without parsing `message`.","example":"static","type":"string","uniqueKey":"issues.items.[INDEX].refresh_policy","typeLabel":"string"},"value_type":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are NOT a declared list (free text, a number, a date), absent on every other issue. The fact's value type; no list of choices can cover it. Exactly one of `missing_values` and `value_type` rides that refusal.","example":"string","type":"string","uniqueKey":"issues.items.[INDEX].value_type","typeLabel":"string"}},"required":["code","where","message"],"type":"object","uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues","typeLabel":"object[]"},"landed_first":{"description":"WI-INTAKE-QUESTION-EDITOR-01 S1b (acceptance 3) — on a qualification-sets 409 set.base_hash_stale only: the change that moved the intake off the base the refused write was edited against, so the screen can say whose change landed first and when. Read from the activation history (every publish path); `source: current_pointer` means only the current version's author is known (\"most recently\", never \"first\"). Absent when nothing could be read. Operator identities and section/question codes only — never patient data.","properties":{"actor":{"description":"the verified operator identity","or clinical-boot-seed for the starting content":null,"type":"string","isRequired":true,"uniqueKey":"landed_first.actor","typeLabel":"string"},"at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"landed_first.at","typeLabel":"string\u003cdate-time>"},"bundle_hash":{"type":"string","isRequired":true,"uniqueKey":"landed_first.bundle_hash","typeLabel":"string"},"source":{"enum":["activation_history","current_pointer"],"type":"string","isRequired":true,"uniqueKey":"landed_first.source","typeLabel":"enum\u003cstring>"},"action":{"enum":["set_create","set_rename","set_remove","question_add","question_edit","question_remove","question_reorder","set_move"],"type":"string","uniqueKey":"landed_first.action","typeLabel":"enum\u003cstring>"},"question_id":{"type":"string","uniqueKey":"landed_first.question_id","typeLabel":"string"},"section_id":{"type":"string","uniqueKey":"landed_first.section_id","typeLabel":"string"}},"required":["actor","at","bundle_hash","source"],"type":"object","uniqueKey":"landed_first","typeLabel":"object"},"mdi_case_id":{"deprecated":true,"description":"DEPRECATED — the former name of `prescriber_case_id`, sent alongside it with the same value while the rename completes. Read `prescriber_case_id`; this field is removed in a following release.","type":"string","uniqueKey":"mdi_case_id","typeLabel":"string"},"prescriber_case_id":{"description":"The prescriber's own reference for the case, present only when a case was created at the prescriber and the handover did not finish. Quote it when resolving the case directly with the prescriber. Absent is meaningful: it means no case was created, so there is nothing to look up. Opaque — an identifier only, never prescriber or patient text, and not patient data.","type":"string","uniqueKey":"prescriber_case_id","typeLabel":"string"},"required_role":{"description":"On a role 403 only: the least operator role that may make this write, so the refusal names the missing role. `admin` on publish.clinical_requires_admin; `staff` on write.read_only_refused.","type":"string","uniqueKey":"required_role","typeLabel":"string"},"type":{"description":"RFC 7807's machine-readable problem identifier, and the field a consumer branches on when two conditions share a status. `about:blank` where the status alone is unambiguous; otherwise a `https://purple.md/problems/\u003cslug>` URI (the estate's existing convention). DECLARED, not new at runtime — every problem this service has ever emitted carries it; the schema simply did not say so, which is what let a second 404 condition become indistinguishable to a contract reader.","type":"string","uniqueKey":"type","typeLabel":"string"}},"required":["title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","code":"\u003cstring>","detail":"\u003cstring>","issues":[{"code":"\u003cstring>","message":"\u003cstring>","where":"\u003cstring>","already_asked":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"missing_values":["US-AL","US-AK"],"readers":[{"id":"\u003cstring>","kind":"rule"}],"refresh_policy":"static","value_type":"string"}],"landed_first":{"actor":"\u003cstring>","at":"2023-11-07T05:31:56Z","bundle_hash":"\u003cstring>","source":"activation_history","action":"set_create","question_id":"\u003cstring>","section_id":"\u003cstring>"},"mdi_case_id":"\u003cstring>","prescriber_case_id":"\u003cstring>","required_role":"\u003cstring>","type":"\u003cstring>"}}},"exampleType":"generated"}},"description":"missing or invalid parameters","exampleType":"generated"},"b7cba519-4429-4c08-957b-9c19bcc77103":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem, extended with the structured compile issue list","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"code":{"description":"Present only on a refusal that shares its `type` with another condition and needs a finer name, e.g. the decision refusals `decision.bundle_intake_disagrees`, `decision.bundle_unknown`, `decision.bundle_mismatch` and `decision.bundle_unprojectable`. Branch on `type` first.","type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation of this occurrence. PROSE — never parse it to discriminate a condition; use `type`.","type":"string","uniqueKey":"detail","typeLabel":"string"},"issues":{"items":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].message","typeLabel":"string"},"where":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].where","typeLabel":"string"},"already_asked":{"description":"Present ONLY on question.fact_already_asked and question.ask_again_alias_only, absent on every other issue. On ask_again_alias_only, `asked_as` is the other spelling the intake asks the fact under. The question (or communications consent) that already asks the fact, as data, so a consumer words the refusal from it instead of parsing `message` (prose, unchanged). `asked_by` and `asked_as` mean what they mean on QualificationAskAgain: the asking node's id, and the fact spelling it asks under (equal to the requested fact, or another spelling of the same fact). `section_id` is the section it is asked in (for a shared-shell section, the section that includes the shell); `section_title` is that section's authored title, absent when it has none. `prompt` is the words a member is shown for that node (a question's `copy.prompt`, a consent's `text_ref.headline`), absent when it carries none. Definitions only, never a member's answer.","example":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"properties":{"asked_as":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_as","typeLabel":"string"},"asked_by":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_by","typeLabel":"string"},"section_id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.section_id","typeLabel":"string"},"prompt":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.prompt","typeLabel":"string"},"section_title":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.section_title","typeLabel":"string"}},"required":["asked_by","asked_as","section_id"],"type":"object","uniqueKey":"issues.items.[INDEX].already_asked","typeLabel":"object"},"missing_values":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are a declared list of option codes, absent on every other issue. The option codes the fact can hold that the question does not offer, in catalog order; never empty.","example":["US-AL","US-AK"],"items":{"type":"string","uniqueKey":"issues.items.[INDEX].missing_values.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"issues.items.[INDEX].missing_values","typeLabel":"string[]"},"readers":{"description":"WI-INTAKE-QUESTION-EDITOR-01 acceptance 2 / Amendments 8 and 10 — present ONLY on remove.answer_has_readers and when.answer_has_readers, absent on every other issue. The reader that issue names, as data, so a consumer names it in words from the bundle content it already holds instead of parsing `message` (prose, unchanged). Those refusals carry one issue per reader, so this array holds exactly one entry; issue order is the walk's (rules in ruleset order, then conditions and displays in document order, then rule-decided facts, then the registration). `id` resolves in the served bundle content (GET /instrument-bundles/current `content`): rule → `ruleset.rules[].id` (words: `rationale`); condition → the gated node's id in `instrument.sections[].items[]` or `shells.components[].items[]` (words: a question's `copy.prompt`, a display's `content.headline`, a consent's `text_ref.headline`); display → that display node's id (same lookup); derivation → `overlay.derivations[].produces` (words: `rationale`); registration → always `prescriber_patient_registration`, which has NO bundle-resident words — the consumer words it itself (\"the prescriber's patient record\").","items":{"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].id","typeLabel":"string"},"kind":{"enum":["rule","condition","display","registration","derivation"],"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].kind","typeLabel":"enum\u003cstring>"}},"required":["kind","id"],"type":"object","uniqueKey":"issues.items.[INDEX].readers.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues.items.[INDEX].readers","typeLabel":"object[]"},"refresh_policy":{"description":"Present ONLY on question.ask_again_suppressed and question.ask_again_collects_blank, absent on every other issue. The fact's refresh policy as served (static, confirm_if_stale, never_prefill, or any other value the catalog holds), so a consumer can say why the ask-again would not be shown as a confirm without parsing `message`.","example":"static","type":"string","uniqueKey":"issues.items.[INDEX].refresh_policy","typeLabel":"string"},"value_type":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are NOT a declared list (free text, a number, a date), absent on every other issue. The fact's value type; no list of choices can cover it. Exactly one of `missing_values` and `value_type` rides that refusal.","example":"string","type":"string","uniqueKey":"issues.items.[INDEX].value_type","typeLabel":"string"}},"required":["code","where","message"],"type":"object","uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues","typeLabel":"object[]"},"landed_first":{"description":"WI-INTAKE-QUESTION-EDITOR-01 S1b (acceptance 3) — on a qualification-sets 409 set.base_hash_stale only: the change that moved the intake off the base the refused write was edited against, so the screen can say whose change landed first and when. Read from the activation history (every publish path); `source: current_pointer` means only the current version's author is known (\"most recently\", never \"first\"). Absent when nothing could be read. Operator identities and section/question codes only — never patient data.","properties":{"actor":{"description":"the verified operator identity","or clinical-boot-seed for the starting content":null,"type":"string","isRequired":true,"uniqueKey":"landed_first.actor","typeLabel":"string"},"at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"landed_first.at","typeLabel":"string\u003cdate-time>"},"bundle_hash":{"type":"string","isRequired":true,"uniqueKey":"landed_first.bundle_hash","typeLabel":"string"},"source":{"enum":["activation_history","current_pointer"],"type":"string","isRequired":true,"uniqueKey":"landed_first.source","typeLabel":"enum\u003cstring>"},"action":{"enum":["set_create","set_rename","set_remove","question_add","question_edit","question_remove","question_reorder","set_move"],"type":"string","uniqueKey":"landed_first.action","typeLabel":"enum\u003cstring>"},"question_id":{"type":"string","uniqueKey":"landed_first.question_id","typeLabel":"string"},"section_id":{"type":"string","uniqueKey":"landed_first.section_id","typeLabel":"string"}},"required":["actor","at","bundle_hash","source"],"type":"object","uniqueKey":"landed_first","typeLabel":"object"},"mdi_case_id":{"deprecated":true,"description":"DEPRECATED — the former name of `prescriber_case_id`, sent alongside it with the same value while the rename completes. Read `prescriber_case_id`; this field is removed in a following release.","type":"string","uniqueKey":"mdi_case_id","typeLabel":"string"},"prescriber_case_id":{"description":"The prescriber's own reference for the case, present only when a case was created at the prescriber and the handover did not finish. Quote it when resolving the case directly with the prescriber. Absent is meaningful: it means no case was created, so there is nothing to look up. Opaque — an identifier only, never prescriber or patient text, and not patient data.","type":"string","uniqueKey":"prescriber_case_id","typeLabel":"string"},"required_role":{"description":"On a role 403 only: the least operator role that may make this write, so the refusal names the missing role. `admin` on publish.clinical_requires_admin; `staff` on write.read_only_refused.","type":"string","uniqueKey":"required_role","typeLabel":"string"},"type":{"description":"RFC 7807's machine-readable problem identifier, and the field a consumer branches on when two conditions share a status. `about:blank` where the status alone is unambiguous; otherwise a `https://purple.md/problems/\u003cslug>` URI (the estate's existing convention). DECLARED, not new at runtime — every problem this service has ever emitted carries it; the schema simply did not say so, which is what let a second 404 condition become indistinguishable to a contract reader.","type":"string","uniqueKey":"type","typeLabel":"string"}},"required":["title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","code":"\u003cstring>","detail":"\u003cstring>","issues":[{"code":"\u003cstring>","message":"\u003cstring>","where":"\u003cstring>","already_asked":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"missing_values":["US-AL","US-AK"],"readers":[{"id":"\u003cstring>","kind":"rule"}],"refresh_policy":"static","value_type":"string"}],"landed_first":{"actor":"\u003cstring>","at":"2023-11-07T05:31:56Z","bundle_hash":"\u003cstring>","source":"activation_history","action":"set_create","question_id":"\u003cstring>","section_id":"\u003cstring>"},"mdi_case_id":"\u003cstring>","prescriber_case_id":"\u003cstring>","required_role":"\u003cstring>","type":"\u003cstring>"}}},"exampleType":"generated"}},"description":"no shared clinical bundle for that (therapy|offering, mode), or no such resource","exampleType":"generated"},"6037a41c-8974-439f-8131-c4aa0acac4c6":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem, extended with the structured compile issue list","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"code":{"description":"Present only on a refusal that shares its `type` with another condition and needs a finer name, e.g. the decision refusals `decision.bundle_intake_disagrees`, `decision.bundle_unknown`, `decision.bundle_mismatch` and `decision.bundle_unprojectable`. Branch on `type` first.","type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation of this occurrence. PROSE — never parse it to discriminate a condition; use `type`.","type":"string","uniqueKey":"detail","typeLabel":"string"},"issues":{"items":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].message","typeLabel":"string"},"where":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].where","typeLabel":"string"},"already_asked":{"description":"Present ONLY on question.fact_already_asked and question.ask_again_alias_only, absent on every other issue. On ask_again_alias_only, `asked_as` is the other spelling the intake asks the fact under. The question (or communications consent) that already asks the fact, as data, so a consumer words the refusal from it instead of parsing `message` (prose, unchanged). `asked_by` and `asked_as` mean what they mean on QualificationAskAgain: the asking node's id, and the fact spelling it asks under (equal to the requested fact, or another spelling of the same fact). `section_id` is the section it is asked in (for a shared-shell section, the section that includes the shell); `section_title` is that section's authored title, absent when it has none. `prompt` is the words a member is shown for that node (a question's `copy.prompt`, a consent's `text_ref.headline`), absent when it carries none. Definitions only, never a member's answer.","example":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"properties":{"asked_as":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_as","typeLabel":"string"},"asked_by":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_by","typeLabel":"string"},"section_id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.section_id","typeLabel":"string"},"prompt":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.prompt","typeLabel":"string"},"section_title":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.section_title","typeLabel":"string"}},"required":["asked_by","asked_as","section_id"],"type":"object","uniqueKey":"issues.items.[INDEX].already_asked","typeLabel":"object"},"missing_values":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are a declared list of option codes, absent on every other issue. The option codes the fact can hold that the question does not offer, in catalog order; never empty.","example":["US-AL","US-AK"],"items":{"type":"string","uniqueKey":"issues.items.[INDEX].missing_values.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"issues.items.[INDEX].missing_values","typeLabel":"string[]"},"readers":{"description":"WI-INTAKE-QUESTION-EDITOR-01 acceptance 2 / Amendments 8 and 10 — present ONLY on remove.answer_has_readers and when.answer_has_readers, absent on every other issue. The reader that issue names, as data, so a consumer names it in words from the bundle content it already holds instead of parsing `message` (prose, unchanged). Those refusals carry one issue per reader, so this array holds exactly one entry; issue order is the walk's (rules in ruleset order, then conditions and displays in document order, then rule-decided facts, then the registration). `id` resolves in the served bundle content (GET /instrument-bundles/current `content`): rule → `ruleset.rules[].id` (words: `rationale`); condition → the gated node's id in `instrument.sections[].items[]` or `shells.components[].items[]` (words: a question's `copy.prompt`, a display's `content.headline`, a consent's `text_ref.headline`); display → that display node's id (same lookup); derivation → `overlay.derivations[].produces` (words: `rationale`); registration → always `prescriber_patient_registration`, which has NO bundle-resident words — the consumer words it itself (\"the prescriber's patient record\").","items":{"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].id","typeLabel":"string"},"kind":{"enum":["rule","condition","display","registration","derivation"],"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].kind","typeLabel":"enum\u003cstring>"}},"required":["kind","id"],"type":"object","uniqueKey":"issues.items.[INDEX].readers.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues.items.[INDEX].readers","typeLabel":"object[]"},"refresh_policy":{"description":"Present ONLY on question.ask_again_suppressed and question.ask_again_collects_blank, absent on every other issue. The fact's refresh policy as served (static, confirm_if_stale, never_prefill, or any other value the catalog holds), so a consumer can say why the ask-again would not be shown as a confirm without parsing `message`.","example":"static","type":"string","uniqueKey":"issues.items.[INDEX].refresh_policy","typeLabel":"string"},"value_type":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are NOT a declared list (free text, a number, a date), absent on every other issue. The fact's value type; no list of choices can cover it. Exactly one of `missing_values` and `value_type` rides that refusal.","example":"string","type":"string","uniqueKey":"issues.items.[INDEX].value_type","typeLabel":"string"}},"required":["code","where","message"],"type":"object","uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues","typeLabel":"object[]"},"landed_first":{"description":"WI-INTAKE-QUESTION-EDITOR-01 S1b (acceptance 3) — on a qualification-sets 409 set.base_hash_stale only: the change that moved the intake off the base the refused write was edited against, so the screen can say whose change landed first and when. Read from the activation history (every publish path); `source: current_pointer` means only the current version's author is known (\"most recently\", never \"first\"). Absent when nothing could be read. Operator identities and section/question codes only — never patient data.","properties":{"actor":{"description":"the verified operator identity","or clinical-boot-seed for the starting content":null,"type":"string","isRequired":true,"uniqueKey":"landed_first.actor","typeLabel":"string"},"at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"landed_first.at","typeLabel":"string\u003cdate-time>"},"bundle_hash":{"type":"string","isRequired":true,"uniqueKey":"landed_first.bundle_hash","typeLabel":"string"},"source":{"enum":["activation_history","current_pointer"],"type":"string","isRequired":true,"uniqueKey":"landed_first.source","typeLabel":"enum\u003cstring>"},"action":{"enum":["set_create","set_rename","set_remove","question_add","question_edit","question_remove","question_reorder","set_move"],"type":"string","uniqueKey":"landed_first.action","typeLabel":"enum\u003cstring>"},"question_id":{"type":"string","uniqueKey":"landed_first.question_id","typeLabel":"string"},"section_id":{"type":"string","uniqueKey":"landed_first.section_id","typeLabel":"string"}},"required":["actor","at","bundle_hash","source"],"type":"object","uniqueKey":"landed_first","typeLabel":"object"},"mdi_case_id":{"deprecated":true,"description":"DEPRECATED — the former name of `prescriber_case_id`, sent alongside it with the same value while the rename completes. Read `prescriber_case_id`; this field is removed in a following release.","type":"string","uniqueKey":"mdi_case_id","typeLabel":"string"},"prescriber_case_id":{"description":"The prescriber's own reference for the case, present only when a case was created at the prescriber and the handover did not finish. Quote it when resolving the case directly with the prescriber. Absent is meaningful: it means no case was created, so there is nothing to look up. Opaque — an identifier only, never prescriber or patient text, and not patient data.","type":"string","uniqueKey":"prescriber_case_id","typeLabel":"string"},"required_role":{"description":"On a role 403 only: the least operator role that may make this write, so the refusal names the missing role. `admin` on publish.clinical_requires_admin; `staff` on write.read_only_refused.","type":"string","uniqueKey":"required_role","typeLabel":"string"},"type":{"description":"RFC 7807's machine-readable problem identifier, and the field a consumer branches on when two conditions share a status. `about:blank` where the status alone is unambiguous; otherwise a `https://purple.md/problems/\u003cslug>` URI (the estate's existing convention). DECLARED, not new at runtime — every problem this service has ever emitted carries it; the schema simply did not say so, which is what let a second 404 condition become indistinguishable to a contract reader.","type":"string","uniqueKey":"type","typeLabel":"string"}},"required":["title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","code":"\u003cstring>","detail":"\u003cstring>","issues":[{"code":"\u003cstring>","message":"\u003cstring>","where":"\u003cstring>","already_asked":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"missing_values":["US-AL","US-AK"],"readers":[{"id":"\u003cstring>","kind":"rule"}],"refresh_policy":"static","value_type":"string"}],"landed_first":{"actor":"\u003cstring>","at":"2023-11-07T05:31:56Z","bundle_hash":"\u003cstring>","source":"activation_history","action":"set_create","question_id":"\u003cstring>","section_id":"\u003cstring>"},"mdi_case_id":"\u003cstring>","prescriber_case_id":"\u003cstring>","required_role":"\u003cstring>","type":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Validation failed (422): the question does not bind a fact you may use (a shared fact open to qualification, or one your brand created), or the question set could not be compiled. The problem body says which.","exampleType":"generated"},"4a314e72-7009-4831-ae1f-6bb4cdb7c35a":{"content":{"application/problem+json":{"schema":{"description":"RFC 7807 problem, extended with the structured compile issue list","properties":{"status":{"type":"integer","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"title":{"type":"string","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"code":{"description":"Present only on a refusal that shares its `type` with another condition and needs a finer name, e.g. the decision refusals `decision.bundle_intake_disagrees`, `decision.bundle_unknown`, `decision.bundle_mismatch` and `decision.bundle_unprojectable`. Branch on `type` first.","type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"description":"Human-readable explanation of this occurrence. PROSE — never parse it to discriminate a condition; use `type`.","type":"string","uniqueKey":"detail","typeLabel":"string"},"issues":{"items":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].message","typeLabel":"string"},"where":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].where","typeLabel":"string"},"already_asked":{"description":"Present ONLY on question.fact_already_asked and question.ask_again_alias_only, absent on every other issue. On ask_again_alias_only, `asked_as` is the other spelling the intake asks the fact under. The question (or communications consent) that already asks the fact, as data, so a consumer words the refusal from it instead of parsing `message` (prose, unchanged). `asked_by` and `asked_as` mean what they mean on QualificationAskAgain: the asking node's id, and the fact spelling it asks under (equal to the requested fact, or another spelling of the same fact). `section_id` is the section it is asked in (for a shared-shell section, the section that includes the shell); `section_title` is that section's authored title, absent when it has none. `prompt` is the words a member is shown for that node (a question's `copy.prompt`, a consent's `text_ref.headline`), absent when it carries none. Definitions only, never a member's answer.","example":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"properties":{"asked_as":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_as","typeLabel":"string"},"asked_by":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.asked_by","typeLabel":"string"},"section_id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].already_asked.section_id","typeLabel":"string"},"prompt":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.prompt","typeLabel":"string"},"section_title":{"type":"string","uniqueKey":"issues.items.[INDEX].already_asked.section_title","typeLabel":"string"}},"required":["asked_by","asked_as","section_id"],"type":"object","uniqueKey":"issues.items.[INDEX].already_asked","typeLabel":"object"},"missing_values":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are a declared list of option codes, absent on every other issue. The option codes the fact can hold that the question does not offer, in catalog order; never empty.","example":["US-AL","US-AK"],"items":{"type":"string","uniqueKey":"issues.items.[INDEX].missing_values.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"issues.items.[INDEX].missing_values","typeLabel":"string[]"},"readers":{"description":"WI-INTAKE-QUESTION-EDITOR-01 acceptance 2 / Amendments 8 and 10 — present ONLY on remove.answer_has_readers and when.answer_has_readers, absent on every other issue. The reader that issue names, as data, so a consumer names it in words from the bundle content it already holds instead of parsing `message` (prose, unchanged). Those refusals carry one issue per reader, so this array holds exactly one entry; issue order is the walk's (rules in ruleset order, then conditions and displays in document order, then rule-decided facts, then the registration). `id` resolves in the served bundle content (GET /instrument-bundles/current `content`): rule → `ruleset.rules[].id` (words: `rationale`); condition → the gated node's id in `instrument.sections[].items[]` or `shells.components[].items[]` (words: a question's `copy.prompt`, a display's `content.headline`, a consent's `text_ref.headline`); display → that display node's id (same lookup); derivation → `overlay.derivations[].produces` (words: `rationale`); registration → always `prescriber_patient_registration`, which has NO bundle-resident words — the consumer words it itself (\"the prescriber's patient record\").","items":{"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].id","typeLabel":"string"},"kind":{"enum":["rule","condition","display","registration","derivation"],"type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].readers.items.[INDEX].kind","typeLabel":"enum\u003cstring>"}},"required":["kind","id"],"type":"object","uniqueKey":"issues.items.[INDEX].readers.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues.items.[INDEX].readers","typeLabel":"object[]"},"refresh_policy":{"description":"Present ONLY on question.ask_again_suppressed and question.ask_again_collects_blank, absent on every other issue. The fact's refresh policy as served (static, confirm_if_stale, never_prefill, or any other value the catalog holds), so a consumer can say why the ask-again would not be shown as a confirm without parsing `message`.","example":"static","type":"string","uniqueKey":"issues.items.[INDEX].refresh_policy","typeLabel":"string"},"value_type":{"description":"Present ONLY on question.ask_again_options_incomplete when the fact's values are NOT a declared list (free text, a number, a date), absent on every other issue. The fact's value type; no list of choices can cover it. Exactly one of `missing_values` and `value_type` rides that refusal.","example":"string","type":"string","uniqueKey":"issues.items.[INDEX].value_type","typeLabel":"string"}},"required":["code","where","message"],"type":"object","uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"issues","typeLabel":"object[]"},"landed_first":{"description":"WI-INTAKE-QUESTION-EDITOR-01 S1b (acceptance 3) — on a qualification-sets 409 set.base_hash_stale only: the change that moved the intake off the base the refused write was edited against, so the screen can say whose change landed first and when. Read from the activation history (every publish path); `source: current_pointer` means only the current version's author is known (\"most recently\", never \"first\"). Absent when nothing could be read. Operator identities and section/question codes only — never patient data.","properties":{"actor":{"description":"the verified operator identity","or clinical-boot-seed for the starting content":null,"type":"string","isRequired":true,"uniqueKey":"landed_first.actor","typeLabel":"string"},"at":{"format":"date-time","type":"string","isRequired":true,"uniqueKey":"landed_first.at","typeLabel":"string\u003cdate-time>"},"bundle_hash":{"type":"string","isRequired":true,"uniqueKey":"landed_first.bundle_hash","typeLabel":"string"},"source":{"enum":["activation_history","current_pointer"],"type":"string","isRequired":true,"uniqueKey":"landed_first.source","typeLabel":"enum\u003cstring>"},"action":{"enum":["set_create","set_rename","set_remove","question_add","question_edit","question_remove","question_reorder","set_move"],"type":"string","uniqueKey":"landed_first.action","typeLabel":"enum\u003cstring>"},"question_id":{"type":"string","uniqueKey":"landed_first.question_id","typeLabel":"string"},"section_id":{"type":"string","uniqueKey":"landed_first.section_id","typeLabel":"string"}},"required":["actor","at","bundle_hash","source"],"type":"object","uniqueKey":"landed_first","typeLabel":"object"},"mdi_case_id":{"deprecated":true,"description":"DEPRECATED — the former name of `prescriber_case_id`, sent alongside it with the same value while the rename completes. Read `prescriber_case_id`; this field is removed in a following release.","type":"string","uniqueKey":"mdi_case_id","typeLabel":"string"},"prescriber_case_id":{"description":"The prescriber's own reference for the case, present only when a case was created at the prescriber and the handover did not finish. Quote it when resolving the case directly with the prescriber. Absent is meaningful: it means no case was created, so there is nothing to look up. Opaque — an identifier only, never prescriber or patient text, and not patient data.","type":"string","uniqueKey":"prescriber_case_id","typeLabel":"string"},"required_role":{"description":"On a role 403 only: the least operator role that may make this write, so the refusal names the missing role. `admin` on publish.clinical_requires_admin; `staff` on write.read_only_refused.","type":"string","uniqueKey":"required_role","typeLabel":"string"},"type":{"description":"RFC 7807's machine-readable problem identifier, and the field a consumer branches on when two conditions share a status. `about:blank` where the status alone is unambiguous; otherwise a `https://purple.md/problems/\u003cslug>` URI (the estate's existing convention). DECLARED, not new at runtime — every problem this service has ever emitted carries it; the schema simply did not say so, which is what let a second 404 condition become indistinguishable to a contract reader.","type":"string","uniqueKey":"type","typeLabel":"string"}},"required":["title","status"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":123,"title":"\u003cstring>","code":"\u003cstring>","detail":"\u003cstring>","issues":[{"code":"\u003cstring>","message":"\u003cstring>","where":"\u003cstring>","already_asked":{"asked_as":"dob","asked_by":"q_dob","prompt":"What is your date of birth?","section_id":"about_you","section_title":"About you"},"missing_values":["US-AL","US-AK"],"readers":[{"id":"\u003cstring>","kind":"rule"}],"refresh_policy":"static","value_type":"string"}],"landed_first":{"actor":"\u003cstring>","at":"2023-11-07T05:31:56Z","bundle_hash":"\u003cstring>","source":"activation_history","action":"set_create","question_id":"\u003cstring>","section_id":"\u003cstring>"},"mdi_case_id":"\u003cstring>","prescriber_case_id":"\u003cstring>","required_role":"\u003cstring>","type":"\u003cstring>"}}},"exampleType":"generated"}},"description":"the durable question store did not answer — nothing was written or changed; safe to retry once the store recovers","exampleType":"generated"}},"security":{"3ec2407b-c4ad-444d-8534-5c04d4dc5679":{"apiKey":{"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","scheme":"bearer","type":"http","scopes":[],"schemeName":"apiKey"}}},"servers":{"76f2c082-b62c-4aea-a087-a046f1378296":{"url":"https://api.staging.purplelabelmd.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","scheme":"bearer","type":"http","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Per-client API key (M2M). Presented as `Authorization: Bearer \u003ckey>`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi/public-openapi.json"},"subdomain":"purplelabelmd","siteName":"Purple Label MD","title":"Edit a qualification library question - Purple Label MD","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T04:48:52.961Z","originalFileLocation":"api-reference/offering-configuration/edit-a-qualification-library-question.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Updates a library question\u0026#x27;s wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\">\u003cmeta data-mint-head name=\"application-name\" content=\"Purple Label MD\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Edit a qualification library question - Purple Label MD\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates a library question\u0026#x27;s wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Purple Label MD\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://purplelabelmd.mintlify.site/_mintlify/api/og/v2?division=Offering+configuration\u0026amp;title=Edit+a+qualification+library+question\u0026amp;description=Updates+a+library+question%27s+wording%2C+options%2C+requiredness%2C+or+condition.+Omitted+fields+are+unchanged%3B+the+bound+fact+and+control+are+fixed+at+creation+%28delet\u0026amp;theme=1cfc55286f6f85a93657a32a\u0026amp;signature=6f320f5aa4567249404b0791b5af1bb12fc1fe0d6bd05e653bbab3c763ae11af\">\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=\"Edit a qualification library question - Purple Label MD\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates a library question\u0026#x27;s wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://purplelabelmd.mintlify.site/_mintlify/api/og/v2?division=Offering+configuration\u0026amp;title=Edit+a+qualification+library+question\u0026amp;description=Updates+a+library+question%27s+wording%2C+options%2C+requiredness%2C+or+condition.+Omitted+fields+are+unchanged%3B+the+bound+fact+and+control+are+fixed+at+creation+%28delet\u0026amp;theme=1cfc55286f6f85a93657a32a\u0026amp;signature=6f320f5aa4567249404b0791b5af1bb12fc1fe0d6bd05e653bbab3c763ae11af\">\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/purplelabelmd/TU4Si8SnCOFGjzcC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Purple Label MD\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6D28D9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/offering-configuration/edit-a-qualification-library-question.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.purplelabelmd.com/#organization\",\"name\":\"Purple Label MD\",\"url\":\"https://docs.purplelabelmd.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/purplelabelmd/1P9p4n7lsNL4z3Jc/logo/light.svg?fit=max\u0026auto=format\u0026n=1P9p4n7lsNL4z3Jc\u0026q=85\u0026s=3c0569e3f76e49e04d232187908c2e2e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.purplelabelmd.com#website\",\"name\":\"Purple Label MD\",\"url\":\"https://docs.purplelabelmd.com\",\"publisher\":{\"@id\":\"https://docs.purplelabelmd.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question#webpage\",\"url\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question\",\"name\":\"Edit a qualification library question\",\"description\":\"Updates a library question's wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\",\"dateModified\":\"2026-11-12T04:48:52.961Z\",\"isPartOf\":{\"@id\":\"https://docs.purplelabelmd.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Offering configuration\",\"item\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/list-your-brands-enabled-offerings\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Edit a qualification library question\",\"item\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question#apireference\",\"headline\":\"Edit a qualification library question\",\"name\":\"Edit a qualification library question\",\"description\":\"Updates a library question's wording, options, requiredness, or condition. Omitted fields are unchanged; the bound fact and control are fixed at creation (delete and recreate to change them).\",\"url\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question\",\"mainEntityOfPage\":{\"@id\":\"https://docs.purplelabelmd.com/api-reference/offering-configuration/edit-a-qualification-library-question#webpage\"},\"dateModified\":\"2026-11-12T04:48:52.961Z\",\"publisher\":{\"@id\":\"https://docs.purplelabelmd.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.purplelabelmd.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Purple Label MD\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Purple Label MD\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/offering-configuration/edit-a-qualification-library-question.md","siteName":"Purple Label MD","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/pages/overview"}]},{"tab":"API reference","groups":[{"group":"Brand configuration","pages":[{"title":"Read back your brand's platform configuration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/config","href":"/api-reference/brand-configuration/read-back-your-brands-platform-configuration"},{"title":"Set your brand's display identity","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/config","href":"/api-reference/brand-configuration/set-your-brands-display-identity"},{"title":"List your brand's custom domains","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains","href":"/api-reference/brand-configuration/list-your-brands-custom-domains"},{"title":"Read the browser origins your storefront may read this brand from","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains/member/browser-origins","href":"/api-reference/brand-configuration/read-the-browser-origins-your-storefront-may-read-this-brand-from"},{"title":"Replace the browser origins your storefront may read this brand from","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/domains/member/browser-origins","href":"/api-reference/brand-configuration/replace-the-browser-origins-your-storefront-may-read-this-brand-from"},{"title":"Read one custom-domain row","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/read-one-custom-domain-row"},{"title":"Choose a custom domain for a kind (client self-serve)","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/choose-a-custom-domain-for-a-kind-client-self-serve"},{"title":"Remove a custom domain (revert to the shared domain)","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/brands/{brand_id}/domains/{kind}","href":"/api-reference/brand-configuration/remove-a-custom-domain-revert-to-the-shared-domain"},{"title":"Verify a custom domain and advance provisioning","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/domains/{kind}/verify","href":"/api-reference/brand-configuration/verify-a-custom-domain-and-advance-provisioning"}]},{"group":"Offering configuration","pages":[{"title":"List your brand's enabled offerings","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/offerings","href":"/api-reference/offering-configuration/list-your-brands-enabled-offerings"},{"title":"Enable an offering for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/offerings","href":"/api-reference/offering-configuration/enable-an-offering-for-your-brand"},{"title":"Choose the billing cadence of an offering on your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/offerings/{offering_ref}/billing-cadence","href":"/api-reference/offering-configuration/choose-the-billing-cadence-of-an-offering-on-your-brand"},{"title":"Set your brand's price for an offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/brands/{brand_id}/pricing","href":"/api-reference/offering-configuration/set-your-brands-price-for-an-offering"},{"title":"Adopt the starter merchandising pack for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/brands/{brand_id}/starter-merchandising","href":"/api-reference/offering-configuration/adopt-the-starter-merchandising-pack-for-your-brand"},{"title":"Read an offering's composed qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/offerings/{offering_ref}/qualification","href":"/api-reference/offering-configuration/read-an-offerings-composed-qualification-questions"},{"title":"Add a library question to an offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/offerings/{offering_ref}/qualification","href":"/api-reference/offering-configuration/add-a-library-question-to-an-offering"},{"title":"Reorder an offering's qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/offerings/{offering_ref}/qualification/order","href":"/api-reference/offering-configuration/reorder-an-offerings-qualification-questions"},{"title":"Publish an offering's qualification questions","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/offerings/{offering_ref}/qualification/publish","href":"/api-reference/offering-configuration/publish-an-offerings-qualification-questions"},{"title":"Remove an offering's qualification question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/offerings/{offering_ref}/qualification/questions/{question_id}","href":"/api-reference/offering-configuration/remove-an-offerings-qualification-question"},{"title":"Edit an offering's qualification question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/offerings/{offering_ref}/qualification/questions/{question_id}","href":"/api-reference/offering-configuration/edit-an-offerings-qualification-question"},{"title":"Set the display name and presentation copy for your offering","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json put /v1/account/offerings/{ref}/merchandising","href":"/api-reference/offering-configuration/set-the-display-name-and-presentation-copy-for-your-offering"},{"title":"List the facts a qualification question may bind","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/question-library/facts","href":"/api-reference/offering-configuration/list-the-facts-a-qualification-question-may-bind"},{"title":"Create a new screening fact for your brand","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/question-library/minted-facts","href":"/api-reference/offering-configuration/create-a-new-screening-fact-for-your-brand"},{"title":"List your brand's qualification question library","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/question-library/questions","href":"/api-reference/offering-configuration/list-your-brands-qualification-question-library"},{"title":"Create a qualification library question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/account/question-library/questions","href":"/api-reference/offering-configuration/create-a-qualification-library-question"},{"title":"Delete a qualification library question","description":"Deletes a library question. Questions already added to an offering keep their own copies — removing them from an offering is a separate action.","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/delete-a-qualification-library-question"},{"title":"Edit a qualification library question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/account/question-library/questions/{question_id}","href":"/api-reference/offering-configuration/edit-a-qualification-library-question"}]},{"group":"Onboarding","pages":[{"title":"Check whether your brand is ready to sell","description":"Reports whether one of your brands can actually sell yet, and what is still outstanding if it cannot. Two levels: brand-wide checks covering your payment account and your checkout consent documents, and one row per offering you have enabled carrying the platform's live verdict plus the per-check report behind it. Every outstanding item says what has to happen and who does it, so a step only Purple operations can complete is never handed to you as yours to do. Some checks cannot be answered by this endpoint; those are reported as unverifiable rather than guessed, and unverifiable is never a pass. Read source_readable before you read an empty offering list: false means the setup could not be read just now. You may ask about your own brands only; any other brand is not found. This read reports configuration state and changes nothing. CALLING IT FROM A BROWSER: a web page may call this read directly. Present a publishable brand key — sent as `Authorization: Bearer pub_live_…`, or `pub_test_…` outside production — which is minted for a single brand, is read-only, and is meant to be shipped in page source. The key reaches only the operations its allowlist names: today that is this read and that brand's storefront price read, and nothing else — every other operation, and every write, is refused. Because it is minted for one brand it may only ask about that brand — any other brand, a sibling brand on your own account included, answers the same not found as a brand that does not exist, and the refusal never tells you which of those it was. A cross-origin page must also have its exact origin registered on that brand's browser-origin allowlist, so publishing the key does not by itself open the read to any site. The server path is unchanged — call this endpoint from your own server with your secret API key exactly as before, and never put that secret key in page source.","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/readiness","href":"/api-reference/onboarding/check-whether-your-brand-is-ready-to-sell"},{"title":"Read one offering's price and whether your brand can sell it","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/brands/{brand_id}/storefront","href":"/api-reference/onboarding/read-one-offerings-price-and-whether-your-brand-can-sell-it"},{"title":"Read a client's onboarding progress","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/onboardings/{onboarding_id}/progress","href":"/api-reference/onboarding/read-a-clients-onboarding-progress"}]},{"group":"Payments","pages":[{"title":"List your orders across all your brands","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/orders","href":"/api-reference/payments/list-your-orders-across-all-your-brands"},{"title":"Read one of your orders by reference","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/account/orders/{order_ref}","href":"/api-reference/payments/read-one-of-your-orders-by-reference"},{"title":"Start a checkout session and get a token to collect payment","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/payments/checkout-sessions","href":"/api-reference/payments/start-a-checkout-session-and-get-a-token-to-collect-payment"},{"title":"Read the payment status of an order","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/payments/{order_ref}/status","href":"/api-reference/payments/read-the-payment-status-of-an-order"}]},{"group":"Sessions \u0026 authentication","pages":[{"title":"Complete login and start the patient session","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/callback","href":"/api-reference/sessions-\u0026-authentication/complete-login-and-start-the-patient-session"},{"title":"Begin Universal Login and redirect to the login page","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/login","href":"/api-reference/sessions-\u0026-authentication/begin-universal-login-and-redirect-to-the-login-page"},{"title":"Log out and end the patient's session","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/auth/logout","href":"/api-reference/sessions-\u0026-authentication/log-out-and-end-the-patients-session"}]},{"group":"Intake","pages":[{"title":"Record that your patient dropped off the questionnaire","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/instrument/abandon","href":"/api-reference/intake/record-that-your-patient-dropped-off-the-questionnaire"},{"title":"Submit an answer and get the next question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/instrument/next","href":"/api-reference/intake/submit-an-answer-and-get-the-next-question"},{"title":"Start an intake session and get the first question","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/resolve","href":"/api-reference/intake/start-an-intake-session-and-get-the-first-question"}]},{"group":"Addresses","pages":[{"title":"Resolve a selected address suggestion to a full address","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/address/retrieve","href":"/api-reference/addresses/resolve-a-selected-address-suggestion-to-a-full-address"},{"title":"Suggest addresses as your patient types","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/instrument/address/suggest","href":"/api-reference/addresses/suggest-addresses-as-your-patient-types"}]},{"group":"Enrollment","pages":[{"title":"Read a patient's public enrollment status","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/journeys/{journey_id}/status","href":"/api-reference/enrollment/read-a-patients-public-enrollment-status"}]},{"group":"Webhooks","pages":[{"title":"List the webhook event types you can subscribe to","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/event-types","href":"/api-reference/webhooks/list-the-webhook-event-types-you-can-subscribe-to"},{"title":"List your webhook registrations","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/registrations","href":"/api-reference/webhooks/list-your-webhook-registrations"},{"title":"Register a webhook endpoint (signing secret shown once)","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/webhooks/registrations","href":"/api-reference/webhooks/register-a-webhook-endpoint-signing-secret-shown-once"},{"title":"Read one of your webhook registrations","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json get /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/read-one-of-your-webhook-registrations"},{"title":"Delete a webhook registration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json delete /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/delete-a-webhook-registration"},{"title":"Update a registration's URL, events, or enabled flag","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json patch /v1/webhooks/registrations/{registration_id}","href":"/api-reference/webhooks/update-a-registrations-url-events-or-enabled-flag"},{"title":"Send a test event to a registration","deprecated":null,"version":null,"openapi":"/openapi/public-openapi.json post /v1/webhooks/registrations/{registration_id}/test","href":"/api-reference/webhooks/send-a-test-event-to-a-registration"}]}]}]},"basePath":"","title":"Edit a qualification library question - Purple Label MD","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}