Reinstates a cancelled policy as a REINSTATE transaction, back in force from
the cancellation date with no gap in coverage. The server restores the
premium, taxes and fees the policy carried before the cancellation, and you
may add a reinstatement fee. To change the policy as well, reinstate it and
then endorse it with Endorse Policy Transaction
(endorsePolicyTransaction).
Value door (Invoicing a policy). The
policy’s invoices change only as the request says: the invoicePlan you
send voids the invoices it names and creates new ones, committed with the
policy version, and without one every invoice stays as it is.
Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction.
The policy must be cancelled at the reinstatement date.
reinstatementDate (= the transaction effective date) is sugar the server expands into
per-segment, segment-scoped deltas. policyStatus flips back to active from the
reinstatement date through end of term, and cancellationEffectiveOnDate is cleared
across the whole term — reinstatement removes the cancellation marker rather than recording
a parallel reinstatement marker. There is no reinstatement date field.
A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled
window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving
Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy
term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears
the cancellation, so the segments return to their pre-cancellation state (and merge).
A reinstate never reprices — it RESTORES
The server computes what the reinstated term’s pricing contract must be: the pre-cancel
version’s contract, verbatim. Every component comes back — premium, taxes, fees —
at the value and earningSchedule the policy carried before the cancellation, so
the reinstatement is the exact inverse of the cancel’s per-charge floor. Recognition follows:
each charge picks its schedule back up from the reinstatement date, and the earned curve
across cancel-then-reinstate is flat.
“Pre-cancel” is a VERSION, not a date — the version immediately before the CANCEL being
undone. Since a reinstatement may not leave a coverage gap, its effective date is the
cancellation date, so there is nothing to choose.
Omit fullTermPricingInfo and the restored pricing contract is used.
Billing is never restored: state it, or the reinstatement
stores none.
If you DO send fullTermPricingInfo, it is validated against that restored contract
component by component, to the exact cent:
every component of the pre-cancel contract must be present, at exactly its pre-cancel
value and with its pre-cancel earningSchedule;
an UNRECOGNIZED <classification, qualifier> pair is an addition — money the
reinstatement itself creates, typically a reinstatement fee — and it MUST carry
earningSchedule: "immediate", because it is recognized on the reinstatement
date rather than scheduled over the restored term.
Companies that tax through InsCipher. Where the company’s InsCipher cancel/reinstate tax
sourcing is enabled, the server asks InsCipher what the state re-charges on this
reinstatement and appends its answer to the restored contract as additions of its own —
one immediate component per corrected tax, under that tax’s classification with a
reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is
split by state). A flat fee the state charged once and does not re-charge is netted to
nothing this way. A supplied fullTermPricingInfo must include them, at the derived
cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is
refused (502inscipher-tax-calculation-failed, or 422inscipher-cancel-reinstate-tax-unpriceable naming the gap).
Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To
reprice the restored term, book an endorsement at the same effective date after the
reinstatement: transactions sharing an effective date are applied in booking order (ascending
policyVersion), so reinstate-then-endorse restores the term and then reprices it
prospectively.
Three optional derived channels are whole-object overwrites of a policy-root full-term
container — necessarily whole-term, so none carries dates nor an element-level form:
fullTermPricingInfo — the full-term pricing contract, validated as described above.
fullTermBillingInfo — the term’s billing obligations per line item.
The caller states this value, and leaving it out stores none.
Stated billing must pass the receivable checksum and vocabulary checks.
fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated
and unconstrained: it is the rater’s own output, not the money the platform books.
Policy invoices.invoicePlan is an
invoice plan: nothing in it is
defaulted or inferred. If reinstatement moves the billing an invoiced
policy’s invoices add up to, a plan is required; without one it is refused
with 422 finv2-policy-restates-invoices. A plan may credit a line the new
billing drops, such as a paid tax on a flat cancellation
(Credits).
Billing. Stores the caller’s billing as stated, without
scaling, restoring or carrying billing from the policy: billing you leave out stores
none. To keep a billed policy’s billing, state fullTermBillingInfo, at what the
restored term owes. Kept and new invoices must still add up to the billing, as
Invoice plans explains.
The policy’s layer. A policy sits at a layer of its
pricing stack, read from its pricing, its
billing and its active invoices. A reinstatement keeps the
policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on
a policy that has none, such as one whose cancellation dropped its billing, moves it
from pricing to billing, and an invoicePlan that gives it its first invoices
moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy
drops its billing, a move from billing to pricing. A move the request does not
name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and
saves nothing; its message names the actual move and the exact pricingStackLayerChange that
would name it. Billing that owes nothing sits at both billing and invoicing.
API key authentication. Send your raw API key as the Authorization header value with NO scheme prefix — Authorization: YOUR-API-KEY. Do NOT prefix it with Bearer or ApiKey, and do not use an X-API-Key header; those are not accepted.
Path Parameters
companyId
string<uuid>
required
Company identifier
policyId
string<uuid>
required
Policy identifier
Body
application/json
reinstatementDate
string<date>
required
The date the reinstatement takes effect in ISO 8601 format. Must fall
within the policy term, and the policy must be cancelled at this date.
transactionTimestamp
string<date-time>
When the business decision was made. Defaults to the current time if omitted.
Set explicitly for imports (e.g., aligning to a bordereau booking date).
fullTermPricingInfo
object
OPTIONAL — omit it and the server restores the pre-cancel contract
(recommended).
When supplied, it must be that restored contract plus additions: every component
of the pre-cancel version, present at exactly its pre-cancel value and
earningSchedule, plus any NEW <classification, qualifier> pairs
(reinstatement fees) carrying earningSchedule: "immediate". Each component is
{label, value, classification[, qualifier, earningSchedule]} as documented on
the New Business Transaction endpoint — classification must name a LIVE
entry in your company's classification registry, on every component, for every
company (refusals are 400, InvalidFieldModelV1Data here). The four rollups
(premium, taxes, fees, total) are computed by the platform and any you
send are ignored. Compared to the exact cent — there is no tolerance.
The retired legacy fields (group/kind/earningBasis) are ignored and
discarded on input — never validated, never stored on a newly written
component — so a stored component that still echoes them can be posted back
unchanged. Omitting the container avoids the question entirely.
fullTermBillingInfo
object
Optional whole-object overwrite of the policy-root Billing Aggregate — the
term's billing obligations per line item. Leaving
it out stores no billing, so a billed policy's billing is dropped unless you
state it; dropping or adding billing is a layer move that needs
pricingStackLayerChange. Its receivable total must match the pricing contract.
Show child attributes
fullTermPolicyRatingResult
object
Optional whole-object overwrite of the policy-root canonical rating result.
invoicePlan
object
A fully explicit, detached policy-invoice batch. Existing invoices not named in voidInvoices are kept. The complete kept-plus-created set must conserve each line item of the policy's stated billing. A line item a kept invoice carries but billing omits conserves at 0: a create may credit it on the same line with a negative amount. A plan never names a move between layers of the pricing stack: a policy transaction or bind by value names its own beside the plan in pricingStackLayerChange, and a quote's plan binds at the quote's intended layer. Invoice plans explains each field, the rule and every refusal.
Show child attributes
pricingStackLayerChange
object
The move between layers of the pricing stack this reinstatement makes,
when it makes one. Leave it out to keep the policy at its layer.
Show child attributes
Response
Policy reinstated successfully
Response returned by policy transaction endpoints. Contains the policy version
produced by the transaction, including all derived segments.
policyId
string<uuid>
required
Policy identifier
policyVersion
integer
required
Sequential version number produced by this transaction
transactionId
string<uuid>
required
Identifier of the transaction that produced this version
startDate
string<date>
required
Policy term start date (ISO 8601)
endDate
string<date>
required
Policy term end date (ISO 8601)
createdAt
string<date-time>
required
When the transaction was created (ISO 8601)
primaryInsuredName
string | null
required
Plain-text primary-insured name, read from the policy's own
primaryInsuredName field — the source of truth for the primary insured.
Reported as of the END of
the term, so a policy whose insured changed mid-term returns the later name;
segments[] carries the per-segment history. Null only when the version
carries no policy data.
primaryInsuredId
string | null
required
Id of the entity behind primaryInsuredName. Null when the policy's
configuration does not populate it.
policyNumber
string | null
required
The policy number, read from the policy's own policyNumber field — the
source of truth, invariant across the whole term. Null only when the version
carries no policy data.
policyStartDate
object | null
required
Policy term start date as the structured date object, read from the policy's
own policyStartDate field — the source of truth, invariant across the whole
term. This is notstartDate above: that is the ISO
span this version covers, which a cancellation makes shorter than the term.
Null only when the version carries no policy data.
Show child attributes
policyEndDate
object | null
required
Policy term end date as the structured date object, read from the policy's own
policyEndDate field — the source of truth, invariant across the whole term.
This is notendDate above: that is the ISO
span this version covers. Null only when the version carries no policy data.
Show child attributes
fullTermPricingInfo
object | null
required
The policy's full-term pricing contract, hoisted as a read-once convenience
(also duplicated in every segment): pricingComponents plus the four
server-computed, read-only rollups — premium, taxes and fees (each
the sum of the components whose classification reports into it) and
total (premium + taxes + fees). All four
are always present. The retired brokerCommission / programCommission
rollups are no longer computed; a version stored before their retirement
may still return the two keys until the per-tenant data sweeps.
Each newly written component carries
{label, value, classification, qualifier, earningSchedule} —
<classification, qualifier> is its identity, and label is cosmetic.
The legacy vocabulary is retired: a component stored before the
retirement may still echo the group / kind / earningBasis keys
until the per-tenant data sweeps remove them — treat those as historical
output, never as identity, and do not rely on their presence.
fullTermBillingInfo
object | null
required
The policy's Billing Aggregate for the term, hoisted as a read-once
convenience (also duplicated in every segment). Null when the policy states
no billing obligations.
Show child attributes
fullTermPolicyRatingResult
object | null
required
Derived canonical policy-level rating result for the full term, hoisted as a
read-once convenience (also duplicated in every segment). Element-level rating
output (crossSegmentRatingOutputs) stays inline at its host and is not hoisted.
segments
object[]
required
Derived segments for this policy version. Each segment represents a maximal contiguous
date range where policy state is identical. Adjacent segments with identical data are
automatically merged.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AI Insurance","colors":{"primary":"#714CC5","light":"#D3BFFF","dark":"#A887F3"},"logo":{"light":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","dark":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","href":"https://go.aiinsurance.io"},"favicon":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","navbar":{"links":[{"href":"mailto:support@aiinsurance.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://go.aiinsurance.io"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/a-i-insurance-inc"}},"seo":{"metatags":{"canonical":"https://docs.go.aiinsurance.io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ai-insurance-fmv1","hasAudioNarration":false,"actualSubdomain":"ai-insurance-fmv1","customDomains":["docs.go.aiinsurance.io"],"gitSource":{"type":"github","owner":"ai-insurance","repo":"docs-mirror","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":"","_id":"6af4b096ee8edba08e00c669"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af7498e75f3e5c02082a680","clientVersion":"0.0.4131","searchFilterCounts":[{"language":"default","tag":"API","count":244},{"language":"default","tag":"Financials","count":94},{"language":"default","tag":"App","count":35},{"language":"default","tag":"Policy Transactions","count":34},{"language":"default","tag":"Company Files","count":28},{"language":"default","tag":"Entities","count":25},{"language":"default","tag":"Record Emails","count":23},{"language":"default","tag":"Configuration","count":23},{"language":"default","tag":"Forms","count":18},{"language":"default","tag":"Guides","count":18}]},"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":[],"page":{"pagePath":"api-reference/field-model-policy-transactions/reinstate-policy-transaction","slug":"/api-reference/field-model-policy-transactions/reinstate-policy-transaction","pageMetadata":{"title":"Reinstate Policy Transaction","description":"Reinstates a cancelled policy as a REINSTATE transaction, back in force from\nthe cancellation date with no gap in coverage. The server restores the\npremium, taxes and fees the policy carried before the cancellation, and you\nmay add a reinstatement fee. To change the policy as well, reinstate it and\nthen endorse it with Endorse Policy Transaction\n(`endorsePolicyTransaction`).\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The\npolicy's invoices change only as the request says: the `invoicePlan` you\nsend voids the invoices it names and creates new ones, committed with the\npolicy version, and without one every invoice stays as it is.\n\nReinstates a previously cancelled policy as of a given date via a REINSTATE transaction.\nThe policy must be cancelled at the reinstatement date.\n\n`reinstatementDate` (= the transaction effective date) is sugar the server expands into\nper-segment, segment-scoped deltas. `policyStatus` flips back to `active` from the\nreinstatement date through end of term, and `cancellationEffectiveOnDate` is **cleared**\nacross the whole term — reinstatement removes the cancellation marker rather than recording\na parallel reinstatement marker. There is no reinstatement date field.\n\n**A reinstate may not leave a coverage gap.** A reinstate that would leave a cancelled\nwindow between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving\nJun 15–Jun 30 cancelled) is rejected with a `400` — the domain models that as a new policy\nterm, not a reinstatement. A valid reinstate restores continuous coverage and fully clears\nthe cancellation, so the segments return to their pre-cancellation state (and merge).\n\n## A reinstate never reprices — it RESTORES\n\nThe server computes what the reinstated term's pricing contract must be: the **pre-cancel\nversion's contract, verbatim**. Every component comes back — premium, taxes, fees —\nat the value and `earningSchedule` the policy carried before the cancellation, so\nthe reinstatement is the exact inverse of the cancel's per-charge floor. Recognition follows:\neach charge picks its schedule back up from the reinstatement date, and the earned curve\nacross cancel-then-reinstate is flat.\n\n\"Pre-cancel\" is a VERSION, not a date — the version immediately before the CANCEL being\nundone. Since a reinstatement may not leave a coverage gap, its effective date is the\ncancellation date, so there is nothing to choose.\n\nOmit `fullTermPricingInfo` and the restored pricing contract is used.\nBilling is never restored: state it, or the reinstatement\nstores none.\n\nIf you DO send `fullTermPricingInfo`, it is validated against that restored contract\n**component by component, to the exact cent**:\n\n- every component of the pre-cancel contract must be present, at exactly its pre-cancel\n value and with its pre-cancel `earningSchedule`;\n- an UNRECOGNIZED `\u003cclassification, qualifier>` pair is an **addition** — money the\n reinstatement itself creates, typically a reinstatement fee — and it MUST carry\n `earningSchedule: \"immediate\"`, because it is recognized on the reinstatement\n date rather than scheduled over the restored term.\n\n**Companies that tax through InsCipher.** Where the company's InsCipher cancel/reinstate tax\nsourcing is enabled, the server asks InsCipher what the state re-charges on this\nreinstatement and appends its answer to the restored contract as additions of its own —\none immediate component per corrected tax, under that tax's classification with a\nreserved qualifier of the form `inscipher-RI v4` (a state suffix where the charge is\nsplit by state). A flat fee the state charged once and does not re-charge is netted to\nnothing this way. A supplied `fullTermPricingInfo` must include them, at the derived\ncents. If InsCipher cannot answer while tax money is at stake, the reinstatement is\nrefused (`502` `inscipher-tax-calculation-failed`, or `422`\n`inscipher-cancel-reinstate-tax-unpriceable` naming the gap).\n\nRe-valuing, re-basing or dropping a restored component is rejected with a `400` naming it. To\nreprice the restored term, book an **endorsement at the same effective date** after the\nreinstatement: transactions sharing an effective date are applied in booking order (ascending\n`policyVersion`), so reinstate-then-endorse restores the term and then reprices it\nprospectively.\n\nThree optional **derived channels** are whole-object overwrites of a policy-root full-term\ncontainer — necessarily whole-term, so none carries dates nor an element-level form:\n\n- **`fullTermPricingInfo`** — the full-term pricing contract, validated as described above.\n- **`fullTermBillingInfo`** — the term's billing obligations per line item.\n The caller states this value, and leaving it out stores none.\n Stated billing must pass the receivable checksum and vocabulary checks.\n- **`fullTermPolicyRatingResult`** — the canonical policy-level rating result. Unvalidated\n and unconstrained: it is the rater's own output, not the money the platform books.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred. If reinstatement moves the billing an invoiced\npolicy's invoices add up to, a plan is required; without one it is refused\nwith `422 finv2-policy-restates-invoices`. A plan may credit a line the new\nbilling drops, such as a paid tax on a flat cancellation\n([Credits](/api-reference/invoicing/invoice-plans#credits)).\n\n**Billing.** Stores the caller's billing as stated, without\nscaling, restoring or carrying billing from the policy: billing you leave out stores\nnone. To keep a billed policy's billing, state `fullTermBillingInfo`, at what the\nrestored term owes. Kept and new invoices must still add up to the billing, as\n[Invoice plans](/api-reference/invoicing/invoice-plans) explains.\n\n**The policy's layer.** A policy sits at a layer of its\n[pricing stack](/api-reference/invoicing/pricing-stack), read from its pricing, its\nbilling and its active invoices. A reinstatement keeps the\npolicy at its layer unless `pricingStackLayerChange` names the move it makes. Stating billing on\na policy that has none, such as one whose cancellation dropped its billing, moves it\nfrom `pricing` to `billing`, and an `invoicePlan` that gives it its first invoices\nmoves it up to `invoicing`. Leaving out `fullTermBillingInfo` on a billed policy\ndrops its billing, a move from `billing` to `pricing`. A move the request does not\nname, or a named move it does not make, returns `422 policy-pricing-stack-layer-change` and\nsaves nothing; its message names the actual move and the exact `pricingStackLayerChange` that\nwould name it. Billing that owes nothing sits at both `billing` and `invoicing`.\n\n**Required permission:** `policy.reinstate`\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/reinstate","href":"/api-reference/field-model-policy-transactions/reinstate-policy-transaction","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 h2: \"h2\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from\\nthe cancellation date with no gap in coverage. The server restores the\\npremium, taxes and fees the policy carried before the cancellation, and you\\nmay add a reinstatement fee. To change the policy as well, reinstate it and\\nthen endorse it with Endorse Policy Transaction\\n(\", _jsx(_components.code, {\n children: \"endorsePolicyTransaction\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Value door\"\n }), \" (\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/overview\",\n children: \"Invoicing a policy\"\n }), \"). The\\npolicy’s invoices change only as the request says: the \", _jsx(_components.code, {\n children: \"invoicePlan\"\n }), \" you\\nsend voids the invoices it names and creates new ones, committed with the\\npolicy version, and without one every invoice stays as it is.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction.\\nThe policy must be cancelled at the reinstatement date.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"reinstatementDate\"\n }), \" (= the transaction effective date) is sugar the server expands into\\nper-segment, segment-scoped deltas. \", _jsx(_components.code, {\n children: \"policyStatus\"\n }), \" flips back to \", _jsx(_components.code, {\n children: \"active\"\n }), \" from the\\nreinstatement date through end of term, and \", _jsx(_components.code, {\n children: \"cancellationEffectiveOnDate\"\n }), \" is \", _jsx(_components.strong, {\n children: \"cleared\"\n }), \"\\nacross the whole term — reinstatement removes the cancellation marker rather than recording\\na parallel reinstatement marker. There is no reinstatement date field.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"A reinstate may not leave a coverage gap.\"\n }), \" A reinstate that would leave a cancelled\\nwindow between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving\\nJun 15–Jun 30 cancelled) is rejected with a \", _jsx(_components.code, {\n children: \"400\"\n }), \" — the domain models that as a new policy\\nterm, not a reinstatement. A valid reinstate restores continuous coverage and fully clears\\nthe cancellation, so the segments return to their pre-cancellation state (and merge).\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"A reinstate never reprices — it RESTORES\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The server computes what the reinstated term’s pricing contract must be: the \", _jsx(_components.strong, {\n children: \"pre-cancel\\nversion’s contract, verbatim\"\n }), \". Every component comes back — premium, taxes, fees —\\nat the value and \", _jsx(_components.code, {\n children: \"earningSchedule\"\n }), \" the policy carried before the cancellation, so\\nthe reinstatement is the exact inverse of the cancel’s per-charge floor. Recognition follows:\\neach charge picks its schedule back up from the reinstatement date, and the earned curve\\nacross cancel-then-reinstate is flat.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"“Pre-cancel” is a VERSION, not a date — the version immediately before the CANCEL being\\nundone. Since a reinstatement may not leave a coverage gap, its effective date is the\\ncancellation date, so there is nothing to choose.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Omit \", _jsx(_components.code, {\n children: \"fullTermPricingInfo\"\n }), \" and the restored pricing contract is used.\\nBilling is never restored: state it, or the reinstatement\\nstores none.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"If you DO send \", _jsx(_components.code, {\n children: \"fullTermPricingInfo\"\n }), \", it is validated against that restored contract\\n\", _jsx(_components.strong, {\n children: \"component by component, to the exact cent\"\n }), \":\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"every component of the pre-cancel contract must be present, at exactly its pre-cancel\\nvalue and with its pre-cancel \", _jsx(_components.code, {\n children: \"earningSchedule\"\n }), \";\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"an UNRECOGNIZED \", _jsx(_components.code, {\n children: \"\u003cclassification, qualifier>\"\n }), \" pair is an \", _jsx(_components.strong, {\n children: \"addition\"\n }), \" — money the\\nreinstatement itself creates, typically a reinstatement fee — and it MUST carry\\n\", _jsx(_components.code, {\n children: \"earningSchedule: \\\"immediate\\\"\"\n }), \", because it is recognized on the reinstatement\\ndate rather than scheduled over the restored term.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Companies that tax through InsCipher.\"\n }), \" Where the company’s InsCipher cancel/reinstate tax\\nsourcing is enabled, the server asks InsCipher what the state re-charges on this\\nreinstatement and appends its answer to the restored contract as additions of its own —\\none immediate component per corrected tax, under that tax’s classification with a\\nreserved qualifier of the form \", _jsx(_components.code, {\n children: \"inscipher-RI v4\"\n }), \" (a state suffix where the charge is\\nsplit by state). A flat fee the state charged once and does not re-charge is netted to\\nnothing this way. A supplied \", _jsx(_components.code, {\n children: \"fullTermPricingInfo\"\n }), \" must include them, at the derived\\ncents. If InsCipher cannot answer while tax money is at stake, the reinstatement is\\nrefused (\", _jsx(_components.code, {\n children: \"502\"\n }), \" \", _jsx(_components.code, {\n children: \"inscipher-tax-calculation-failed\"\n }), \", or \", _jsx(_components.code, {\n children: \"422\"\n }), \"\\n\", _jsx(_components.code, {\n children: \"inscipher-cancel-reinstate-tax-unpriceable\"\n }), \" naming the gap).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Re-valuing, re-basing or dropping a restored component is rejected with a \", _jsx(_components.code, {\n children: \"400\"\n }), \" naming it. To\\nreprice the restored term, book an \", _jsx(_components.strong, {\n children: \"endorsement at the same effective date\"\n }), \" after the\\nreinstatement: transactions sharing an effective date are applied in booking order (ascending\\n\", _jsx(_components.code, {\n children: \"policyVersion\"\n }), \"), so reinstate-then-endorse restores the term and then reprices it\\nprospectively.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Three optional \", _jsx(_components.strong, {\n children: \"derived channels\"\n }), \" are whole-object overwrites of a policy-root full-term\\ncontainer — necessarily whole-term, so none carries dates nor an element-level form:\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"fullTermPricingInfo\"\n })\n }), \" — the full-term pricing contract, validated as described above.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"fullTermBillingInfo\"\n })\n }), \" — the term’s billing obligations per line item.\\nThe caller states this value, and leaving it out stores none.\\nStated billing must pass the receivable checksum and vocabulary checks.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: _jsx(_components.code, {\n children: \"fullTermPolicyRatingResult\"\n })\n }), \" — the canonical policy-level rating result. Unvalidated\\nand unconstrained: it is the rater’s own output, not the money the platform books.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Policy invoices.\"\n }), \" \", _jsx(_components.code, {\n children: \"invoicePlan\"\n }), \" is an\\n\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/invoice-plans\",\n children: \"invoice plan\"\n }), \": nothing in it is\\ndefaulted or inferred. If reinstatement moves the billing an invoiced\\npolicy’s invoices add up to, a plan is required; without one it is refused\\nwith \", _jsx(_components.code, {\n children: \"422 finv2-policy-restates-invoices\"\n }), \". A plan may credit a line the new\\nbilling drops, such as a paid tax on a flat cancellation\\n(\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/invoice-plans#credits\",\n children: \"Credits\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Billing.\"\n }), \" Stores the caller’s billing as stated, without\\nscaling, restoring or carrying billing from the policy: billing you leave out stores\\nnone. To keep a billed policy’s billing, state \", _jsx(_components.code, {\n children: \"fullTermBillingInfo\"\n }), \", at what the\\nrestored term owes. Kept and new invoices must still add up to the billing, as\\n\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/invoice-plans\",\n children: \"Invoice plans\"\n }), \" explains.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"The policy’s layer.\"\n }), \" A policy sits at a layer of its\\n\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/pricing-stack\",\n children: \"pricing stack\"\n }), \", read from its pricing, its\\nbilling and its active invoices. A reinstatement keeps the\\npolicy at its layer unless \", _jsx(_components.code, {\n children: \"pricingStackLayerChange\"\n }), \" names the move it makes. Stating billing on\\na policy that has none, such as one whose cancellation dropped its billing, moves it\\nfrom \", _jsx(_components.code, {\n children: \"pricing\"\n }), \" to \", _jsx(_components.code, {\n children: \"billing\"\n }), \", and an \", _jsx(_components.code, {\n children: \"invoicePlan\"\n }), \" that gives it its first invoices\\nmoves it up to \", _jsx(_components.code, {\n children: \"invoicing\"\n }), \". Leaving out \", _jsx(_components.code, {\n children: \"fullTermBillingInfo\"\n }), \" on a billed policy\\ndrops its billing, a move from \", _jsx(_components.code, {\n children: \"billing\"\n }), \" to \", _jsx(_components.code, {\n children: \"pricing\"\n }), \". A move the request does not\\nname, or a named move it does not make, returns \", _jsx(_components.code, {\n children: \"422 policy-pricing-stack-layer-change\"\n }), \" and\\nsaves nothing; its message names the actual move and the exact \", _jsx(_components.code, {\n children: \"pricingStackLayerChange\"\n }), \" that\\nwould name it. Billing that owes nothing sits at both \", _jsx(_components.code, {\n children: \"billing\"\n }), \" and \", _jsx(_components.code, {\n children: \"invoicing\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required permission:\"\n }), \" \", _jsx(_components.code, {\n children: \"policy.reinstate\"\n })]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Reinstate Policy Transaction","description":"Reinstates a cancelled policy as a REINSTATE transaction, back in force from\nthe cancellation date with no gap in coverage. The server restores the\npremium, taxes and fees the policy carried before the cancellation, and you\nmay add a reinstatement fee. To change the policy as well, reinstate it and\nthen endorse it with Endorse Policy Transaction\n(`endorsePolicyTransaction`).\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The\npolicy's invoices change only as the request says: the `invoicePlan` you\nsend voids the invoices it names and creates new ones, committed with the\npolicy version, and without one every invoice stays as it is.\n\nReinstates a previously cancelled policy as of a given date via a REINSTATE transaction.\nThe policy must be cancelled at the reinstatement date.\n\n`reinstatementDate` (= the transaction effective date) is sugar the server expands into\nper-segment, segment-scoped deltas. `policyStatus` flips back to `active` from the\nreinstatement date through end of term, and `cancellationEffectiveOnDate` is **cleared**\nacross the whole term — reinstatement removes the cancellation marker rather than recording\na parallel reinstatement marker. There is no reinstatement date field.\n\n**A reinstate may not leave a coverage gap.** A reinstate that would leave a cancelled\nwindow between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving\nJun 15–Jun 30 cancelled) is rejected with a `400` — the domain models that as a new policy\nterm, not a reinstatement. A valid reinstate restores continuous coverage and fully clears\nthe cancellation, so the segments return to their pre-cancellation state (and merge).\n\n## A reinstate never reprices — it RESTORES\n\nThe server computes what the reinstated term's pricing contract must be: the **pre-cancel\nversion's contract, verbatim**. Every component comes back — premium, taxes, fees —\nat the value and `earningSchedule` the policy carried before the cancellation, so\nthe reinstatement is the exact inverse of the cancel's per-charge floor. Recognition follows:\neach charge picks its schedule back up from the reinstatement date, and the earned curve\nacross cancel-then-reinstate is flat.\n\n\"Pre-cancel\" is a VERSION, not a date — the version immediately before the CANCEL being\nundone. Since a reinstatement may not leave a coverage gap, its effective date is the\ncancellation date, so there is nothing to choose.\n\nOmit `fullTermPricingInfo` and the restored pricing contract is used.\nBilling is never restored: state it, or the reinstatement\nstores none.\n\nIf you DO send `fullTermPricingInfo`, it is validated against that restored contract\n**component by component, to the exact cent**:\n\n- every component of the pre-cancel contract must be present, at exactly its pre-cancel\n value and with its pre-cancel `earningSchedule`;\n- an UNRECOGNIZED `\u003cclassification, qualifier>` pair is an **addition** — money the\n reinstatement itself creates, typically a reinstatement fee — and it MUST carry\n `earningSchedule: \"immediate\"`, because it is recognized on the reinstatement\n date rather than scheduled over the restored term.\n\n**Companies that tax through InsCipher.** Where the company's InsCipher cancel/reinstate tax\nsourcing is enabled, the server asks InsCipher what the state re-charges on this\nreinstatement and appends its answer to the restored contract as additions of its own —\none immediate component per corrected tax, under that tax's classification with a\nreserved qualifier of the form `inscipher-RI v4` (a state suffix where the charge is\nsplit by state). A flat fee the state charged once and does not re-charge is netted to\nnothing this way. A supplied `fullTermPricingInfo` must include them, at the derived\ncents. If InsCipher cannot answer while tax money is at stake, the reinstatement is\nrefused (`502` `inscipher-tax-calculation-failed`, or `422`\n`inscipher-cancel-reinstate-tax-unpriceable` naming the gap).\n\nRe-valuing, re-basing or dropping a restored component is rejected with a `400` naming it. To\nreprice the restored term, book an **endorsement at the same effective date** after the\nreinstatement: transactions sharing an effective date are applied in booking order (ascending\n`policyVersion`), so reinstate-then-endorse restores the term and then reprices it\nprospectively.\n\nThree optional **derived channels** are whole-object overwrites of a policy-root full-term\ncontainer — necessarily whole-term, so none carries dates nor an element-level form:\n\n- **`fullTermPricingInfo`** — the full-term pricing contract, validated as described above.\n- **`fullTermBillingInfo`** — the term's billing obligations per line item.\n The caller states this value, and leaving it out stores none.\n Stated billing must pass the receivable checksum and vocabulary checks.\n- **`fullTermPolicyRatingResult`** — the canonical policy-level rating result. Unvalidated\n and unconstrained: it is the rater's own output, not the money the platform books.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred. If reinstatement moves the billing an invoiced\npolicy's invoices add up to, a plan is required; without one it is refused\nwith `422 finv2-policy-restates-invoices`. A plan may credit a line the new\nbilling drops, such as a paid tax on a flat cancellation\n([Credits](/api-reference/invoicing/invoice-plans#credits)).\n\n**Billing.** Stores the caller's billing as stated, without\nscaling, restoring or carrying billing from the policy: billing you leave out stores\nnone. To keep a billed policy's billing, state `fullTermBillingInfo`, at what the\nrestored term owes. Kept and new invoices must still add up to the billing, as\n[Invoice plans](/api-reference/invoicing/invoice-plans) explains.\n\n**The policy's layer.** A policy sits at a layer of its\n[pricing stack](/api-reference/invoicing/pricing-stack), read from its pricing, its\nbilling and its active invoices. A reinstatement keeps the\npolicy at its layer unless `pricingStackLayerChange` names the move it makes. Stating billing on\na policy that has none, such as one whose cancellation dropped its billing, moves it\nfrom `pricing` to `billing`, and an `invoicePlan` that gives it its first invoices\nmoves it up to `invoicing`. Leaving out `fullTermBillingInfo` on a billed policy\ndrops its billing, a move from `billing` to `pricing`. A move the request does not\nname, or a named move it does not make, returns `422 policy-pricing-stack-layer-change` and\nsaves nothing; its message names the actual move and the exact `pricingStackLayerChange` that\nwould name it. Billing that owes nothing sits at both `billing` and `invoicing`.\n\n**Required permission:** `policy.reinstate`\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/reinstate","href":"/api-reference/field-model-policy-transactions/reinstate-policy-transaction","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"reinstatePolicyTransaction","summary":"Reinstate Policy Transaction","description":"Reinstates a cancelled policy as a REINSTATE transaction, back in force from\nthe cancellation date with no gap in coverage. The server restores the\npremium, taxes and fees the policy carried before the cancellation, and you\nmay add a reinstatement fee. To change the policy as well, reinstate it and\nthen endorse it with Endorse Policy Transaction\n(`endorsePolicyTransaction`).\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The\npolicy's invoices change only as the request says: the `invoicePlan` you\nsend voids the invoices it names and creates new ones, committed with the\npolicy version, and without one every invoice stays as it is.\n\nReinstates a previously cancelled policy as of a given date via a REINSTATE transaction.\nThe policy must be cancelled at the reinstatement date.\n\n`reinstatementDate` (= the transaction effective date) is sugar the server expands into\nper-segment, segment-scoped deltas. `policyStatus` flips back to `active` from the\nreinstatement date through end of term, and `cancellationEffectiveOnDate` is **cleared**\nacross the whole term — reinstatement removes the cancellation marker rather than recording\na parallel reinstatement marker. There is no reinstatement date field.\n\n**A reinstate may not leave a coverage gap.** A reinstate that would leave a cancelled\nwindow between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving\nJun 15–Jun 30 cancelled) is rejected with a `400` — the domain models that as a new policy\nterm, not a reinstatement. A valid reinstate restores continuous coverage and fully clears\nthe cancellation, so the segments return to their pre-cancellation state (and merge).\n\n## A reinstate never reprices — it RESTORES\n\nThe server computes what the reinstated term's pricing contract must be: the **pre-cancel\nversion's contract, verbatim**. Every component comes back — premium, taxes, fees —\nat the value and `earningSchedule` the policy carried before the cancellation, so\nthe reinstatement is the exact inverse of the cancel's per-charge floor. Recognition follows:\neach charge picks its schedule back up from the reinstatement date, and the earned curve\nacross cancel-then-reinstate is flat.\n\n\"Pre-cancel\" is a VERSION, not a date — the version immediately before the CANCEL being\nundone. Since a reinstatement may not leave a coverage gap, its effective date is the\ncancellation date, so there is nothing to choose.\n\nOmit `fullTermPricingInfo` and the restored pricing contract is used.\nBilling is never restored: state it, or the reinstatement\nstores none.\n\nIf you DO send `fullTermPricingInfo`, it is validated against that restored contract\n**component by component, to the exact cent**:\n\n- every component of the pre-cancel contract must be present, at exactly its pre-cancel\n value and with its pre-cancel `earningSchedule`;\n- an UNRECOGNIZED `\u003cclassification, qualifier>` pair is an **addition** — money the\n reinstatement itself creates, typically a reinstatement fee — and it MUST carry\n `earningSchedule: \"immediate\"`, because it is recognized on the reinstatement\n date rather than scheduled over the restored term.\n\n**Companies that tax through InsCipher.** Where the company's InsCipher cancel/reinstate tax\nsourcing is enabled, the server asks InsCipher what the state re-charges on this\nreinstatement and appends its answer to the restored contract as additions of its own —\none immediate component per corrected tax, under that tax's classification with a\nreserved qualifier of the form `inscipher-RI v4` (a state suffix where the charge is\nsplit by state). A flat fee the state charged once and does not re-charge is netted to\nnothing this way. A supplied `fullTermPricingInfo` must include them, at the derived\ncents. If InsCipher cannot answer while tax money is at stake, the reinstatement is\nrefused (`502` `inscipher-tax-calculation-failed`, or `422`\n`inscipher-cancel-reinstate-tax-unpriceable` naming the gap).\n\nRe-valuing, re-basing or dropping a restored component is rejected with a `400` naming it. To\nreprice the restored term, book an **endorsement at the same effective date** after the\nreinstatement: transactions sharing an effective date are applied in booking order (ascending\n`policyVersion`), so reinstate-then-endorse restores the term and then reprices it\nprospectively.\n\nThree optional **derived channels** are whole-object overwrites of a policy-root full-term\ncontainer — necessarily whole-term, so none carries dates nor an element-level form:\n\n- **`fullTermPricingInfo`** — the full-term pricing contract, validated as described above.\n- **`fullTermBillingInfo`** — the term's billing obligations per line item.\n The caller states this value, and leaving it out stores none.\n Stated billing must pass the receivable checksum and vocabulary checks.\n- **`fullTermPolicyRatingResult`** — the canonical policy-level rating result. Unvalidated\n and unconstrained: it is the rater's own output, not the money the platform books.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred. If reinstatement moves the billing an invoiced\npolicy's invoices add up to, a plan is required; without one it is refused\nwith `422 finv2-policy-restates-invoices`. A plan may credit a line the new\nbilling drops, such as a paid tax on a flat cancellation\n([Credits](/api-reference/invoicing/invoice-plans#credits)).\n\n**Billing.** Stores the caller's billing as stated, without\nscaling, restoring or carrying billing from the policy: billing you leave out stores\nnone. To keep a billed policy's billing, state `fullTermBillingInfo`, at what the\nrestored term owes. Kept and new invoices must still add up to the billing, as\n[Invoice plans](/api-reference/invoicing/invoice-plans) explains.\n\n**The policy's layer.** A policy sits at a layer of its\n[pricing stack](/api-reference/invoicing/pricing-stack), read from its pricing, its\nbilling and its active invoices. A reinstatement keeps the\npolicy at its layer unless `pricingStackLayerChange` names the move it makes. Stating billing on\na policy that has none, such as one whose cancellation dropped its billing, moves it\nfrom `pricing` to `billing`, and an `invoicePlan` that gives it its first invoices\nmoves it up to `invoicing`. Leaving out `fullTermBillingInfo` on a billed policy\ndrops its billing, a move from `billing` to `pricing`. A move the request does not\nname, or a named move it does not make, returns `422 policy-pricing-stack-layer-change` and\nsaves nothing; its message names the actual move and the exact `pricingStackLayerChange` that\nwould name it. Billing that owes nothing sits at both `billing` and `invoicing`.\n\n**Required permission:** `policy.reinstate`\n","tags":["Field Model Policy Transactions"],"parameters":["c50c2285-1e6b-4485-ba26-6f55468990ee","45ca4e8f-62eb-4ced-a166-0481600f68d1"],"requestBody":"61f6c218-0f7d-4638-95dc-20011bb3feda","responses":{"201":"f405fc3b-fa3a-487a-96f6-b257f5ad3445","400":"b7243cc2-857c-4a2a-96dd-35e12580a8a9","401":"71cbc71f-fb73-4a19-ac27-ade8cc67cf87","403":"c574045a-d3c7-4a9a-aba5-a491e9d23bb9","404":"ee89f716-73c3-4c4b-a3e3-ebe0d7f973b7","409":"01037ade-0576-471c-a0bb-efa89d3799fc","422":"9d24158d-0d17-4f14-8fed-4ccb8a532708","500":"cbf559a9-46c4-49d9-8e62-444c21c1cf6f"},"method":"post","type":"path","servers":["b4993f5b-e21e-4dbd-8ace-9c59b5197d8e"],"security":["35370c79-340a-4ed7-a68a-8c786f4a2235"],"path":"/api/v1/companies/{companyId}/policies/{policyId}/transaction/reinstate","baseUrlOptions":["https://go.aiinsurance.io"],"title":"Reinstate Policy Transaction","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c50c2285-1e6b-4485-ba26-6f55468990ee":{"name":"companyId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Company identifier","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Company identifier"},"45ca4e8f-62eb-4ced-a166-0481600f68d1":{"name":"policyId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Policy identifier","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Policy identifier"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["reinstatementDate"],"properties":{"reinstatementDate":{"type":"string","format":"date","description":"The date the reinstatement takes effect in ISO 8601 format. Must fall\nwithin the policy term, and the policy must be cancelled at this date.\n","isRequired":true,"uniqueKey":"reinstatementDate","typeLabel":"string\u003cdate>"},"transactionTimestamp":{"type":"string","format":"date-time","description":"When the business decision was made. Defaults to the current time if omitted.\nSet explicitly for imports (e.g., aligning to a bordereau booking date).\n","uniqueKey":"transactionTimestamp","typeLabel":"string\u003cdate-time>"},"fullTermPricingInfo":{"type":"object","description":"OPTIONAL — omit it and the server restores the pre-cancel contract\n(recommended).\n\nWhen supplied, it must be that restored contract plus additions: every component\nof the pre-cancel version, present at exactly its pre-cancel value and\n`earningSchedule`, plus any NEW `\u003cclassification, qualifier>` pairs\n(reinstatement fees) carrying `earningSchedule: \"immediate\"`. Each component is\n`{label, value, classification[, qualifier, earningSchedule]}` as documented on\nthe **New Business Transaction** endpoint — `classification` must name a LIVE\nentry in your company's classification registry, on every component, for every\ncompany (refusals are `400`, `InvalidFieldModelV1Data` here). The four rollups\n(`premium`, `taxes`, `fees`, `total`) are computed by the platform and any you\nsend are ignored. Compared to the exact cent — there is no tolerance.\n\nThe retired legacy fields (`group`/`kind`/`earningBasis`) are ignored and\ndiscarded on input — never validated, never stored on a newly written\ncomponent — so a stored component that still echoes them can be posted back\nunchanged. Omitting the container avoids the question entirely.\n","additionalProperties":true,"uniqueKey":"fullTermPricingInfo","typeLabel":"object"},"fullTermBillingInfo":{"type":"object","description":"Optional whole-object overwrite of the policy-root Billing Aggregate — the\nterm's billing obligations per line item. Leaving\nit out stores no billing, so a billed policy's billing is dropped unless you\nstate it; dropping or adding billing is a layer move that needs\n`pricingStackLayerChange`. Its receivable total must match the pricing contract.\n","properties":{"lines":{"oneOf":[{"type":"array","description":"The term's billing lines, each `{invoiceType, lineItem, direction,\namount}`. Nullable: a policy with no billing configuration still prices\nand earns, so an absent aggregate is an ordinary state rather than a\ndefect.\n","items":{"type":"object","description":"One line of a policy's term-level **Billing Aggregate** — the element type of\n`fullTermBillingInfo.lines`.\n\nA billing line is deliberately a NAME, a DIRECTION and a SIGNED AMOUNT, and\nnothing else. It carries no pricing `classification` and feeds no rollup,\nexactly as a pricing component carries no invoice type and no line item: the\npricing and billing vocabularies are disjoint.\n\nThe line's identity is the pair `\u003cinvoiceType, lineItem>`, unique within one\n`fullTermBillingInfo` container — two lines sharing that pair are rejected\nwith a `400`.\n","required":["invoiceType","lineItem","direction","amount"],"properties":{"invoiceType":{"type":"string","minLength":1,"description":"The kind of invoice the obligation belongs to, e.g. `\"Policy Invoice\"` or\n`\"Commission Invoice\"`. Free text (not a closed enum), and must be\nnon-empty.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.lines.oneOf.0.items.[INDEX].invoiceType","typeLabel":"string"},"lineItem":{"type":"string","minLength":1,"description":"The line item within that invoice type, e.g. `\"Premium Installment\"` or\n`\"Producer Commission\"`. Free text (not a closed enum), and must be\nnon-empty.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.lines.oneOf.0.items.[INDEX].lineItem","typeLabel":"string"},"direction":{"type":"string","enum":["receivable","payable"],"description":"Which way the money moves. `receivable` is owed TO us (premium, taxes,\nfees); `payable` is owed BY us (commission). The direction comes from the\nline item type's own configuration, so the value you send is a **checked\nassertion** rather than an input: a mismatch is refused. That is what lets a\npayable commission line sit in the same aggregate as the receivables and\nself-exclude from the receivable checksum.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.lines.oneOf.0.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"The line's amount as a plain number in USD. It is **signed** and must be\nfinite: a price refund is a negative receivable.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.lines.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"additionalProperties":true,"uniqueKey":"fullTermBillingInfo.lines.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fullTermBillingInfo.lines.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"The term's billing lines, each `{invoiceType, lineItem, direction,\namount}`. Nullable: a policy with no billing configuration still prices\nand earns, so an absent aggregate is an ordinary state rather than a\ndefect.\n","items":{"type":"object","description":"One line of a policy's term-level **Billing Aggregate** — the element type of\n`fullTermBillingInfo.lines`.\n\nA billing line is deliberately a NAME, a DIRECTION and a SIGNED AMOUNT, and\nnothing else. It carries no pricing `classification` and feeds no rollup,\nexactly as a pricing component carries no invoice type and no line item: the\npricing and billing vocabularies are disjoint.\n\nThe line's identity is the pair `\u003cinvoiceType, lineItem>`, unique within one\n`fullTermBillingInfo` container — two lines sharing that pair are rejected\nwith a `400`.\n","required":["invoiceType","lineItem","direction","amount"],"properties":{"invoiceType":{"type":"string","minLength":1,"description":"The kind of invoice the obligation belongs to, e.g. `\"Policy Invoice\"` or\n`\"Commission Invoice\"`. Free text (not a closed enum), and must be\nnon-empty.\n"},"lineItem":{"type":"string","minLength":1,"description":"The line item within that invoice type, e.g. `\"Premium Installment\"` or\n`\"Producer Commission\"`. Free text (not a closed enum), and must be\nnon-empty.\n"},"direction":{"type":"string","enum":["receivable","payable"],"description":"Which way the money moves. `receivable` is owed TO us (premium, taxes,\nfees); `payable` is owed BY us (commission). The direction comes from the\nline item type's own configuration, so the value you send is a **checked\nassertion** rather than an input: a mismatch is refused. That is what lets a\npayable commission line sit in the same aggregate as the receivables and\nself-exclude from the receivable checksum.\n"},"amount":{"type":"number","description":"The line's amount as a plain number in USD. It is **signed** and must be\nfinite: a price refund is a negative receivable.\n"}},"additionalProperties":true},"uniqueKey":"fullTermBillingInfo.lines.oneOf.1","typeLabel":"null"}],"uniqueKey":"fullTermBillingInfo.lines","typeLabel":"object[] | null"}},"additionalProperties":true,"uniqueKey":"fullTermBillingInfo","typeLabel":"object"},"fullTermPolicyRatingResult":{"type":"object","description":"Optional whole-object overwrite of the policy-root canonical rating result.\n","additionalProperties":true,"uniqueKey":"fullTermPolicyRatingResult","typeLabel":"object"},"invoicePlan":{"type":"object","additionalProperties":false,"required":["incurredDate","voidInvoices","creates"],"properties":{"incurredDate":{"type":"string","format":"date","description":"Explicit recognition date for non-scheduled creates. It is never inferred from a transaction effective date or the server clock.","isRequired":true,"uniqueKey":"invoicePlan.incurredDate","typeLabel":"string\u003cdate>"},"voidInvoices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["invoiceId","headJournalId"],"properties":{"invoiceId":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"invoicePlan.voidInvoices.items.[INDEX].invoiceId","typeLabel":"string\u003cuuid>"},"headJournalId":{"type":"string","format":"uuid","description":"The invoice watermark read while composing the plan. A stale watermark rejects the whole batch with 409.","isRequired":true,"uniqueKey":"invoicePlan.voidInvoices.items.[INDEX].headJournalId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"invoicePlan.voidInvoices.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"invoicePlan.voidInvoices","typeLabel":"object[]"},"creates":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["group","lineItems"],"properties":{"group":{"type":"string","minLength":1,"description":"The policy invoice type's name: a live type that allows each of the invoice's lines, such as the `invoiceType` the policy's `fullTermBillingInfo` names for them.","isRequired":true,"uniqueKey":"invoicePlan.creates.items.[INDEX].group","typeLabel":"string"},"lineItems":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["label","amountCents"],"properties":{"label":{"type":"string","minLength":1,"description":"Line-item name on this invoice type: a line item the policy's stated billing names or one an existing kept invoice carries.","isRequired":true,"uniqueKey":"invoicePlan.creates.items.[INDEX].lineItems.items.[INDEX].label","typeLabel":"string"},"amountCents":{"type":"integer","description":"Signed integer cents in the configured line-item type's own frame. A negative amount reverses the line: a credit on the same line.","isRequired":true,"uniqueKey":"invoicePlan.creates.items.[INDEX].lineItems.items.[INDEX].amountCents","typeLabel":"integer"},"memo":{"type":"string","uniqueKey":"invoicePlan.creates.items.[INDEX].lineItems.items.[INDEX].memo","typeLabel":"string"}},"uniqueKey":"invoicePlan.creates.items.[INDEX].lineItems.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"invoicePlan.creates.items.[INDEX].lineItems","typeLabel":"object[]"},"dueDate":{"type":"string","format":"date","uniqueKey":"invoicePlan.creates.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"scheduledDate":{"type":"string","format":"date","description":"The invoice's send date. When present, the invoice is recognized and sent on this date, and the invoice read shows it as the invoice's `incurredDate`. Until it arrives the installment is not yet sent; the invoice read reports it as `owed`. Give every create one: a create without it is recognized on the plan's `incurredDate` and counts as already sent, so a later change's default endorsement handling (`void` `scheduled`) keeps it rather than replacing it.","uniqueKey":"invoicePlan.creates.items.[INDEX].scheduledDate","typeLabel":"string\u003cdate>"},"payeeId":{"type":"string","format":"uuid","description":"The Person, Organization or Exposure of your company the invoice is issued to, of a kind its invoice type accepts. Required in practice, although the schema marks it optional: a create without one is refused with `422 finv2-policy-create-payee-invalid`. The batch checks payees after its watermark and conservation checks, so such a plan may get another refusal first.","uniqueKey":"invoicePlan.creates.items.[INDEX].payeeId","typeLabel":"string\u003cuuid>"},"invoiceNumber":{"oneOf":[{"type":"string","description":"The invoice's Invoice Number, the number printed on it by its sender. Omitted means the invoice's own `transactionId`, the default for an invoice your company sends; a value sets it instead, so a policy invoice brought over from another system can carry that system's number; `null` or blank means none. Trimmed, then at most 255 characters; longer returns `400`. Not unique. The batch creates posted invoices; their Invoice Number remains editable through Update Invoice.","uniqueKey":"invoicePlan.creates.items.[INDEX].invoiceNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"The invoice's Invoice Number, the number printed on it by its sender. Omitted means the invoice's own `transactionId`, the default for an invoice your company sends; a value sets it instead, so a policy invoice brought over from another system can carry that system's number; `null` or blank means none. Trimmed, then at most 255 characters; longer returns `400`. Not unique. The batch creates posted invoices; their Invoice Number remains editable through Update Invoice.","uniqueKey":"invoicePlan.creates.items.[INDEX].invoiceNumber.oneOf.1","typeLabel":"null"}],"uniqueKey":"invoicePlan.creates.items.[INDEX].invoiceNumber","typeLabel":"string | null"},"memo":{"type":"string","uniqueKey":"invoicePlan.creates.items.[INDEX].memo","typeLabel":"string"}},"uniqueKey":"invoicePlan.creates.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"invoicePlan.creates","typeLabel":"object[]"}},"description":"A fully explicit, detached policy-invoice batch. Existing invoices not named in voidInvoices are kept. The complete kept-plus-created set must conserve each line item of the policy's stated billing. A line item a kept invoice carries but billing omits conserves at 0: a create may credit it on the same line with a negative amount. A plan never names a move between layers of the pricing stack: a policy transaction or bind by value names its own beside the plan in `pricingStackLayerChange`, and a quote's plan binds at the quote's intended layer. [Invoice plans](/api-reference/invoicing/invoice-plans) explains each field, the rule and every refusal.","uniqueKey":"invoicePlan","typeLabel":"object"},"pricingStackLayerChange":{"type":"object","description":"The move between layers of the pricing stack this reinstatement makes,\nwhen it makes one. Leave it out to keep the policy at its layer.\n","required":["from","to"],"properties":{"from":{"type":"string","description":"The layer the policy sits at before the change.","enum":["base","pricing","billing","invoicing"],"isRequired":true,"uniqueKey":"pricingStackLayerChange.from","typeLabel":"enum\u003cstring>"},"to":{"type":"string","description":"The layer the policy sits at after the change.","enum":["base","pricing","billing","invoicing"],"isRequired":true,"uniqueKey":"pricingStackLayerChange.to","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"pricingStackLayerChange","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"simpleReinstatement":{"title":"simpleReinstatement","value":{"reinstatementDate":"2025-06-15"}},"reinstatementWithFee":{"title":"reinstatementWithFee","description":"`Policy Premium` is restated at its pre-cancel value (the server's figure — omit\nthe whole container if you don't want to state it), and `Reinstatement Fee` is a\nNEW key, so it must declare `earningSchedule: \"immediate\"`.\n","value":{"reinstatementDate":"2025-06-15","fullTermPricingInfo":{"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","value":85000},{"label":"Reinstatement Fee","classification":"reinstatement-fee","earningSchedule":"immediate","value":2000}]}}},"reinstatementWithTimestamp":{"title":"reinstatementWithTimestamp","value":{"reinstatementDate":"2025-06-15","transactionTimestamp":"2025-06-30T12:00:00Z"}},"reinstateAndBillAgain":{"title":"reinstateAndBillAgain","description":"The cancellation left the policy with pricing only. The reinstatement states\nits billing again, at the restored price, so it names the move from the\npricing layer to the billing layer.\n","value":{"reinstatementDate":"2025-06-15","fullTermBillingInfo":{"lines":[{"invoiceType":"Policy Invoice","lineItem":"Premium Installment","direction":"receivable","amount":85000}]},"pricingStackLayerChange":{"from":"pricing","to":"billing"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"f405fc3b-fa3a-487a-96f6-b257f5ad3445":{"description":"Policy reinstated successfully","content":{"application/json":{"schema":{"type":"object","description":"Response returned by policy transaction endpoints. Contains the policy version\nproduced by the transaction, including all derived segments.\n","required":["policyId","policyVersion","transactionId","startDate","endDate","createdAt","primaryInsuredName","primaryInsuredId","policyNumber","policyStartDate","policyEndDate","fullTermPricingInfo","fullTermBillingInfo","fullTermPolicyRatingResult","segments"],"properties":{"policyId":{"type":"string","format":"uuid","description":"Policy identifier","isRequired":true,"uniqueKey":"policyId","typeLabel":"string\u003cuuid>"},"policyVersion":{"type":"integer","description":"Sequential version number produced by this transaction","isRequired":true,"uniqueKey":"policyVersion","typeLabel":"integer"},"transactionId":{"type":"string","format":"uuid","description":"Identifier of the transaction that produced this version","isRequired":true,"uniqueKey":"transactionId","typeLabel":"string\u003cuuid>"},"startDate":{"type":"string","format":"date","description":"Policy term start date (ISO 8601)","isRequired":true,"uniqueKey":"startDate","typeLabel":"string\u003cdate>"},"endDate":{"type":"string","format":"date","description":"Policy term end date (ISO 8601)","isRequired":true,"uniqueKey":"endDate","typeLabel":"string\u003cdate>"},"createdAt":{"type":"string","format":"date-time","description":"When the transaction was created (ISO 8601)","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"primaryInsuredName":{"oneOf":[{"type":"string","description":"Plain-text primary-insured name, read from the policy's own\n`primaryInsuredName` field — the source of truth for the primary insured.\nReported as of the END of\nthe term, so a policy whose insured changed mid-term returns the later name;\n`segments[]` carries the per-segment history. Null only when the version\ncarries no policy data.\n","isRequired":true,"uniqueKey":"primaryInsuredName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Plain-text primary-insured name, read from the policy's own\n`primaryInsuredName` field — the source of truth for the primary insured.\nReported as of the END of\nthe term, so a policy whose insured changed mid-term returns the later name;\n`segments[]` carries the per-segment history. Null only when the version\ncarries no policy data.\n","isRequired":true,"uniqueKey":"primaryInsuredName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"primaryInsuredName","typeLabel":"string | null"},"primaryInsuredId":{"oneOf":[{"type":"string","description":"Id of the entity behind `primaryInsuredName`. Null when the policy's\nconfiguration does not populate it.\n","isRequired":true,"uniqueKey":"primaryInsuredId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Id of the entity behind `primaryInsuredName`. Null when the policy's\nconfiguration does not populate it.\n","isRequired":true,"uniqueKey":"primaryInsuredId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"primaryInsuredId","typeLabel":"string | null"},"policyNumber":{"oneOf":[{"type":"string","description":"The policy number, read from the policy's own `policyNumber` field — the\nsource of truth, invariant across the whole term. Null only when the version\ncarries no policy data.\n","isRequired":true,"uniqueKey":"policyNumber.oneOf.0","typeLabel":"string"},{"type":"null","description":"The policy number, read from the policy's own `policyNumber` field — the\nsource of truth, invariant across the whole term. Null only when the version\ncarries no policy data.\n","isRequired":true,"uniqueKey":"policyNumber.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"policyNumber","typeLabel":"string | null"},"policyStartDate":{"oneOf":[{"type":"object","description":"Policy term start date as the structured date object, read from the policy's\nown `policyStartDate` field — the source of truth, invariant across the whole\nterm. This is **not** `startDate` above: that is the ISO\nspan this version covers, which a cancellation makes shorter than the term.\nNull only when the version carries no policy data.\n","required":["date"],"properties":{"date":{"type":"string","format":"date","description":"The calendar day as `YYYY-MM-DD`, zero-padded.","example":"2026-03-15","isRequired":true,"uniqueKey":"policyStartDate.oneOf.0.date","typeLabel":"string\u003cdate>"},"timezone":{"type":"string","description":"IANA time zone identifier the day is anchored in (e.g. \"America/New_York\",\n\"UTC\"). Optional on a write (defaults to `America/New_York`); always\npresent in a response.\n","example":"America/New_York","uniqueKey":"policyStartDate.oneOf.0.timezone","typeLabel":"string"},"importedAsUnknownTimezone":{"type":"boolean","description":"The date was imported without a known source timezone and carries a fallback zone. Optional; no default is added to existing dates.","example":true,"uniqueKey":"policyStartDate.oneOf.0.importedAsUnknownTimezone","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"policyStartDate.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"policyStartDate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"policyStartDate","typeLabel":"object | null"},"policyEndDate":{"oneOf":[{"type":"object","description":"Policy term end date as the structured date object, read from the policy's own\n`policyEndDate` field — the source of truth, invariant across the whole term.\nThis is **not** `endDate` above: that is the ISO\nspan this version covers. Null only when the version carries no policy data.\n","required":["date"],"properties":{"date":{"type":"string","format":"date","description":"The calendar day as `YYYY-MM-DD`, zero-padded.","example":"2026-03-15","isRequired":true,"uniqueKey":"policyEndDate.oneOf.0.date","typeLabel":"string\u003cdate>"},"timezone":{"type":"string","description":"IANA time zone identifier the day is anchored in (e.g. \"America/New_York\",\n\"UTC\"). Optional on a write (defaults to `America/New_York`); always\npresent in a response.\n","example":"America/New_York","uniqueKey":"policyEndDate.oneOf.0.timezone","typeLabel":"string"},"importedAsUnknownTimezone":{"type":"boolean","description":"The date was imported without a known source timezone and carries a fallback zone. Optional; no default is added to existing dates.","example":true,"uniqueKey":"policyEndDate.oneOf.0.importedAsUnknownTimezone","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"policyEndDate.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"policyEndDate.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"policyEndDate","typeLabel":"object | null"},"fullTermPricingInfo":{"oneOf":[{"type":"object","description":"The policy's full-term pricing contract, hoisted as a read-once convenience\n(also duplicated in every segment): `pricingComponents` plus the four\nserver-computed, read-only rollups — `premium`, `taxes` and `fees` (each\nthe sum of the components whose `classification` reports into it) and\n`total` (`premium + taxes + fees`). All four\nare always present. The retired `brokerCommission` / `programCommission`\nrollups are no longer computed; a version stored before their retirement\nmay still return the two keys until the per-tenant data sweeps.\n\nEach newly written component carries\n`{label, value, classification, qualifier, earningSchedule}` —\n`\u003cclassification, qualifier>` is its identity, and `label` is cosmetic.\nThe legacy vocabulary is retired: a component stored before the\nretirement may still echo the `group` / `kind` / `earningBasis` keys\nuntil the per-tenant data sweeps remove them — treat those as historical\noutput, never as identity, and do not rely on their presence.\n","additionalProperties":true,"isRequired":true,"uniqueKey":"fullTermPricingInfo.oneOf.0","typeLabel":"object"},{"type":"null","description":"The policy's full-term pricing contract, hoisted as a read-once convenience\n(also duplicated in every segment): `pricingComponents` plus the four\nserver-computed, read-only rollups — `premium`, `taxes` and `fees` (each\nthe sum of the components whose `classification` reports into it) and\n`total` (`premium + taxes + fees`). All four\nare always present. The retired `brokerCommission` / `programCommission`\nrollups are no longer computed; a version stored before their retirement\nmay still return the two keys until the per-tenant data sweeps.\n\nEach newly written component carries\n`{label, value, classification, qualifier, earningSchedule}` —\n`\u003cclassification, qualifier>` is its identity, and `label` is cosmetic.\nThe legacy vocabulary is retired: a component stored before the\nretirement may still echo the `group` / `kind` / `earningBasis` keys\nuntil the per-tenant data sweeps remove them — treat those as historical\noutput, never as identity, and do not rely on their presence.\n","additionalProperties":true,"isRequired":true,"uniqueKey":"fullTermPricingInfo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fullTermPricingInfo","typeLabel":"object | null"},"fullTermBillingInfo":{"oneOf":[{"type":"object","description":"The policy's Billing Aggregate for the term, hoisted as a read-once\nconvenience (also duplicated in every segment). Null when the policy states\nno billing obligations.\n","properties":{"lines":{"oneOf":[{"type":"array","description":"The term's billing lines, each `{invoiceType, lineItem, direction,\namount}`. Nullable: a policy with no billing configuration still prices\nand earns, so an absent aggregate is an ordinary state rather than a\ndefect.\n","items":{"type":"object","description":"One line of a policy's term-level **Billing Aggregate** — the element type of\n`fullTermBillingInfo.lines`.\n\nA billing line is deliberately a NAME, a DIRECTION and a SIGNED AMOUNT, and\nnothing else. It carries no pricing `classification` and feeds no rollup,\nexactly as a pricing component carries no invoice type and no line item: the\npricing and billing vocabularies are disjoint.\n\nThe line's identity is the pair `\u003cinvoiceType, lineItem>`, unique within one\n`fullTermBillingInfo` container — two lines sharing that pair are rejected\nwith a `400`.\n","required":["invoiceType","lineItem","direction","amount"],"properties":{"invoiceType":{"type":"string","minLength":1,"description":"The kind of invoice the obligation belongs to, e.g. `\"Policy Invoice\"` or\n`\"Commission Invoice\"`. Free text (not a closed enum), and must be\nnon-empty.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX].invoiceType","typeLabel":"string"},"lineItem":{"type":"string","minLength":1,"description":"The line item within that invoice type, e.g. `\"Premium Installment\"` or\n`\"Producer Commission\"`. Free text (not a closed enum), and must be\nnon-empty.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX].lineItem","typeLabel":"string"},"direction":{"type":"string","enum":["receivable","payable"],"description":"Which way the money moves. `receivable` is owed TO us (premium, taxes,\nfees); `payable` is owed BY us (commission). The direction comes from the\nline item type's own configuration, so the value you send is a **checked\nassertion** rather than an input: a mismatch is refused. That is what lets a\npayable commission line sit in the same aggregate as the receivables and\nself-exclude from the receivable checksum.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"The line's amount as a plain number in USD. It is **signed** and must be\nfinite: a price refund is a negative receivable.\n","isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"additionalProperties":true,"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"The term's billing lines, each `{invoiceType, lineItem, direction,\namount}`. Nullable: a policy with no billing configuration still prices\nand earns, so an absent aggregate is an ordinary state rather than a\ndefect.\n","items":{"type":"object","description":"One line of a policy's term-level **Billing Aggregate** — the element type of\n`fullTermBillingInfo.lines`.\n\nA billing line is deliberately a NAME, a DIRECTION and a SIGNED AMOUNT, and\nnothing else. It carries no pricing `classification` and feeds no rollup,\nexactly as a pricing component carries no invoice type and no line item: the\npricing and billing vocabularies are disjoint.\n\nThe line's identity is the pair `\u003cinvoiceType, lineItem>`, unique within one\n`fullTermBillingInfo` container — two lines sharing that pair are rejected\nwith a `400`.\n","required":["invoiceType","lineItem","direction","amount"],"properties":{"invoiceType":{"type":"string","minLength":1,"description":"The kind of invoice the obligation belongs to, e.g. `\"Policy Invoice\"` or\n`\"Commission Invoice\"`. Free text (not a closed enum), and must be\nnon-empty.\n"},"lineItem":{"type":"string","minLength":1,"description":"The line item within that invoice type, e.g. `\"Premium Installment\"` or\n`\"Producer Commission\"`. Free text (not a closed enum), and must be\nnon-empty.\n"},"direction":{"type":"string","enum":["receivable","payable"],"description":"Which way the money moves. `receivable` is owed TO us (premium, taxes,\nfees); `payable` is owed BY us (commission). The direction comes from the\nline item type's own configuration, so the value you send is a **checked\nassertion** rather than an input: a mismatch is refused. That is what lets a\npayable commission line sit in the same aggregate as the receivables and\nself-exclude from the receivable checksum.\n"},"amount":{"type":"number","description":"The line's amount as a plain number in USD. It is **signed** and must be\nfinite: a price refund is a negative receivable.\n"}},"additionalProperties":true},"uniqueKey":"fullTermBillingInfo.oneOf.0.lines.oneOf.1","typeLabel":"null"}],"uniqueKey":"fullTermBillingInfo.oneOf.0.lines","typeLabel":"object[] | null"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"fullTermBillingInfo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fullTermBillingInfo","typeLabel":"object | null"},"fullTermPolicyRatingResult":{"oneOf":[{"type":"object","description":"Derived canonical policy-level rating result for the full term, hoisted as a\nread-once convenience (also duplicated in every segment). Element-level rating\noutput (`crossSegmentRatingOutputs`) stays inline at its host and is not hoisted.\n","additionalProperties":true,"isRequired":true,"uniqueKey":"fullTermPolicyRatingResult.oneOf.0","typeLabel":"object"},{"type":"null","description":"Derived canonical policy-level rating result for the full term, hoisted as a\nread-once convenience (also duplicated in every segment). Element-level rating\noutput (`crossSegmentRatingOutputs`) stays inline at its host and is not hoisted.\n","additionalProperties":true,"isRequired":true,"uniqueKey":"fullTermPolicyRatingResult.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fullTermPolicyRatingResult","typeLabel":"object | null"},"segments":{"type":"array","description":"Derived segments for this policy version. Each segment represents a maximal contiguous\ndate range where policy state is identical. Adjacent segments with identical data are\nautomatically merged.\n","items":{"type":"object","description":"A derived policy segment representing a date range where policy state is identical.\nContains the full policy data (policy-level fields and nested exposures) for this period.\n","required":["startDate","endDate","data","transactionType"],"properties":{"startDate":{"type":"string","format":"date","description":"Segment start date (ISO 8601)","isRequired":true,"uniqueKey":"segments.items.[INDEX].startDate","typeLabel":"string\u003cdate>"},"endDate":{"type":"string","format":"date","description":"Segment end date (ISO 8601)","isRequired":true,"uniqueKey":"segments.items.[INDEX].endDate","typeLabel":"string\u003cdate>"},"data":{"type":"object","description":"Policy state for this segment: the policy-level fields and their nested\nexposure containers, at the top level of this object.\n\nBefore 2026-08-05 this member was named `fieldModelV1Data` and wrapped the\nsame fields in an extra `policy` key. Read `data.policyNumber` where you\nread `fieldModelV1Data.policy.policyNumber`.\n","additionalProperties":true,"isRequired":true,"uniqueKey":"segments.items.[INDEX].data","typeLabel":"object"},"transactionType":{"oneOf":[{"type":"string","enum":["NEW_BUSINESS","ENDORSE","CANCEL","REINSTATE","RENEW"],"description":"The policy transaction that wrote this segment. Every transaction rewrites\nthe full segment set at its own policy version, so this is the version's\ntransaction type: the segments of a renewed term read `RENEW`, and an\nendorsement's version reads `ENDORSE` while the versions beneath it keep\nthe type that wrote them.\n\n`null` means UNKNOWN — the segment was written before this member existed.\nDo not read a null as new business.\n","isRequired":true,"uniqueKey":"segments.items.[INDEX].transactionType.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["NEW_BUSINESS","ENDORSE","CANCEL","REINSTATE","RENEW"],"description":"The policy transaction that wrote this segment. Every transaction rewrites\nthe full segment set at its own policy version, so this is the version's\ntransaction type: the segments of a renewed term read `RENEW`, and an\nendorsement's version reads `ENDORSE` while the versions beneath it keep\nthe type that wrote them.\n\n`null` means UNKNOWN — the segment was written before this member existed.\nDo not read a null as new business.\n","isRequired":true,"uniqueKey":"segments.items.[INDEX].transactionType.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"segments.items.[INDEX].transactionType","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"segments.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"segments","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"success":{"title":"success","description":"Reinstating at the cancellation date (Jun 15) fully clears the\ncancellation: `policyStatus` is `active` everywhere,\n`cancellationEffectiveOnDate` is gone, and the segments collapse\nback to the single pre-cancellation segment.\n","value":{"policyId":"550e8400-e29b-41d4-a716-446655440001","policyVersion":3,"transactionId":"550e8400-e29b-41d4-a716-446655440050","startDate":"2025-01-01","endDate":"2025-12-31","createdAt":"2025-06-15T10:30:00.000Z","primaryInsuredName":"Mercy General Hospital","primaryInsuredId":"550e8400-e29b-41d4-a716-446655440010","policyNumber":"POL-2025-000123","policyStartDate":{"date":"2025-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2025-12-31","timezone":"America/New_York"},"fullTermPricingInfo":{"premium":85000,"taxes":0,"fees":2000,"total":87000,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":85000},{"label":"Reinstatement Fee","classification":"reinstatement-fee","qualifier":"","earningSchedule":"immediate","value":2000}]},"fullTermBillingInfo":null,"fullTermPolicyRatingResult":null,"segments":[{"startDate":"2025-01-01","endDate":"2025-12-31","transactionType":"REINSTATE","data":{"policyStatus":"active","annualPremium":85000,"fullTermPricingInfo":{"premium":85000,"taxes":0,"fees":2000,"total":87000,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":85000},{"label":"Reinstatement Fee","classification":"reinstatement-fee","qualifier":"","earningSchedule":"immediate","value":2000}]}}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"b7243cc2-857c-4a2a-96dd-35e12580a8a9":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"noExistingVersion":{"title":"noExistingVersion","value":{"error":{"code":"InvalidRequest","message":"Policy has no existing version — NEW_BUSINESS must be created first"}}},"dateOutsidePolicyPeriod":{"title":"dateOutsidePolicyPeriod","value":{"error":{"code":"InvalidRequest","message":"Reinstatement date 2026-03-01 falls outside policy period [2025-01-01, 2025-12-31]"}}},"policyNotCancelled":{"title":"policyNotCancelled","value":{"error":{"code":"InvalidRequest","message":"Policy must be cancelled at reinstatement date 2025-06-15 — current status is \"active\""}}},"timestampNotMonotonic":{"title":"timestampNotMonotonic","value":{"error":{"code":"InvalidRequest","message":"transactionTimestamp (2025-05-01T10:00:00Z) is earlier than the latest existing transaction on this policy (2025-06-14T16:00:00Z)"}}},"coverageGap":{"title":"coverageGap","value":{"error":{"code":"InvalidRequest","message":"Reinstatement would leave a coverage gap — a cancelled period (2025-06-15 to 2025-06-30) would survive. The domain models that as a new policy term, not a reinstatement; use new-business or renew instead."}}},"componentValueMismatch":{"title":"componentValueMismatch","value":{"error":{"code":"InvalidRequest","message":"Reinstate transaction states 90000.00 for the pricing component \u003cclassification 'policy-premium', label 'Policy Premium'>, but the server derives 85000.00 — the reinstate restores the pre-cancel contract verbatim. To change an existing charge, book an ENDORSE at the SAME effective date: transactions sharing an effective date are ordered by policy version (booking order), so endorse-then-cancel floors off the corrected figures and reinstate-then-endorse reprices the restored term prospectively."}}},"componentMissing":{"title":"componentMissing","value":{"error":{"code":"InvalidRequest","message":"Reinstate transaction is missing the existing pricing component \u003cclassification 'stamping-fee', label 'Stamping Fee'>. Every key the policy already carries must stay present at its server-derived value — the reinstate restores the pre-cancel contract verbatim. Removing a charge is an ENDORSE, not a cancel/reinstate transaction."}}},"additionNotImmediate":{"title":"additionNotImmediate","value":{"error":{"code":"InvalidRequest","message":"Reinstate transaction adds the pricing component \u003cclassification 'reinstatement-fee', label 'Reinstatement Fee'> without earningSchedule 'immediate'. A charge a cancel/reinstate transaction creates is recognized on its effective date; a pro-rata addition would schedule coverage the transaction is not selling. Absent, null and 'pro-rata' all mean pro-rata, so an addition must state the immediate schedule explicitly."}}}},"exampleType":"examples"}},"exampleType":"examples"},"71cbc71f-fb73-4a19-ac27-ade8cc67cf87":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missingApiKey":{"title":"missingApiKey","value":{"error":{"code":"AuthenticationError","message":"API key authentication required","userMessages":["API key authentication required"]}}},"invalidApiKey":{"title":"invalidApiKey","value":{"error":{"code":"AuthenticationError","message":"Invalid API key","userMessages":["Invalid API key"]}}}},"exampleType":"examples"}},"exampleType":"examples"},"c574045a-d3c7-4a9a-aba5-a491e9d23bb9":{"description":"Forbidden. The API key lacks the transaction's permission. Nothing is saved.\n","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"insufficientPermissions":{"title":"insufficientPermissions","value":{"error":{"code":"AuthorizationError","message":"User is not authorized to perform the requested action","userMessages":["User is not authorized to perform the requested action"]}}},"companyMismatch":{"title":"companyMismatch","value":{"error":{"code":"AuthorizationError","message":"API key is not scoped to the requested company","userMessages":["API key is not scoped to the requested company"]}}}},"exampleType":"examples"}},"exampleType":"examples"},"ee89f716-73c3-4c4b-a3e3-ebe0d7f973b7":{"description":"Policy or an invoice referenced by invoicePlan not found","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"policyNotFound":{"title":"policyNotFound","value":{"error":{"code":"NOT_FOUND","message":"Policy 550e8400-e29b-41d4-a716-446655440099 not found"}}}},"exampleType":"examples"}},"exampleType":"examples"},"01037ade-0576-471c-a0bb-efa89d3799fc":{"description":"A void watermark in invoicePlan is stale; no policy version or invoice action was committed.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_ERROR","message":"submissionId: Required field is missing","userMessages":["Exposures of type 'company' require an address"],"details":[{"field":"submissionId","code":"BLANK_LIST_ELEMENT","reason":"blank-list-element","expected":"nonblank trimmed string","message":"Required field is missing"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"9d24158d-0d17-4f14-8fed-4ccb8a532708":{"description":"invoicePlan failed policy-invoice binding, conservation, payment-lock, or restating preconditions, or the change failed the continuity check (`policy-pricing-stack-layer-change`: it moves the policy between layers of the pricing stack without naming the move in `pricingStackLayerChange`, or names a move it does not make); no policy version or invoice action was committed.","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unnamedPricingStackLayerChange":{"title":"unnamedPricingStackLayerChange","value":{"error":{"code":"policy-pricing-stack-layer-change","message":"This change moves policy 550e8400-e29b-41d4-a716-446655440000 from the billing layer (pricing and billing, no active invoices) to the pricing layer (pricing, no billing), and a change that moves a policy between layers must name the move. To make it, send pricingStackLayerChange: {\"from\":\"billing\",\"to\":\"pricing\"} with the request; to keep policy 550e8400-e29b-41d4-a716-446655440000 at the billing layer, change the request so it does not move.","userMessages":["This change moves policy 550e8400-e29b-41d4-a716-446655440000 from the billing layer (pricing and billing, no active invoices) to the pricing layer (pricing, no billing), and a change that moves a policy between layers must name the move. To make it, send pricingStackLayerChange: {\"from\":\"billing\",\"to\":\"pricing\"} with the request; to keep policy 550e8400-e29b-41d4-a716-446655440000 at the billing layer, change the request so it does not move."]}}}},"exampleType":"examples"}},"exampleType":"examples"},"cbf559a9-46c4-49d9-8e62-444c21c1cf6f":{"description":"Internal Server Error - Unexpected error occurred","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"internalError":{"title":"internalError","value":{"error":{"code":"UncaughtActionError","message":"Uncaught error occurred in \u003cactionName>","userMessages":["An unexpected error occurred. Please try again later."]}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"35370c79-340a-4ed7-a68a-8c786f4a2235":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"b4993f5b-e21e-4dbd-8ace-9c59b5197d8e":{"url":"https://go.aiinsurance.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Authorization","type":"string","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi/generated-external-api.yaml"},"subdomain":"ai-insurance-fmv1","siteName":"AI Insurance","title":"Reinstate Policy Transaction - AI Insurance","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T17:32:13.618Z","originalFileLocation":"api-reference/field-model-policy-transactions/reinstate-policy-transaction.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=\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from the cancellation date with no gap in coverage. The server restores the premium, taxes and fees the policy carried before the cancellation, and you may add a reinstatement fee. To change the policy as well, reinstate it and then endorse it with Endorse Policy Transaction (endorsePolicyTransaction). Value door (Invoicing a policy). The policy\u0026#x27;s invoices change only as the request says: the invoicePlan you send voids the invoices it names and creates new ones, committed with the policy version, and without one every invoice stays as it is. Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction. The policy must be cancelled at the reinstatement date. reinstatementDate (= the transaction effective date) is sugar the server expands into per-segment, segment-scoped deltas. policyStatus flips back to active from the reinstatement date through end of term, and cancellationEffectiveOnDate is cleared across the whole term — reinstatement removes the cancellation marker rather than recording a parallel reinstatement marker. There is no reinstatement date field. A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears the cancellation, so the segments return to their pre-cancellation state (and merge). ## A reinstate never reprices — it RESTORES The server computes what the reinstated term\u0026#x27;s pricing contract must be: the pre-cancel version\u0026#x27;s contract, verbatim. Every component comes back — premium, taxes, fees — at the value and earningSchedule the policy carried before the cancellation, so the reinstatement is the exact inverse of the cancel\u0026#x27;s per-charge floor. Recognition follows: each charge picks its schedule back up from the reinstatement date, and the earned curve across cancel-then-reinstate is flat. \u0026quot;Pre-cancel\u0026quot; is a VERSION, not a date — the version immediately before the CANCEL being undone. Since a reinstatement may not leave a coverage gap, its effective date is the cancellation date, so there is nothing to choose. Omit fullTermPricingInfo and the restored pricing contract is used. Billing is never restored: state it, or the reinstatement stores none. If you DO send fullTermPricingInfo, it is validated against that restored contract component by component, to the exact cent: - every component of the pre-cancel contract must be present, at exactly its pre-cancel value and with its pre-cancel earningSchedule; - an UNRECOGNIZED pair is an addition — money the reinstatement itself creates, typically a reinstatement fee — and it MUST carry earningSchedule: \u0026quot;immediate\u0026quot;, because it is recognized on the reinstatement date rather than scheduled over the restored term. Companies that tax through InsCipher. Where the company\u0026#x27;s InsCipher cancel/reinstate tax sourcing is enabled, the server asks InsCipher what the state re-charges on this reinstatement and appends its answer to the restored contract as additions of its own — one immediate component per corrected tax, under that tax\u0026#x27;s classification with a reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is split by state). A flat fee the state charged once and does not re-charge is netted to nothing this way. A supplied fullTermPricingInfo must include them, at the derived cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is refused (502 inscipher-tax-calculation-failed, or 422 inscipher-cancel-reinstate-tax-unpriceable naming the gap). Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To reprice the restored term, book an endorsement at the same effective date after the reinstatement: transactions sharing an effective date are applied in booking order (ascending policyVersion), so reinstate-then-endorse restores the term and then reprices it prospectively. Three optional derived channels are whole-object overwrites of a policy-root full-term container — necessarily whole-term, so none carries dates nor an element-level form: - fullTermPricingInfo — the full-term pricing contract, validated as described above. - fullTermBillingInfo — the term\u0026#x27;s billing obligations per line item. The caller states this value, and leaving it out stores none. Stated billing must pass the receivable checksum and vocabulary checks. - fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated and unconstrained: it is the rater\u0026#x27;s own output, not the money the platform books. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred. If reinstatement moves the billing an invoiced policy\u0026#x27;s invoices add up to, a plan is required; without one it is refused with 422 finv2-policy-restates-invoices. A plan may credit a line the new billing drops, such as a paid tax on a flat cancellation (Credits). Billing. Stores the caller\u0026#x27;s billing as stated, without scaling, restoring or carrying billing from the policy: billing you leave out stores none. To keep a billed policy\u0026#x27;s billing, state fullTermBillingInfo, at what the restored term owes. Kept and new invoices must still add up to the billing, as Invoice plans explains. The policy\u0026#x27;s layer. A policy sits at a layer of its pricing stack, read from its pricing, its billing and its active invoices. A reinstatement keeps the policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on a policy that has none, such as one whose cancellation dropped its billing, moves it from pricing to billing, and an invoicePlan that gives it its first invoices moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy drops its billing, a move from billing to pricing. A move the request does not name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and saves nothing; its message names the actual move and the exact pricingStackLayerChange that would name it. Billing that owes nothing sits at both billing and invoicing. Required permission: policy.reinstate\">\u003cmeta data-mint-head name=\"application-name\" content=\"AI Insurance\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Reinstate Policy Transaction - AI Insurance\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from the cancellation date with no gap in coverage. The server restores the premium, taxes and fees the policy carried before the cancellation, and you may add a reinstatement fee. To change the policy as well, reinstate it and then endorse it with Endorse Policy Transaction (endorsePolicyTransaction). Value door (Invoicing a policy). The policy\u0026#x27;s invoices change only as the request says: the invoicePlan you send voids the invoices it names and creates new ones, committed with the policy version, and without one every invoice stays as it is. Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction. The policy must be cancelled at the reinstatement date. reinstatementDate (= the transaction effective date) is sugar the server expands into per-segment, segment-scoped deltas. policyStatus flips back to active from the reinstatement date through end of term, and cancellationEffectiveOnDate is cleared across the whole term — reinstatement removes the cancellation marker rather than recording a parallel reinstatement marker. There is no reinstatement date field. A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears the cancellation, so the segments return to their pre-cancellation state (and merge). ## A reinstate never reprices — it RESTORES The server computes what the reinstated term\u0026#x27;s pricing contract must be: the pre-cancel version\u0026#x27;s contract, verbatim. Every component comes back — premium, taxes, fees — at the value and earningSchedule the policy carried before the cancellation, so the reinstatement is the exact inverse of the cancel\u0026#x27;s per-charge floor. Recognition follows: each charge picks its schedule back up from the reinstatement date, and the earned curve across cancel-then-reinstate is flat. \u0026quot;Pre-cancel\u0026quot; is a VERSION, not a date — the version immediately before the CANCEL being undone. Since a reinstatement may not leave a coverage gap, its effective date is the cancellation date, so there is nothing to choose. Omit fullTermPricingInfo and the restored pricing contract is used. Billing is never restored: state it, or the reinstatement stores none. If you DO send fullTermPricingInfo, it is validated against that restored contract component by component, to the exact cent: - every component of the pre-cancel contract must be present, at exactly its pre-cancel value and with its pre-cancel earningSchedule; - an UNRECOGNIZED pair is an addition — money the reinstatement itself creates, typically a reinstatement fee — and it MUST carry earningSchedule: \u0026quot;immediate\u0026quot;, because it is recognized on the reinstatement date rather than scheduled over the restored term. Companies that tax through InsCipher. Where the company\u0026#x27;s InsCipher cancel/reinstate tax sourcing is enabled, the server asks InsCipher what the state re-charges on this reinstatement and appends its answer to the restored contract as additions of its own — one immediate component per corrected tax, under that tax\u0026#x27;s classification with a reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is split by state). A flat fee the state charged once and does not re-charge is netted to nothing this way. A supplied fullTermPricingInfo must include them, at the derived cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is refused (502 inscipher-tax-calculation-failed, or 422 inscipher-cancel-reinstate-tax-unpriceable naming the gap). Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To reprice the restored term, book an endorsement at the same effective date after the reinstatement: transactions sharing an effective date are applied in booking order (ascending policyVersion), so reinstate-then-endorse restores the term and then reprices it prospectively. Three optional derived channels are whole-object overwrites of a policy-root full-term container — necessarily whole-term, so none carries dates nor an element-level form: - fullTermPricingInfo — the full-term pricing contract, validated as described above. - fullTermBillingInfo — the term\u0026#x27;s billing obligations per line item. The caller states this value, and leaving it out stores none. Stated billing must pass the receivable checksum and vocabulary checks. - fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated and unconstrained: it is the rater\u0026#x27;s own output, not the money the platform books. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred. If reinstatement moves the billing an invoiced policy\u0026#x27;s invoices add up to, a plan is required; without one it is refused with 422 finv2-policy-restates-invoices. A plan may credit a line the new billing drops, such as a paid tax on a flat cancellation (Credits). Billing. Stores the caller\u0026#x27;s billing as stated, without scaling, restoring or carrying billing from the policy: billing you leave out stores none. To keep a billed policy\u0026#x27;s billing, state fullTermBillingInfo, at what the restored term owes. Kept and new invoices must still add up to the billing, as Invoice plans explains. The policy\u0026#x27;s layer. A policy sits at a layer of its pricing stack, read from its pricing, its billing and its active invoices. A reinstatement keeps the policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on a policy that has none, such as one whose cancellation dropped its billing, moves it from pricing to billing, and an invoicePlan that gives it its first invoices moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy drops its billing, a move from billing to pricing. A move the request does not name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and saves nothing; its message names the actual move and the exact pricingStackLayerChange that would name it. Billing that owes nothing sits at both billing and invoicing. Required permission: policy.reinstate\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AI Insurance\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=Reinstate+Policy+Transaction\u0026amp;description=Reinstates+a+cancelled+policy+as+a+REINSTATE+transaction%2C+back+in+force+from%0Athe+cancellation+date+with+no+gap+in+coverage.+The+server+restores+the%0Apremium%2C+tax\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=eaa965183a350e932c60e12e4b571aef70ec7cbf799322692befa41cd4277072\">\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=\"Reinstate Policy Transaction - AI Insurance\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from the cancellation date with no gap in coverage. The server restores the premium, taxes and fees the policy carried before the cancellation, and you may add a reinstatement fee. To change the policy as well, reinstate it and then endorse it with Endorse Policy Transaction (endorsePolicyTransaction). Value door (Invoicing a policy). The policy\u0026#x27;s invoices change only as the request says: the invoicePlan you send voids the invoices it names and creates new ones, committed with the policy version, and without one every invoice stays as it is. Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction. The policy must be cancelled at the reinstatement date. reinstatementDate (= the transaction effective date) is sugar the server expands into per-segment, segment-scoped deltas. policyStatus flips back to active from the reinstatement date through end of term, and cancellationEffectiveOnDate is cleared across the whole term — reinstatement removes the cancellation marker rather than recording a parallel reinstatement marker. There is no reinstatement date field. A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears the cancellation, so the segments return to their pre-cancellation state (and merge). ## A reinstate never reprices — it RESTORES The server computes what the reinstated term\u0026#x27;s pricing contract must be: the pre-cancel version\u0026#x27;s contract, verbatim. Every component comes back — premium, taxes, fees — at the value and earningSchedule the policy carried before the cancellation, so the reinstatement is the exact inverse of the cancel\u0026#x27;s per-charge floor. Recognition follows: each charge picks its schedule back up from the reinstatement date, and the earned curve across cancel-then-reinstate is flat. \u0026quot;Pre-cancel\u0026quot; is a VERSION, not a date — the version immediately before the CANCEL being undone. Since a reinstatement may not leave a coverage gap, its effective date is the cancellation date, so there is nothing to choose. Omit fullTermPricingInfo and the restored pricing contract is used. Billing is never restored: state it, or the reinstatement stores none. If you DO send fullTermPricingInfo, it is validated against that restored contract component by component, to the exact cent: - every component of the pre-cancel contract must be present, at exactly its pre-cancel value and with its pre-cancel earningSchedule; - an UNRECOGNIZED pair is an addition — money the reinstatement itself creates, typically a reinstatement fee — and it MUST carry earningSchedule: \u0026quot;immediate\u0026quot;, because it is recognized on the reinstatement date rather than scheduled over the restored term. Companies that tax through InsCipher. Where the company\u0026#x27;s InsCipher cancel/reinstate tax sourcing is enabled, the server asks InsCipher what the state re-charges on this reinstatement and appends its answer to the restored contract as additions of its own — one immediate component per corrected tax, under that tax\u0026#x27;s classification with a reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is split by state). A flat fee the state charged once and does not re-charge is netted to nothing this way. A supplied fullTermPricingInfo must include them, at the derived cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is refused (502 inscipher-tax-calculation-failed, or 422 inscipher-cancel-reinstate-tax-unpriceable naming the gap). Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To reprice the restored term, book an endorsement at the same effective date after the reinstatement: transactions sharing an effective date are applied in booking order (ascending policyVersion), so reinstate-then-endorse restores the term and then reprices it prospectively. Three optional derived channels are whole-object overwrites of a policy-root full-term container — necessarily whole-term, so none carries dates nor an element-level form: - fullTermPricingInfo — the full-term pricing contract, validated as described above. - fullTermBillingInfo — the term\u0026#x27;s billing obligations per line item. The caller states this value, and leaving it out stores none. Stated billing must pass the receivable checksum and vocabulary checks. - fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated and unconstrained: it is the rater\u0026#x27;s own output, not the money the platform books. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred. If reinstatement moves the billing an invoiced policy\u0026#x27;s invoices add up to, a plan is required; without one it is refused with 422 finv2-policy-restates-invoices. A plan may credit a line the new billing drops, such as a paid tax on a flat cancellation (Credits). Billing. Stores the caller\u0026#x27;s billing as stated, without scaling, restoring or carrying billing from the policy: billing you leave out stores none. To keep a billed policy\u0026#x27;s billing, state fullTermBillingInfo, at what the restored term owes. Kept and new invoices must still add up to the billing, as Invoice plans explains. The policy\u0026#x27;s layer. A policy sits at a layer of its pricing stack, read from its pricing, its billing and its active invoices. A reinstatement keeps the policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on a policy that has none, such as one whose cancellation dropped its billing, moves it from pricing to billing, and an invoicePlan that gives it its first invoices moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy drops its billing, a move from billing to pricing. A move the request does not name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and saves nothing; its message names the actual move and the exact pricingStackLayerChange that would name it. Billing that owes nothing sits at both billing and invoicing. Required permission: policy.reinstate\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=Reinstate+Policy+Transaction\u0026amp;description=Reinstates+a+cancelled+policy+as+a+REINSTATE+transaction%2C+back+in+force+from%0Athe+cancellation+date+with+no+gap+in+coverage.+The+server+restores+the%0Apremium%2C+tax\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=eaa965183a350e932c60e12e4b571aef70ec7cbf799322692befa41cd4277072\">\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/ai-insurance-fmv1/OV-zcpS7BkiQB75q/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AI Insurance\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#714CC5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/field-model-policy-transactions/reinstate-policy-transaction.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.go.aiinsurance.io/#organization\",\"name\":\"AI Insurance\",\"url\":\"https://docs.go.aiinsurance.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.go.aiinsurance.io#website\",\"name\":\"AI Insurance\",\"url\":\"https://docs.go.aiinsurance.io\",\"publisher\":{\"@id\":\"https://docs.go.aiinsurance.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction#webpage\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction\",\"name\":\"Reinstate Policy Transaction\",\"description\":\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from the cancellation date with no gap in coverage. The server restores the premium, taxes and fees the policy carried before the cancellation, and you may add a reinstatement fee. To change the policy as well, reinstate it and then endorse it with Endorse Policy Transaction (endorsePolicyTransaction). Value door (Invoicing a policy). The policy's invoices change only as the request says: the invoicePlan you send voids the invoices it names and creates new ones, committed with the policy version, and without one every invoice stays as it is. Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction. The policy must be cancelled at the reinstatement date. reinstatementDate (= the transaction effective date) is sugar the server expands into per-segment, segment-scoped deltas. policyStatus flips back to active from the reinstatement date through end of term, and cancellationEffectiveOnDate is cleared across the whole term — reinstatement removes the cancellation marker rather than recording a parallel reinstatement marker. There is no reinstatement date field. A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears the cancellation, so the segments return to their pre-cancellation state (and merge). ## A reinstate never reprices — it RESTORES The server computes what the reinstated term's pricing contract must be: the pre-cancel version's contract, verbatim. Every component comes back — premium, taxes, fees — at the value and earningSchedule the policy carried before the cancellation, so the reinstatement is the exact inverse of the cancel's per-charge floor. Recognition follows: each charge picks its schedule back up from the reinstatement date, and the earned curve across cancel-then-reinstate is flat. \\\"Pre-cancel\\\" is a VERSION, not a date — the version immediately before the CANCEL being undone. Since a reinstatement may not leave a coverage gap, its effective date is the cancellation date, so there is nothing to choose. Omit fullTermPricingInfo and the restored pricing contract is used. Billing is never restored: state it, or the reinstatement stores none. If you DO send fullTermPricingInfo, it is validated against that restored contract component by component, to the exact cent: - every component of the pre-cancel contract must be present, at exactly its pre-cancel value and with its pre-cancel earningSchedule; - an UNRECOGNIZED pair is an addition — money the reinstatement itself creates, typically a reinstatement fee — and it MUST carry earningSchedule: \\\"immediate\\\", because it is recognized on the reinstatement date rather than scheduled over the restored term. Companies that tax through InsCipher. Where the company's InsCipher cancel/reinstate tax sourcing is enabled, the server asks InsCipher what the state re-charges on this reinstatement and appends its answer to the restored contract as additions of its own — one immediate component per corrected tax, under that tax's classification with a reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is split by state). A flat fee the state charged once and does not re-charge is netted to nothing this way. A supplied fullTermPricingInfo must include them, at the derived cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is refused (502 inscipher-tax-calculation-failed, or 422 inscipher-cancel-reinstate-tax-unpriceable naming the gap). Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To reprice the restored term, book an endorsement at the same effective date after the reinstatement: transactions sharing an effective date are applied in booking order (ascending policyVersion), so reinstate-then-endorse restores the term and then reprices it prospectively. Three optional derived channels are whole-object overwrites of a policy-root full-term container — necessarily whole-term, so none carries dates nor an element-level form: - fullTermPricingInfo — the full-term pricing contract, validated as described above. - fullTermBillingInfo — the term's billing obligations per line item. The caller states this value, and leaving it out stores none. Stated billing must pass the receivable checksum and vocabulary checks. - fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated and unconstrained: it is the rater's own output, not the money the platform books. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred. If reinstatement moves the billing an invoiced policy's invoices add up to, a plan is required; without one it is refused with 422 finv2-policy-restates-invoices. A plan may credit a line the new billing drops, such as a paid tax on a flat cancellation (Credits). Billing. Stores the caller's billing as stated, without scaling, restoring or carrying billing from the policy: billing you leave out stores none. To keep a billed policy's billing, state fullTermBillingInfo, at what the restored term owes. Kept and new invoices must still add up to the billing, as Invoice plans explains. The policy's layer. A policy sits at a layer of its pricing stack, read from its pricing, its billing and its active invoices. A reinstatement keeps the policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on a policy that has none, such as one whose cancellation dropped its billing, moves it from pricing to billing, and an invoicePlan that gives it its first invoices moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy drops its billing, a move from billing to pricing. A move the request does not name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and saves nothing; its message names the actual move and the exact pricingStackLayerChange that would name it. Billing that owes nothing sits at both billing and invoicing. Required permission: policy.reinstate\",\"dateModified\":\"2026-11-13T17:32:13.618Z\",\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Policy Transactions\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/policies/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transactions\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Reinstate Policy Transaction\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction#apireference\",\"headline\":\"Reinstate Policy Transaction\",\"name\":\"Reinstate Policy Transaction\",\"description\":\"Reinstates a cancelled policy as a REINSTATE transaction, back in force from the cancellation date with no gap in coverage. The server restores the premium, taxes and fees the policy carried before the cancellation, and you may add a reinstatement fee. To change the policy as well, reinstate it and then endorse it with Endorse Policy Transaction (endorsePolicyTransaction). Value door (Invoicing a policy). The policy's invoices change only as the request says: the invoicePlan you send voids the invoices it names and creates new ones, committed with the policy version, and without one every invoice stays as it is. Reinstates a previously cancelled policy as of a given date via a REINSTATE transaction. The policy must be cancelled at the reinstatement date. reinstatementDate (= the transaction effective date) is sugar the server expands into per-segment, segment-scoped deltas. policyStatus flips back to active from the reinstatement date through end of term, and cancellationEffectiveOnDate is cleared across the whole term — reinstatement removes the cancellation marker rather than recording a parallel reinstatement marker. There is no reinstatement date field. A reinstate may not leave a coverage gap. A reinstate that would leave a cancelled window between two active periods (e.g. cancel Jun 15, reinstate Jul 1, leaving Jun 15–Jun 30 cancelled) is rejected with a 400 — the domain models that as a new policy term, not a reinstatement. A valid reinstate restores continuous coverage and fully clears the cancellation, so the segments return to their pre-cancellation state (and merge). ## A reinstate never reprices — it RESTORES The server computes what the reinstated term's pricing contract must be: the pre-cancel version's contract, verbatim. Every component comes back — premium, taxes, fees — at the value and earningSchedule the policy carried before the cancellation, so the reinstatement is the exact inverse of the cancel's per-charge floor. Recognition follows: each charge picks its schedule back up from the reinstatement date, and the earned curve across cancel-then-reinstate is flat. \\\"Pre-cancel\\\" is a VERSION, not a date — the version immediately before the CANCEL being undone. Since a reinstatement may not leave a coverage gap, its effective date is the cancellation date, so there is nothing to choose. Omit fullTermPricingInfo and the restored pricing contract is used. Billing is never restored: state it, or the reinstatement stores none. If you DO send fullTermPricingInfo, it is validated against that restored contract component by component, to the exact cent: - every component of the pre-cancel contract must be present, at exactly its pre-cancel value and with its pre-cancel earningSchedule; - an UNRECOGNIZED pair is an addition — money the reinstatement itself creates, typically a reinstatement fee — and it MUST carry earningSchedule: \\\"immediate\\\", because it is recognized on the reinstatement date rather than scheduled over the restored term. Companies that tax through InsCipher. Where the company's InsCipher cancel/reinstate tax sourcing is enabled, the server asks InsCipher what the state re-charges on this reinstatement and appends its answer to the restored contract as additions of its own — one immediate component per corrected tax, under that tax's classification with a reserved qualifier of the form inscipher-RI v4 (a state suffix where the charge is split by state). A flat fee the state charged once and does not re-charge is netted to nothing this way. A supplied fullTermPricingInfo must include them, at the derived cents. If InsCipher cannot answer while tax money is at stake, the reinstatement is refused (502 inscipher-tax-calculation-failed, or 422 inscipher-cancel-reinstate-tax-unpriceable naming the gap). Re-valuing, re-basing or dropping a restored component is rejected with a 400 naming it. To reprice the restored term, book an endorsement at the same effective date after the reinstatement: transactions sharing an effective date are applied in booking order (ascending policyVersion), so reinstate-then-endorse restores the term and then reprices it prospectively. Three optional derived channels are whole-object overwrites of a policy-root full-term container — necessarily whole-term, so none carries dates nor an element-level form: - fullTermPricingInfo — the full-term pricing contract, validated as described above. - fullTermBillingInfo — the term's billing obligations per line item. The caller states this value, and leaving it out stores none. Stated billing must pass the receivable checksum and vocabulary checks. - fullTermPolicyRatingResult — the canonical policy-level rating result. Unvalidated and unconstrained: it is the rater's own output, not the money the platform books. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred. If reinstatement moves the billing an invoiced policy's invoices add up to, a plan is required; without one it is refused with 422 finv2-policy-restates-invoices. A plan may credit a line the new billing drops, such as a paid tax on a flat cancellation (Credits). Billing. Stores the caller's billing as stated, without scaling, restoring or carrying billing from the policy: billing you leave out stores none. To keep a billed policy's billing, state fullTermBillingInfo, at what the restored term owes. Kept and new invoices must still add up to the billing, as Invoice plans explains. The policy's layer. A policy sits at a layer of its pricing stack, read from its pricing, its billing and its active invoices. A reinstatement keeps the policy at its layer unless pricingStackLayerChange names the move it makes. Stating billing on a policy that has none, such as one whose cancellation dropped its billing, moves it from pricing to billing, and an invoicePlan that gives it its first invoices moves it up to invoicing. Leaving out fullTermBillingInfo on a billed policy drops its billing, a move from billing to pricing. A move the request does not name, or a named move it does not make, returns 422 policy-pricing-stack-layer-change and saves nothing; its message names the actual move and the exact pricingStackLayerChange that would name it. Billing that owes nothing sits at both billing and invoicing. Required permission: policy.reinstate\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/reinstate-policy-transaction#webpage\"},\"dateModified\":\"2026-11-13T17:32:13.618Z\",\"publisher\":{\"@id\":\"https://docs.go.aiinsurance.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AI Insurance\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"AI Insurance\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/field-model-policy-transactions/reinstate-policy-transaction.md","siteName":"AI Insurance","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/homepage"}]},{"tab":"App","pages":[{"title":"App","href":"/app/getting-started/overview"}]},{"tab":"Entities","pages":[{"title":"Entities","href":"/entities/overview"}]},{"tab":"Markets","pages":[{"title":"Markets","href":"/markets/overview"}]},{"tab":"Financials","pages":[{"title":"Financials","href":"/financials/overview"}]},{"tab":"API","groups":[{"group":"Getting Started","pages":[{"title":"Overview","href":"/api-reference/overview"},{"title":"Roadmap","href":"/api-reference/roadmap"},{"title":"Generating API Keys","href":"/api-reference/authentication"},{"title":"MCP Connector (Beta)","href":"/api-reference/mcp-connector"}]},{"group":"User","pages":[{"title":"Get my profile","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/me","href":"/api-reference/user/get-my-profile"},{"title":"List my accessible companies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/me/companies","href":"/api-reference/user/list-my-accessible-companies"}]},{"group":"Companies","pages":[{"title":"Companies","href":"/api-reference/companies/overview"},{"title":"Get Company Metadata","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}","href":"/api-reference/companies/get-company-metadata"},{"title":"List Company Members","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/members","href":"/api-reference/companies/list-company-members"},{"title":"Get Company Lifecycle","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/lifecycle","href":"/api-reference/companies/get-company-lifecycle"},{"title":"Reset Sandbox","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/reset","href":"/api-reference/companies/reset-sandbox"},{"title":"Get Company Email Branding","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/email-branding","href":"/api-reference/companies/get-company-email-branding"},{"title":"Set Company Email Branding","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/email-branding","href":"/api-reference/companies/set-company-email-branding"}]},{"group":"Entities","pages":[{"title":"Overview","href":"/api-reference/entities/overview"},{"title":"List Entity Types","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entity-types","href":"/api-reference/entities/list-entity-types"},{"title":"Get Page Layout","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/pages/{pageKey}/layout","href":"/api-reference/entities/get-page-layout"},{"title":"Get Entity Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/configuration","href":"/api-reference/entities/get-entity-configuration"},{"title":"Create Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}","href":"/api-reference/entities/create-entity"},{"title":"Create Entity Batch","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/batch","href":"/api-reference/entities/create-entity-batch"},{"title":"List Entities","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}","href":"/api-reference/entities/list-entities"},{"title":"Start Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/export-runs","href":"/api-reference/entities/start-entity-export-run"},{"title":"Get Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/export-runs/{runId}","href":"/api-reference/entities/get-entity-export-run"},{"title":"Download Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/export-runs/{runId}/download","href":"/api-reference/entities/download-entity-export-run"},{"title":"List Export Presets For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/export-presets","href":"/api-reference/entities/list-export-presets-for-member"},{"title":"Create Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/export-presets","href":"/api-reference/entities/create-export-preset-for-member"},{"title":"Replace Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/export-presets/{presetId}","href":"/api-reference/entities/replace-export-preset-for-member"},{"title":"Delete Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/export-presets/{presetId}","href":"/api-reference/entities/delete-export-preset-for-member"},{"title":"Get Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/get-entity"},{"title":"Update Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/update-entity"},{"title":"Delete Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/delete-entity"}]},{"group":"Submission and Quote Lifecycle","pages":[{"title":"Rate, Quote, Bind","href":"/api-reference/rate-quote-bind"},{"title":"Close Submission","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/submissions/{submissionId}/close","href":"/api-reference/submission-and-quote-lifecycle/close-submission"},{"title":"Reopen Submission","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/submissions/{submissionId}/reopen","href":"/api-reference/submission-and-quote-lifecycle/reopen-submission"},{"title":"Cancel Quote","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/{quoteId}/cancel","href":"/api-reference/submission-and-quote-lifecycle/cancel-quote"}]},{"group":"Event Lifecycle","pages":[{"title":"Overview","href":"/api-reference/event-lifecycle/overview"},{"title":"Close Event","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/events/{eventId}/close","href":"/api-reference/event-lifecycle/close-event"},{"title":"Re-open Event","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/events/{eventId}/reopen","href":"/api-reference/event-lifecycle/re-open-event"},{"title":"Replace Event Open/Close History","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/events/{eventId}/open-close-history","href":"/api-reference/event-lifecycle/replace-event-openclose-history"}]},{"group":"Record Emails","pages":[{"title":"Overview","href":"/api-reference/record-emails/overview"},{"title":"List Record Email Conversations","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations","href":"/api-reference/record-emails/list-record-email-conversations"},{"title":"Get Record Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations/{threadId}","href":"/api-reference/record-emails/get-record-email-conversation"},{"title":"Remove Record Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations/{threadId}/remove","href":"/api-reference/record-emails/remove-record-email-conversation"},{"title":"Link Earlier Record Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-people/{personId}/link-earlier","href":"/api-reference/record-emails/link-earlier-record-emails"},{"title":"Unlink Record Person Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-people/{personId}/unlink","href":"/api-reference/record-emails/unlink-record-person-emails"},{"title":"List Record Email Link Events","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events","href":"/api-reference/record-emails/list-record-email-link-events"},{"title":"List Record Sendable Email Templates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/sendable-email-templates","href":"/api-reference/record-emails/list-record-sendable-email-templates"},{"title":"Preview Record Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/emails/preview","href":"/api-reference/record-emails/preview-record-email"},{"title":"Send Record Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/emails","href":"/api-reference/record-emails/send-record-email"},{"title":"Retry Record Email Delivery","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-deliveries/{deliveryId}/retry","href":"/api-reference/record-emails/retry-record-email-delivery"},{"title":"List Record Packet Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/packet-emails","href":"/api-reference/record-emails/list-record-packet-emails"},{"title":"List Policy Email Conversations","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-conversations","href":"/api-reference/record-emails/list-policy-email-conversations"},{"title":"Get Policy Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-conversations/{threadId}","href":"/api-reference/record-emails/get-policy-email-conversation"},{"title":"Remove Policy Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-conversations/{threadId}/remove","href":"/api-reference/record-emails/remove-policy-email-conversation"},{"title":"Link Earlier Policy Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-people/{personId}/link-earlier","href":"/api-reference/record-emails/link-earlier-policy-emails"},{"title":"Unlink Policy Person Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-people/{personId}/unlink","href":"/api-reference/record-emails/unlink-policy-person-emails"},{"title":"List Policy Email Link Events","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-link-events","href":"/api-reference/record-emails/list-policy-email-link-events"},{"title":"List Policy Sendable Email Templates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/sendable-email-templates","href":"/api-reference/record-emails/list-policy-sendable-email-templates"},{"title":"Preview Policy Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/emails/preview","href":"/api-reference/record-emails/preview-policy-email"},{"title":"Send Policy Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/emails","href":"/api-reference/record-emails/send-policy-email"},{"title":"Retry Policy Email Delivery","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-deliveries/{deliveryId}/retry","href":"/api-reference/record-emails/retry-policy-email-delivery"},{"title":"List Policy Packet Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/packet-emails","href":"/api-reference/record-emails/list-policy-packet-emails"}]},{"group":"OFAC Screening","pages":[{"title":"Overview","href":"/api-reference/ofac-screening/overview"},{"title":"Screen Exposure For OFAC","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/ofac/screen","href":"/api-reference/ofac-screening/screen-exposure-for-ofac"}]},{"group":"Policy Transactions","pages":[{"title":"Overview","href":"/api-reference/policies/overview"},{"title":"Concepts","href":"/api-reference/policies/concepts"},{"title":"Effective Dates \u0026 the Policy Timeline","href":"/api-reference/policies/effective-dates"},{"title":"Lifecycle Walkthrough","href":"/api-reference/policies/lifecycle-walkthrough"},{"group":"Configuration","pages":[{"title":"Get Policy Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/configuration","href":"/api-reference/field-model-policy-configuration/get-policy-configuration"}]},{"group":"Reset","pages":[{"title":"Delete All Policies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/deleteAll","href":"/api-reference/policies/delete-all-policies"}]},{"group":"Transactions","pages":[{"title":"New Business Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/transaction/new-business","href":"/api-reference/field-model-policy-transactions/new-business-transaction"},{"title":"Endorse Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/endorse","href":"/api-reference/field-model-policy-transactions/endorse-policy-transaction"},{"title":"Cancel Policy Transaction","description":"Cancels a bound policy from a date as a CANCEL transaction, for any reason,\nincluding non-payment: the request takes a date, not a reason. The server\nworks out the cancelled term's premium itself: each pro rata charge drops to\nwhat it earned through the cancellation date, so a cancellation on the start\ndate is a flat cancellation, and fully earned fees stay. Add a short-rate\npenalty or cancellation fee if you charge one; undo the cancellation with\nReinstate Policy Transaction (`reinstatePolicyTransaction`).\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The\npolicy's invoices change only as the request says: the `invoicePlan` you\nsend voids the invoices it names and creates new ones, committed with the\npolicy version, and without one every invoice stays as it is.\n\nCancels a policy as of a given date via a CANCEL transaction. The policy must be\nactive at the cancellation date.\n\n`cancellationDate` (= the transaction effective date) is sugar the server expands into\nper-segment, segment-scoped deltas on framework-required fields. `policyStatus` flips to\n`cancelled` from the cancellation date through end of term (splitting the segment at the\nboundary), and a single `cancellationEffectiveOnDate` is recorded uniformly across the\nwhole term — the same value on both sides of the boundary. `policyStatus` alone marks\nwhich side a segment is on. There is no `policyEarlyTerminationDate` and no status-enum\nmachinery.\n\n## A cancel never reprices — the pricing contract is DERIVED\n\nThe server computes what the cancelled term's pricing contract must be, per charge. Every\npricing component the policy already carries stays present, keeps its `label`,\n`classification`, `qualifier` and `earningSchedule`, and drops to **its own earned amount**\nthrough the cancellation date. A charge modelled as immediately earned (`earningSchedule:\n\"immediate\"` — a non-refundable policy fee) therefore keeps its whole\nvalue and is untouched by the cancellation; a pro-rata charge keeps the part the term has\nrun through. Nothing is relabelled and nothing is merged: a charge's\n`\u003cclassification, qualifier>` pair is its identity across policy versions, and the\nplatform's revenue recognition and invoice binding both attribute money by it.\n\nOmit `fullTermPricingInfo` and the derived pricing contract is used.\nBilling is never derived: state it, or the cancellation\nstores none.\n\nIf you DO send `fullTermPricingInfo`, it is validated against that derived contract\n**component by component, to the exact cent**:\n\n- every component the policy already carries must be present, at exactly the derived value\n and with the derived `earningSchedule`;\n- an UNRECOGNIZED `\u003cclassification, qualifier>` pair is an **addition** — money the\n cancellation itself creates, such as a short-rate penalty or a cancellation fee — and it\n MUST carry `earningSchedule: \"immediate\"`, because it is recognized on the cancellation\n date rather than scheduled over coverage that is ending. An addition may name any live\n classification (including a premium one, for a short-rate penalty) and may be negative\n (a clawback).\n\n**Companies that tax through InsCipher.** Where the company's InsCipher cancel/reinstate tax\nsourcing is enabled, the server asks InsCipher what the state actually refunds on this\ncancellation and appends its answer to the derived contract as additions of its own —\none immediate component per corrected tax, under that tax's classification with a\nreserved qualifier of the form `inscipher-PC v3` (`FC` for a cancellation effective on\nthe policy's first day; a state suffix where the charge is split by state). Their values\nmake the written total move by exactly what the state returns; the floors are untouched.\nA supplied `fullTermPricingInfo` must include them, at the derived cents, like every other\nderived component — which is one more reason to omit the container. If InsCipher cannot\nanswer while tax money is at stake, the cancellation is refused (`502`\n`inscipher-tax-calculation-failed`, or `422` `inscipher-cancel-reinstate-tax-unpriceable`\nnaming the gap) rather than booked on the floors alone.\n\nRe-valuing, re-basing or dropping an existing component is rejected with a `400` naming it.\nTo CHANGE what the policy is priced at, book an **endorsement at the same effective date**\nand then cancel: transactions sharing an effective date are applied in booking order\n(ascending `policyVersion`), so the endorsement's figures are what the cancellation floors\nagainst. The same composition works after a reinstatement — reinstate, then endorse — to\nreprice the restored term going forward.\n\nThree optional **derived channels** are whole-object overwrites of a policy-root full-term\ncontainer — necessarily whole-term, so none carries dates nor an element-level form:\n\n- **`fullTermPricingInfo`** — the full-term pricing contract, validated as described above.\n- **`fullTermBillingInfo`** — the term's billing obligations per line item.\n The caller states this value, and leaving it out stores none.\n Stated billing must pass the receivable checksum and vocabulary checks.\n- **`fullTermPolicyRatingResult`** — the canonical policy-level rating result. Unvalidated\n and unconstrained: it is the rater's own output, not the money the platform books.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred. If cancellation moves the billing an invoiced\npolicy's invoices add up to, a plan is required; without one it is refused\nwith `422 finv2-policy-restates-invoices`. A plan may credit a line the new\nbilling drops, such as a paid tax on a flat cancellation\n([Credits](/api-reference/invoicing/invoice-plans#credits)).\n\n**Billing.** Stores the caller's billing as stated, without\nscaling, restoring or carrying billing from the policy: billing you leave out stores\nnone. To keep a billed policy's billing, state `fullTermBillingInfo`, at what the\ncancelled term owes. Kept and new invoices must still add up to the billing, as\n[Invoice plans](/api-reference/invoicing/invoice-plans) explains.\n\n**The policy's layer.** A policy sits at a layer of its\n[pricing stack](/api-reference/invoicing/pricing-stack), read from its pricing, its\nbilling and its active invoices. A cancellation keeps the\npolicy at its layer unless `pricingStackLayerChange` names the move it makes. Leaving out\n`fullTermBillingInfo` on a billed policy drops its billing, a move from `billing` to\n`pricing`. An `invoicePlan` that voids every active invoice moves the policy down\nfrom `invoicing`; one that voids every active invoice and creates none needs no\nbilling, so a cancellation that leaves billing out and voids every unpaid invoice\nnames `pricingStackLayerChange: {\"from\": \"invoicing\", \"to\": \"pricing\"}`. A move the request does\nnot name, or a named move it does not make, returns `422 policy-pricing-stack-layer-change`\nand saves nothing; its message names the actual move and the exact `pricingStackLayerChange`\nthat would name it. Billing that owes nothing sits at both `billing` and `invoicing`.\n\n**Required permission:** `policy.cancel`\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/cancel","href":"/api-reference/field-model-policy-transactions/cancel-policy-transaction"},{"title":"Reinstate Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/reinstate","href":"/api-reference/field-model-policy-transactions/reinstate-policy-transaction"},{"title":"Renew Policy Transaction","description":"Creates the renewal term of an existing policy directly from its complete\ndata as a RENEW transaction: a new bound policy, linked to the expiring one\nthrough `data.previousPolicy`, that starts on or after the expiring term\nends. Use it when you already hold the renewal's data. To renew through a\nquote, generate the draft with Generate Quote from Policy (Stateless)\n(`generateQuote`) and `transactionType: RENEW`, then bind it.\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The\nrenewal term's invoices come from the request: the `invoicePlan` you send\ncommits with the new policy, and without one the term has no invoices.\n\nCreates a new policy via a RENEW transaction, linking it to a previous policy.\nRENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or\nafter the previous policy's end date.\n\nThe request body is the complete initial policy state in `data`, exactly like\nNEW_BUSINESS. **Term bounds and the renewal link all live at the policy root** —\n`policyStartDate`, `policyEndDate` and `previousPolicy` are read from `data`. There are\nno top-level parameters. The transaction produces a new policy record with a single\nsegment covering the full renewal term.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred, and it commits atomically with the new policy.\n\n**Billing needs pricing.** The renewal term's own pricing,\nbilling and invoices set its layer of the\n[pricing stack](/api-reference/invoicing/pricing-stack), and some layer must\naccept them: a `data.fullTermBillingInfo` without `data.fullTermPricingInfo`\nfits none and returns `422 policy-pricing-stack-layer-inconsistent`, and\nnothing is saved. State the pricing (an empty `pricingComponents` list prices\nthe term at zero), or leave the billing out.\n\n**Required permission:** `policy.renew`\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/transaction/renew","href":"/api-reference/field-model-policy-transactions/renew-policy-transaction"},{"title":"Generate Quote from Policy (Stateless)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/generate","href":"/api-reference/field-model-policies/generate-quote-from-policy-stateless"},{"title":"Bind Quote","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/{quoteId}/bind","href":"/api-reference/field-model-policy-transactions/bind-quote"},{"title":"Bind Quote by Reference or by Value","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/bind","href":"/api-reference/field-model-policy-transactions/bind-quote-by-reference-or-by-value"},{"title":"Delete Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/policies/{policyId}/transactions/{transactionId}","href":"/api-reference/field-model-policy-transactions/delete-policy-transaction"},{"title":"Get Policy Version","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/versions/{version}","href":"/api-reference/field-model-policy-transactions/get-policy-version"},{"title":"List Single Policy Versions","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/versions","href":"/api-reference/field-model-policy-transactions/list-single-policy-versions"},{"title":"List Policy Transactions","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/transactions","href":"/api-reference/field-model-policy-transactions/list-policy-transactions"},{"title":"Get Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/transactions/{transactionId}","href":"/api-reference/field-model-policy-transactions/get-policy-transaction"},{"title":"Update Transaction Display Author","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/policies/{policyId}/transactions/{transactionId}","href":"/api-reference/field-model-policy-transactions/update-transaction-display-author"}]},{"group":"Contacts","pages":[{"title":"List Policy Contacts","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/contacts","href":"/api-reference/field-model-policy-transactions/list-policy-contacts"},{"title":"Add Policy Contact","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/contacts","href":"/api-reference/field-model-policy-transactions/add-policy-contact"},{"title":"Remove Policy Contact","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/policies/{policyId}/contacts/{personId}","href":"/api-reference/field-model-policy-transactions/remove-policy-contact"}]},{"group":"Bordereau","pages":[{"title":"List Bordereau Rows","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/bordereau","href":"/api-reference/field-model-bordereau/list-bordereau-rows"},{"title":"Start Bordereau Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/bordereau/export-runs","href":"/api-reference/field-model-bordereau/start-bordereau-export-run"},{"title":"Get Bordereau Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/bordereau/export-runs/{runId}","href":"/api-reference/field-model-bordereau/get-bordereau-export-run"},{"title":"Download Bordereau Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/bordereau/export-runs/{runId}/download","href":"/api-reference/field-model-bordereau/download-bordereau-export-run"},{"title":"Send Bordereau Export Run to Google Drive","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/bordereau/export-runs/{runId}/drive","href":"/api-reference/field-model-bordereau/send-bordereau-export-run-to-google-drive"}]},{"group":"Listing Policies","pages":[{"title":"List Policies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/list","href":"/api-reference/field-model-policy-transactions/list-policies"},{"title":"List Policy Versions","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/versions","href":"/api-reference/field-model-policy-transactions/list-policy-versions"}]},{"group":"Validation","pages":[{"title":"Check Bind Conditions","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions","href":"/api-reference/field-model-policy-validation/check-bind-conditions"},{"title":"Validate Policy","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/validate","href":"/api-reference/field-model-policy-validation/validate-policy"},{"title":"Validate Policies (Batch)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/validate","href":"/api-reference/field-model-policy-validation/validate-policies-batch"},{"title":"Repair Policies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/repair","href":"/api-reference/field-model-policy-transactions/repair-policies"}]}]},{"group":"Policy Invoicing","pages":[{"title":"Invoicing a policy","href":"/api-reference/invoicing/overview"},{"title":"Invoice plans","href":"/api-reference/invoicing/invoice-plans"},{"title":"Quote Invoicing Overview","sidebarTitle":"Quote Invoicing Overview","href":"/api-reference/invoicing/quote-invoicing"},{"group":"Quote Invoicing","pages":[{"title":"Get Quote Invoicing","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing","href":"/api-reference/policy-invoicing/get-quote-invoicing"},{"title":"Replace Quote Invoice Settings","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing/settings","href":"/api-reference/policy-invoicing/replace-quote-invoice-settings"},{"title":"Generate Quote Invoices","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing/generate","href":"/api-reference/policy-invoicing/generate-quote-invoices"},{"title":"Attach Quote Invoice Plan","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing/plan","href":"/api-reference/policy-invoicing/attach-quote-invoice-plan"},{"title":"Clear Quote Invoice Plan","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/quotes/{quoteId}/invoicing/plan","href":"/api-reference/policy-invoicing/clear-quote-invoice-plan"}]},{"group":"Pricing Stack","pages":[{"title":"The pricing stack","href":"/api-reference/invoicing/pricing-stack"},{"title":"Get Quote Pricing Stack Intended Layer","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/quotes/{quoteId}/pricing-stack-intended-layer","href":"/api-reference/policy-invoicing/get-quote-pricing-stack-intended-layer"},{"title":"Set Quote Pricing Stack Intended Layer","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/quotes/{quoteId}/pricing-stack-intended-layer","href":"/api-reference/policy-invoicing/set-quote-pricing-stack-intended-layer"},{"title":"Clear Quote Rating","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/quotes/{quoteId}/rating","href":"/api-reference/policy-invoicing/clear-quote-rating"}]},{"title":"Update Policy Invoices","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/policies/{policyId}/invoices/batch","href":"/api-reference/financials/update-policy-invoices"}]},{"group":"Financials","pages":[{"title":"Overview","href":"/api-reference/financials/overview"},{"group":"Invoices","pages":[{"title":"List Invoices","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/invoices","href":"/api-reference/financials/list-invoices"},{"title":"Create Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices","href":"/api-reference/financials/create-invoice"},{"title":"Get Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/invoices/{invoiceId}","href":"/api-reference/financials/get-invoice"},{"title":"Update Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/invoices/{invoiceId}","href":"/api-reference/financials/update-invoice"},{"title":"Delete Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/financials/invoices/{invoiceId}","href":"/api-reference/financials/delete-invoice"},{"title":"Re-link Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/relink","href":"/api-reference/financials/re-link-invoice"}]},{"group":"Invoice Lifecycle","pages":[{"title":"Approve Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/approve","href":"/api-reference/financials/approve-invoice"},{"title":"Unapprove Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/unapprove","href":"/api-reference/financials/unapprove-invoice"},{"title":"Finalize Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/finalize","href":"/api-reference/financials/finalize-invoice"},{"title":"Void Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/void","href":"/api-reference/financials/void-invoice"},{"title":"Restore Invoice","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/restore","href":"/api-reference/financials/restore-invoice"}]},{"group":"Bill Review","pages":[{"title":"Start Invoice Bill Review","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/bill-review","href":"/api-reference/financials/start-invoice-bill-review"},{"title":"Get Invoice Bill Review","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/bill-review","href":"/api-reference/financials/get-invoice-bill-review"}]},{"group":"Payments","pages":[{"title":"Record Payment","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/payments","href":"/api-reference/financials/record-payment"},{"title":"Remove Payment","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/payments/{paymentId}","href":"/api-reference/financials/remove-payment"}]},{"group":"Payees","pages":[{"title":"Change Invoice Payee","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/invoices/{invoiceId}/payee","href":"/api-reference/financials/change-invoice-payee"},{"title":"Merge Payee","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/payees/{payeeId}/merge","href":"/api-reference/financials/merge-payee"}]},{"group":"Reserves","pages":[{"title":"Set Reserves","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/events/{eventId}/reserves/{categoryId}","href":"/api-reference/financials/set-reserves"},{"title":"Reset Reserve History","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/events/{eventId}/reserves/{categoryId}/history-reset","href":"/api-reference/financials/reset-reserve-history"},{"title":"List Reserve Updates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/events/{eventId}/reserve-updates","href":"/api-reference/financials/list-reserve-updates"},{"title":"List Company Reserve Updates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/reserve-updates","href":"/api-reference/financials/list-company-reserve-updates"}]},{"group":"Balances","pages":[{"title":"Get Balances","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/balances","href":"/api-reference/financials/get-balances"},{"title":"Get Entity Balances","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/entities/{entityType}/{entityId}/balances","href":"/api-reference/financials/get-entity-balances"}]},{"group":"Configuration","pages":[{"title":"Export Financials Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/export","href":"/api-reference/financials/export-financials-configuration"},{"title":"Import Financials Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/import","href":"/api-reference/financials/import-financials-configuration"},{"title":"List Transaction Categories","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/config/categories","href":"/api-reference/financials/list-transaction-categories"},{"title":"Set Transaction Category Money-Out Approval","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/config/categories/{categoryId}/money-out-approval","href":"/api-reference/financials/set-transaction-category-money-out-approval"},{"title":"List Policy Invoice Types","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/config/policy-invoice-types","href":"/api-reference/financials/list-policy-invoice-types"},{"title":"Create Policy Invoice Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-invoice-types","href":"/api-reference/financials/create-policy-invoice-type"},{"title":"List Policy Line Item Types","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/config/policy-line-item-types","href":"/api-reference/financials/list-policy-line-item-types"},{"title":"Create Policy Line Item Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-line-item-types","href":"/api-reference/financials/create-policy-line-item-type"},{"title":"Rename Policy Invoice Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}","href":"/api-reference/financials/rename-policy-invoice-type"},{"title":"Delete Policy Invoice Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}","href":"/api-reference/financials/delete-policy-invoice-type"},{"title":"Deprecate Policy Invoice Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/deprecate","href":"/api-reference/financials/deprecate-policy-invoice-type"},{"title":"Reactivate Policy Invoice Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/reactivate","href":"/api-reference/financials/reactivate-policy-invoice-type"},{"title":"Rename Policy Line Item Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/financials/config/policy-line-item-types/{lineItemTypeId}","href":"/api-reference/financials/rename-policy-line-item-type"},{"title":"Delete Policy Line Item Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/financials/config/policy-line-item-types/{lineItemTypeId}","href":"/api-reference/financials/delete-policy-line-item-type"},{"title":"Deprecate Policy Line Item Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-line-item-types/{lineItemTypeId}/deprecate","href":"/api-reference/financials/deprecate-policy-line-item-type"},{"title":"Reactivate Policy Line Item Type","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-line-item-types/{lineItemTypeId}/reactivate","href":"/api-reference/financials/reactivate-policy-line-item-type"},{"title":"Set Policy Invoice Type Direction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/expected-direction","href":"/api-reference/financials/set-policy-invoice-type-direction"},{"title":"Set Policy Invoice Type Payee Defaults","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/payee-defaults","href":"/api-reference/financials/set-policy-invoice-type-payee-defaults"},{"title":"Set Policy Invoice Type Presets","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/presets","href":"/api-reference/financials/set-policy-invoice-type-presets"},{"title":"Set Policy Invoice Type Money-Out Approval","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/financials/config/policy-invoice-types/{categoryId}/money-out-approval","href":"/api-reference/financials/set-policy-invoice-type-money-out-approval"},{"title":"Set Policy Line Item Associations","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/config/policy-line-item-types/associations","href":"/api-reference/financials/set-policy-line-item-associations"},{"title":"Reset Approval Config","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/financials/config/approvals","href":"/api-reference/financials/reset-approval-config"}]},{"group":"Maintenance","pages":[{"title":"Import Event Financials","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/events/{eventId}/import","href":"/api-reference/financials/import-event-financials"},{"title":"Check Financials Read-State Consistency","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/financials/validation/check","href":"/api-reference/financials/check-financials-read-state-consistency"},{"title":"Rebuild Financials Read-State","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/validation/sync","href":"/api-reference/financials/rebuild-financials-read-state"},{"title":"Delete All Financial Data","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/financials/deleteAll","href":"/api-reference/financials/delete-all-financial-data"}]}]},{"group":"Rating","pages":[{"title":"Overview","href":"/api-reference/rating/overview"},{"title":"Rate Quote (Read-Only)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/rate","href":"/api-reference/field-model-rating/rate-quote-read-only"},{"title":"Rate Saved Quote by Id","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/{quoteId}/rate","href":"/api-reference/field-model-rating/rate-saved-quote-by-id"}]},{"group":"Notes","pages":[{"title":"Overview","href":"/api-reference/notes/overview"},{"title":"List Notes","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/notes","href":"/api-reference/field-model-notes/list-notes"},{"title":"Create Note","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/notes","href":"/api-reference/field-model-notes/create-note"},{"title":"Get Note","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/notes/{noteId}","href":"/api-reference/field-model-notes/get-note"},{"title":"Update Note","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/notes/{noteId}","href":"/api-reference/field-model-notes/update-note"},{"title":"Delete Note","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/notes/{noteId}","href":"/api-reference/field-model-notes/delete-note"}]},{"group":"Tasks","pages":[{"title":"Overview","href":"/api-reference/tasks/overview"},{"title":"List Tasks","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Get Task","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/tasks/{taskId}","href":"/api-reference/tasks/get-task"},{"title":"Create Task","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/tasks","href":"/api-reference/tasks/create-task"},{"title":"Update Task","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/tasks/{taskId}","href":"/api-reference/tasks/update-task"},{"title":"Delete Task","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/tasks/{taskId}","href":"/api-reference/tasks/delete-task"}]},{"group":"Imports","hidden":true,"pages":[{"title":"Overview","href":"/api-reference/imports/overview"},{"title":"Import Rows","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/rows","href":"/api-reference/imports/import-rows"},{"title":"Queue Import Job","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/jobs","href":"/api-reference/imports/queue-import-job"},{"title":"Get Import Job","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/jobs/{jobId}","href":"/api-reference/imports/get-import-job"},{"title":"Import Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports","href":"/api-reference/imports/import-entity"},{"title":"Retry Import","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/retry","href":"/api-reference/imports/retry-import"},{"title":"List Import Rows","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/rows","href":"/api-reference/imports/list-import-rows"},{"title":"Get Import Row","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/rows/{importRowId}","href":"/api-reference/imports/get-import-row"},{"title":"List Import Attempts","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/attempts","href":"/api-reference/imports/list-import-attempts"},{"title":"Get Import Attempt","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/attempts/{importAttemptId}","href":"/api-reference/imports/get-import-attempt"},{"title":"Replace Record Legacy Activity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/legacy-activity","href":"/api-reference/imports/replace-record-legacy-activity"}]},{"group":"Configuration Management","pages":[{"title":"Overview","href":"/api-reference/configuration/overview"},{"title":"Conversion Rules","href":"/api-reference/configuration/conversion-rules"},{"title":"Author JEXL expressions","href":"/api-reference/configuration/jexl-authoring"},{"title":"JEXL reference","href":"/api-reference/configuration/jexl-reference"},{"group":"Inspect","pages":[{"title":"Export Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/export","href":"/api-reference/fmv1-configuration/export-configuration"},{"title":"Describe Configuration (run-down)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/describe","href":"/api-reference/fmv1-configuration/describe-configuration-run-down"},{"title":"Describe Configuration Entity (fields of one entity or custom object)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/describe/{entityOrObjectKey}","href":"/api-reference/fmv1-configuration/describe-configuration-entity-fields-of-one-entity-or-custom-object"},{"title":"Get Configuration Metadata","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/metadata","href":"/api-reference/fmv1-configuration/get-configuration-metadata"},{"title":"Get Configuration JSON Schema","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/schema","href":"/api-reference/fmv1-configuration/get-configuration-json-schema"}]},{"group":"Validate \u0026 Compare","pages":[{"title":"Validate Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/validate","href":"/api-reference/fmv1-configuration/validate-configuration"},{"title":"Compare Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/compare","href":"/api-reference/fmv1-configuration/compare-configuration"},{"title":"Start Data Validation Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/data-validation-runs","href":"/api-reference/fmv1-configuration/start-data-validation-run"},{"title":"Get Data Validation Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/configuration/data-validation-runs/{runId}","href":"/api-reference/fmv1-configuration/get-data-validation-run"},{"title":"List Data Validation Run Findings","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/configuration/data-validation-runs/{runId}/findings","href":"/api-reference/fmv1-configuration/list-data-validation-run-findings"}]},{"group":"Apply Changes","pages":[{"title":"Import Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/import","href":"/api-reference/fmv1-configuration/import-configuration"},{"title":"Patch Configuration (typed changes)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/patch","href":"/api-reference/fmv1-configuration/patch-configuration-typed-changes"}]}]},{"group":"Company Files","pages":[{"title":"Overview","href":"/api-reference/company-files/overview"},{"title":"List File Categories","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/categories","href":"/api-reference/company-files/list-file-categories"},{"group":"Uploads","pages":[{"title":"Create Upload Intent","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files","href":"/api-reference/company-files/create-upload-intent"},{"title":"Finalize Upload","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/{fileId}/finalize","href":"/api-reference/company-files/finalize-upload"}]},{"group":"Migrations","pages":[{"title":"Prepare File Migration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/prepare","href":"/api-reference/company-files/prepare-file-migration"},{"title":"Get File Migration State","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/state","href":"/api-reference/company-files/get-file-migration-state"},{"title":"Refresh File Migration Upload","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/refresh","href":"/api-reference/company-files/refresh-file-migration-upload"},{"title":"Finalize File Migration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/finalize","href":"/api-reference/company-files/finalize-file-migration"},{"title":"Reconcile File Migration Metadata","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/reconcile","href":"/api-reference/company-files/reconcile-file-migration-metadata"}]},{"group":"Files","pages":[{"title":"List Files","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files","href":"/api-reference/company-files/list-files"},{"title":"Get File Metadata","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/{fileId}","href":"/api-reference/company-files/get-file-metadata"},{"title":"Rename, Move, or Categorize File","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/files/{fileId}","href":"/api-reference/company-files/rename-move-or-categorize-file"},{"title":"Bulk Move Files","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/bulk-move","href":"/api-reference/company-files/bulk-move-files"},{"title":"Delete File","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/files/{fileId}","href":"/api-reference/company-files/delete-file"}]},{"group":"Downloads","pages":[{"title":"Get Download URL","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/{fileId}/download-url","href":"/api-reference/company-files/get-download-url"},{"title":"Batch Download URLs","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/download-urls","href":"/api-reference/company-files/batch-download-urls"}]},{"group":"Versions","pages":[{"title":"List File Versions","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/{fileId}/versions","href":"/api-reference/company-files/list-file-versions"},{"title":"Create Re-upload Intent","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/{fileId}/versions","href":"/api-reference/company-files/create-re-upload-intent"},{"title":"Restore File Version","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/{fileId}/versions/{versionId}/restore","href":"/api-reference/company-files/restore-file-version"}]},{"group":"Placements","pages":[{"title":"List File Placements","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/{fileId}/placements","href":"/api-reference/company-files/list-file-placements"},{"title":"Add File Placement (Share to Another Entity)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/{fileId}/placements","href":"/api-reference/company-files/add-file-placement-share-to-another-entity"},{"title":"Update File Placement (Move / Categorize per Entity)","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/files/{fileId}/placements/{placementId}","href":"/api-reference/company-files/update-file-placement-move-categorize-per-entity"},{"title":"Remove File Placement","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/files/{fileId}/placements/{placementId}","href":"/api-reference/company-files/remove-file-placement"}]},{"group":"Folders","pages":[{"title":"Create Folder","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/folders","href":"/api-reference/company-files/create-folder"},{"title":"Get Folder Tree","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/folders","href":"/api-reference/company-files/get-folder-tree"},{"title":"List Folder Contents","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/folders/{folderId}","href":"/api-reference/company-files/list-folder-contents"},{"title":"Rename, Move or Categorize Folder","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/folders/{folderId}","href":"/api-reference/company-files/rename-move-or-categorize-folder"},{"title":"Delete Folder","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/folders/{folderId}","href":"/api-reference/company-files/delete-folder"}]}]},{"group":"Forms","pages":[{"title":"Overview","href":"/api-reference/forms/overview"},{"title":"List Forms","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms","href":"/api-reference/forms/list-forms"},{"title":"Download Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/{number}","href":"/api-reference/forms/download-form"},{"title":"Rename Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/forms/{number}","href":"/api-reference/forms/rename-form"},{"title":"Delete Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/forms/{number}","href":"/api-reference/forms/delete-form"},{"group":"Templates","pages":[{"title":"Upload Form Template","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/template","href":"/api-reference/forms/upload-form-template"},{"title":"Replace Form Template","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/forms/template/{number}","href":"/api-reference/forms/replace-form-template"},{"title":"Touch Form Template","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/template/{number}/touch","href":"/api-reference/forms/touch-form-template"},{"title":"Audit Form Template Smart Tags","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/template/{number}/smart-tag-audit","href":"/api-reference/forms/audit-form-template-smart-tags"}]},{"group":"Static Forms","pages":[{"title":"Upload Static Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/static","href":"/api-reference/forms/upload-static-form"},{"title":"Replace Static Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/forms/static/{number}","href":"/api-reference/forms/replace-static-form"}]},{"group":"Generated Forms","pages":[{"title":"List Generated Forms","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/generated","href":"/api-reference/forms/list-generated-forms"},{"title":"Upload Event Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/generated","href":"/api-reference/forms/upload-event-form"},{"title":"Touch Generated Form","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/generated/{id}/touch","href":"/api-reference/forms/touch-generated-form"},{"title":"Audit Generated Form Smart Tags","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/generated/{id}/smart-tag-audit","href":"/api-reference/forms/audit-generated-form-smart-tags"}]},{"group":"Packets","pages":[{"title":"List Form Packets","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/packets","href":"/api-reference/forms/list-form-packets"},{"title":"Import Historical Form Packet","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/packets/import","href":"/api-reference/forms/import-historical-form-packet"},{"title":"Get Form Packet Download URL","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/forms/packets/{packetId}/download-url","href":"/api-reference/forms/get-form-packet-download-url"}]}]},{"group":"Document Generation","pages":[{"title":"Overview","href":"/api-reference/documents/overview"}]},{"group":"Submission Parsing","pages":[{"title":"Overview","href":"/api-reference/parsing/overview"},{"title":"Trigger Parse","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/trigger-parse","href":"/api-reference/submission-parsing/trigger-parse"},{"title":"List Parse Runs","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/files/parse-runs","href":"/api-reference/submission-parsing/list-parse-runs"}]},{"group":"Reference","pages":[{"title":"Structured Field Values","href":"/api-reference/field-values/overview"},{"title":"Data Models","href":"/api-reference/data-models"},{"title":"API Changelog","href":"/api-reference/changelog"}]}]}]},"basePath":"","title":"Reinstate Policy Transaction - AI Insurance","buildId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","deploymentId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DPDWPCdE.js","utils-DyjUHyLo.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BWYE1cdS.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-COAzxpEw.js","snippetPresets-DNiD_S52.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-CjwVt80x.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ByHQMk7z.js","shallow-CaZuw1AO.js","getApiPlaygroundDisplay-DPVPOknm.js","CodeSnippet-B31CH-Mp.js","CodeSnippets-BxTYZWz6.js","Page-DDHbuAIY.js","getPastedJson-DhoAwiNO.js","icon-Dhq8z75J.js","MethodPill-DLXmKOwr.js","DuplicateIcon-jzdVwyRU.js","createIcon-eD0b3klN.js","DynamicMarkdown-BfddVCX7.js","SectionHeading-2pSCIo17.js","axios-vUo_bRtp.js","Markdown-DsWjhwJ4.js","clsx-B2t_mZQG.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CUljsAY7.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Cf70306N.js"]}