Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person.
Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable.
Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result.
Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen’s cards together.
Send each version’s status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as “since March 2016”. Send a car’s full VIN at its vin_pattern: Effective decodes it, fills the car’s vpic_* answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car’s year, make, model, drive, fuel and body, rides on those questions’ cards as suggested with sourcevin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_* answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them.
A card with noneAnswer stands in for a yes/no: “What’s the VIN?” with “I don’t have it” beside it. Any answer there says yes; the none answer, or null saved at the card’s path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit.
Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program’s steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person’s choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides.
issues lists answers or choices the versions’ contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path.
Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.
Paths the person put off, in order: each the path of the card put off, as the plan showed it. A follow-up asked in its yes/no’s place (a card with noneAnswer) is put off by its own path; the yes/no’s path (noneAnswer.gate) puts off the same card.
Where a program’s price is in its outputs, such as Policy.premium. With it, each program that misses no answer comes back with an estimate: its price with its own usual and typical answers for the questions not yet answered, and the range around it.
Where the policy term, in months, is in a program’s outputs, such as Policy.term_months. With it and priceAt, each estimate says the term its amounts are for (termMonths), so estimates of different terms can be compared a month.
What the person buys, by path: a limit, a deductible, a term. Each program is rated at its nearest step, by the shape its contract gives the choice (x-shape): a limit or a per-day amount rounds up in every part, a limit pair up to the smallest pair at least both parts, a deductible down to the largest step at most it, and an included, tier or term choice must match. A choice a program cannot price is not_offered for it, and that program rates its default; saying none (no to a yes/no, or leaving out a choice that may be left out) is priced as asked by a program with nothing at that path. When a program does not sell a choice as asked, task.differences says so and overrides takes the person’s pick. A choice at a path no program in the basket sells is left out and named in issues (CHOICE_NOT_SOLD); it never fails the request.
The person’s picks for programs that do not sell a choice as asked: each program is priced at its pick in place of its nearest step. Answer each of task.differences with one pick per program (accepting the suggestion is a pick equal to suggested). A pick is ignored, so its choice is asked again, once the choice is no longer asked, or when it names a program outside the basket or a step its program does not sell (a new version may drop one).
The names the host keeps for list items, by the item’s path (Policy.drivers[1]: “Harshita”), as a card’s itemName asks them. Never sent to a program: names words each item with its name, such as “Harshita (your spouse)”.
Values the host holds that are no answers, by key, such as where the person lives (zip). A fact whose usual answer is one of them (its contract’s x-common-from names the key) is not asked: it is listed in assumed with the value, and every program is rated with it. The plan never reads what a key means.
Answered paths to check against the choices the other answers narrow them to: send the answers a save gives, not every stored answer. Some questions take only the answers the earlier ones leave (a car’s model, by its year and make: a card with choices and no more), and no contract lists those, so such an answer is checked only when named here. Each program that narrows it is rated once more with that answer left out, and an answer none of them lists comes back in issues as NOT_A_CHOICE, with expected.choices and the candidates that may be meant. A path that is not such a question costs nothing.
Maximum array length: 50
A path in answers, such as Policy.vehicles[0].collision.deductible.
Paths the person asked to answer again. To read an answered question as it would be asked now, leave its answer out of answers and name its path here: its card comes back among questions whatever it waits on (the answer that would fill it, such as a car’s VIN, or the question it follows), with the answers the other answers leave it. Nothing is saved by a plan.
Maximum array length: 20
A path in answers, such as Policy.vehicles[0].collision.deductible.
The answers as Effective read them: a full VIN given at a car’s vin_pattern is cut down to its pattern, with what its decode filled (the car’s vpic_* answers). Send these back on the next call.
The answers other answers imply, rated and planned with but not in answers: a new list item’s key (the list’s largest plus one, Policy.vehicles[1].vehicle_id: 2), and the yes/no a follow-up asked in its place answers (a card with noneAnswer), where that yes/no is not answered itself: yes when the follow-up has a value (a VIN given answers vin_known true), no when it is saved as null, which says none, also beside a stored yes; and, on the first item of a list whose card has you, that field with that value when the item is sent without it: the first item is the person answering. Store them over what you hold; you never need to write them.
The one thing the person does next. confirm_choices while a choice is not confirmed or a difference is open, as soon as every list that gives a choice its record is closed (a car’s deductible needs the cars to be all in), though questions may still be open: what is chosen can open more questions, so the choices come before them, and questions keeps listing what comes after. Otherwise answer_screen, the first screen with a question that is not put off; with none left, confirm_choices for whatever is still to choose; else review_results, each program where it stands. Follow the task, not the length of questions: adding a list item later asks its own choices once its list is closed again.
The next question card, the first of questions, or null when every program is settled. While task is confirm_choices it is the question that comes after the choices: show what task says.
Every answered question as it reads now, in the contracts’ order. questions holds only the open cards, and a question is worded from the answers of its record, so the words an answer was asked with go stale: “What year is car 1?” is “What year is the 2020 Toyota RAV4?” once the car has its make. Show an answer under these words, not the ones kept from when it was asked. Holds each answer at a question the contracts word (an answer no contract asks in words, such as what a decode filled, is not a question); never a choice (see choices) or a list item’s key.
Every section of the basket in the order the plan asks them: the ones sent as sections, then the rest in the order the contracts declare them. A section that holds only choices stands where the plan asks the choices, whatever place it was sent at: after the section of the last list that holds a choice (the cars), or first when no choice is under a list. A card’s section and a screen’s are among these, so a host that sends no sections can list them from here, and one that counts steps counts these.
Each program whose status differs from previous, and, where previous gave its state, each whose state’s kind differs: a program rated before its choices were confirmed has the status priced throughout, and is listed when its state becomes priced. Why a program stands where it does is in its state.
Answers in answers or choices that the basket’s contracts cannot read as sent, answers named in check that are none of the choices the other answers narrow them to (NOT_A_CHOICE, as for an answer outside a listed enum), (NOT_SOLD) picks in overrides of a step their program does not sell, which are ignored, and (CHOICE_NOT_SOLD) entries of choices at a path no version in the basket sells, which are left out with their confirmed and overrides entries while the rest is planned. Correct each and plan again; stop sending a CHOICE_NOT_SOLD choice.
Each open list’s add action (its more card: “Any other cars?”, with addLabel and items), whether or not a screen holds it. “Is that all of them” is never a screen by itself: show it with the list’s items and send <list>_complete: true when the person moves on.
What the plan assumes instead of asking: a usual answer every program that asks it declares the same and asks on no checklist (source: usual), a value read from another answer (such as a decode), or one given in context. Every program is rated with these, so a price is exact for the stated assumptions: list them and let the person change one (card is its question). Never save one as the person’s answer; answering the path replaces it.
For each open program (programId@version), the paths an estimate of it still waits on: its open questions it asks first or gives no usual answer, and its choices not yet confirmed. An empty list: an estimate of that program can be shown.
Each list item’s own label by its path, as its answers give it, such as “your spouse” or “car 2”, whatever name was sent for it in displayNames. names holds the name to show.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Effective","description":"Research insurance markets with the Effective API and analyze premiums locally with Relativities.","colors":{"primary":"#171717","light":"#EAEBE6","dark":"#171717"},"logo":{"light":"https://mintcdn.com/effective-ai/2LuMFu5DJnp1_bni/logo/light.svg?fit=max\u0026auto=format\u0026n=2LuMFu5DJnp1_bni\u0026q=85\u0026s=58a80094dc36f54725a92d58b658b002","dark":"https://mintcdn.com/effective-ai/2LuMFu5DJnp1_bni/logo/dark.svg?fit=max\u0026auto=format\u0026n=2LuMFu5DJnp1_bni\u0026q=85\u0026s=bceca553b2202a5b266e2dc9d5e12091"},"favicon":"https://mintcdn.com/effective-ai/1hq4M5YCCg3Na_6S/favicon.svg?fit=max\u0026auto=format\u0026n=1hq4M5YCCg3Na_6S\u0026q=85\u0026s=58dacb0a39ffb97457df79d8c45c4adf","api":{"playground":{"display":"interactive"}},"background":{"color":{"light":"#FDFDFC","dark":"#1F201D"}},"navbar":{"links":[{"href":"https://effectiveailabs.com/support","label":"Support"}]},"seo":{"metatags":{"canonical":"https://docs.effectiveai.app"},"indexing":"navigable"},"styling":{"codeblocks":{"languages":{"custom":["languages/rsl.tmLanguage.json"]}},"latex":true},"integrations":{"posthog":{"apiKey":"phc_lqBgNxwfmrWDRHilA0uhs7vjD1fjHwUC3zALvFLGb3e","apiHost":"https://us.i.posthog.com","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude","download-spec"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"effective-ai","hasAudioNarration":false,"actualSubdomain":"effective-ai","customDomains":["docs.effectiveai.app"],"gitSource":{"type":"github","owner":"effectiveailabs","repo":"effectiveai","deployBranch":"docs-production","contentDirectory":"docs/public","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af61e3d2d34b58e26d628a8","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"API Reference","count":244},{"language":"default","tag":"RSL","count":51},{"language":"default","tag":"Relativities","count":37},{"language":"default","tag":"Reference","count":23},{"language":"default","tag":"OSHA","count":23},{"language":"default","tag":"Managed Filings","count":22},{"language":"default","tag":"Objections","count":21},{"language":"default","tag":"Market Directory","count":16},{"language":"default","tag":"Products","count":16},{"language":"default","tag":"Market raters","count":15}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"guide-index.css","content":".research-guide-index h3{font-size:1rem!important;font-weight:500!important;line-height:1.5!important;margin-top:1.25rem!important;margin-bottom:0.5rem!important}.research-guide-index h3 a{font-weight:500!important;text-decoration:none!important;border-bottom:0!important}.research-guide-index h3 a[href^=\"/guides/\"]::after{content:' →';display:inline-block;margin-left:0.25rem}.research-guide-index h3 a:hover,.research-guide-index h3 a:focus-visible{text-decoration:underline!important;text-underline-offset:0.2em}.research-guide-index h3+p{margin-top:0.5rem!important}.research-guide-index hr{margin-top:1.5rem!important;margin-bottom:1.5rem!important}"}],"page":{"pagePath":"api-reference/market-raters/plan-the-next-question-for-market-rater-versions","slug":"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions","pageMetadata":{"title":"Plan the next question for market rater versions","description":"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is `priced`, `declined`, `invalid` or `open`, as for [rating with `allowMissing`](/api-reference/market-raters/rate-a-submission-with-a-market-rater-version), or `failed` when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; `state` says where the version stands for the person.\n\nName each rater by `programId` and leave `version` out: it is read at the version this server rates with, the newest published version its rating engine can load, and `programs[].version` in the response names it. Keep that `version` and `bundleId` with a price. Do not pick a version from [List market rater versions](/api-reference/market-raters/list-market-rater-versions) yourself: its newest may be one that waits for a server release. Send a `version` only to pin one; a pinned version this server cannot load fails the request with 409 `version_not_loadable`.\n\nEvery version is in one `state`, and every state but `priced` says the way out: `needs` lists the questions to answer and the choices to make, each with the `error` when the version refused what was given; `declined` gives the reason and the answers to `change`; `failed` gives the reason, and the way out is to try again. Nothing is asked twice without an `error`. A version is `priced` in `state` only once every choice it prices is confirmed: until then it `needs` those choices, even when its rater already returned a result.\n\nEffective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. `next` is a card the person answers: its `kind` and `format` say which input to show, and its `path` says where the answer goes in `answers`. It is `null` once every version is priced or declined. `questions` holds every open card in asking order, each with its `screen`, the record it belongs to: show a screen's cards together.\n\nSend each version's status from the previous call as `previous`: `changes` then names each version whose status changed, with the refused answer for a decline. Send `asOf` to fill look-back windows such as \"since March 2016\". Send a car's full VIN at its `vin_pattern`: Effective decodes it, fills the car's `vpic_*` answers and keeps only the pattern, and returns the answers as it read them in `answers`. What the VIN suggests, such as the car's year, make, model, drive, fuel and body, rides on those questions' cards as `suggested` with `source` `vin_decode`: show them together and let the person confirm or correct them. A client with its own decode may send the `vpic_*` answers instead. Send `fills` for what else you fill from an answer: a question that fills others is asked before them.\n\nA card with `noneAnswer` stands in for a yes/no: \"What's the VIN?\" with \"I don't have it\" beside it. Any answer there says yes; the none answer, or `null` saved at the card's `path`, says no. `implied` returns that yes/no, so you never write it. `null` is an answer wherever a card is `nullable`: nothing asks there again. To put a card off, send the `path` it shows in `skipped`; it comes back last, marked `revisit`.\n\nCoverage is chosen, not asked: `choices` in the response lists each limit, deductible or term the basket prices, with every program's steps. The task asks for it (`confirm_choices`) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person's choices as `choices`, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its `choices` what it priced. When some versions do not sell a choice as asked, `task.differences` lists them with the steps they do offer: ask the person once, and send the pick as `overrides`.\n\n`issues` lists answers or choices the versions' contracts cannot read as sent, each with its `path`, a `code` and, where known, what is `expected` and `candidates` that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its `confirmed` and `overrides` entries, the rest is planned, and `issues` names it with the code `CHOICE_NOT_SOLD`. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path.\n\nNeeds access to rate every named version and your `raters:run` permission. Rating changes nothing, so the request is safe to repeat.","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/plan","href":"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is \", _jsx(_components.code, {\n children: \"priced\"\n }), \", \", _jsx(_components.code, {\n children: \"declined\"\n }), \", \", _jsx(_components.code, {\n children: \"invalid\"\n }), \" or \", _jsx(_components.code, {\n children: \"open\"\n }), \", as for \", _jsxs(_components.a, {\n href: \"/api-reference/market-raters/rate-a-submission-with-a-market-rater-version\",\n children: [\"rating with \", _jsx(_components.code, {\n children: \"allowMissing\"\n })]\n }), \", or \", _jsx(_components.code, {\n children: \"failed\"\n }), \" when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; \", _jsx(_components.code, {\n children: \"state\"\n }), \" says where the version stands for the person.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Name each rater by \", _jsx(_components.code, {\n children: \"programId\"\n }), \" and leave \", _jsx(_components.code, {\n children: \"version\"\n }), \" out: it is read at the version this server rates with, the newest published version its rating engine can load, and \", _jsx(_components.code, {\n children: \"programs[].version\"\n }), \" in the response names it. Keep that \", _jsx(_components.code, {\n children: \"version\"\n }), \" and \", _jsx(_components.code, {\n children: \"bundleId\"\n }), \" with a price. Do not pick a version from \", _jsx(_components.a, {\n href: \"/api-reference/market-raters/list-market-rater-versions\",\n children: \"List market rater versions\"\n }), \" yourself: its newest may be one that waits for a server release. Send a \", _jsx(_components.code, {\n children: \"version\"\n }), \" only to pin one; a pinned version this server cannot load fails the request with 409 \", _jsx(_components.code, {\n children: \"version_not_loadable\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Every version is in one \", _jsx(_components.code, {\n children: \"state\"\n }), \", and every state but \", _jsx(_components.code, {\n children: \"priced\"\n }), \" says the way out: \", _jsx(_components.code, {\n children: \"needs\"\n }), \" lists the questions to answer and the choices to make, each with the \", _jsx(_components.code, {\n children: \"error\"\n }), \" when the version refused what was given; \", _jsx(_components.code, {\n children: \"declined\"\n }), \" gives the reason and the answers to \", _jsx(_components.code, {\n children: \"change\"\n }), \"; \", _jsx(_components.code, {\n children: \"failed\"\n }), \" gives the reason, and the way out is to try again. Nothing is asked twice without an \", _jsx(_components.code, {\n children: \"error\"\n }), \". A version is \", _jsx(_components.code, {\n children: \"priced\"\n }), \" in \", _jsx(_components.code, {\n children: \"state\"\n }), \" only once every choice it prices is confirmed: until then it \", _jsx(_components.code, {\n children: \"needs\"\n }), \" those choices, even when its rater already returned a result.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. \", _jsx(_components.code, {\n children: \"next\"\n }), \" is a card the person answers: its \", _jsx(_components.code, {\n children: \"kind\"\n }), \" and \", _jsx(_components.code, {\n children: \"format\"\n }), \" say which input to show, and its \", _jsx(_components.code, {\n children: \"path\"\n }), \" says where the answer goes in \", _jsx(_components.code, {\n children: \"answers\"\n }), \". It is \", _jsx(_components.code, {\n children: \"null\"\n }), \" once every version is priced or declined. \", _jsx(_components.code, {\n children: \"questions\"\n }), \" holds every open card in asking order, each with its \", _jsx(_components.code, {\n children: \"screen\"\n }), \", the record it belongs to: show a screen’s cards together.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send each version’s status from the previous call as \", _jsx(_components.code, {\n children: \"previous\"\n }), \": \", _jsx(_components.code, {\n children: \"changes\"\n }), \" then names each version whose status changed, with the refused answer for a decline. Send \", _jsx(_components.code, {\n children: \"asOf\"\n }), \" to fill look-back windows such as “since March 2016”. Send a car’s full VIN at its \", _jsx(_components.code, {\n children: \"vin_pattern\"\n }), \": Effective decodes it, fills the car’s \", _jsx(_components.code, {\n children: \"vpic_*\"\n }), \" answers and keeps only the pattern, and returns the answers as it read them in \", _jsx(_components.code, {\n children: \"answers\"\n }), \". What the VIN suggests, such as the car’s year, make, model, drive, fuel and body, rides on those questions’ cards as \", _jsx(_components.code, {\n children: \"suggested\"\n }), \" with \", _jsx(_components.code, {\n children: \"source\"\n }), \" \", _jsx(_components.code, {\n children: \"vin_decode\"\n }), \": show them together and let the person confirm or correct them. A client with its own decode may send the \", _jsx(_components.code, {\n children: \"vpic_*\"\n }), \" answers instead. Send \", _jsx(_components.code, {\n children: \"fills\"\n }), \" for what else you fill from an answer: a question that fills others is asked before them.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A card with \", _jsx(_components.code, {\n children: \"noneAnswer\"\n }), \" stands in for a yes/no: “What’s the VIN?” with “I don’t have it” beside it. Any answer there says yes; the none answer, or \", _jsx(_components.code, {\n children: \"null\"\n }), \" saved at the card’s \", _jsx(_components.code, {\n children: \"path\"\n }), \", says no. \", _jsx(_components.code, {\n children: \"implied\"\n }), \" returns that yes/no, so you never write it. \", _jsx(_components.code, {\n children: \"null\"\n }), \" is an answer wherever a card is \", _jsx(_components.code, {\n children: \"nullable\"\n }), \": nothing asks there again. To put a card off, send the \", _jsx(_components.code, {\n children: \"path\"\n }), \" it shows in \", _jsx(_components.code, {\n children: \"skipped\"\n }), \"; it comes back last, marked \", _jsx(_components.code, {\n children: \"revisit\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Coverage is chosen, not asked: \", _jsx(_components.code, {\n children: \"choices\"\n }), \" in the response lists each limit, deductible or term the basket prices, with every program’s steps. The task asks for it (\", _jsx(_components.code, {\n children: \"confirm_choices\"\n }), \") as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person’s choices as \", _jsx(_components.code, {\n children: \"choices\"\n }), \", by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its \", _jsx(_components.code, {\n children: \"choices\"\n }), \" what it priced. When some versions do not sell a choice as asked, \", _jsx(_components.code, {\n children: \"task.differences\"\n }), \" lists them with the steps they do offer: ask the person once, and send the pick as \", _jsx(_components.code, {\n children: \"overrides\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"issues\"\n }), \" lists answers or choices the versions’ contracts cannot read as sent, each with its \", _jsx(_components.code, {\n children: \"path\"\n }), \", a \", _jsx(_components.code, {\n children: \"code\"\n }), \" and, where known, what is \", _jsx(_components.code, {\n children: \"expected\"\n }), \" and \", _jsx(_components.code, {\n children: \"candidates\"\n }), \" that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its \", _jsx(_components.code, {\n children: \"confirmed\"\n }), \" and \", _jsx(_components.code, {\n children: \"overrides\"\n }), \" entries, the rest is planned, and \", _jsx(_components.code, {\n children: \"issues\"\n }), \" names it with the code \", _jsx(_components.code, {\n children: \"CHOICE_NOT_SOLD\"\n }), \". This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Needs access to rate every named version and your \", _jsx(_components.code, {\n children: \"raters:run\"\n }), \" permission. Rating changes nothing, so the request is safe to repeat.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":{"languages":{"custom":["languages/rsl.tmLanguage.json"]}},"config":{},"pageMetadata":{"title":"Plan the next question for market rater versions","description":"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is `priced`, `declined`, `invalid` or `open`, as for [rating with `allowMissing`](/api-reference/market-raters/rate-a-submission-with-a-market-rater-version), or `failed` when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; `state` says where the version stands for the person.\n\nName each rater by `programId` and leave `version` out: it is read at the version this server rates with, the newest published version its rating engine can load, and `programs[].version` in the response names it. Keep that `version` and `bundleId` with a price. Do not pick a version from [List market rater versions](/api-reference/market-raters/list-market-rater-versions) yourself: its newest may be one that waits for a server release. Send a `version` only to pin one; a pinned version this server cannot load fails the request with 409 `version_not_loadable`.\n\nEvery version is in one `state`, and every state but `priced` says the way out: `needs` lists the questions to answer and the choices to make, each with the `error` when the version refused what was given; `declined` gives the reason and the answers to `change`; `failed` gives the reason, and the way out is to try again. Nothing is asked twice without an `error`. A version is `priced` in `state` only once every choice it prices is confirmed: until then it `needs` those choices, even when its rater already returned a result.\n\nEffective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. `next` is a card the person answers: its `kind` and `format` say which input to show, and its `path` says where the answer goes in `answers`. It is `null` once every version is priced or declined. `questions` holds every open card in asking order, each with its `screen`, the record it belongs to: show a screen's cards together.\n\nSend each version's status from the previous call as `previous`: `changes` then names each version whose status changed, with the refused answer for a decline. Send `asOf` to fill look-back windows such as \"since March 2016\". Send a car's full VIN at its `vin_pattern`: Effective decodes it, fills the car's `vpic_*` answers and keeps only the pattern, and returns the answers as it read them in `answers`. What the VIN suggests, such as the car's year, make, model, drive, fuel and body, rides on those questions' cards as `suggested` with `source` `vin_decode`: show them together and let the person confirm or correct them. A client with its own decode may send the `vpic_*` answers instead. Send `fills` for what else you fill from an answer: a question that fills others is asked before them.\n\nA card with `noneAnswer` stands in for a yes/no: \"What's the VIN?\" with \"I don't have it\" beside it. Any answer there says yes; the none answer, or `null` saved at the card's `path`, says no. `implied` returns that yes/no, so you never write it. `null` is an answer wherever a card is `nullable`: nothing asks there again. To put a card off, send the `path` it shows in `skipped`; it comes back last, marked `revisit`.\n\nCoverage is chosen, not asked: `choices` in the response lists each limit, deductible or term the basket prices, with every program's steps. The task asks for it (`confirm_choices`) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person's choices as `choices`, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its `choices` what it priced. When some versions do not sell a choice as asked, `task.differences` lists them with the steps they do offer: ask the person once, and send the pick as `overrides`.\n\n`issues` lists answers or choices the versions' contracts cannot read as sent, each with its `path`, a `code` and, where known, what is `expected` and `candidates` that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its `confirmed` and `overrides` entries, the rest is planned, and `issues` names it with the code `CHOICE_NOT_SOLD`. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path.\n\nNeeds access to rate every named version and your `raters:run` permission. Rating changes nothing, so the request is safe to repeat.","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/plan","href":"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"x-effective-authorization":{"allOf":[{"resourceType":"raters","action":"run","scope":"organization"}]},"operationId":"planRatingProgramQuestions","tags":["Market raters"],"summary":"Plan the next question for market rater versions","description":"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is `priced`, `declined`, `invalid` or `open`, as for [rating with `allowMissing`](/api-reference/market-raters/rate-a-submission-with-a-market-rater-version), or `failed` when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; `state` says where the version stands for the person.\n\nName each rater by `programId` and leave `version` out: it is read at the version this server rates with, the newest published version its rating engine can load, and `programs[].version` in the response names it. Keep that `version` and `bundleId` with a price. Do not pick a version from [List market rater versions](/api-reference/market-raters/list-market-rater-versions) yourself: its newest may be one that waits for a server release. Send a `version` only to pin one; a pinned version this server cannot load fails the request with 409 `version_not_loadable`.\n\nEvery version is in one `state`, and every state but `priced` says the way out: `needs` lists the questions to answer and the choices to make, each with the `error` when the version refused what was given; `declined` gives the reason and the answers to `change`; `failed` gives the reason, and the way out is to try again. Nothing is asked twice without an `error`. A version is `priced` in `state` only once every choice it prices is confirmed: until then it `needs` those choices, even when its rater already returned a result.\n\nEffective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. `next` is a card the person answers: its `kind` and `format` say which input to show, and its `path` says where the answer goes in `answers`. It is `null` once every version is priced or declined. `questions` holds every open card in asking order, each with its `screen`, the record it belongs to: show a screen's cards together.\n\nSend each version's status from the previous call as `previous`: `changes` then names each version whose status changed, with the refused answer for a decline. Send `asOf` to fill look-back windows such as \"since March 2016\". Send a car's full VIN at its `vin_pattern`: Effective decodes it, fills the car's `vpic_*` answers and keeps only the pattern, and returns the answers as it read them in `answers`. What the VIN suggests, such as the car's year, make, model, drive, fuel and body, rides on those questions' cards as `suggested` with `source` `vin_decode`: show them together and let the person confirm or correct them. A client with its own decode may send the `vpic_*` answers instead. Send `fills` for what else you fill from an answer: a question that fills others is asked before them.\n\nA card with `noneAnswer` stands in for a yes/no: \"What's the VIN?\" with \"I don't have it\" beside it. Any answer there says yes; the none answer, or `null` saved at the card's `path`, says no. `implied` returns that yes/no, so you never write it. `null` is an answer wherever a card is `nullable`: nothing asks there again. To put a card off, send the `path` it shows in `skipped`; it comes back last, marked `revisit`.\n\nCoverage is chosen, not asked: `choices` in the response lists each limit, deductible or term the basket prices, with every program's steps. The task asks for it (`confirm_choices`) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person's choices as `choices`, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its `choices` what it priced. When some versions do not sell a choice as asked, `task.differences` lists them with the steps they do offer: ask the person once, and send the pick as `overrides`.\n\n`issues` lists answers or choices the versions' contracts cannot read as sent, each with its `path`, a `code` and, where known, what is `expected` and `candidates` that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its `confirmed` and `overrides` entries, the rest is planned, and `issues` names it with the code `CHOICE_NOT_SOLD`. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path.\n\nNeeds access to rate every named version and your `raters:run` permission. Rating changes nothing, so the request is safe to repeat.","security":["2070a9ee-0244-417b-abe6-7f40c1f9bc63"],"requestBody":"143d1e16-ba2d-4ca5-a40c-beca4680a007","responses":{"200":"5c1e85e1-ac26-4887-9e31-ec87372bffce","400":"4c0e57cc-98a2-47a3-9bec-825178eacc11","401":"24e4131c-6fcc-49f2-a47a-338996a5fca9","403":"03d40bd5-c6f2-4b04-a937-0a7a34778ea0","404":"c22db69a-8a2e-415a-864f-d305bd39d48c","409":"91d5e780-4e36-41fb-954b-64f297e24953","413":"f905562e-ee2a-45b8-8520-685da1d7009c","415":"5ab705b6-908e-4fe7-ab83-8102b8c1a857","422":"c4dfeed5-4399-4a4f-9a45-25bd5bc5d344","429":"904c8822-27e3-4a48-8455-c09349ccbbfa","500":"dfbd2901-5d78-4d5d-bc5d-dafe0edc6baa","503":"96ab686e-2558-4511-9863-9dda953efb7c"},"method":"post","type":"path","servers":["f1e5bb62-7f9a-4959-898b-6df4c785a6d3"],"path":"/insurance/rating-programs/plan","baseUrlOptions":["https://api.effectiveai.app/api/v2"],"title":"Plan the next question for market rater versions","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"programs":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"programs.items.[INDEX].programId","typeLabel":"string"},"version":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Leave it out to read the program at the version this server rates with: the newest published version its rating engine can load. The response names it. Send a version only to pin one.","uniqueKey":"programs.items.[INDEX].version","typeLabel":"integer"},"title":{"type":"string","maxLength":100,"description":"How the host names this program to the person, such as `GEICO`. Defaults to the program’s name.","uniqueKey":"programs.items.[INDEX].title","typeLabel":"string"}},"required":["programId"],"additionalProperties":false,"uniqueKey":"programs.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":10,"description":"The programs, each at the version this server rates with or at a pinned version. Each reads only the paths its own contract declares.","isRequired":true,"uniqueKey":"programs","typeLabel":"object[]"},"answers":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"answers.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"answers.additionalProperties","typeLabel":"null"},"description":"Every answer so far, keyed by root record.","isRequired":true,"uniqueKey":"answers","typeLabel":"object"},"skipped":{"type":"array","items":{"type":"string","uniqueKey":"skipped.items.[INDEX]","typeLabel":"string"},"default":[],"description":"Paths the person put off, in order: each the `path` of the card put off, as the plan showed it. A follow-up asked in its yes/no’s place (a card with `noneAnswer`) is put off by its own path; the yes/no’s path (`noneAnswer.gate`) puts off the same card.","uniqueKey":"skipped","typeLabel":"string[]"},"after":{"oneOf":[{"type":"string","default":null,"description":"The path answered last.","uniqueKey":"after.oneOf.0","typeLabel":"string"},{"type":"null","default":null,"description":"The path answered last.","uniqueKey":"after.oneOf.1","typeLabel":"null"}],"uniqueKey":"after","typeLabel":"string | null"},"sections":{"type":"array","items":{"type":"string","uniqueKey":"sections.items.[INDEX]","typeLabel":"string"},"default":[],"description":"The order the host shows sections in.","uniqueKey":"sections","typeLabel":"string[]"},"offered":{"type":"array","items":{"type":"string","uniqueKey":"offered.items.[INDEX]","typeLabel":"string"},"default":[],"description":"Document kinds already offered.","uniqueKey":"offered","typeLabel":"string[]"},"confirmed":{"type":"array","items":{"type":"string","uniqueKey":"confirmed.items.[INDEX]","typeLabel":"string"},"default":[],"description":"The `choices` paths the person has confirmed. Keep each with the value confirmed and drop one whose value, or whose set of choices, changed.","uniqueKey":"confirmed","typeLabel":"string[]"},"previous":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"previous.items.[INDEX].programId","typeLabel":"string"},"status":{"type":"string","enum":["priced","declined","invalid","open","failed"],"description":"`failed`: the program could not be read or rated. The other programs plan on.","isRequired":true,"uniqueKey":"previous.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"version":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Leave it out for a program sent without a version.","uniqueKey":"previous.items.[INDEX].version","typeLabel":"integer"},"state":{"type":"string","enum":["priced","needs","declined","failed"],"description":"The `state.kind` the program had in the previous call, if you kept it. `changes` then also lists a program whose state differs though its status does not.","uniqueKey":"previous.items.[INDEX].state","typeLabel":"enum\u003cstring>"}},"required":["programId","status"],"additionalProperties":false,"uniqueKey":"previous.items.[INDEX]","typeLabel":"object"},"maxItems":10,"default":[],"description":"Each program’s status from the previous call, and its state’s kind if you kept it. `changes` lists the programs whose status, or state, differs now.","uniqueKey":"previous","typeLabel":"object[]"},"asOf":{"type":"string","format":"date","description":"The date answers are as of, `YYYY-MM-DD`. It fills look-back windows such as “since March 2016”. No rater reads the clock.","uniqueKey":"asOf","typeLabel":"string\u003cdate>"},"priceAt":{"type":"string","maxLength":200,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$","description":"Where a program’s price is in its outputs, such as `Policy.premium`. With it, each program that misses no answer comes back with an `estimate`: its price with its own usual and typical answers for the questions not yet answered, and the range around it.","uniqueKey":"priceAt","typeLabel":"string"},"termAt":{"type":"string","maxLength":200,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$","description":"Where the policy term, in months, is in a program’s outputs, such as `Policy.term_months`. With it and `priceAt`, each `estimate` says the term its amounts are for (`termMonths`), so estimates of different terms can be compared a month.","uniqueKey":"termAt","typeLabel":"string"},"fills":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","maxLength":100,"description":"The host’s name for where the values come from.","isRequired":true,"uniqueKey":"fills.items.[INDEX].source","typeLabel":"string"},"from":{"type":"string","maxLength":500,"description":"The answered path, `[*]` for any list item: `Policy.vehicles[*].vin`.","isRequired":true,"uniqueKey":"fills.items.[INDEX].from","typeLabel":"string"},"fills":{"type":"array","items":{"type":"string","maxLength":100,"uniqueKey":"fills.items.[INDEX].fills.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"The fields of that record it fills.","isRequired":true,"uniqueKey":"fills.items.[INDEX].fills","typeLabel":"string[]"}},"required":["source","from","fills"],"additionalProperties":false,"uniqueKey":"fills.items.[INDEX]","typeLabel":"object"},"maxItems":20,"default":[],"description":"What the host fills from an answer, such as a car’s year and make from its VIN. A question that fills others is asked before them.","uniqueKey":"fills","typeLabel":"object[]"},"choices":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"choices.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"choices.additionalProperties","typeLabel":"null"},"default":{},"description":"What the person buys, by path: a limit, a deductible, a term. Each program is rated at its nearest step, by the shape its contract gives the choice (`x-shape`): a limit or a per-day amount rounds up in every part, a limit pair up to the smallest pair at least both parts, a deductible down to the largest step at most it, and an included, tier or term choice must match. A choice a program cannot price is `not_offered` for it, and that program rates its default; saying none (no to a yes/no, or leaving out a choice that may be left out) is priced as asked by a program with nothing at that path. When a program does not sell a choice as asked, `task.differences` says so and `overrides` takes the person’s pick. A choice at a path no program in the basket sells is left out and named in `issues` (`CHOICE_NOT_SOLD`); it never fails the request.","uniqueKey":"choices","typeLabel":"object"},"overrides":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","description":"A program of the basket.","isRequired":true,"uniqueKey":"overrides.items.[INDEX].programId","typeLabel":"string"},"path":{"type":"string","maxLength":500,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*(\\.[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*)*$","description":"The choice’s path, as in `choices`.","isRequired":true,"uniqueKey":"overrides.items.[INDEX].path","typeLabel":"string"},"asked":{"oneOf":[{"description":"The choice this pick answers, as sent in `choices`. A pick whose `asked` is no longer the choice is ignored, so a changed choice is asked again.","uniqueKey":"overrides.items.[INDEX].asked.oneOf.0","typeLabel":"any"},{"description":"The choice this pick answers, as sent in `choices`. A pick whose `asked` is no longer the choice is ignored, so a changed choice is asked again.","type":"null","uniqueKey":"overrides.items.[INDEX].asked.oneOf.1","typeLabel":"null"}],"uniqueKey":"overrides.items.[INDEX].asked","typeLabel":"any | null"},"value":{"oneOf":[{"description":"One of the steps this program offers at `path` (`choices[].steps[].programIds`), such as one of a difference’s `options`.","uniqueKey":"overrides.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"One of the steps this program offers at `path` (`choices[].steps[].programIds`), such as one of a difference’s `options`.","type":"null","uniqueKey":"overrides.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"overrides.items.[INDEX].value","typeLabel":"any | null"}},"required":["programId","path"],"additionalProperties":false,"uniqueKey":"overrides.items.[INDEX]","typeLabel":"object"},"maxItems":200,"default":[],"description":"The person’s picks for programs that do not sell a choice as asked: each program is priced at its pick in place of its nearest step. Answer each of `task.differences` with one pick per program (accepting the suggestion is a pick equal to `suggested`). A pick is ignored, so its choice is asked again, once the choice is no longer `asked`, or when it names a program outside the basket or a step its program does not sell (a new version may drop one).","uniqueKey":"overrides","typeLabel":"object[]"},"displayNames":{"type":"object","additionalProperties":{"type":"string","maxLength":30,"uniqueKey":"displayNames.additionalProperties","typeLabel":"string"},"default":{},"description":"The names the host keeps for list items, by the item’s path (`Policy.drivers[1]`: “Harshita”), as a card’s `itemName` asks them. Never sent to a program: `names` words each item with its name, such as “Harshita (your spouse)”.","uniqueKey":"displayNames","typeLabel":"object"},"context":{"type":"object","additionalProperties":{"oneOf":[{"type":"string","maxLength":200,"uniqueKey":"context.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"context.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"context.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"context.additionalProperties","typeLabel":"string | number | boolean"},"default":{},"description":"Values the host holds that are no answers, by key, such as where the person lives (`zip`). A fact whose usual answer is one of them (its contract’s `x-common-from` names the key) is not asked: it is listed in `assumed` with the value, and every program is rated with it. The plan never reads what a key means.","uniqueKey":"context","typeLabel":"object"},"check":{"type":"array","items":{"type":"string","maxLength":500,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*(\\.[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*)*$","description":"A path in `answers`, such as `Policy.vehicles[0].collision.deductible`.","uniqueKey":"check.items.[INDEX]","typeLabel":"string"},"maxItems":50,"default":[],"description":"Answered paths to check against the choices the other answers narrow them to: send the answers a save gives, not every stored answer. Some questions take only the answers the earlier ones leave (a car’s model, by its year and make: a card with `choices` and no `more`), and no contract lists those, so such an answer is checked only when named here. Each program that narrows it is rated once more with that answer left out, and an answer none of them lists comes back in `issues` as `NOT_A_CHOICE`, with `expected.choices` and the `candidates` that may be meant. A path that is not such a question costs nothing.","uniqueKey":"check","typeLabel":"string[]"},"again":{"type":"array","items":{"type":"string","maxLength":500,"pattern":"^[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*(\\.[A-Za-z_][A-Za-z0-9_]*(\\[\\d+\\])*)*$","description":"A path in `answers`, such as `Policy.vehicles[0].collision.deductible`.","uniqueKey":"again.items.[INDEX]","typeLabel":"string"},"maxItems":20,"default":[],"description":"Paths the person asked to answer again. To read an answered question as it would be asked now, leave its answer out of `answers` and name its path here: its card comes back among `questions` whatever it waits on (the answer that would fill it, such as a car’s VIN, or the question it follows), with the answers the other answers leave it. Nothing is saved by a plan.","uniqueKey":"again","typeLabel":"string[]"}},"required":["programs","answers"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"programs":[{"programId":"\u003cstring>","version":1,"title":"\u003cstring>"}],"answers":{},"skipped":[],"after":null,"sections":[],"offered":[],"confirmed":[],"previous":[],"asOf":"2023-12-25","priceAt":"\u003cstring>","termAt":"\u003cstring>","fills":[],"choices":{},"overrides":[],"displayNames":{},"context":{},"check":[],"again":[]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"5c1e85e1-ac26-4887-9e31-ec87372bffce":{"description":"The next question and each version’s status.","content":{"application/json":{"schema":{"type":"object","properties":{"asOf":{"oneOf":[{"type":"string","description":"The request’s `asOf`.","isRequired":true,"uniqueKey":"asOf.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request’s `asOf`.","isRequired":true,"uniqueKey":"asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"asOf","typeLabel":"string | null"},"answers":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"answers.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"answers.additionalProperties","typeLabel":"null"},"description":"The answers as Effective read them: a full VIN given at a car’s `vin_pattern` is cut down to its pattern, with what its decode filled (the car’s `vpic_*` answers). Send these back on the next call.","isRequired":true,"uniqueKey":"answers","typeLabel":"object"},"implied":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"implied.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"implied.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"implied.items.[INDEX].value","typeLabel":"null"}},"required":["path"],"uniqueKey":"implied.items.[INDEX]","typeLabel":"object"},"description":"The answers other answers imply, rated and planned with but not in `answers`: a new list item’s key (the list’s largest plus one, `Policy.vehicles[1].vehicle_id`: 2), and the yes/no a follow-up asked in its place answers (a card with `noneAnswer`), where that yes/no is not answered itself: yes when the follow-up has a value (a VIN given answers `vin_known` true), no when it is saved as `null`, which says none, also beside a stored yes; and, on the first item of a list whose card has `you`, that field with that value when the item is sent without it: the first item is the person answering. Store them over what you hold; you never need to write them.","isRequired":true,"uniqueKey":"implied","typeLabel":"object[]"},"task":{"oneOf":[{"type":"object","description":"The one thing the person does next. `confirm_choices` while a choice is not confirmed or a difference is open, as soon as every list that gives a choice its record is closed (a car’s deductible needs the cars to be all in), though questions may still be open: what is chosen can open more questions, so the choices come before them, and `questions` keeps listing what comes after. Otherwise `answer_screen`, the first screen with a question that is not put off; with none left, `confirm_choices` for whatever is still to choose; else `review_results`, each program where it stands. Follow the task, not the length of `questions`: adding a list item later asks its own choices once its list is closed again.","required":["kind","screen"],"properties":{"kind":{"type":"string","enum":["answer_screen"],"isRequired":true,"uniqueKey":"task.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"screen":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.id","typeLabel":"string"},"kind":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.kind","typeLabel":"string"},"cards":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].min.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].max.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX].noneAnswer","typeLabel":"object"}},"required":["kind","path","text"],"uniqueKey":"task.oneOf.0.screen.cards.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"task.oneOf.0.screen.cards","typeLabel":"object[]"},"name":{"type":"string","uniqueKey":"task.oneOf.0.screen.name","typeLabel":"string"},"section":{"type":"string","description":"As `screens[].section`.","uniqueKey":"task.oneOf.0.screen.section","typeLabel":"string"}},"required":["id","kind","cards"],"isRequired":true,"uniqueKey":"task.oneOf.0.screen","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.0","typeLabel":"object"},{"type":"object","description":"The one thing the person does next. `confirm_choices` while a choice is not confirmed or a difference is open, as soon as every list that gives a choice its record is closed (a car’s deductible needs the cars to be all in), though questions may still be open: what is chosen can open more questions, so the choices come before them, and `questions` keeps listing what comes after. Otherwise `answer_screen`, the first screen with a question that is not put off; with none left, `confirm_choices` for whatever is still to choose; else `review_results`, each program where it stands. Follow the task, not the length of `questions`: adding a list item later asks its own choices once its list is closed again.","required":["kind","unconfirmed","defaulted","differences"],"properties":{"kind":{"type":"string","enum":["confirm_choices"],"isRequired":true,"uniqueKey":"task.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"unconfirmed":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.1.unconfirmed.items.[INDEX]","typeLabel":"string"},"description":"The `choices` paths not yet confirmed.","isRequired":true,"uniqueKey":"task.oneOf.1.unconfirmed","typeLabel":"string[]"},"defaulted":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.1.defaulted.items.[INDEX]","typeLabel":"string"},"description":"Among them, those whose value is a program’s default, not the person’s own.","isRequired":true,"uniqueKey":"task.oneOf.1.defaulted","typeLabel":"string[]"},"differences":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The choice’s path.","isRequired":true,"uniqueKey":"task.oneOf.1.differences.items.[INDEX].path","typeLabel":"string"},"programIds":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.1.differences.items.[INDEX].programIds.items.[INDEX]","typeLabel":"string"},"description":"The programs that do not sell it as asked and share these options.","isRequired":true,"uniqueKey":"task.oneOf.1.differences.items.[INDEX].programIds","typeLabel":"string[]"},"options":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"task.oneOf.1.differences.items.[INDEX].options.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.1.differences.items.[INDEX].options.items.[INDEX]","typeLabel":"null"},"description":"The steps they offer nearest to `asked`, lowest first. For a choice they refused (`refused`), every other step they offer.","isRequired":true,"uniqueKey":"task.oneOf.1.differences.items.[INDEX].options","typeLabel":"null[]"},"asked":{"oneOf":[{"description":"What the person chose.","uniqueKey":"task.oneOf.1.differences.items.[INDEX].asked.oneOf.0","typeLabel":"any"},{"description":"What the person chose.","type":"null","uniqueKey":"task.oneOf.1.differences.items.[INDEX].asked.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.1.differences.items.[INDEX].asked","typeLabel":"any | null"},"suggested":{"oneOf":[{"description":"What they price with no pick: null to price none of it. Absent when there is no suggestion: the person picks.","uniqueKey":"task.oneOf.1.differences.items.[INDEX].suggested.oneOf.0","typeLabel":"any"},{"description":"What they price with no pick: null to price none of it. Absent when there is no suggestion: the person picks.","type":"null","uniqueKey":"task.oneOf.1.differences.items.[INDEX].suggested.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.1.differences.items.[INDEX].suggested","typeLabel":"any | null"},"error":{"type":"string","description":"Why they cannot take it: the programs’ refusal of the choice, or why a pick sent in `overrides` was ignored.","uniqueKey":"task.oneOf.1.differences.items.[INDEX].error","typeLabel":"string"},"code":{"type":"string","description":"With `error`: the refusal’s code, or `NOT_SOLD` for a pick of a step the program does not sell.","uniqueKey":"task.oneOf.1.differences.items.[INDEX].code","typeLabel":"string"},"refused":{"oneOf":[{"description":"For a choice the programs refused: the value they were rated on.","uniqueKey":"task.oneOf.1.differences.items.[INDEX].refused.oneOf.0","typeLabel":"any"},{"description":"For a choice the programs refused: the value they were rated on.","type":"null","uniqueKey":"task.oneOf.1.differences.items.[INDEX].refused.oneOf.1","typeLabel":"null"}],"uniqueKey":"task.oneOf.1.differences.items.[INDEX].refused","typeLabel":"any | null"}},"required":["path","programIds","options"],"additionalProperties":false,"uniqueKey":"task.oneOf.1.differences.items.[INDEX]","typeLabel":"object"},"description":"The choices some programs cannot price as asked, with no pick for them yet, and the choices a program refused. Ask the person once which of `options` to price for those programs, and send the answer as `overrides`. A program with only one option prices it without asking; its `programs[].choices` says so. A pick of a step its program does not sell is ignored, so its difference comes back with `error` and `code: NOT_SOLD`. While any difference is open the task stays `confirm_choices`, whether or not the choice is confirmed, and each program it lists is in a `needs` state with a `choice` at its path, never `priced`.","isRequired":true,"uniqueKey":"task.oneOf.1.differences","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.1","typeLabel":"object"},{"type":"object","description":"The one thing the person does next. `confirm_choices` while a choice is not confirmed or a difference is open, as soon as every list that gives a choice its record is closed (a car’s deductible needs the cars to be all in), though questions may still be open: what is chosen can open more questions, so the choices come before them, and `questions` keeps listing what comes after. Otherwise `answer_screen`, the first screen with a question that is not put off; with none left, `confirm_choices` for whatever is still to choose; else `review_results`, each program where it stands. Follow the task, not the length of `questions`: adding a list item later asks its own choices once its list is closed again.","required":["kind","programs"],"properties":{"kind":{"type":"string","enum":["review_results"],"isRequired":true,"uniqueKey":"task.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"programs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"`programId@version`.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].id","typeLabel":"string"},"programId":{"type":"string","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].programId","typeLabel":"string"},"state":{"oneOf":[{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","pending"],"properties":{"kind":{"type":"string","enum":["priced"],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"pending":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.0.pending.items.[INDEX]","typeLabel":"string"},"description":"The questions about the household’s lists that are still asked, such as `Policy.vehicles_complete` (“any more cars?”): the price can change with the next item. Each is a card in `questions`. Empty when the price is final.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.0.pending","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.0","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","items"],"properties":{"kind":{"type":"string","enum":["needs"],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"items":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"For `answer`, the path of a card in `questions`; for `choice`, of an entry in `choices`.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].path","typeLabel":"string"},"kind":{"type":"string","enum":["answer","choice"],"description":"`answer`: a question to answer. `choice`: something to choose or confirm on the coverage screen, or a `differences` entry to pick for.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"deferred":{"type":"boolean","description":"The person put it off.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].deferred","typeLabel":"boolean"},"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Why the program refused what was given there, (`CHOICE_REQUIRED`) that it needs a value for a choice that was confirmed without one: the choice is then in `unconfirmed` again, or (`NOT_SOLD`) that the pick sent for it in `overrides` is of a step it does not sell: its `differences` entry is asked again. Absent the first time something is asked. Show it at the path; the same thing is never asked again without one.","uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error","typeLabel":"object"}},"required":["path","kind","deferred"],"additionalProperties":false,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"What the program needs from the person, in asking order. Never empty.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.1","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","reason","change"],"properties":{"kind":{"type":"string","enum":["declined"],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"reason":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.reason.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.reason.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.reason.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.reason.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"The decline’s first reason.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.reason","typeLabel":"object"},"change":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.change.items.[INDEX]","typeLabel":"string"},"description":"The answers and choices the decline names, in order: changing one may change the decline. A rule of the policy or of a list item is named by the answers it read, the program’s own question first, such as `Policy.member` before `Policy.current_insurer`; one that read none of the person’s answers is named as the record, such as `Policy` or `Policy.vehicles[0]`, as is a list item’s key. May be empty.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2.change","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.2","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","reason"],"properties":{"kind":{"type":"string","enum":["failed"],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"reason":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.reason.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.reason.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.reason.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.reason.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Why. The way out is to try again later.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3.reason","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].state","typeLabel":"object"},"status":{"type":"string","enum":["priced","declined","invalid","open","failed"],"description":"Read from `state`: `invalid` for a `needs` with an `error`, `open` for any other `needs`, and `failed` also when the program is not settled and nothing asks for what it needs.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"provisional":{"type":"boolean","description":"Not the end yet: a price that can still change with the next item of a list (its `state.pending` is not empty), or a decline whose reason names a list the person is still filling.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].provisional","typeLabel":"boolean"},"waitingOn":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.2.programs.items.[INDEX].waitingOn.items.[INDEX]","typeLabel":"string"},"description":"The paths of what a `needs` state lists.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].waitingOn","typeLabel":"string[]"},"deferred":{"type":"array","items":{"type":"string","uniqueKey":"task.oneOf.2.programs.items.[INDEX].deferred.items.[INDEX]","typeLabel":"string"},"description":"Those among them the person put off.","isRequired":true,"uniqueKey":"task.oneOf.2.programs.items.[INDEX].deferred","typeLabel":"string[]"}},"required":["id","programId","state","status","provisional","waitingOn","deferred"],"additionalProperties":false,"uniqueKey":"task.oneOf.2.programs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"task.oneOf.2.programs","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"task.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"task","typeLabel":"object"},"open":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"open.items.[INDEX].path","typeLabel":"string"},"programs":{"type":"array","items":{"type":"string","uniqueKey":"open.items.[INDEX].programs.items.[INDEX]","typeLabel":"string"},"description":"The programs whose gaps hold it.","isRequired":true,"uniqueKey":"open.items.[INDEX].programs","typeLabel":"string[]"},"deferred":{"type":"boolean","description":"The person put it off.","isRequired":true,"uniqueKey":"open.items.[INDEX].deferred","typeLabel":"boolean"}},"required":["path","programs","deferred"],"uniqueKey":"open.items.[INDEX]","typeLabel":"object"},"description":"Every open fact once, with the programs that need it: group programs (two of one insurer) by the union of their paths so a shared fact counts once.","isRequired":true,"uniqueKey":"open","typeLabel":"object[]"},"next":{"type":"object","description":"The next question card, the first of `questions`, or null when every program is settled. While `task` is `confirm_choices` it is the question that comes after the choices: show what `task` says.","required":["kind","path","text"],"properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"next.kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"next.path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"next.text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"next.section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"next.screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"next.screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"next.short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"next.because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"next.because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"next.because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"next.because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"next.because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"next.because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"next.because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"next.related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"next.related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"next.related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"next.related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"next.related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"next.related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"next.related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"next.waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"next.waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"next.why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"next.why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"next.why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"next.why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"next.why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"next.why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"next.why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"next.why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"next.why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"next.why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"next.why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"next.why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"next.why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"next.help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"next.evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"next.evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"next.evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"next.evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"next.choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"next.choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"next.choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"next.choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"next.choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"next.choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"next.choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"next.choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"next.list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"next.format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"next.precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"next.picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"next.addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"next.itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"next.pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"next.min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"next.min.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"next.max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"next.max.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"next.whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"next.decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"next.key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"next.nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"next.you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"next.you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"next.you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"next.more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"next.revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"next.error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"next.errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"next.refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"next.refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"next.document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"next.answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"next.suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"next.suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"next.suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"next.suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"next.suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"next.suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"next.suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"next.checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"next.default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"next.default.oneOf.1","typeLabel":"null"}],"uniqueKey":"next.default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"next.askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"next.blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"next.shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"next.shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"next.shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"next.shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"next.shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"next.shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"next.code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"next.code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"next.code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"next.code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"next.code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"next.code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"next.code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"next.statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"next.noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"next.noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"next.noneAnswer","typeLabel":"object"}},"isRequired":true,"uniqueKey":"next","typeLabel":"object"},"questions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"questions.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"questions.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"questions.items.[INDEX].text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"questions.items.[INDEX].section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"questions.items.[INDEX].screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"questions.items.[INDEX].screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"questions.items.[INDEX].short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"questions.items.[INDEX].because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"questions.items.[INDEX].because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"questions.items.[INDEX].because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"questions.items.[INDEX].because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"questions.items.[INDEX].because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"questions.items.[INDEX].related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"questions.items.[INDEX].related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"questions.items.[INDEX].related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"questions.items.[INDEX].related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"questions.items.[INDEX].related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"questions.items.[INDEX].waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"questions.items.[INDEX].why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"questions.items.[INDEX].why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"questions.items.[INDEX].why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"questions.items.[INDEX].why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"questions.items.[INDEX].why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"questions.items.[INDEX].why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"questions.items.[INDEX].why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"questions.items.[INDEX].why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"questions.items.[INDEX].why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"questions.items.[INDEX].why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"questions.items.[INDEX].why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"questions.items.[INDEX].help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"questions.items.[INDEX].evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"questions.items.[INDEX].evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"questions.items.[INDEX].choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"questions.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"questions.items.[INDEX].choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"questions.items.[INDEX].list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"questions.items.[INDEX].format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"questions.items.[INDEX].precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"questions.items.[INDEX].picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"questions.items.[INDEX].addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"questions.items.[INDEX].itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"questions.items.[INDEX].pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"questions.items.[INDEX].min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"questions.items.[INDEX].min.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"questions.items.[INDEX].max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"questions.items.[INDEX].max.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"questions.items.[INDEX].whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"questions.items.[INDEX].decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"questions.items.[INDEX].key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"questions.items.[INDEX].nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"questions.items.[INDEX].you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"questions.items.[INDEX].you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"questions.items.[INDEX].more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"questions.items.[INDEX].revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"questions.items.[INDEX].error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"questions.items.[INDEX].errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"questions.items.[INDEX].refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"questions.items.[INDEX].document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"questions.items.[INDEX].answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"questions.items.[INDEX].suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"questions.items.[INDEX].suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"questions.items.[INDEX].suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"questions.items.[INDEX].suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"questions.items.[INDEX].suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"questions.items.[INDEX].suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"questions.items.[INDEX].checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"questions.items.[INDEX].default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"questions.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"questions.items.[INDEX].askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"questions.items.[INDEX].blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"questions.items.[INDEX].shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"questions.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"questions.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"questions.items.[INDEX].shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"questions.items.[INDEX].shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"questions.items.[INDEX].shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX].code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"questions.items.[INDEX].code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"questions.items.[INDEX].code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"questions.items.[INDEX].code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"questions.items.[INDEX].code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"questions.items.[INDEX].code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"questions.items.[INDEX].code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"questions.items.[INDEX].statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"questions.items.[INDEX].noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"questions.items.[INDEX].noneAnswer","typeLabel":"object"}},"required":["kind","path","text"],"uniqueKey":"questions.items.[INDEX]","typeLabel":"object"},"description":"Every open card, in asking order.","isRequired":true,"uniqueKey":"questions","typeLabel":"object[]"},"answered":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The answer’s path in `answers`.","isRequired":true,"uniqueKey":"answered.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","description":"The question, worded from the answers as they are now, as its card’s `text`.","isRequired":true,"uniqueKey":"answered.items.[INDEX].text","typeLabel":"string"},"short":{"type":"string","description":"Its short noun label, as a card’s `short`. Absent when it has none.","uniqueKey":"answered.items.[INDEX].short","typeLabel":"string"},"name":{"type":"string","description":"The current name of the list item it is about, such as “the 2020 Toyota RAV4”: `names` at its item. Absent outside a list.","uniqueKey":"answered.items.[INDEX].name","typeLabel":"string"},"shown":{"type":"string","description":"The answer in the contract’s words: an answer picked from a list by its label (“State Farm”), several by theirs, “Yes” or “No”, “None”, a date as “September 1, 2021” (“September 2021” where the question asks only the month), and an answer that was typed in as typed. Show this for an answer saved without its card.","uniqueKey":"answered.items.[INDEX].shown","typeLabel":"string"},"format":{"type":"string","description":"The answer’s format, as a card’s `format`: word a number or a date your own way by it, and keep a `vin` from being shown back.","uniqueKey":"answered.items.[INDEX].format","typeLabel":"string"},"precision":{"type":"string","description":"For a date: `month` when only the month was asked, as a card’s `precision`.","uniqueKey":"answered.items.[INDEX].precision","typeLabel":"string"},"followUp":{"type":"object","properties":{"path":{"type":"string","description":"The path of the question asked in this yes/no’s place.","isRequired":true,"uniqueKey":"answered.items.[INDEX].followUp.path","typeLabel":"string"},"format":{"type":"string","description":"That question’s `format`, such as `vin`.","uniqueKey":"answered.items.[INDEX].followUp.format","typeLabel":"string"}},"required":["path"],"additionalProperties":false,"description":"For a yes/no that another question is asked in the place of (a card with `noneAnswer`): that question. To change this answer, ask that question again.","uniqueKey":"answered.items.[INDEX].followUp","typeLabel":"object"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"answered.items.[INDEX].evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"answered.items.[INDEX].evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"answered.items.[INDEX].evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, as a card’s `evidence`.","uniqueKey":"answered.items.[INDEX].evidence","typeLabel":"object[]"}},"required":["path","text"],"additionalProperties":false,"uniqueKey":"answered.items.[INDEX]","typeLabel":"object"},"description":"Every answered question as it reads now, in the contracts’ order. `questions` holds only the open cards, and a question is worded from the answers of its record, so the words an answer was asked with go stale: “What year is car 1?” is “What year is the 2020 Toyota RAV4?” once the car has its make. Show an answer under these words, not the ones kept from when it was asked. Holds each answer at a question the contracts word (an answer no contract asks in words, such as what a decode filled, is not a question); never a choice (see `choices`) or a list item’s key.","isRequired":true,"uniqueKey":"answered","typeLabel":"object[]"},"sections":{"type":"array","items":{"type":"string","uniqueKey":"sections.items.[INDEX]","typeLabel":"string"},"description":"Every section of the basket in the order the plan asks them: the ones sent as `sections`, then the rest in the order the contracts declare them. A section that holds only choices stands where the plan asks the choices, whatever place it was sent at: after the section of the last list that holds a choice (the cars), or first when no choice is under a list. A card’s `section` and a screen’s are among these, so a host that sends no `sections` can list them from here, and one that counts steps counts these.","isRequired":true,"uniqueKey":"sections","typeLabel":"string[]"},"ready":{"type":"array","items":{"type":"string","uniqueKey":"ready.items.[INDEX]","typeLabel":"string"},"description":"The programs that are settled, as `programId@version`.","isRequired":true,"uniqueKey":"ready","typeLabel":"string[]"},"changes":{"type":"array","items":{"type":"object","properties":{"program":{"type":"string","description":"`programId@version`.","isRequired":true,"uniqueKey":"changes.items.[INDEX].program","typeLabel":"string"},"from":{"type":"string","enum":["priced","declined","invalid","open","failed"],"description":"`failed`: the program could not be read or rated. The other programs plan on.","isRequired":true,"uniqueKey":"changes.items.[INDEX].from","typeLabel":"enum\u003cstring>"},"to":{"type":"string","enum":["priced","declined","invalid","open","failed"],"description":"`failed`: the program could not be read or rated. The other programs plan on.","isRequired":true,"uniqueKey":"changes.items.[INDEX].to","typeLabel":"enum\u003cstring>"},"because":{"oneOf":[{"type":"string","description":"For a decline: the path of the refused answer.","isRequired":true,"uniqueKey":"changes.items.[INDEX].because.oneOf.0","typeLabel":"string"},{"type":"null","description":"For a decline: the path of the refused answer.","isRequired":true,"uniqueKey":"changes.items.[INDEX].because.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"changes.items.[INDEX].because","typeLabel":"string | null"},"reason":{"oneOf":[{"type":"string","description":"For a decline: its message.","isRequired":true,"uniqueKey":"changes.items.[INDEX].reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"For a decline: its message.","isRequired":true,"uniqueKey":"changes.items.[INDEX].reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"changes.items.[INDEX].reason","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"For a decline: its code.","uniqueKey":"changes.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"For a decline: its code.","uniqueKey":"changes.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].code","typeLabel":"string | null"},"fromState":{"type":"string","enum":["priced","needs","declined","failed"],"description":"The state’s kind sent in `previous`, when one was.","uniqueKey":"changes.items.[INDEX].fromState","typeLabel":"enum\u003cstring>"},"toState":{"type":"string","enum":["priced","needs","declined","failed"],"description":"The kind of the program’s state now. Say a program has a price for `priced` here: a status of `priced` alone is a result on choices not yet confirmed.","uniqueKey":"changes.items.[INDEX].toState","typeLabel":"enum\u003cstring>"}},"required":["program","from","to","because","reason"],"uniqueKey":"changes.items.[INDEX]","typeLabel":"object"},"description":"Each program whose status differs from `previous`, and, where `previous` gave its state, each whose state’s kind differs: a program rated before its choices were confirmed has the status `priced` throughout, and is listed when its state becomes `priced`. Why a program stands where it does is in its `state`.","isRequired":true,"uniqueKey":"changes","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"choices.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","isRequired":true,"uniqueKey":"choices.items.[INDEX].text","typeLabel":"string"},"kind":{"type":"string","isRequired":true,"uniqueKey":"choices.items.[INDEX].kind","typeLabel":"string"},"steps":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].label","typeLabel":"string"},"programs":{"type":"array","items":{"type":"string","uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].programs.items.[INDEX]","typeLabel":"string"},"description":"The titles of the programs that offer it.","isRequired":true,"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].programs","typeLabel":"string[]"},"programIds":{"type":"array","items":{"type":"string","uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].programIds.items.[INDEX]","typeLabel":"string"},"description":"The programs that offer it.","isRequired":true,"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].programIds","typeLabel":"string[]"},"common":{"type":"boolean","description":"Every insurer that sells this choice and can still quote offers this step: show these first. Insurers are counted by title, so two programs of one insurer are one, and a program that declined or could not be rated is left out.","isRequired":true,"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].common","typeLabel":"boolean"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX].value","typeLabel":"null"}},"required":["label","programs","programIds","common"],"uniqueKey":"choices.items.[INDEX].steps.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"choices.items.[INDEX].steps","typeLabel":"object[]"},"programIds":{"type":"array","items":{"type":"string","uniqueKey":"choices.items.[INDEX].programIds.items.[INDEX]","typeLabel":"string"},"description":"The programs that declare this choice, in the basket’s order: who sells it, also when it lists no `steps` (a cover whose parts are each a choice of their own).","isRequired":true,"uniqueKey":"choices.items.[INDEX].programIds","typeLabel":"string[]"},"required":{"type":"boolean","description":"Some program cannot price until this choice has a value: it has a gap here. Confirmed with none, the choice is asked again with `CHOICE_REQUIRED`, so ask for a value before confirming.","isRequired":true,"uniqueKey":"choices.items.[INDEX].required","typeLabel":"boolean"},"nullable":{"type":"boolean","description":"Some program takes `null`: “I don’t want this”.","isRequired":true,"uniqueKey":"choices.items.[INDEX].nullable","typeLabel":"boolean"},"group":{"type":"string","enum":["policy","liability","car","extras"],"description":"The part of the coverage screen it belongs to: `policy` (its term), `liability`, `car` (a car’s deductibles and limits) or `extras`.","isRequired":true,"uniqueKey":"choices.items.[INDEX].group","typeLabel":"enum\u003cstring>"},"label":{"type":"string","description":"A short noun for it, such as “Bodily injury”, “Collision” or “Policy length”.","isRequired":true,"uniqueKey":"choices.items.[INDEX].label","typeLabel":"string"},"section":{"type":"string","uniqueKey":"choices.items.[INDEX].section","typeLabel":"string"},"help":{"type":"string","uniqueKey":"choices.items.[INDEX].help","typeLabel":"string"},"gates":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The path of the choice that opens this one.","isRequired":true,"uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"The value of that choice that opens this one, when the contract says the one: `true` for a yes/no, or the amount or answer the condition tests it against. Absent when it says several (`values`) or none: with neither, show this choice once that one is bought (its value is not none or no).","uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"The value of that choice that opens this one, when the contract says the one: `true` for a yes/no, or the amount or answer the condition tests it against. Absent when it says several (`values`) or none: with neither, show this choice once that one is bought (its value is not none or no).","type":"null","uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].value","typeLabel":"any | null"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"Every value of that choice that opens this one, when the contract says more than one: show this choice while that one has one of them. Absent otherwise.","uniqueKey":"choices.items.[INDEX].gates.items.[INDEX].values","typeLabel":"null[]"}},"required":["path"],"additionalProperties":false,"uniqueKey":"choices.items.[INDEX].gates.items.[INDEX]","typeLabel":"object"},"description":"The choices that open this one, each listed in `choices`: it only makes sense once they are bought, such as an upgrade of a cover or a part of one. Hide it until then. Absent for a choice that stands alone.","uniqueKey":"choices.items.[INDEX].gates","typeLabel":"object[]"},"current":{"oneOf":[{"description":"The value in `choices` or `answers`, if any.","uniqueKey":"choices.items.[INDEX].current.oneOf.0","typeLabel":"any"},{"description":"The value in `choices` or `answers`, if any.","type":"null","uniqueKey":"choices.items.[INDEX].current.oneOf.1","typeLabel":"null"}],"uniqueKey":"choices.items.[INDEX].current","typeLabel":"any | null"},"shape":{"type":"string","description":"The coverage shape its contract gives it (`x-shape`): `limit`, `limit_pair`, `deductible`, `per_day`, `included`, `tier` or `term` (in months).","uniqueKey":"choices.items.[INDEX].shape","typeLabel":"string"},"code":{"type":"string","description":"The shared code of what it sells (`x-code`, from the shared package’s list), such as `collision` or `bodily_injury`: what a host explains it by. Absent for a choice only one program sells.","uniqueKey":"choices.items.[INDEX].code","typeLabel":"string"},"parts":{"type":"array","items":{"type":"string","uniqueKey":"choices.items.[INDEX].parts.items.[INDEX]","typeLabel":"string"},"description":"For a pair of amounts, its two fields in order, such as `[\"limit_per_person\", \"limit_per_accident\"]`: which part of a step’s value is which.","uniqueKey":"choices.items.[INDEX].parts","typeLabel":"string[]"}},"required":["path","text","kind","steps","programIds","required","nullable","group","label"],"uniqueKey":"choices.items.[INDEX]","typeLabel":"object"},"description":"What the person buys across the basket, asked once rather than as cards.","isRequired":true,"uniqueKey":"choices","typeLabel":"object[]"},"names":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"names.additionalProperties","typeLabel":"string"},"description":"Each list item’s name by its path, such as `Policy.vehicles[0]`: “the 2020 Toyota RAV4”.","isRequired":true,"uniqueKey":"names","typeLabel":"object"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The answer or choice the issue is about.","isRequired":true,"uniqueKey":"issues.items.[INDEX].path","typeLabel":"string"},"code":{"type":"string","description":"What is wrong with it, as a stable code.","isRequired":true,"uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"expected":{"oneOf":[{"description":"What the basket expects there, such as a format or a type.","uniqueKey":"issues.items.[INDEX].expected.oneOf.0","typeLabel":"any"},{"description":"What the basket expects there, such as a format or a type.","type":"null","uniqueKey":"issues.items.[INDEX].expected.oneOf.1","typeLabel":"null"}],"uniqueKey":"issues.items.[INDEX].expected","typeLabel":"any | null"},"candidates":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"issues.items.[INDEX].candidates.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"issues.items.[INDEX].candidates.items.[INDEX]","typeLabel":"null"},"description":"Values that may be meant, best first, to offer the person. For `NOT_SOLD`, the pick. For `CHOICE_NOT_SOLD`, what was chosen.","uniqueKey":"issues.items.[INDEX].candidates","typeLabel":"null[]"},"programId":{"type":"string","description":"For `NOT_SOLD`: the program the pick in `overrides` is for.","uniqueKey":"issues.items.[INDEX].programId","typeLabel":"string"}},"required":["path","code"],"uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"description":"Answers in `answers` or `choices` that the basket’s contracts cannot read as sent, answers named in `check` that are none of the choices the other answers narrow them to (`NOT_A_CHOICE`, as for an answer outside a listed enum), (`NOT_SOLD`) picks in `overrides` of a step their program does not sell, which are ignored, and (`CHOICE_NOT_SOLD`) entries of `choices` at a path no version in the basket sells, which are left out with their `confirmed` and `overrides` entries while the rest is planned. Correct each and plan again; stop sending a `CHOICE_NOT_SOLD` choice.","isRequired":true,"uniqueKey":"issues","typeLabel":"object[]"},"screens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record a screen is about, or `checklist` or `assign`.","isRequired":true,"uniqueKey":"screens.items.[INDEX].id","typeLabel":"string"},"kind":{"type":"string","enum":["item","list","checklist","confirm","assign","document","rows","extra"],"description":"`item`: one record’s questions of one section, ending with its list’s “any more?” on the last item; `list`: add items or say there are no more, with an inline list’s item fields; `checklist`: the declared rows of one checklist, where “None of these” answers them all; `confirm`: a checklist whose every row has a usual answer (`default`), accepted with one action; `assign`: a field naming another list’s item, on every item; `document`: the documents to read, together; `rows`: one question on every item of a list, a row per item. `extra`: the questions only some programs ask, across the records, on a screen of those programs after what every program asks; `name` lists their titles, so a host can say what answering them adds.","isRequired":true,"uniqueKey":"screens.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"cards":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].min.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].max.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"screens.items.[INDEX].cards.items.[INDEX].noneAnswer","typeLabel":"object"}},"required":["kind","path","text"],"uniqueKey":"screens.items.[INDEX].cards.items.[INDEX]","typeLabel":"object"},"description":"Its questions, in asking order. The order does not depend on which programs ask them or on what was answered last: answering one never moves another, so keep them as they come.","isRequired":true,"uniqueKey":"screens.items.[INDEX].cards","typeLabel":"object[]"},"name":{"type":"string","description":"The item’s name, for an item screen.","uniqueKey":"screens.items.[INDEX].name","typeLabel":"string"},"section":{"type":"string","description":"The section every question of the screen is in: an `item` screen holds one section’s questions of its record, so head it with this. Absent for a screen across sections, such as a checklist.","uniqueKey":"screens.items.[INDEX].section","typeLabel":"string"}},"required":["id","kind","cards"],"uniqueKey":"screens.items.[INDEX]","typeLabel":"object"},"description":"The questions packed into what a host shows at once; `next` is the first’s first.","isRequired":true,"uniqueKey":"screens","typeLabel":"object[]"},"progress":{"type":"object","properties":{"left":{"type":"integer","description":"Open questions across the basket.","isRequired":true,"uniqueKey":"progress.left","typeLabel":"integer"},"programs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"progress.programs.items.[INDEX].id","typeLabel":"string"},"left":{"type":"integer","isRequired":true,"uniqueKey":"progress.programs.items.[INDEX].left","typeLabel":"integer"}},"required":["id","left"],"uniqueKey":"progress.programs.items.[INDEX]","typeLabel":"object"},"description":"Each open program’s own open questions, put-off ones aside.","isRequired":true,"uniqueKey":"progress.programs","typeLabel":"object[]"},"counted":{"type":"boolean","description":"Whether the counts may be shown: not while the cars or drivers list is open, since every count depends on them.","isRequired":true,"uniqueKey":"progress.counted","typeLabel":"boolean"}},"required":["left","programs","counted"],"description":"How much is left.","isRequired":true,"uniqueKey":"progress","typeLabel":"object"},"programs":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"programs.items.[INDEX].programId","typeLabel":"string"},"version":{"type":"integer","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"programs.items.[INDEX].version","typeLabel":"integer"},"bundleId":{"type":"string","isRequired":true,"uniqueKey":"programs.items.[INDEX].bundleId","typeLabel":"string"},"programFingerprint":{"type":"string","isRequired":true,"uniqueKey":"programs.items.[INDEX].programFingerprint","typeLabel":"string"},"status":{"type":"string","enum":["priced","declined","invalid","open","failed"],"description":"The rater’s word for its evaluation, or `failed` when the program could not be read or rated. To decide what the person does, switch on `state.kind`: a program the rater calls `open` or `invalid` is `failed` there when nothing asks for what it needs.","isRequired":true,"uniqueKey":"programs.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"state":{"oneOf":[{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","pending"],"properties":{"kind":{"type":"string","enum":["priced"],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"pending":{"type":"array","items":{"type":"string","uniqueKey":"programs.items.[INDEX].state.oneOf.0.pending.items.[INDEX]","typeLabel":"string"},"description":"The questions about the household’s lists that are still asked, such as `Policy.vehicles_complete` (“any more cars?”): the price can change with the next item. Each is a card in `questions`. Empty when the price is final.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.0.pending","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.0","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","items"],"properties":{"kind":{"type":"string","enum":["needs"],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"items":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"For `answer`, the path of a card in `questions`; for `choice`, of an entry in `choices`.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].path","typeLabel":"string"},"kind":{"type":"string","enum":["answer","choice"],"description":"`answer`: a question to answer. `choice`: something to choose or confirm on the coverage screen, or a `differences` entry to pick for.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"deferred":{"type":"boolean","description":"The person put it off.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].deferred","typeLabel":"boolean"},"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Why the program refused what was given there, (`CHOICE_REQUIRED`) that it needs a value for a choice that was confirmed without one: the choice is then in `unconfirmed` again, or (`NOT_SOLD`) that the pick sent for it in `overrides` is of a step it does not sell: its `differences` entry is asked again. Absent the first time something is asked. Show it at the path; the same thing is never asked again without one.","uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX].error","typeLabel":"object"}},"required":["path","kind","deferred"],"additionalProperties":false,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"What the program needs from the person, in asking order. Never empty.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.1","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","reason","change"],"properties":{"kind":{"type":"string","enum":["declined"],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"reason":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.reason.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.reason.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.reason.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.reason.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"The decline’s first reason.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.reason","typeLabel":"object"},"change":{"type":"array","items":{"type":"string","uniqueKey":"programs.items.[INDEX].state.oneOf.2.change.items.[INDEX]","typeLabel":"string"},"description":"The answers and choices the decline names, in order: changing one may change the decline. A rule of the policy or of a list item is named by the answers it read, the program’s own question first, such as `Policy.member` before `Policy.current_insurer`; one that read none of the person’s answers is named as the record, such as `Policy` or `Policy.vehicles[0]`, as is a list item’s key. May be empty.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2.change","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.2","typeLabel":"object"},{"type":"object","description":"The one state the program is in: switch on its `kind`, not on `status`. Every state but `priced` carries its own way out: `needs` says what to answer or choose, `declined` what to change, `failed` to try again. `priced` is final: every choice the program prices is in `confirmed`, and no entry of `differences` asks the person to pick for it. A program rated with a result on choices that are not confirmed is `needs`, with a `choice` for each of them, while its `status` is `priced` and its `result` is set: confirming the choices may ask more questions, so do not show that result as its price. The same holds while a `differences` entry lists the program: it is rated at its nearest step, `needs` a `choice` at that path, and the pick may ask more questions. Following the plan, a `priced` program stays `priced` unless the person changes an answer or a choice, or adds a list item. A pick in `overrides` that the program does not sell counts as none: the program still `needs` the choice, now with a `NOT_SOLD` error, and `differences` asks again.","required":["kind","reason"],"properties":{"kind":{"type":"string","enum":["failed"],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"reason":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.reason.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.reason.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.reason.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.reason.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"Why. The way out is to try again later.","isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3.reason","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"programs.items.[INDEX].state.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].state","typeLabel":"object"},"waitingOn":{"type":"integer","isRequired":true,"uniqueKey":"programs.items.[INDEX].waitingOn","typeLabel":"integer"},"choices":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].path","typeLabel":"string"},"status":{"type":"string","enum":["exact","nearest","chosen","not_offered"],"description":"`exact` as asked, `nearest` at the program’s nearest step, `chosen` at the person’s pick (`overrides`), or `not_offered`.","isRequired":true,"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"asked":{"oneOf":[{"description":"The value in `choices`.","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].asked.oneOf.0","typeLabel":"any"},{"description":"The value in `choices`.","type":"null","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].asked.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].asked","typeLabel":"any | null"},"priced":{"oneOf":[{"description":"The value this program is rated on. For `not_offered`, the program’s own default, which it rates; null when it has none.","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].priced.oneOf.0","typeLabel":"any"},{"description":"The value this program is rated on. For `not_offered`, the program’s own default, which it rates; null when it has none.","type":"null","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].priced.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].priced","typeLabel":"any | null"},"nearest":{"oneOf":[{"description":"For `not_offered`: the closest step the program offers, when there is one.","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].nearest.oneOf.0","typeLabel":"any"},{"description":"For `not_offered`: the closest step the program offers, when there is one.","type":"null","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].nearest.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].nearest","typeLabel":"any | null"},"options":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].options.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].options.items.[INDEX]","typeLabel":"null"},"description":"When the program does not price the choice as asked: the steps it offers nearest to it, lowest first. For an amount, the nearest step below and the nearest above (one past the last step); for a choice that must match, such as a term, every step it offers.","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].options","typeLabel":"null[]"},"suggested":{"oneOf":[{"description":"With `options`: what the program prices with no pick.","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].suggested.oneOf.0","typeLabel":"any"},{"description":"With `options`: what the program prices with no pick.","type":"null","uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].suggested.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX].suggested","typeLabel":"any | null"}},"required":["path","status"],"additionalProperties":false,"uniqueKey":"programs.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"description":"Each of `choices` as this program prices it.","isRequired":true,"uniqueKey":"programs.items.[INDEX].choices","typeLabel":"object[]"},"effectiveDate":{"oneOf":[{"type":"string","format":"date","description":"The date this program prices for, the policy’s start, as `YYYY-MM-DD`; null until answered.","isRequired":true,"uniqueKey":"programs.items.[INDEX].effectiveDate.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","description":"The date this program prices for, the policy’s start, as `YYYY-MM-DD`; null until answered.","isRequired":true,"uniqueKey":"programs.items.[INDEX].effectiveDate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].effectiveDate","typeLabel":"string\u003cdate> | null"},"result":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"programs.items.[INDEX].result.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].result.additionalProperties","typeLabel":"null"},"description":"The outputs, when priced.","uniqueKey":"programs.items.[INDEX].result","typeLabel":"object"},"refusal":{"type":"object","properties":{"violations":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"programs.items.[INDEX].refusal.violations.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].refusal.violations.items.[INDEX]","typeLabel":"null"},"uniqueKey":"programs.items.[INDEX].refusal.violations","typeLabel":"null[]"},"truncated":{"type":"boolean","uniqueKey":"programs.items.[INDEX].refusal.truncated","typeLabel":"boolean"}},"additionalProperties":false,"description":"The coded decline, or the answers refused.","uniqueKey":"programs.items.[INDEX].refusal","typeLabel":"object"},"missing":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Where the answer goes in `inputs`, such as `Policy.vehicles[0].use`.","isRequired":true,"uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].path","typeLabel":"string"},"reasons":{"type":"array","items":{"type":"string","uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].reasons.items.[INDEX]","typeLabel":"string"},"uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].reasons","typeLabel":"string[]"},"choices":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].choices.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].choices.items.[INDEX]","typeLabel":"null"},"description":"The answers the version lists, such as the rows that fit the earlier answers. With `more`, an answer outside them may also be accepted.","uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].choices","typeLabel":"null[]"},"more":{"type":"boolean","description":"The answer may be none of `choices`: a value outside them is taken typed in.","uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].more","typeLabel":"boolean"},"list":{"type":"string","description":"A long list to search, with the list search operation.","uniqueKey":"programs.items.[INDEX].missing.items.[INDEX].list","typeLabel":"string"}},"required":["path"],"additionalProperties":false,"uniqueKey":"programs.items.[INDEX].missing.items.[INDEX]","typeLabel":"object"},"description":"The answers still needed, when open.","uniqueKey":"programs.items.[INDEX].missing","typeLabel":"object[]"},"inputs":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"programs.items.[INDEX].inputs.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"programs.items.[INDEX].inputs.additionalProperties","typeLabel":"null"},"uniqueKey":"programs.items.[INDEX].inputs","typeLabel":"object"},"evaluateMs":{"type":"number","uniqueKey":"programs.items.[INDEX].evaluateMs","typeLabel":"number"},"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].error.code.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stable code to word it by: the program’s own (`LIST-MAX`, `CORE-1`), or `CHOICE_REQUIRED` (the program needs a value for a choice that was confirmed without one), `NOTHING_TO_ASK` (it is not settled and nothing asks for what it needs), or why the program could not be read or rated: `rater_unavailable` (its engine could not load or its rater did not answer), `rater_overloaded`, `rate_timeout`, `internal_evaluation_fault`, `conflict` (its engine is not the one its version names) or `no_input_contract`. Null when the program gave none.","isRequired":true,"uniqueKey":"programs.items.[INDEX].error.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"programs.items.[INDEX].error.code","typeLabel":"string | null"},"message":{"type":"string","description":"Why, in the program’s or the planner’s words.","isRequired":true,"uniqueKey":"programs.items.[INDEX].error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"description":"For `failed`: why this program could not be read (its engine or its input contract) or rated. The others are still rated and planned. Its `bundleId` is its version’s, its `programFingerprint` may be empty, and it has no `choices`.","uniqueKey":"programs.items.[INDEX].error","typeLabel":"object"},"estimate":{"type":"object","properties":{"amount":{"type":"number","description":"The price with every question not yet answered at the program’s usual or typical answer.","isRequired":true,"uniqueKey":"programs.items.[INDEX].estimate.amount","typeLabel":"number"},"low":{"type":"number","description":"The low end of the range: `amount` when no open question could lower it.","isRequired":true,"uniqueKey":"programs.items.[INDEX].estimate.low","typeLabel":"number"},"high":{"type":"number","description":"The high end of the range.","isRequired":true,"uniqueKey":"programs.items.[INDEX].estimate.high","typeLabel":"number"},"unranged":{"type":"boolean","description":"True when the range could not be worked out: `low` and `high` are then `amount` and say nothing.","uniqueKey":"programs.items.[INDEX].estimate.unranged","typeLabel":"boolean"},"termMonths":{"type":"number","description":"With the request’s `termAt`: the policy term the amounts are for, in months.","uniqueKey":"programs.items.[INDEX].estimate.termMonths","typeLabel":"number"}},"required":["amount","low","high"],"additionalProperties":false,"description":"With the request’s `priceAt`, once the program misses no answer: its estimate and the range around it. The range narrows as questions are answered; with none left open, `low` and `high` are `amount`, the price.","uniqueKey":"programs.items.[INDEX].estimate","typeLabel":"object"}},"required":["programId","version","bundleId","programFingerprint","status","state","waitingOn","choices","effectiveDate"],"additionalProperties":false,"uniqueKey":"programs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"programs","typeLabel":"object[]"},"lists":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"lists.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"lists.items.[INDEX].path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"lists.items.[INDEX].text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"lists.items.[INDEX].section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"lists.items.[INDEX].screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"lists.items.[INDEX].screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"lists.items.[INDEX].short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"lists.items.[INDEX].because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"lists.items.[INDEX].because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"lists.items.[INDEX].because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"lists.items.[INDEX].because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"lists.items.[INDEX].because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"lists.items.[INDEX].related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"lists.items.[INDEX].related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"lists.items.[INDEX].related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"lists.items.[INDEX].related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"lists.items.[INDEX].related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"lists.items.[INDEX].waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"lists.items.[INDEX].why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"lists.items.[INDEX].why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"lists.items.[INDEX].why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"lists.items.[INDEX].why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"lists.items.[INDEX].why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"lists.items.[INDEX].why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"lists.items.[INDEX].why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"lists.items.[INDEX].why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lists.items.[INDEX].why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"lists.items.[INDEX].why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"lists.items.[INDEX].why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"lists.items.[INDEX].help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"lists.items.[INDEX].evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"lists.items.[INDEX].evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"lists.items.[INDEX].choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"lists.items.[INDEX].choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"lists.items.[INDEX].choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"lists.items.[INDEX].list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"lists.items.[INDEX].format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"lists.items.[INDEX].precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"lists.items.[INDEX].picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"lists.items.[INDEX].addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"lists.items.[INDEX].itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"lists.items.[INDEX].pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"lists.items.[INDEX].min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"lists.items.[INDEX].min.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"lists.items.[INDEX].max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"lists.items.[INDEX].max.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"lists.items.[INDEX].whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"lists.items.[INDEX].decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"lists.items.[INDEX].key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"lists.items.[INDEX].nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"lists.items.[INDEX].you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"lists.items.[INDEX].you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"lists.items.[INDEX].more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"lists.items.[INDEX].revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"lists.items.[INDEX].error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"lists.items.[INDEX].errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"lists.items.[INDEX].refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"lists.items.[INDEX].document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"lists.items.[INDEX].answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"lists.items.[INDEX].suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"lists.items.[INDEX].suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"lists.items.[INDEX].suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"lists.items.[INDEX].suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"lists.items.[INDEX].suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"lists.items.[INDEX].suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"lists.items.[INDEX].checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"lists.items.[INDEX].default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"lists.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"lists.items.[INDEX].askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"lists.items.[INDEX].blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"lists.items.[INDEX].shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"lists.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"lists.items.[INDEX].shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"lists.items.[INDEX].shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"lists.items.[INDEX].shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"lists.items.[INDEX].shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"lists.items.[INDEX].code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"lists.items.[INDEX].code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"lists.items.[INDEX].code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"lists.items.[INDEX].code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"lists.items.[INDEX].code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"lists.items.[INDEX].code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"lists.items.[INDEX].code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"lists.items.[INDEX].statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"lists.items.[INDEX].noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"lists.items.[INDEX].noneAnswer","typeLabel":"object"}},"required":["kind","path","text"],"uniqueKey":"lists.items.[INDEX]","typeLabel":"object"},"description":"Each open list’s add action (its `more` card: “Any other cars?”, with `addLabel` and `items`), whether or not a screen holds it. “Is that all of them” is never a screen by itself: show it with the list’s items and send `\u003clist>_complete: true` when the person moves on.","uniqueKey":"lists","typeLabel":"object[]"},"assumed":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Where the answer would go.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].path","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].label","typeLabel":"string"},"from":{"type":"string","description":"The answer it was read from, or the `context` key it was given under.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].from","typeLabel":"string"},"source":{"type":"string","description":"What read it (`x-filled-by.source`), `usual`, or `context`.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].source","typeLabel":"string"},"value":{"oneOf":[{"description":"The value assumed, typed as the answer is.","uniqueKey":"assumed.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"The value assumed, typed as the answer is.","type":"null","uniqueKey":"assumed.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].value","typeLabel":"any | null"},"card":{"type":"object","description":"The question the value stands in for, as the plan would ask it: what to ask when the person changes what was assumed. Its answer is saved at `path` like any other. Absent when no program of the basket declares the path.","required":["kind","path","text"],"properties":{"kind":{"type":"string","enum":["yesno","choice","search","multi","list","number","date","code","include","document"],"isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.kind","typeLabel":"enum\u003cstring>"},"path":{"type":"string","description":"Where the answer goes in `answers`. Empty for a document.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.path","typeLabel":"string"},"text":{"type":"string","description":"The question.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.text","typeLabel":"string"},"section":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.section","typeLabel":"string"},"screen":{"type":"string","description":"The record the card belongs to, such as `Policy.vehicles[0]`. Show a screen’s cards together.","uniqueKey":"assumed.items.[INDEX].card.screen","typeLabel":"string"},"screenName":{"type":"string","description":"The name of the record the screen is, such as “the 2020 Toyota RAV4”.","uniqueKey":"assumed.items.[INDEX].card.screenName","typeLabel":"string"},"short":{"type":"string","description":"A short noun label for the answer in a summary of answers, such as “Born”, “First licensed” or “Annual miles”. Absent when the contract declares none.","uniqueKey":"assumed.items.[INDEX].card.short","typeLabel":"string"},"because":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.because.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.because.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.because.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.because.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"assumed.items.[INDEX].card.because.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"assumed.items.[INDEX].card.because.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a follow-up: the answer that made it relevant.","uniqueKey":"assumed.items.[INDEX].card.because","typeLabel":"object"},"related":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.related.path","typeLabel":"string"},"shown":{"type":"string","description":"The answer as the person sees it.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.related.shown","typeLabel":"string"},"priced":{"type":"array","items":{"type":"object","properties":{"programId":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.related.priced.items.[INDEX].programId","typeLabel":"string"},"shown":{"type":"string","description":"The step this program is rated on, in words.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.related.priced.items.[INDEX].shown","typeLabel":"string"}},"required":["programId","shown"],"additionalProperties":false,"uniqueKey":"assumed.items.[INDEX].card.related.priced.items.[INDEX]","typeLabel":"object"},"description":"When the answer is something the person buys: each program that asks this card and is rated on another step than the one asked for (its nearest step, or the person’s pick for it). The card is that program’s because of its own step, so say it: “because Carrier prices a $500 deductible”. Absent when every asker prices it as asked.","uniqueKey":"assumed.items.[INDEX].card.related.priced","typeLabel":"object[]"}},"required":["path","shown"],"description":"For a refinement: the answer it refines.","uniqueKey":"assumed.items.[INDEX].card.related","typeLabel":"object"},"waitsOn":{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.waitsOn.items.[INDEX]","typeLabel":"string"},"description":"For a question whose answers depend on another answer that is not given yet (a car’s model on its make, its make on its year): the path of every such question, nearest first, each a card of the same plan. Show the card with them and take its answer only once they are answered, since their answers narrow its `choices`. Absent when it waits on nothing.","uniqueKey":"assumed.items.[INDEX].card.waitsOn","typeLabel":"string[]"},"why":{"type":"object","properties":{"askedBy":{"oneOf":[{"type":"string","description":"`all` when every open program asks it, else their titles.","enum":["all"],"isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.askedBy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.why.askedBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"`all` when every open program asks it, else their titles.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.askedBy.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.askedBy","typeLabel":"enum\u003cstring> | string[]"},"blocks":{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.why.blocks.items.[INDEX]","typeLabel":"string"},"description":"The programs whose result waits on the answer.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.blocks","typeLabel":"string[]"},"reasons":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.why.reasons.additionalProperties","typeLabel":"string"},"description":"Each asker’s reason, by title.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.reasons","typeLabel":"object"},"stillSettled":{"oneOf":[{"type":"integer","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.stillSettled.oneOf.0","typeLabel":"integer"},{"type":"null","description":"What skipping costs: how many other insurers price, or can still price, without the answer (two programs of one insurer count once). The host words it. Some of them may still be open: only `stillPriced` of them have a price.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.stillSettled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.why.stillSettled","typeLabel":"integer | null"},"stillPriced":{"type":"integer","description":"With `stillSettled`: how many of those insurers already have a result without the answer. Say “N other prices” of these only; the rest can still price, and may yet decline or ask more.","uniqueKey":"assumed.items.[INDEX].card.why.stillPriced","typeLabel":"integer"}},"required":["askedBy","blocks","reasons","stillSettled"],"uniqueKey":"assumed.items.[INDEX].card.why","typeLabel":"object"},"help":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.help","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.evidence.items.[INDEX].kind","typeLabel":"string"},"label":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.evidence.items.[INDEX].label","typeLabel":"string"}},"required":["kind","label"],"uniqueKey":"assumed.items.[INDEX].card.evidence.items.[INDEX]","typeLabel":"object"},"description":"The documents the answer can be read from, for the host to word.","uniqueKey":"assumed.items.[INDEX].card.evidence","typeLabel":"object[]"},"choices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].label","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].value","typeLabel":"null"},"help":{"type":"string","description":"What the answer means, when the contract says.","uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].help","typeLabel":"string"},"aliases":{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].aliases.items.[INDEX]","typeLabel":"string"},"description":"For `search`: other names for the answer. A host that searches the card’s choices matches them as the list search operation does.","uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].aliases","typeLabel":"string[]"},"catchAll":{"type":"boolean","description":"The answer stands for every answer the list does not name, such as “Something else” or “Not sure”. Such answers come last in `choices`: keep that order. A host that searches a `search` card’s choices offers these, in order, when what the person typed matches none.","uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX].catchAll","typeLabel":"boolean"}},"required":["label"],"uniqueKey":"assumed.items.[INDEX].card.choices.items.[INDEX]","typeLabel":"object"},"uniqueKey":"assumed.items.[INDEX].card.choices","typeLabel":"object[]"},"list":{"type":"string","description":"The list to search, for `search`; for `more`, the path of the list it asks about, such as `Policy.vehicles`.","uniqueKey":"assumed.items.[INDEX].card.list","typeLabel":"string"},"format":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.format","typeLabel":"string"},"precision":{"type":"string","enum":["month"],"description":"For a date: the person picks a month; save its first day.","uniqueKey":"assumed.items.[INDEX].card.precision","typeLabel":"enum\u003cstring>"},"picker":{"type":"string","description":"For `search`: how to show its answers, such as `logo` beside each make.","uniqueKey":"assumed.items.[INDEX].card.picker","typeLabel":"string"},"addLabel":{"type":"string","description":"For `list` and `more`: the words of the button that adds an item, “Add a car”.","uniqueKey":"assumed.items.[INDEX].card.addLabel","typeLabel":"string"},"itemName":{"type":"string","description":"For `list` and `more`: the name to ask for each item and keep (“First name”), never sent to a program; send them back as `displayNames`.","uniqueKey":"assumed.items.[INDEX].card.itemName","typeLabel":"string"},"pattern":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.pattern","typeLabel":"string"},"min":{"oneOf":[{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","uniqueKey":"assumed.items.[INDEX].card.min.oneOf.0","typeLabel":"any"},{"description":"The smallest answer, or the fewest items. For a date, also the bound other answers give, such as today for a policy’s start.","type":"null","uniqueKey":"assumed.items.[INDEX].card.min.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.min","typeLabel":"any | null"},"max":{"oneOf":[{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","uniqueKey":"assumed.items.[INDEX].card.max.oneOf.0","typeLabel":"any"},{"description":"The largest answer, or the most items. For a date, also the bound other answers give, such as 15 years before the policy starts for a birth date.","type":"null","uniqueKey":"assumed.items.[INDEX].card.max.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.max","typeLabel":"any | null"},"whole":{"type":"boolean","description":"For `number`: whole numbers only.","uniqueKey":"assumed.items.[INDEX].card.whole","typeLabel":"boolean"},"decimals":{"type":"integer","description":"For `number`: the decimal places the answer takes, when the contract says how fine it is, such as 2 for an amount in cents and 0 for whole numbers. Absent when it says nothing: keep the answer as typed, and never round it.","uniqueKey":"assumed.items.[INDEX].card.decimals","typeLabel":"integer"},"key":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.key","typeLabel":"string"},"nullable":{"type":"boolean","description":"`null` is an answer too: it says none, and nothing asks there again.","uniqueKey":"assumed.items.[INDEX].card.nullable","typeLabel":"boolean"},"you":{"type":"object","properties":{"field":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.you.field","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"assumed.items.[INDEX].card.you.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.you.value","typeLabel":"null"}},"required":["field"],"description":"For a list: which item is the person answering. The person adds themselves first, so write this field on the first item.","uniqueKey":"assumed.items.[INDEX].card.you","typeLabel":"object"},"more":{"type":"boolean","description":"The answer may be none of `choices`: they are the rows that fit the earlier answers, and a value outside them is taken typed in. Absent when any program of the basket takes only its listed answers there, whatever the others take: `choices` are then the only answers.","uniqueKey":"assumed.items.[INDEX].card.more","typeLabel":"boolean"},"revisit":{"type":"boolean","description":"The person skipped this card before.","uniqueKey":"assumed.items.[INDEX].card.revisit","typeLabel":"boolean"},"error":{"type":"string","description":"Why the answer given was refused.","uniqueKey":"assumed.items.[INDEX].card.error","typeLabel":"string"},"errorCode":{"type":"string","description":"With `error`: the refusal’s code, when it has one.","uniqueKey":"assumed.items.[INDEX].card.errorCode","typeLabel":"string"},"refusedBy":{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.refusedBy.items.[INDEX]","typeLabel":"string"},"description":"With `error`: the programs that refused the answer. When several did, `error` is the first one’s; each program’s own is in its `state`.","uniqueKey":"assumed.items.[INDEX].card.refusedBy","typeLabel":"string[]"},"document":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.document","typeLabel":"string"},"answers":{"type":"integer","description":"For a document: how many open questions it answers.","uniqueKey":"assumed.items.[INDEX].card.answers","typeLabel":"integer"},"suggested":{"type":"object","properties":{"from":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.suggested.from","typeLabel":"string"},"value":{"oneOf":[{},{"type":"null","uniqueKey":"assumed.items.[INDEX].card.suggested.value.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.suggested.value","typeLabel":"null"},"name":{"oneOf":[{"type":"string","uniqueKey":"assumed.items.[INDEX].card.suggested.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"assumed.items.[INDEX].card.suggested.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.suggested.name","typeLabel":"string | null"},"source":{"type":"string","description":"Set when the answer is worked out from another, such as `vin_decode` for one from the car’s VIN at `from`; absent for the item before’s answer.","uniqueKey":"assumed.items.[INDEX].card.suggested.source","typeLabel":"string"},"label":{"type":"string","description":"The value in the person’s words, as the card’s choice for it reads (“Front-wheel drive”): the answer it saves, never the source’s own words.","uniqueKey":"assumed.items.[INDEX].card.suggested.label","typeLabel":"string"}},"required":["from"],"description":"An answer offered as a one-tap answer: the same question’s answer on the item before, or one worked out from another answer, such as the car’s VIN. The person takes it or answers over it.","uniqueKey":"assumed.items.[INDEX].card.suggested","typeLabel":"object"},"checklist":{"type":"string","description":"The checklist this card is a row of, as the contract declares it.","uniqueKey":"assumed.items.[INDEX].card.checklist","typeLabel":"string"},"default":{"oneOf":[{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","uniqueKey":"assumed.items.[INDEX].card.default.oneOf.0","typeLabel":"any"},{"description":"The usual answer (`x-common`, or a `context` value the contract names), typed as the answer is: what an estimate assumes until the person answers, and what a `confirm` screen shows. Never saved for the person unless they accept it.","type":"null","uniqueKey":"assumed.items.[INDEX].card.default.oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.default","typeLabel":"any | null"},"askFirst":{"type":"boolean","description":"No estimate is shown until this is answered (`x-ask-first`).","uniqueKey":"assumed.items.[INDEX].card.askFirst","typeLabel":"boolean"},"blocksEstimate":{"type":"boolean","description":"No program of the basket can have an estimate without this answer: every open program asks it, and for each it is `askFirst` or has no usual answer and is not a list that counts as none until answered. Such questions are asked before those that do not. Which programs wait on a question only some of them ask is `estimateWaitsOn`.","uniqueKey":"assumed.items.[INDEX].card.blocksEstimate","typeLabel":"boolean"},"shownWhen":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"A question on the same screen.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.shownWhen.items.[INDEX].path","typeLabel":"string"},"values":{"type":"array","items":{"oneOf":[{},{"type":"null","uniqueKey":"assumed.items.[INDEX].card.shownWhen.items.[INDEX].values.items.[INDEX].oneOf.1","typeLabel":"null"}],"uniqueKey":"assumed.items.[INDEX].card.shownWhen.items.[INDEX].values.items.[INDEX]","typeLabel":"null"},"description":"The answers there that open this one.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.shownWhen.items.[INDEX].values","typeLabel":"null[]"}},"required":["path","values"],"uniqueKey":"assumed.items.[INDEX].card.shownWhen.items.[INDEX]","typeLabel":"object"},"description":"A follow-up shown on the screen of the questions it follows: show it once each of them has one of `values`, and do not ask it otherwise. It is listed right after them.","uniqueKey":"assumed.items.[INDEX].card.shownWhen","typeLabel":"object[]"},"code":{"type":"object","properties":{"fold":{"type":"array","items":{"type":"string","uniqueKey":"assumed.items.[INDEX].card.code.fold.items.[INDEX]","typeLabel":"string"},"description":"The formatting an entry may be folded by: `upper case`, `spaces`, `dashes`.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.code.fold","typeLabel":"string[]"},"reduce":{"type":"string","description":"How a valid full form is cut to the kept form, which matches `pattern`.","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.code.reduce","typeLabel":"string"},"length":{"type":"integer","description":"The full form’s length.","uniqueKey":"assumed.items.[INDEX].card.code.length","typeLabel":"integer"},"alphabet":{"type":"string","description":"Every character the full form may hold.","uniqueKey":"assumed.items.[INDEX].card.code.alphabet","typeLabel":"string"},"check":{"type":"string","description":"The check the full form must pass, as the contract declares it.","uniqueKey":"assumed.items.[INDEX].card.code.check","typeLabel":"string"}},"required":["fold","reduce"],"description":"For a code kept in a shorter form than the one typed: how to check an entry as it is typed, before saving. The entry, folded only as `fold` says, is accepted if it matches `pattern` (the kept form) or is exactly `length` characters of `alphabet` whose `check` holds; anything else is refused, never cut or padded. The API checks again on every save.","uniqueKey":"assumed.items.[INDEX].card.code","typeLabel":"object"},"statement":{"type":"string","description":"A checklist row’s words: a statement that is true of the item or not.","uniqueKey":"assumed.items.[INDEX].card.statement","typeLabel":"string"},"noneAnswer":{"type":"object","properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.noneAnswer.label","typeLabel":"string"},"gate":{"type":"string","isRequired":true,"uniqueKey":"assumed.items.[INDEX].card.noneAnswer.gate","typeLabel":"string"}},"required":["label","gate"],"description":"The answer that says this follow-up’s yes/no is no, such as “I don’t have it”: the yes/no at `gate` is asked as this card, with this answer beside the question. When it is taken, set `gate` to false, or save `null` at the card’s `path`: `null` there says none, and implies `gate` is false. Any other answer implies `gate` is true. Either way `implied` returns the yes/no, so you never need to write `gate` yourself. An answer you do send at `gate` is kept, but a `true` beside `null` at this card’s `path`: that `null` says none, so `implied` returns `gate` as `false`; store it. Put the card off by its own `path`. A card with it is never `nullable`: this answer is the one way to say none. A follow-up asked for itself, its yes/no already yes, carries it too when no program requires the answer.","uniqueKey":"assumed.items.[INDEX].card.noneAnswer","typeLabel":"object"}},"uniqueKey":"assumed.items.[INDEX].card","typeLabel":"object"}},"required":["path","label","from","source"],"uniqueKey":"assumed.items.[INDEX]","typeLabel":"object"},"description":"What the plan assumes instead of asking: a usual answer every program that asks it declares the same and asks on no checklist (`source: usual`), a value read from another answer (such as a decode), or one given in `context`. Every program is rated with these, so a price is exact for the stated assumptions: list them and let the person change one (`card` is its question). Never save one as the person’s answer; answering the path replaces it.","uniqueKey":"assumed","typeLabel":"object[]"},"estimateWaitsOn":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"estimateWaitsOn.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"estimateWaitsOn.additionalProperties","typeLabel":"string[]"},"description":"For each open program (`programId@version`), the paths an estimate of it still waits on: its open questions it asks first or gives no usual answer, and its choices not yet confirmed. An empty list: an estimate of that program can be shown.","uniqueKey":"estimateWaitsOn","typeLabel":"object"},"labels":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"labels.additionalProperties","typeLabel":"string"},"description":"Each list item’s own label by its path, as its answers give it, such as “your spouse” or “car 2”, whatever name was sent for it in `displayNames`. `names` holds the name to show.","uniqueKey":"labels","typeLabel":"object"}},"required":["asOf","answers","implied","task","open","next","questions","answered","sections","ready","changes","choices","names","issues","screens","progress","programs"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"asOf":"\u003cstring>","answers":{},"implied":[{"path":"\u003cstring>","value":"\u003cunknown>"}],"task":{"kind":"answer_screen","screen":{"id":"\u003cstring>","kind":"\u003cstring>","cards":[{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}}],"name":"\u003cstring>","section":"\u003cstring>"}},"open":[{"path":"\u003cstring>","programs":["\u003cstring>"],"deferred":true}],"next":{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}},"questions":[{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}}],"answered":[{"path":"\u003cstring>","text":"\u003cstring>","short":"\u003cstring>","name":"\u003cstring>","shown":"\u003cstring>","format":"\u003cstring>","precision":"\u003cstring>","followUp":{"path":"\u003cstring>","format":"\u003cstring>"},"evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}]}],"sections":["\u003cstring>"],"ready":["\u003cstring>"],"changes":[{"program":"\u003cstring>","from":"priced","to":"priced","because":"\u003cstring>","reason":"\u003cstring>","code":"\u003cstring>","fromState":"priced","toState":"priced"}],"choices":[{"path":"\u003cstring>","text":"\u003cstring>","kind":"\u003cstring>","steps":[{"label":"\u003cstring>","programs":["\u003cstring>"],"programIds":["\u003cstring>"],"common":true,"value":"\u003cunknown>"}],"programIds":["\u003cstring>"],"required":true,"nullable":true,"group":"policy","label":"\u003cstring>","section":"\u003cstring>","help":"\u003cstring>","gates":[{"path":"\u003cstring>","value":"\u003cunknown>","values":["\u003cunknown>"]}],"current":"\u003cunknown>","shape":"\u003cstring>","code":"\u003cstring>","parts":["\u003cstring>"]}],"names":{},"issues":[{"path":"\u003cstring>","code":"\u003cstring>","expected":"\u003cunknown>","candidates":["\u003cunknown>"],"programId":"\u003cstring>"}],"screens":[{"id":"\u003cstring>","kind":"item","cards":[{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}}],"name":"\u003cstring>","section":"\u003cstring>"}],"progress":{"left":123,"programs":[{"id":"\u003cstring>","left":123}],"counted":true},"programs":[{"programId":"\u003cstring>","version":1,"bundleId":"\u003cstring>","programFingerprint":"\u003cstring>","status":"priced","state":{"kind":"priced","pending":["\u003cstring>"]},"waitingOn":123,"choices":[{"path":"\u003cstring>","status":"exact","asked":"\u003cunknown>","priced":"\u003cunknown>","nearest":"\u003cunknown>","options":["\u003cunknown>"],"suggested":"\u003cunknown>"}],"effectiveDate":"2023-12-25","result":{},"refusal":{"violations":["\u003cunknown>"],"truncated":true},"missing":[{"path":"\u003cstring>","reasons":["\u003cstring>"],"choices":["\u003cunknown>"],"more":true,"list":"\u003cstring>"}],"inputs":{},"evaluateMs":123,"error":{"code":"\u003cstring>","message":"\u003cstring>"},"estimate":{"amount":123,"low":123,"high":123,"unranged":true,"termMonths":123}}],"lists":[{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}}],"assumed":[{"path":"\u003cstring>","label":"\u003cstring>","from":"\u003cstring>","source":"\u003cstring>","value":"\u003cunknown>","card":{"kind":"yesno","path":"\u003cstring>","text":"\u003cstring>","section":"\u003cstring>","screen":"\u003cstring>","screenName":"\u003cstring>","short":"\u003cstring>","because":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"related":{"path":"\u003cstring>","shown":"\u003cstring>","priced":[{"programId":"\u003cstring>","shown":"\u003cstring>"}]},"waitsOn":["\u003cstring>"],"why":{"askedBy":"all","blocks":["\u003cstring>"],"reasons":{},"stillSettled":123,"stillPriced":123},"help":"\u003cstring>","evidence":[{"kind":"\u003cstring>","label":"\u003cstring>"}],"choices":[{"label":"\u003cstring>","value":"\u003cunknown>","help":"\u003cstring>","aliases":["\u003cstring>"],"catchAll":true}],"list":"\u003cstring>","format":"\u003cstring>","precision":"month","picker":"\u003cstring>","addLabel":"\u003cstring>","itemName":"\u003cstring>","pattern":"\u003cstring>","min":"\u003cunknown>","max":"\u003cunknown>","whole":true,"decimals":123,"key":"\u003cstring>","nullable":true,"you":{"field":"\u003cstring>","value":"\u003cunknown>"},"more":true,"revisit":true,"error":"\u003cstring>","errorCode":"\u003cstring>","refusedBy":["\u003cstring>"],"document":"\u003cstring>","answers":123,"suggested":{"from":"\u003cstring>","value":"\u003cunknown>","name":"\u003cstring>","source":"\u003cstring>","label":"\u003cstring>"},"checklist":"\u003cstring>","default":"\u003cunknown>","askFirst":true,"blocksEstimate":true,"shownWhen":[{"path":"\u003cstring>","values":["\u003cunknown>"]}],"code":{"fold":["\u003cstring>"],"reduce":"\u003cstring>","length":123,"alphabet":"\u003cstring>","check":"\u003cstring>"},"statement":"\u003cstring>","noneAnswer":{"label":"\u003cstring>","gate":"\u003cstring>"}}}],"estimateWaitsOn":{},"labels":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"4c0e57cc-98a2-47a3-9bec-825178eacc11":{"description":"Invalid request or cursor.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"24e4131c-6fcc-49f2-a47a-338996a5fca9":{"description":"Authentication required.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"03d40bd5-c6f2-4b04-a937-0a7a34778ea0":{"description":"Your organization’s access to the rater, or your permission, is missing.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"c22db69a-8a2e-415a-864f-d305bd39d48c":{"description":"The rater, version or package is not found.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"91d5e780-4e36-41fb-954b-64f297e24953":{"description":"version_not_loadable: this server’s rating engine cannot load the version; it was built for another release of the engine. Leave the version out to use the newest version this server loads; with no version named, none of the newest loads. conflict: the engine that serves this version differs from the engine it records. Retry later; if it persists, contact Effective.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"f905562e-ee2a-45b8-8520-685da1d7009c":{"description":"The inputs exceed 1 MiB.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5ab705b6-908e-4fe7-ab83-8102b8c1a857":{"description":"The request body is not application/json.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"c4dfeed5-4399-4a4f-9a45-25bd5bc5d344":{"description":"invalid_inputs or business_rejection: violations lists each failed constraint. evaluation_failed: the engine could not rate the inputs.","content":{"application/json":{"example":{"code":"business_rejection","error":"The program doesn't cover rideshare use.","businessCode":"RIDESHARE","violations":[{"code":"RIDESHARE","message":"The program doesn't cover rideshare use.","path":"Policy.vehicles[0].rideshare","value":true,"constraint":"rideshare: where not self","cite":"manual:anchor \"eligibility\""}],"violationsTruncated":false,"requestId":"1793385750835-0"},"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"business_rejection","error":"The program doesn't cover rideshare use.","businessCode":"RIDESHARE","violations":[{"code":"RIDESHARE","message":"The program doesn't cover rideshare use.","path":"Policy.vehicles[0].rideshare","value":true,"constraint":"rideshare: where not self","cite":"manual:anchor \"eligibility\""}],"violationsTruncated":false,"requestId":"1793385750835-0"}}},"exampleType":"examples"}},"exampleType":"examples"},"904c8822-27e3-4a48-8455-c09349ccbbfa":{"description":"Too many requests, or no rating capacity. Retry after Retry-After.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"dfbd2901-5d78-4d5d-bc5d-dafe0edc6baa":{"description":"Unexpected failure.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"96ab686e-2558-4511-9863-9dda953efb7c":{"description":"A dependency is unavailable. Retry after Retry-After.","content":{"application/json":{"schema":{"type":"object","required":["code","error"],"properties":{"error":{"type":"string","minLength":1,"description":"Human-readable explanation of the failure.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","minLength":1,"description":"Stable error code. Clients must tolerate unknown future codes.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["path","query","header","body"],"isRequired":true,"uniqueKey":"details.items.[INDEX].location","typeLabel":"enum\u003cstring>"},"path":{"type":"array","items":{"type":"string","maxLength":64,"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string"},"maxItems":12,"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"string[]"},"code":{"type":"string","enum":["required","invalid_type","invalid_value","unknown_field"],"isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["location","path","code","message"],"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":20,"description":"Bounded safe validation issues; may omit some invalid fields.","uniqueKey":"details","typeLabel":"object[]"},"requestId":{"type":"string","minLength":1,"maxLength":128,"description":"Existing server correlation for this HTTP attempt, when available.","uniqueKey":"requestId","typeLabel":"string"},"dataset":{"type":"string","enum":["naic","osha"],"description":"Dataset needed for dataset_not_enabled.","uniqueKey":"dataset","typeLabel":"enum\u003cstring>"},"businessCode":{"type":"string","description":"The rater’s own refusal code, for business_rejection.","uniqueKey":"businessCode","typeLabel":"string"},"violations":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Authored or built-in constraint code","isRequired":true,"uniqueKey":"violations.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Authored message for the failed constraint","isRequired":true,"uniqueKey":"violations.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Input path of the offending value; empty for the request","isRequired":true,"uniqueKey":"violations.items.[INDEX].path","typeLabel":"string"},"value":{"oneOf":[{"description":"Offending input value, size-bounded by the runtime","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"Offending input value, size-bounded by the runtime","type":"null","isRequired":true,"uniqueKey":"violations.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].value","typeLabel":"any | null"},"constraint":{"type":"string","description":"The constraint the value failed, as text","isRequired":true,"uniqueKey":"violations.items.[INDEX].constraint","typeLabel":"string"},"cite":{"oneOf":[{"type":"string","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.0","typeLabel":"string"},{"type":"null","description":"Filing citation of the constraint, when the source cites one","isRequired":true,"uniqueKey":"violations.items.[INDEX].cite.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"violations.items.[INDEX].cite","typeLabel":"string | null"}},"required":["code","message","path","value","constraint","cite"],"additionalProperties":false,"uniqueKey":"violations.items.[INDEX]","typeLabel":"object"},"maxItems":256,"description":"Each input constraint the submission failed, for invalid_inputs and business_rejection.","uniqueKey":"violations","typeLabel":"object[]"},"violationsTruncated":{"type":"boolean","description":"True when the rater reported more violations than violations holds.","uniqueKey":"violationsTruncated","typeLabel":"boolean"},"executionId":{"type":"string","description":"The recorded execution of a failed rating, for rater rating failures.","uniqueKey":"executionId","typeLabel":"string"},"accessUrl":{"oneOf":[{"type":"string","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Not currently returned.","uniqueKey":"accessUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"accessUrl","typeLabel":"string\u003curi> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","details":[{"location":"path","path":["\u003cstring>"],"code":"required","message":"\u003cstring>"}],"requestId":"\u003cstring>","dataset":"naic","businessCode":"\u003cstring>","violations":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","value":"\u003cunknown>","constraint":"\u003cstring>","cite":"\u003cstring>"}],"violationsTruncated":true,"executionId":"\u003cstring>","accessUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2070a9ee-0244-417b-abe6-7f40c1f9bc63":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Effective API key. Send Authorization: Bearer sk-eai-...","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"f1e5bb62-7f9a-4959-898b-6df4c785a6d3":{"url":"https://api.effectiveai.app/api/v2","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Effective API key. Send Authorization: Bearer sk-eai-...","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Effective API key. Send Authorization: Bearer sk-eai-...","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"effective-ai","siteName":"Effective","title":"Plan the next question for market rater versions - Effective","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T20:15:08.602Z","originalFileLocation":"api-reference/market-raters/plan-the-next-question-for-market-rater-versions.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=\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person. Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable. Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result. Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen\u0026#x27;s cards together. Send each version\u0026#x27;s status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as \u0026quot;since March 2016\u0026quot;. Send a car\u0026#x27;s full VIN at its vin_pattern: Effective decodes it, fills the car\u0026#x27;s vpic_ answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car\u0026#x27;s year, make, model, drive, fuel and body, rides on those questions\u0026#x27; cards as suggested with source vin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_ answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them. A card with noneAnswer stands in for a yes/no: \u0026quot;What\u0026#x27;s the VIN?\u0026quot; with \u0026quot;I don\u0026#x27;t have it\u0026quot; beside it. Any answer there says yes; the none answer, or null saved at the card\u0026#x27;s path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit. Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program\u0026#x27;s steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person\u0026#x27;s choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides. issues lists answers or choices the versions\u0026#x27; contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path. Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Effective\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_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/effective-ai/vL__Avn_tHHk4dzH/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Plan the next question for market rater versions - Effective\">\u003cmeta data-mint-head property=\"og:description\" content=\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person. Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable. Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result. Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen\u0026#x27;s cards together. Send each version\u0026#x27;s status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as \u0026quot;since March 2016\u0026quot;. Send a car\u0026#x27;s full VIN at its vin_pattern: Effective decodes it, fills the car\u0026#x27;s vpic_ answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car\u0026#x27;s year, make, model, drive, fuel and body, rides on those questions\u0026#x27; cards as suggested with source vin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_ answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them. A card with noneAnswer stands in for a yes/no: \u0026quot;What\u0026#x27;s the VIN?\u0026quot; with \u0026quot;I don\u0026#x27;t have it\u0026quot; beside it. Any answer there says yes; the none answer, or null saved at the card\u0026#x27;s path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit. Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program\u0026#x27;s steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person\u0026#x27;s choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides. issues lists answers or choices the versions\u0026#x27; contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path. Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Effective\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://effective-ai.mintlify.site/_mintlify/api/og/v2?division=Market+raters\u0026amp;title=Plan+the+next+question+for+market+rater+versions\u0026amp;description=Name+the+market+rater+versions+a+household+may+be+rated+by%2C+send+every+answer+so+far%2C+and+get+the+next+question+and+each+version%E2%80%99s+status.+A+version%E2%80%99s+status+is\u0026amp;theme=67128c075a738c87f9507478\u0026amp;signature=9f05610152101aaa1e56e96f864566eb1b05933bbe30d615cab94cb29ca2448a\">\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=\"Plan the next question for market rater versions - Effective\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person. Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable. Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result. Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen\u0026#x27;s cards together. Send each version\u0026#x27;s status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as \u0026quot;since March 2016\u0026quot;. Send a car\u0026#x27;s full VIN at its vin_pattern: Effective decodes it, fills the car\u0026#x27;s vpic_ answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car\u0026#x27;s year, make, model, drive, fuel and body, rides on those questions\u0026#x27; cards as suggested with source vin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_ answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them. A card with noneAnswer stands in for a yes/no: \u0026quot;What\u0026#x27;s the VIN?\u0026quot; with \u0026quot;I don\u0026#x27;t have it\u0026quot; beside it. Any answer there says yes; the none answer, or null saved at the card\u0026#x27;s path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit. Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program\u0026#x27;s steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person\u0026#x27;s choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides. issues lists answers or choices the versions\u0026#x27; contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path. Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://effective-ai.mintlify.site/_mintlify/api/og/v2?division=Market+raters\u0026amp;title=Plan+the+next+question+for+market+rater+versions\u0026amp;description=Name+the+market+rater+versions+a+household+may+be+rated+by%2C+send+every+answer+so+far%2C+and+get+the+next+question+and+each+version%E2%80%99s+status.+A+version%E2%80%99s+status+is\u0026amp;theme=67128c075a738c87f9507478\u0026amp;signature=9f05610152101aaa1e56e96f864566eb1b05933bbe30d615cab94cb29ca2448a\">\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/effective-ai/vL__Avn_tHHk4dzH/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Effective\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#171717\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.effectiveai.app/#organization\",\"name\":\"Effective\",\"url\":\"https://docs.effectiveai.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/effective-ai/2LuMFu5DJnp1_bni/logo/light.svg?fit=max\u0026auto=format\u0026n=2LuMFu5DJnp1_bni\u0026q=85\u0026s=58a80094dc36f54725a92d58b658b002\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.effectiveai.app#website\",\"name\":\"Effective\",\"url\":\"https://docs.effectiveai.app\",\"publisher\":{\"@id\":\"https://docs.effectiveai.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions#webpage\",\"url\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions\",\"name\":\"Plan the next question for market rater versions\",\"description\":\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person. Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable. Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result. Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen's cards together. Send each version's status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as \\\"since March 2016\\\". Send a car's full VIN at its vin_pattern: Effective decodes it, fills the car's vpic_ answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car's year, make, model, drive, fuel and body, rides on those questions' cards as suggested with source vin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_ answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them. A card with noneAnswer stands in for a yes/no: \\\"What's the VIN?\\\" with \\\"I don't have it\\\" beside it. Any answer there says yes; the none answer, or null saved at the card's path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit. Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program's steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person's choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides. issues lists answers or choices the versions' contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path. Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.\",\"dateModified\":\"2026-11-12T20:15:08.602Z\",\"isPartOf\":{\"@id\":\"https://docs.effectiveai.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Market raters\",\"item\":\"https://docs.effectiveai.app/api-reference/market-raters/list-market-raters\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plan the next question for market rater versions\",\"item\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions#apireference\",\"headline\":\"Plan the next question for market rater versions\",\"name\":\"Plan the next question for market rater versions\",\"description\":\"Name the market rater versions a household may be rated by, send every answer so far, and get the next question and each version’s status. A version’s status is priced, declined, invalid or open, as for rating with allowMissing, or failed when the version could not be read (its engine or its input contract) or its rater could not rate the answers: one version’s failure is its own, and the others are still rated and planned, so the response is 200 even when every version failed. The status is the rater’s word for the answers and choices it was rated on; state says where the version stands for the person. Name each rater by programId and leave version out: it is read at the version this server rates with, the newest published version its rating engine can load, and programs[].version in the response names it. Keep that version and bundleId with a price. Do not pick a version from List market rater versions yourself: its newest may be one that waits for a server release. Send a version only to pin one; a pinned version this server cannot load fails the request with 409 version_not_loadable. Every version is in one state, and every state but priced says the way out: needs lists the questions to answer and the choices to make, each with the error when the version refused what was given; declined gives the reason and the answers to change; failed gives the reason, and the way out is to try again. Nothing is asked twice without an error. A version is priced in state only once every choice it prices is confirmed: until then it needs those choices, even when its rater already returned a result. Effective stores nothing between calls: each call carries all answers, so the same request always returns the same question, and a retry is safe. One set of answers serves the whole basket, and each version reads only the paths its own input contract declares. next is a card the person answers: its kind and format say which input to show, and its path says where the answer goes in answers. It is null once every version is priced or declined. questions holds every open card in asking order, each with its screen, the record it belongs to: show a screen's cards together. Send each version's status from the previous call as previous: changes then names each version whose status changed, with the refused answer for a decline. Send asOf to fill look-back windows such as \\\"since March 2016\\\". Send a car's full VIN at its vin_pattern: Effective decodes it, fills the car's vpic_ answers and keeps only the pattern, and returns the answers as it read them in answers. What the VIN suggests, such as the car's year, make, model, drive, fuel and body, rides on those questions' cards as suggested with source vin_decode: show them together and let the person confirm or correct them. A client with its own decode may send the vpic_ answers instead. Send fills for what else you fill from an answer: a question that fills others is asked before them. A card with noneAnswer stands in for a yes/no: \\\"What's the VIN?\\\" with \\\"I don't have it\\\" beside it. Any answer there says yes; the none answer, or null saved at the card's path, says no. implied returns that yes/no, so you never write it. null is an answer wherever a card is nullable: nothing asks there again. To put a card off, send the path it shows in skipped; it comes back last, marked revisit. Coverage is chosen, not asked: choices in the response lists each limit, deductible or term the basket prices, with every program's steps. The task asks for it (confirm_choices) as soon as the lists its choices belong to are closed, such as the cars, and before the questions still open, because a version can need more answers for what was chosen; those questions then come with the rest, and the results follow the last question. Send the person's choices as choices, by path. Each version is rated at its own nearest step, by the shape its contract gives the choice: a limit up, a limit pair up as one pair, a deductible down. It reports in its choices what it priced. When some versions do not sell a choice as asked, task.differences lists them with the steps they do offer: ask the person once, and send the pick as overrides. issues lists answers or choices the versions' contracts cannot read as sent, each with its path, a code and, where known, what is expected and candidates that may be meant. Correct them and plan again. A choice at a path no version in the basket sells never fails the request: it is left out, with its confirmed and overrides entries, the rest is planned, and issues names it with the code CHOICE_NOT_SOLD. This happens when a stored choice belongs to a version that has left the basket, or to an older version of one that no longer has it; stop sending it. Saying none to a choice (leaving it out where it may be, or no to a yes/no) is priced as asked by a version that has nothing at that path. Needs access to rate every named version and your raters:run permission. Rating changes nothing, so the request is safe to repeat.\",\"url\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions\",\"mainEntityOfPage\":{\"@id\":\"https://docs.effectiveai.app/api-reference/market-raters/plan-the-next-question-for-market-rater-versions#webpage\"},\"dateModified\":\"2026-11-12T20:15:08.602Z\",\"publisher\":{\"@id\":\"https://docs.effectiveai.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.effectiveai.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Effective\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Effective\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions.md","siteName":"Effective","nav":{"global":null,"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":"/getting-started/overview"}]},{"tab":"Market Directory","pages":[{"title":"Market Directory","href":"/guides"}]},{"tab":"Product Hub","pages":[{"title":"Product Hub","href":"/guides/product-hub"}]},{"tab":"Relativities","pages":[{"title":"Relativities","href":"/relativities"}]},{"tab":"RSL","pages":[{"title":"RSL","href":"/rsl/overview"}]},{"tab":"API Reference","groups":[{"group":"Managed Products","pages":[{"title":"Find products for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/products","href":"/api-reference/managed-products/find-products-for-filing-preparation"},{"title":"Create a product for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/products","href":"/api-reference/managed-products/create-a-product-for-filing-preparation"},{"title":"Get one product for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/products/{id}","href":"/api-reference/managed-products/get-one-product-for-filing-preparation"}]},{"group":"Insurance Types","pages":[{"title":"List NAIC insurance types","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/insurance-types","href":"/api-reference/insurance-types/list-naic-insurance-types"},{"title":"List subtypes for a NAIC insurance type","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/insurance-types/{toiCode}/subtypes","href":"/api-reference/insurance-types/list-subtypes-for-a-naic-insurance-type"},{"title":"Get one NAIC insurance type","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/insurance-types/{id}","href":"/api-reference/insurance-types/get-one-naic-insurance-type"},{"title":"Get one NAIC insurance subtype","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/insurance-types/{toiCode}/subtypes/{id}","href":"/api-reference/insurance-types/get-one-naic-insurance-subtype"}]},{"group":"Companies","pages":[{"title":"Find companies for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/companies","href":"/api-reference/companies/find-companies-for-filing-preparation"},{"title":"Create a company for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/companies","href":"/api-reference/companies/create-a-company-for-filing-preparation"},{"title":"Get one company for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/companies/{id}","href":"/api-reference/companies/get-one-company-for-filing-preparation"}]},{"group":"Jurisdictions","pages":[{"title":"Find jurisdictions for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/jurisdictions","href":"/api-reference/jurisdictions/find-jurisdictions-for-filing-preparation"},{"title":"Create a jurisdiction for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/jurisdictions","href":"/api-reference/jurisdictions/create-a-jurisdiction-for-filing-preparation"},{"title":"Get one jurisdiction for filing preparation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/jurisdictions/{id}","href":"/api-reference/jurisdictions/get-one-jurisdiction-for-filing-preparation"}]},{"group":"Objections","pages":[{"title":"Triage an objection","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/triage","href":"/api-reference/objections/triage-an-objection"},{"title":"Read objection triage progress","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/triage/{requestId}","href":"/api-reference/objections/read-objection-triage-progress"},{"title":"Get a workspace objection","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}","href":"/api-reference/objections/get-a-workspace-objection"},{"title":"Remove a workspace objection","deprecated":null,"version":null,"openapi":"/openapi.json delete /objections/{id}","href":"/api-reference/objections/remove-a-workspace-objection"},{"title":"Edit a workspace objection","deprecated":null,"version":null,"openapi":"/openapi.json patch /objections/{id}","href":"/api-reference/objections/edit-a-workspace-objection"},{"title":"Get an objection item","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/items/{itemId}","href":"/api-reference/objections/get-an-objection-item"},{"title":"Remove an objection item","deprecated":null,"version":null,"openapi":"/openapi.json delete /objections/{id}/items/{itemId}","href":"/api-reference/objections/remove-an-objection-item"},{"title":"Edit an objection item or response draft","deprecated":null,"version":null,"openapi":"/openapi.json patch /objections/{id}/items/{itemId}","href":"/api-reference/objections/edit-an-objection-item-or-response-draft"},{"title":"List the requests in a workspace objection","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/items","href":"/api-reference/objections/list-the-requests-in-a-workspace-objection"},{"title":"Add a regulator request to an objection","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/items","href":"/api-reference/objections/add-a-regulator-request-to-an-objection"},{"title":"Upload an objection document","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/uploads","href":"/api-reference/objections/upload-an-objection-document"},{"title":"Confirm an objection document upload","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/uploads/complete","href":"/api-reference/objections/confirm-an-objection-document-upload"},{"title":"List documents attached to an objection","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/documents","href":"/api-reference/objections/list-documents-attached-to-an-objection"},{"title":"Attach an existing file to an objection","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/documents","href":"/api-reference/objections/attach-an-existing-file-to-an-objection"},{"title":"Remove a document from an objection","deprecated":null,"version":null,"openapi":"/openapi.json delete /objections/{id}/documents/{fileId}","href":"/api-reference/objections/remove-a-document-from-an-objection"},{"title":"Read an objection item discussion timeline","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/items/{itemId}/comments","href":"/api-reference/objections/read-an-objection-item-discussion-timeline"},{"title":"Comment or reply on an objection item","deprecated":null,"version":null,"openapi":"/openapi.json post /objections/{id}/items/{itemId}/comments","href":"/api-reference/objections/comment-or-reply-on-an-objection-item"},{"title":"Get one objection item comment","deprecated":null,"version":null,"openapi":"/openapi.json get /objections/{id}/items/{itemId}/comments/{commentId}","href":"/api-reference/objections/get-one-objection-item-comment"},{"title":"Edit a comment or resolve its discussion","deprecated":null,"version":null,"openapi":"/openapi.json patch /objections/{id}/items/{itemId}/comments/{commentId}","href":"/api-reference/objections/edit-a-comment-or-resolve-its-discussion"},{"title":"List workspace objections on a filing","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/objections","href":"/api-reference/objections/list-workspace-objections-on-a-filing"},{"title":"Record an objection letter on a managed filing","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/objections","href":"/api-reference/objections/record-an-objection-letter-on-a-managed-filing"}]},{"group":"Answers","pages":[{"title":"Schedule an answer to a question","deprecated":null,"version":null,"openapi":"/openapi.json post /answers","href":"/api-reference/answers/schedule-an-answer-to-a-question"},{"title":"Get answer status or completed result","deprecated":null,"version":null,"openapi":"/openapi.json get /answers/{id}","href":"/api-reference/answers/get-answer-status-or-completed-result"}]},{"group":"Form comparisons","pages":[{"title":"Validate knowledge files","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/form-knowledge/validate","href":"/api-reference/form-comparisons/validate-knowledge-files"},{"title":"List form comparisons","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/form-comparisons","href":"/api-reference/form-comparisons/list-form-comparisons"},{"title":"Request a form comparison","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/form-comparisons","href":"/api-reference/form-comparisons/request-a-form-comparison"},{"title":"Get a form comparison","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/form-comparisons/{id}","href":"/api-reference/form-comparisons/get-a-form-comparison"},{"title":"Delete a form comparison","deprecated":null,"version":null,"openapi":"/openapi.json delete /insurance/form-comparisons/{id}","href":"/api-reference/form-comparisons/delete-a-form-comparison"}]},{"group":"Loss reviews","pages":[{"title":"List loss reviews","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/loss-reviews","href":"/api-reference/loss-reviews/list-loss-reviews"},{"title":"Review supplied loss evidence","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/loss-reviews","href":"/api-reference/loss-reviews/review-supplied-loss-evidence"},{"title":"List saved loss matters","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/loss-reviews/{id}/items","href":"/api-reference/loss-reviews/list-saved-loss-matters"},{"title":"Get a loss review","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/loss-reviews/{id}","href":"/api-reference/loss-reviews/get-a-loss-review"},{"title":"Delete a loss review","deprecated":null,"version":null,"openapi":"/openapi.json delete /insurance/loss-reviews/{id}","href":"/api-reference/loss-reviews/delete-a-loss-review"}]},{"group":"Access","pages":[{"title":"Read a resource access list","deprecated":null,"version":null,"openapi":"/openapi.json get /access/{resource}","href":"/api-reference/access/read-a-resource-access-list"},{"title":"Replace a resource access list","deprecated":null,"version":null,"openapi":"/openapi.json put /access/{resource}","href":"/api-reference/access/replace-a-resource-access-list"},{"title":"Change selected resource access","deprecated":null,"version":null,"openapi":"/openapi.json patch /access/{resource}","href":"/api-reference/access/change-selected-resource-access"}]},{"group":"Users","pages":[{"title":"Get current user","deprecated":null,"version":null,"openapi":"/openapi.json get /users/me","href":"/api-reference/users/get-current-user"},{"title":"List organization users","deprecated":null,"version":null,"openapi":"/openapi.json get /users","href":"/api-reference/users/list-organization-users"}]},{"group":"Groups","pages":[{"title":"List groups for sharing","deprecated":null,"version":null,"openapi":"/openapi.json get /groups","href":"/api-reference/groups/list-groups-for-sharing"}]},{"group":"Agent email aliases","pages":[{"title":"List agent email aliases","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-email/aliases","href":"/api-reference/agent-email-aliases/list-agent-email-aliases"},{"title":"Create an agent email alias","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-email/aliases","href":"/api-reference/agent-email-aliases/create-an-agent-email-alias"},{"title":"Get an agent email alias","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-email/aliases/{alias}","href":"/api-reference/agent-email-aliases/get-an-agent-email-alias"},{"title":"Replace alias routing config","deprecated":null,"version":null,"openapi":"/openapi.json put /agent-email/aliases/{alias}","href":"/api-reference/agent-email-aliases/replace-alias-routing-config"},{"title":"Delete an agent email alias","deprecated":null,"version":null,"openapi":"/openapi.json delete /agent-email/aliases/{alias}","href":"/api-reference/agent-email-aliases/delete-an-agent-email-alias"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi.json get /webhook-endpoints","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /webhook-endpoints","href":"/api-reference/webhooks/create-a-webhook-endpoint"},{"title":"Read a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json get /webhook-endpoints/{id}","href":"/api-reference/webhooks/read-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json delete /webhook-endpoints/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json patch /webhook-endpoints/{id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/openapi.json post /webhook-endpoints/{id}/test","href":"/api-reference/webhooks/send-a-test-event"}]},{"group":"NAIC statutory data","pages":[{"title":"List a carrier’s state results","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/state-results","href":"/api-reference/naic-statutory-data/list-a-carrier’s-state-results"},{"title":"Get a carrier state result","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/state-results/{id}","href":"/api-reference/naic-statutory-data/get-a-carrier-state-result"},{"title":"Get a carrier’s annual financial totals","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/financials","href":"/api-reference/naic-statutory-data/get-a-carrier’s-annual-financial-totals"},{"title":"List a carrier’s line results","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/line-results","href":"/api-reference/naic-statutory-data/list-a-carrier’s-line-results"},{"title":"Get a carrier line result","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/line-results/{id}","href":"/api-reference/naic-statutory-data/get-a-carrier-line-result"},{"title":"List a carrier’s state license observations","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/state-licenses","href":"/api-reference/naic-statutory-data/list-a-carrier’s-state-license-observations"},{"title":"Get a carrier state license observation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/state-licenses/{id}","href":"/api-reference/naic-statutory-data/get-a-carrier-state-license-observation"},{"title":"Get a carrier’s Schedule P interrogatories","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/loss-development/interrogatories","href":"/api-reference/naic-statutory-data/get-a-carrier’s-schedule-p-interrogatories"},{"title":"List a carrier’s Schedule P loss development rows","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/loss-development","href":"/api-reference/naic-statutory-data/list-a-carrier’s-schedule-p-loss-development-rows"},{"title":"Get a carrier Schedule P loss development row","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{carrierId}/loss-development/{id}","href":"/api-reference/naic-statutory-data/get-a-carrier-schedule-p-loss-development-row"}]},{"group":"Carriers","pages":[{"title":"List carriers","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers","href":"/api-reference/carriers/list-carriers"},{"title":"Get a carrier","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carriers/{id}","href":"/api-reference/carriers/get-a-carrier"}]},{"group":"Carrier groups","pages":[{"title":"List carrier groups","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carrier-groups","href":"/api-reference/carrier-groups/list-carrier-groups"},{"title":"Get a carrier group","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/carrier-groups/{id}","href":"/api-reference/carrier-groups/get-a-carrier-group"}]},{"group":"MGAs","pages":[{"title":"List MGAs","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/mgas","href":"/api-reference/mgas/list-mgas"},{"title":"Get an MGA","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/mgas/{id}","href":"/api-reference/mgas/get-an-mga"}]},{"group":"Product types","pages":[{"title":"List shared type definitions","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/types","href":"/api-reference/product-types/list-shared-type-definitions"},{"title":"Get a shared type definition","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/types/{typeId}","href":"/api-reference/product-types/get-a-shared-type-definition"}]},{"group":"Products","pages":[{"title":"Get the products you have access to","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/product-access","href":"/api-reference/products/get-the-products-you-have-access-to"},{"title":"List the lines of business products use","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/product-lines","href":"/api-reference/products/list-the-lines-of-business-products-use"},{"title":"List products","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products","href":"/api-reference/products/list-products"},{"title":"Get a product","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{id}","href":"/api-reference/products/get-a-product"},{"title":"List recorded product filings in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/filings","href":"/api-reference/products/list-recorded-product-filings-in-a-state"},{"title":"Get recorded product underwriting manuals in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/uw-manuals","href":"/api-reference/products/get-recorded-product-underwriting-manuals-in-a-state"},{"title":"Get recorded product rate manuals in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/rate-manuals","href":"/api-reference/products/get-recorded-product-rate-manuals-in-a-state"},{"title":"Get recorded product forms in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/forms","href":"/api-reference/products/get-recorded-product-forms-in-a-state"},{"title":"Get recorded product marketing in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/marketing","href":"/api-reference/products/get-recorded-product-marketing-in-a-state"},{"title":"List associated product resources","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/resources","href":"/api-reference/products/list-associated-product-resources"},{"title":"Get an associated product resource","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/resources/{resourceId}","href":"/api-reference/products/get-an-associated-product-resource"},{"title":"List your organization's rating plan requests for a product","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/rating-plan-requests","href":"/api-reference/products/list-your-organizations-rating-plan-requests-for-a-product"},{"title":"Request rating plans for product states","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/products/{productId}/rating-plan-requests","href":"/api-reference/products/request-rating-plans-for-product-states"},{"title":"Get your organization's catalog request for a product","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/catalog-requests","href":"/api-reference/products/get-your-organizations-catalog-request-for-a-product"},{"title":"Ask Effective to catalogue a product","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/products/{productId}/catalog-requests","href":"/api-reference/products/ask-effective-to-catalogue-a-product"},{"title":"List which rating program versions rate a product in a state","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/availability/{state}/rating-programs","href":"/api-reference/products/list-which-rating-program-versions-rate-a-product-in-a-state"}]},{"group":"Product timelines","pages":[{"title":"Get a product's timeline","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/timeline","href":"/api-reference/product-timelines/get-a-products-timeline"},{"title":"Get a digest of a product's timeline","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/products/{productId}/timeline/digest","href":"/api-reference/product-timelines/get-a-digest-of-a-products-timeline"}]},{"group":"Market raters","pages":[{"title":"List market raters","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs","href":"/api-reference/market-raters/list-market-raters"},{"title":"Get a market rater","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}","href":"/api-reference/market-raters/get-a-market-rater"},{"title":"Subscribe to a market rater","deprecated":null,"version":null,"openapi":"/openapi.json put /insurance/rating-programs/{id}/subscription","href":"/api-reference/market-raters/subscribe-to-a-market-rater"},{"title":"Unsubscribe from a market rater","deprecated":null,"version":null,"openapi":"/openapi.json delete /insurance/rating-programs/{id}/subscription","href":"/api-reference/market-raters/unsubscribe-from-a-market-rater"},{"title":"Get the input and output schemas of a market rater version","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/versions/{version}/contract","href":"/api-reference/market-raters/get-the-input-and-output-schemas-of-a-market-rater-version"},{"title":"Rate a submission with the latest version of a market rater","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/{id}/rate","href":"/api-reference/market-raters/rate-a-submission-with-the-latest-version-of-a-market-rater"},{"title":"Rate a submission with a market rater version","description":"Rate one submission with one version of a market rater, on Effective’s servers.\n\nSend `inputs` as the version’s [input schema](/api-reference/market-raters/get-the-input-and-output-schemas-of-a-market-rater-version) describes: an object keyed by the root record, such as `{\"Policy\": {...}}`, of at most 1 MiB.\n\nThe response has `result`, the outputs keyed by root record, and `bundleId`, the exact engine that rated. Keep `programId`, `version` and `bundleId` with the result.\n\nA refused submission returns 422. `invalid_inputs` means an input breaks a constraint of the schema. `business_rejection` means the filing excludes the risk, and `businessCode` names the rule. Each entry in `violations` gives the path, the value and the filing citation. Keep a refusal apart from a premium.\n\nA version this server’s rating engine cannot load returns 409 `version_not_loadable`: it was built for another release of the engine. Retrying does not help; [rate with the latest version](/api-reference/market-raters/rate-a-submission-with-the-latest-version-of-a-market-rater) instead.\n\nNeeds access to rate the rater and your `raters:run` permission. Effective example raters need only `raters:run`. Rating changes nothing, so the request is safe to repeat.","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/{id}/versions/{version}/rate","href":"/api-reference/market-raters/rate-a-submission-with-a-market-rater-version"},{"title":"Plan the next question for market rater versions","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/plan","href":"/api-reference/market-raters/plan-the-next-question-for-market-rater-versions"},{"title":"Match a said or read answer to a planning question","description":"Find what an answer said in words or read from a document means for one planning question, across the same market rater versions as [Plan the next question](/api-reference/market-raters/plan-the-next-question-for-market-rater-versions). Send `programs` as you sent them there: a program without a `version` is read at the version this server rates with.\n\nThe result is `exact` with the value to store at `path`, `candidates` (a date written two ways), `none`, or `refused` with why. Saving never chooses among answers: for a question with listed answers only a listed value or label as written matches (case, spacing and punctuation folded); anything else is `refused` with `search`, and [Search the answers of a planning question](#) finds what was meant. What is read is how a value is written: dates in forms that parse one way, amounts such as `100k` and `$100,000`, limits such as `100/300`, a ZIP+4 as its ZIP, and a code kept shorter than it is typed as its kept form or its whole full form whose check holds (`x-reduce`, `x-check`), else `refused` with the rule it broke.\n\nSend `answers` when the question's answers depend on earlier ones, as a car's model does on its make.\n\nA version that cannot be read or rated is not asked: `notAsked` names it with why, and the match is the other versions' alone. The request fails only when no version can be asked.\n\nNeeds access to rate every named version and your `raters:run` permission. Matching changes nothing, so the request is safe to repeat.","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/match","href":"/api-reference/market-raters/match-a-said-or-read-answer-to-a-planning-question"},{"title":"Search the answers of a planning question","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/rating-programs/search","href":"/api-reference/market-raters/search-the-answers-of-a-planning-question"},{"title":"Search a long list of the latest version of a market rater","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/lists/{name}","href":"/api-reference/market-raters/search-a-long-list-of-the-latest-version-of-a-market-rater"},{"title":"Search a long list of a market rater version","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/versions/{version}/lists/{name}","href":"/api-reference/market-raters/search-a-long-list-of-a-market-rater-version"},{"title":"List market rater versions","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/versions","href":"/api-reference/market-raters/list-market-rater-versions"},{"title":"Get a market rater version","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/versions/{version}","href":"/api-reference/market-raters/get-a-market-rater-version"},{"title":"Download a market rater version","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/rating-programs/{id}/versions/{version}/download","href":"/api-reference/market-raters/download-a-market-rater-version"}]},{"group":"Filings","pages":[{"title":"Search filings","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/filings/search","href":"/api-reference/filings/search-filings"},{"title":"List catalog filings","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings","href":"/api-reference/filings/list-catalog-filings"},{"title":"Get a catalog filing","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings/{filingId}","href":"/api-reference/filings/get-a-catalog-filing"},{"title":"List stored filing files","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings/{filingId}/files","href":"/api-reference/filings/list-stored-filing-files"},{"title":"List extracted filing forms","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings/{filingId}/forms","href":"/api-reference/filings/list-extracted-filing-forms"},{"title":"Get extracted filing rate impact","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings/{filingId}/rate-impact","href":"/api-reference/filings/get-extracted-filing-rate-impact"},{"title":"Get one extracted filing form","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filings/{filingId}/forms/{id}","href":"/api-reference/filings/get-one-extracted-filing-form"}]},{"group":"Files","pages":[{"title":"Download one immutable file version","deprecated":null,"version":null,"openapi":"/openapi.json get /files/{fileId}/download","href":"/api-reference/files/download-one-immutable-file-version"},{"title":"Read a bounded chunk of existing extracted text","deprecated":null,"version":null,"openapi":"/openapi.json get /files/{fileId}/text","href":"/api-reference/files/read-a-bounded-chunk-of-existing-extracted-text"},{"title":"Get file metadata and content links","deprecated":null,"version":null,"openapi":"/openapi.json get /files/{fileId}","href":"/api-reference/files/get-file-metadata-and-content-links"}]},{"group":"Managed Filings","pages":[{"title":"Find supporting requirements before creating a filing","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/requirements","href":"/api-reference/managed-filings/find-supporting-requirements-before-creating-a-filing"},{"title":"Read full supporting requirement instructions","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/requirements/{requirementId}","href":"/api-reference/managed-filings/read-full-supporting-requirement-instructions"},{"title":"Find supporting requirements for an existing filing","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/requirements","href":"/api-reference/managed-filings/find-supporting-requirements-for-an-existing-filing"},{"title":"Check staging credentials","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/staging","href":"/api-reference/managed-filings/check-staging-credentials"},{"title":"Authorize and start SERFF staging","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/staging","href":"/api-reference/managed-filings/authorize-and-start-serff-staging"},{"title":"Sync a managed filing from SERFF","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/serff-sync","href":"/api-reference/managed-filings/sync-a-managed-filing-from-serff"},{"title":"Read a filing's regulatory history","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/history","href":"/api-reference/managed-filings/read-a-filings-regulatory-history"},{"title":"List accessible filings","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings","href":"/api-reference/managed-filings/list-accessible-filings"},{"title":"Create a filing","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings","href":"/api-reference/managed-filings/create-a-filing"},{"title":"Read a filing Record","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}","href":"/api-reference/managed-filings/read-a-filing-record"},{"title":"Edit working filing details","deprecated":null,"version":null,"openapi":"/openapi.json patch /insurance/managed-filings/{filingId}","href":"/api-reference/managed-filings/edit-working-filing-details"},{"title":"List filing items","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/items","href":"/api-reference/managed-filings/list-filing-items"},{"title":"Attach a document to a working filing","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/items","href":"/api-reference/managed-filings/attach-a-document-to-a-working-filing"},{"title":"Get one filing item","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/items/{itemId}","href":"/api-reference/managed-filings/get-one-filing-item"},{"title":"Remove a working filing item","deprecated":null,"version":null,"openapi":"/openapi.json delete /insurance/managed-filings/{filingId}/items/{itemId}","href":"/api-reference/managed-filings/remove-a-working-filing-item"},{"title":"Edit or replace a working document reference","deprecated":null,"version":null,"openapi":"/openapi.json patch /insurance/managed-filings/{filingId}/items/{itemId}","href":"/api-reference/managed-filings/edit-or-replace-a-working-document-reference"},{"title":"List filing comments","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/comments","href":"/api-reference/managed-filings/list-filing-comments"},{"title":"Add a filing comment or reply","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/comments","href":"/api-reference/managed-filings/add-a-filing-comment-or-reply"},{"title":"Get one filing comment","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/comments/{commentId}","href":"/api-reference/managed-filings/get-one-filing-comment"},{"title":"Edit a comment or update its discussion","deprecated":null,"version":null,"openapi":"/openapi.json patch /insurance/managed-filings/{filingId}/comments/{commentId}","href":"/api-reference/managed-filings/edit-a-comment-or-update-its-discussion"},{"title":"Upload a filing document","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/uploads","href":"/api-reference/managed-filings/upload-a-filing-document"},{"title":"Confirm a filing document upload","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/uploads/complete","href":"/api-reference/managed-filings/confirm-a-filing-document-upload"}]},{"group":"Managed Filing Checks","pages":[{"title":"List filing checks","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/checks","href":"/api-reference/managed-filing-checks/list-filing-checks"},{"title":"Create an organization filing check","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/checks","href":"/api-reference/managed-filing-checks/create-an-organization-filing-check"},{"title":"Read a filing check","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/checks/{checkId}","href":"/api-reference/managed-filing-checks/read-a-filing-check"},{"title":"Revise filing check instructions","deprecated":null,"version":null,"openapi":"/openapi.json patch /insurance/managed-filings/checks/{checkId}","href":"/api-reference/managed-filing-checks/revise-filing-check-instructions"},{"title":"Start filing pre-review","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/pre-reviews","href":"/api-reference/managed-filing-checks/start-filing-pre-review"},{"title":"Resume an accepted filing pre-review","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/managed-filings/{filingId}/pre-reviews/{runId}/resume","href":"/api-reference/managed-filing-checks/resume-an-accepted-filing-pre-review"},{"title":"Read the latest filing pre-review","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/pre-reviews/latest","href":"/api-reference/managed-filing-checks/read-the-latest-filing-pre-review"},{"title":"Read filing pre-review progress","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/pre-reviews/{runId}","href":"/api-reference/managed-filing-checks/read-filing-pre-review-progress"},{"title":"Read combined filing check status","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/managed-filings/{filingId}/pre-review-status","href":"/api-reference/managed-filing-checks/read-combined-filing-check-status"}]},{"group":"Filing objections","pages":[{"title":"Find extracted objection letters","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filing-objections","href":"/api-reference/filing-objections/find-extracted-objection-letters"},{"title":"Read an extracted objection letter","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/filing-objections/{objectionId}","href":"/api-reference/filing-objections/read-an-extracted-objection-letter"}]},{"group":"Regulatory documents","pages":[{"title":"Find regulatory documents","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-documents","href":"/api-reference/regulatory-documents/find-regulatory-documents"},{"title":"Get a regulatory document","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-documents/{documentId}","href":"/api-reference/regulatory-documents/get-a-regulatory-document"},{"title":"Read a regulatory document's text in chunks","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-documents/{documentId}/text","href":"/api-reference/regulatory-documents/read-a-regulatory-documents-text-in-chunks"},{"title":"List citations out of or into a regulatory document","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-documents/{documentId}/references","href":"/api-reference/regulatory-documents/list-citations-out-of-or-into-a-regulatory-document"},{"title":"List form checklist requirements across states","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-requirements","href":"/api-reference/regulatory-documents/list-form-checklist-requirements-across-states"},{"title":"Get a form checklist requirement","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/regulatory-requirements/{requirementId}","href":"/api-reference/regulatory-documents/get-a-form-checklist-requirement"}]},{"group":"OSHA","pages":[{"title":"Match an employer","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/match","href":"/api-reference/osha/match-an-employer"},{"title":"Get an employer","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/{employerId}","href":"/api-reference/osha/get-an-employer"},{"title":"List an employer’s sites","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/{employerId}/sites","href":"/api-reference/osha/list-an-employer’s-sites"},{"title":"Get an employer’s site","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/{employerId}/sites/{siteId}","href":"/api-reference/osha/get-an-employer’s-site"},{"title":"List an employer’s events","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/{employerId}/events","href":"/api-reference/osha/list-an-employer’s-events"},{"title":"Get an employer’s OSHA profile","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/employers/{employerId}/osha-profile","href":"/api-reference/osha/get-an-employer’s-osha-profile"},{"title":"List OSHA Form 300A summaries","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/300a-summaries","href":"/api-reference/osha/list-osha-form-300a-summaries"},{"title":"Get an OSHA Form 300A summary","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/300a-summaries/{id}","href":"/api-reference/osha/get-an-osha-form-300a-summary"},{"title":"List OSHA case details","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/case-details","href":"/api-reference/osha/list-osha-case-details"},{"title":"Get an OSHA case detail","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/case-details/{id}","href":"/api-reference/osha/get-an-osha-case-detail"},{"title":"List OSHA severe injury reports","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/severe-injury-reports","href":"/api-reference/osha/list-osha-severe-injury-reports"},{"title":"Get an OSHA severe injury report","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/severe-injury-reports/{id}","href":"/api-reference/osha/get-an-osha-severe-injury-report"},{"title":"List OSHA inspections","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections","href":"/api-reference/osha/list-osha-inspections"},{"title":"Get an OSHA inspection","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections/{activityNr}","href":"/api-reference/osha/get-an-osha-inspection"},{"title":"List an inspection’s violations","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections/{activityNr}/violations","href":"/api-reference/osha/list-an-inspection’s-violations"},{"title":"Get a violation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections/{activityNr}/violations/{citationId}","href":"/api-reference/osha/get-a-violation"},{"title":"List a violation’s history","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections/{activityNr}/violations/{citationId}/events","href":"/api-reference/osha/list-a-violation’s-history"},{"title":"List an inspection’s related activities","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/inspections/{activityNr}/related-activities","href":"/api-reference/osha/list-an-inspection’s-related-activities"},{"title":"List OSHA accident investigations","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/accidents","href":"/api-reference/osha/list-osha-accident-investigations"},{"title":"Get an OSHA accident investigation","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/accidents/{summaryNr}","href":"/api-reference/osha/get-an-osha-accident-investigation"},{"title":"List an accident’s injured workers","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/accidents/{summaryNr}/injuries","href":"/api-reference/osha/list-an-accident’s-injured-workers"},{"title":"Search OSHA narratives","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/search","href":"/api-reference/osha/search-osha-narratives"},{"title":"Get OSHA incidence rates for an industry","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/osha/incidence-rates","href":"/api-reference/osha/get-osha-incidence-rates-for-an-industry"}]},{"group":"SERFF Imports","pages":[{"title":"Open your SERFF import conversation","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/serff-import-sessions","href":"/api-reference/serff-imports/open-your-serff-import-conversation"},{"title":"Recover a document uploaded by a SERFF import","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/serff-import-items/{id}/uploaded-document","href":"/api-reference/serff-imports/recover-a-document-uploaded-by-a-serff-import"},{"title":"List your saved import selections","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/serff-import-items","href":"/api-reference/serff-imports/list-your-saved-import-selections"},{"title":"Save selected SERFF filings for import","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/serff-import-items","href":"/api-reference/serff-imports/save-selected-serff-filings-for-import"},{"title":"Read a saved import selection","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/serff-import-items/{id}","href":"/api-reference/serff-imports/read-a-saved-import-selection"},{"title":"Edit your saved import selection","deprecated":null,"version":null,"openapi":"/openapi.json patch /insurance/serff-import-items/{id}","href":"/api-reference/serff-imports/edit-your-saved-import-selection"},{"title":"Cancel a pending import selection","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/serff-import-items/{id}/cancel","href":"/api-reference/serff-imports/cancel-a-pending-import-selection"},{"title":"Restore a cancelled import selection","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/serff-import-items/{id}/retry","href":"/api-reference/serff-imports/restore-a-cancelled-import-selection"}]},{"group":"SERFF Insurance Types","pages":[{"title":"List current SERFF TOI/sub-TOI combinations","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/serff-insurance-types/combinations","href":"/api-reference/serff-insurance-types/list-current-serff-toisub-toi-combinations"},{"title":"Get a current SERFF TOI/sub-TOI combination","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/serff-insurance-types/combinations/{combinationId}","href":"/api-reference/serff-insurance-types/get-a-current-serff-toisub-toi-combination"}]},{"group":"Your raters","pages":[{"title":"List rater executions","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/executions","href":"/api-reference/your-raters/list-rater-executions"},{"title":"Get a saved rater execution","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/executions/{executionId}","href":"/api-reference/your-raters/get-a-saved-rater-execution"},{"title":"List raters","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters","href":"/api-reference/your-raters/list-raters"},{"title":"Get a rater","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}","href":"/api-reference/your-raters/get-a-rater"},{"title":"Upload a rater bundle","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/raters/{id}/bundles","href":"/api-reference/your-raters/upload-a-rater-bundle"},{"title":"List rater releases","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/releases","href":"/api-reference/your-raters/list-rater-releases"},{"title":"Release an uploaded rater bundle","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/raters/{id}/releases","href":"/api-reference/your-raters/release-an-uploaded-rater-bundle"},{"title":"Get the input and output schemas of a rater release","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/releases/{releaseVersion}/contract","href":"/api-reference/your-raters/get-the-input-and-output-schemas-of-a-rater-release"},{"title":"Rate a submission with a rater’s latest release","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/raters/{id}/rate","href":"/api-reference/your-raters/rate-a-submission-with-a-rater’s-latest-release"},{"title":"Rate a submission with a rater release","deprecated":null,"version":null,"openapi":"/openapi.json post /insurance/raters/{id}/releases/{releaseVersion}/rate","href":"/api-reference/your-raters/rate-a-submission-with-a-rater-release"},{"title":"Get a rater release","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/releases/{releaseVersion}","href":"/api-reference/your-raters/get-a-rater-release"},{"title":"Download a rater release bundle","deprecated":null,"version":null,"openapi":"/openapi.json get /insurance/raters/{id}/releases/{releaseVersion}/download","href":"/api-reference/your-raters/download-a-rater-release-bundle"}]},{"group":"Your programs","pages":[{"title":"List programs","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl","href":"/api-reference/your-programs/list-programs"},{"title":"Get a program","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}","href":"/api-reference/your-programs/get-a-program"},{"title":"Upload a program bundle","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/uploads","href":"/api-reference/your-programs/upload-a-program-bundle"},{"title":"List program releases","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/releases","href":"/api-reference/your-programs/list-program-releases"},{"title":"Release an uploaded program bundle","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/releases","href":"/api-reference/your-programs/release-an-uploaded-program-bundle"},{"title":"Get a program release","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/releases/{releaseVersion}","href":"/api-reference/your-programs/get-a-program-release"},{"title":"Download a program release bundle","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/releases/{releaseVersion}/download","href":"/api-reference/your-programs/download-a-program-release-bundle"},{"title":"Get the contract of a program release","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/releases/{releaseVersion}/contract","href":"/api-reference/your-programs/get-the-contract-of-a-program-release"},{"title":"Rate with a program release","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/releases/{releaseVersion}/rate","href":"/api-reference/your-programs/rate-with-a-program-release"},{"title":"Get the contract of a used rater of a program release","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/releases/{releaseVersion}/{alias}/contract","href":"/api-reference/your-programs/get-the-contract-of-a-used-rater-of-a-program-release"},{"title":"Rate with a used rater of a program release","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/releases/{releaseVersion}/{alias}/rate","href":"/api-reference/your-programs/rate-with-a-used-rater-of-a-program-release"},{"title":"Get the contract of a program’s latest release","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/contract","href":"/api-reference/your-programs/get-the-contract-of-a-program’s-latest-release"},{"title":"Rate with a program’s latest release","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/rate","href":"/api-reference/your-programs/rate-with-a-program’s-latest-release"},{"title":"Get the contract of a used rater of a program’s latest release","deprecated":null,"version":null,"openapi":"/openapi.json get /rsl/{id}/{alias}/contract","href":"/api-reference/your-programs/get-the-contract-of-a-used-rater-of-a-program’s-latest-release"},{"title":"Rate with a used rater of a program’s latest release","deprecated":null,"version":null,"openapi":"/openapi.json post /rsl/{id}/{alias}/rate","href":"/api-reference/your-programs/rate-with-a-used-rater-of-a-program’s-latest-release"}]},{"group":"Sessions","pages":[{"title":"Retrieve a temporary browser download","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions/{sessionId}/browsers/{browserId}/downloads/{downloadId}/files/{fileId}","href":"/api-reference/sessions/retrieve-a-temporary-browser-download"},{"title":"Remove a temporary browser download","deprecated":null,"version":null,"openapi":"/openapi.json delete /sessions/{sessionId}/browsers/{browserId}/downloads/{downloadId}","href":"/api-reference/sessions/remove-a-temporary-browser-download"},{"title":"List sessions","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions","href":"/api-reference/sessions/list-sessions"},{"title":"Start a session with the Effective agent","deprecated":null,"version":null,"openapi":"/openapi.json post /sessions","href":"/api-reference/sessions/start-a-session-with-the-effective-agent"},{"title":"Read a session","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions/{id}","href":"/api-reference/sessions/read-a-session"},{"title":"List the conversation","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions/{id}/messages","href":"/api-reference/sessions/list-the-conversation"},{"title":"Send a message to a session","deprecated":null,"version":null,"openapi":"/openapi.json post /sessions/{id}/messages","href":"/api-reference/sessions/send-a-message-to-a-session"},{"title":"Read a sent message and its reply","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions/{id}/messages/{messageId}","href":"/api-reference/sessions/read-a-sent-message-and-its-reply"},{"title":"List files the agent produced","deprecated":null,"version":null,"openapi":"/openapi.json get /sessions/{id}/files","href":"/api-reference/sessions/list-files-the-agent-produced"}]},{"group":"Skills","pages":[{"title":"Publish a complete immutable team or project skill","deprecated":null,"version":null,"openapi":"/openapi.json post /skills/publications","href":"/api-reference/skills/publish-a-complete-immutable-team-or-project-skill"},{"title":"Download an editable team or project skill snapshot","deprecated":null,"version":null,"openapi":"/openapi.json get /skills/{skillId}/snapshot","href":"/api-reference/skills/download-an-editable-team-or-project-skill-snapshot"},{"title":"Get skill metadata and file manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /skills/{skillId}","href":"/api-reference/skills/get-skill-metadata-and-file-manifest"},{"title":"Delete a published team or project skill","deprecated":null,"version":null,"openapi":"/openapi.json delete /skills/{skillId}","href":"/api-reference/skills/delete-a-published-team-or-project-skill"},{"title":"List available skills","deprecated":null,"version":null,"openapi":"/openapi.json get /skills","href":"/api-reference/skills/list-available-skills"},{"title":"Download a skill for local agents","deprecated":null,"version":null,"openapi":"/openapi.json get /skills/{skillId}/bundle","href":"/api-reference/skills/download-a-skill-for-local-agents"}]},{"group":"Device sign-in","pages":[{"title":"Start a browser sign-in for an agent","deprecated":null,"version":null,"openapi":"/openapi.json post /device-authorizations","href":"/api-reference/device-sign-in/start-a-browser-sign-in-for-an-agent"},{"title":"Check a browser sign-in and receive its API key","deprecated":null,"version":null,"openapi":"/openapi.json post /device-authorizations/exchange","href":"/api-reference/device-sign-in/check-a-browser-sign-in-and-receive-its-api-key"}]},{"group":"Shares","pages":[{"title":"Download a published share attachment","deprecated":null,"version":null,"openapi":"/openapi.json get /shares/{slug}/files/{fileId}/download","href":"/api-reference/shares/download-a-published-share-attachment"}]},{"group":"Filing reviews","pages":[{"title":"Read a filing review from its link","deprecated":null,"version":null,"openapi":"/openapi.json get /filing-reviews/{reviewId}","href":"/api-reference/filing-reviews/read-a-filing-review-from-its-link"},{"title":"Read a filing a review's link covers","deprecated":null,"version":null,"openapi":"/openapi.json get /filing-reviews/{reviewId}/filings/{filingId}","href":"/api-reference/filing-reviews/read-a-filing-a-reviews-link-covers"},{"title":"List objection letters on a filing a review's link covers","deprecated":null,"version":null,"openapi":"/openapi.json get /filing-reviews/{reviewId}/filings/{filingId}/objections","href":"/api-reference/filing-reviews/list-objection-letters-on-a-filing-a-reviews-link-covers"}]}]}]},"basePath":"","title":"Plan the next question for market rater versions - Effective","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DDP9JXtj.js","utils-8yQyvEtx.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CBCFR8Sn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-rQaXkUHa.js","snippetPresets-J5KpBTgV.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BVxVH4Cj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BxdQ2vIi.js","shallow-BjV2tFiD.js","getApiPlaygroundDisplay-C_55tL4O.js","CodeSnippet-C0JpiCOC.js","CodeSnippets-w9Ps7djG.js","Page-DTNSD-0M.js","getPastedJson-BDfB-H8d.js","icon-g-kUkkO9.js","MethodPill-v4l6fq0h.js","DuplicateIcon-CvLo-CfU.js","createIcon-165clrrV.js","DynamicMarkdown-D3RQ-fEj.js","SectionHeading-vvo-3yLf.js","axios-vUo_bRtp.js","Markdown-CMT1uFWQ.js","clsx-C8f2yC9R.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CI2D8R2Y.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-k78Wrw_e.js"]}