Creates the renewal term of an existing policy directly from its complete
data as a RENEW transaction: a new bound policy, linked to the expiring one
through data.previousPolicy, that starts on or after the expiring term
ends. Use it when you already hold the renewal’s data. To renew through a
quote, generate the draft with Generate Quote from Policy (Stateless)
(generateQuote) and transactionType: RENEW, then bind it.
Value door (Invoicing a policy). The
renewal term’s invoices come from the request: the invoicePlan you send
commits with the new policy, and without one the term has no invoices.
Creates a new policy via a RENEW transaction, linking it to a previous policy.
RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or
after the previous policy’s end date.
The request body is the complete initial policy state in data, exactly like
NEW_BUSINESS. Term bounds and the renewal link all live at the policy root —
policyStartDate, policyEndDate and previousPolicy are read from data. There are
no top-level parameters. The transaction produces a new policy record with a single
segment covering the full renewal term.
Policy invoices.invoicePlan is an
invoice plan: nothing in it is
defaulted or inferred, and it commits atomically with the new policy.
Billing needs pricing. The renewal term’s own pricing,
billing and invoices set its layer of the
pricing stack, and some layer must
accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo
fits none and returns 422 policy-pricing-stack-layer-inconsistent, and
nothing is saved. State the pricing (an empty pricingComponents list prices
the term at zero), or leave the billing out.
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
Body
application/json
data
object
required
The renewal policy's policy-level fields, at the top level of this object.
Must include policyStartDate, policyEndDate and previousPolicy.
May also include fullTermPricingInfo,
fullTermBillingInfo,
fullTermPolicyRatingResult and any custom fields defined in your field
configuration — including embedded exposure fields (the default configuration
models a primaryInsured object + an additionalExposures list, but the
platform imposes no structural exposure shape).
Custom fields — including the values of any embedded exposure fields — are
validated against your company's field configuration. Unknown fields are
rejected, required fields must be present, and values must match their
configured types (including option set membership). Embedded exposure
values are validated per-field against that exposure's own configuration.
Before 2026-08-05 these same fields were sent one level deeper, inside
fieldModelV1Data.policy. Send data.policyNumber where you sent
fieldModelV1Data.policy.policyNumber.
Show child attributes
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).
displayAuthor
string
Optional user-visible author label (trimmed; must be non-empty). When set, the transaction is displayed as filed by this label (e.g. "Data Import") instead of the acting user; audit attribution (createdBy) stays server-set.
Maximum string length: 255
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
Response
Renewal policy created 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/renew-policy-transaction","slug":"/api-reference/field-model-policy-transactions/renew-policy-transaction","pageMetadata":{"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","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"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 \", _jsx(_components.code, {\n children: \"data.previousPolicy\"\n }), \", 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(\", _jsx(_components.code, {\n children: \"generateQuote\"\n }), \") and \", _jsx(_components.code, {\n children: \"transactionType: RENEW\"\n }), \", then bind it.\"]\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\\nrenewal term’s invoices come from the request: the \", _jsx(_components.code, {\n children: \"invoicePlan\"\n }), \" you send\\ncommits with the new policy, and without one the term has no invoices.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Creates 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 }), \"\\n\", _jsxs(_components.p, {\n children: [\"The request body is the complete initial policy state in \", _jsx(_components.code, {\n children: \"data\"\n }), \", exactly like\\nNEW_BUSINESS. \", _jsx(_components.strong, {\n children: \"Term bounds and the renewal link all live at the policy root\"\n }), \" —\\n\", _jsx(_components.code, {\n children: \"policyStartDate\"\n }), \", \", _jsx(_components.code, {\n children: \"policyEndDate\"\n }), \" and \", _jsx(_components.code, {\n children: \"previousPolicy\"\n }), \" are read from \", _jsx(_components.code, {\n children: \"data\"\n }), \". There are\\nno top-level parameters. The transaction produces a new policy record with a single\\nsegment covering the full renewal term.\"]\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, and it commits atomically with the new policy.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Billing needs pricing.\"\n }), \" The renewal term’s own pricing,\\nbilling and invoices set its layer of the\\n\", _jsx(_components.a, {\n href: \"/api-reference/invoicing/pricing-stack\",\n children: \"pricing stack\"\n }), \", and some layer must\\naccept them: a \", _jsx(_components.code, {\n children: \"data.fullTermBillingInfo\"\n }), \" without \", _jsx(_components.code, {\n children: \"data.fullTermPricingInfo\"\n }), \"\\nfits none and returns \", _jsx(_components.code, {\n children: \"422 policy-pricing-stack-layer-inconsistent\"\n }), \", and\\nnothing is saved. State the pricing (an empty \", _jsx(_components.code, {\n children: \"pricingComponents\"\n }), \" list prices\\nthe term at zero), or leave the billing out.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required permission:\"\n }), \" \", _jsx(_components.code, {\n children: \"policy.renew\"\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":"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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"renewPolicyTransaction","summary":"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","tags":["Field Model Policy Transactions"],"parameters":["7b32d91b-a1e9-4722-9a48-8ec8b24d3d59"],"requestBody":"57788e17-b43c-425a-8d50-e8b7a60e72fe","responses":{"201":"14b27d83-3b66-4c1e-90f1-a0696e0c669b","400":"3d14c218-5352-4778-a405-888d9e8b31d5","401":"743633cd-c418-487e-892d-dc67d13614a9","403":"d496a007-6ed0-4115-97d8-0a5bb6d4d13e","404":"a71b4364-63d4-4c56-bc16-95723e6b5563","409":"6201f11d-3b50-4ecd-94c9-f61680e3bd79","422":"7c711105-5cf4-4a78-81e2-dc4a4c8823f7","500":"c7f6dfa2-0b87-4601-9a1b-5a13af365fa0"},"method":"post","type":"path","servers":["b4993f5b-e21e-4dbd-8ace-9c59b5197d8e"],"security":["35370c79-340a-4ed7-a68a-8c786f4a2235"],"path":"/api/v1/companies/{companyId}/policies/transaction/renew","baseUrlOptions":["https://go.aiinsurance.io"],"title":"Renew Policy Transaction","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7b32d91b-a1e9-4722-9a48-8ec8b24d3d59":{"name":"companyId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Company identifier","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Company identifier"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object","description":"The renewal policy's policy-level fields, at the top level of this object.\nMust include `policyStartDate`, `policyEndDate` and `previousPolicy`.\nMay also include `fullTermPricingInfo`,\n`fullTermBillingInfo`,\n`fullTermPolicyRatingResult` and any custom fields defined in your field\nconfiguration — including embedded exposure fields (the default configuration\nmodels a `primaryInsured` object + an `additionalExposures` list, but the\nplatform imposes no structural exposure shape).\n\nCustom fields — including the values of any embedded exposure fields — are\nvalidated against your company's field configuration. Unknown fields are\nrejected, required fields must be present, and values must match their\nconfigured types (including option set membership). Embedded exposure\nvalues are validated per-field against that exposure's own configuration.\n\nBefore 2026-08-05 these same fields were sent one level deeper, inside\n`fieldModelV1Data.policy`. Send `data.policyNumber` where you sent\n`fieldModelV1Data.policy.policyNumber`.\n","required":["policyStartDate","policyEndDate","previousPolicy"],"properties":{"policyStartDate":{"type":"object","description":"Renewal term start date — the lower term bound. Must be on or after the\nprevious policy's end date. Send the canonical `Date` object; `timezone`\nmay be omitted and defaults to `America/New_York`.\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":"data.policyStartDate.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":"data.policyStartDate.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":"data.policyStartDate.importedAsUnknownTimezone","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.policyStartDate","typeLabel":"object"},"policyEndDate":{"type":"object","description":"Renewal term end date — the upper term bound. Must be after\n`policyStartDate`. Send the canonical `Date` object; `timezone` may be\nomitted and defaults to `America/New_York`.\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":"data.policyEndDate.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":"data.policyEndDate.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":"data.policyEndDate.importedAsUnknownTimezone","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.policyEndDate","typeLabel":"object"},"previousPolicy":{"type":"string","format":"uuid","description":"The ID of the policy being renewed — the renewal lineage link. Required\nfor RENEW. Must be an existing policy with at least one transaction; the\nnew policy is linked to it. This link — and the\n`Policy\u003cN:1:previousPolicy>Policy` relationship it writes — is\nthe only record of the renewal chain.\n","isRequired":true,"uniqueKey":"data.previousPolicy","typeLabel":"string\u003cuuid>"},"policyStatus":{"type":"string","enum":["active"],"description":"Segment-scoped policy status, owned by the platform. A renewal term starts\n`active` for the whole term: leave this out, or send `\"active\"`. Any other\nvalue is refused with `400 SystemOwnedPolicyValue`, and nothing is saved:\nonly [Cancel Policy Transaction](/api-reference/field-model-policy-transactions/cancel-policy-transaction)\nand [Reinstate Policy Transaction](/api-reference/field-model-policy-transactions/reinstate-policy-transaction)\nswitch a policy off and on. To load a cancelled renewal, renew and then\ncancel the new policy.\n","uniqueKey":"data.policyStatus","typeLabel":"enum\u003cstring>"},"cancellationEffectiveOnDate":{"oneOf":[{"type":"object","description":"The date a cancellation takes hold, owned by the platform: Cancel stamps it\nand Reinstate clears it. Leave it out, or send `null`. Any other value is\nrefused with `400 SystemOwnedPolicyValue`, and nothing is saved.\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":"data.cancellationEffectiveOnDate.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":"data.cancellationEffectiveOnDate.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":"data.cancellationEffectiveOnDate.oneOf.0.importedAsUnknownTimezone","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"data.cancellationEffectiveOnDate.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.cancellationEffectiveOnDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.cancellationEffectiveOnDate","typeLabel":"object | null"},"policyNumber":{"type":"string","description":"The renewal term's policy number. Invariant across every segment of the\nterm. Omit it when your configuration mints one.\n","uniqueKey":"data.policyNumber","typeLabel":"string"},"fullTermPricingInfo":{"type":"object","description":"The renewal term's pricing contract. Caller-supplied — the\ntransaction API never rates. Supply `pricingComponents`; the four\nrollups (`premium`, `taxes`, `fees`, `total`) are computed by\nthe platform from the components — each component sums into the\nrollup its `classification`'s registry entry reports into\n(premium, taxes or fees), and caller-supplied rollup values are\nignored and recomputed. `total` is `premium + taxes + fees` and\naccounts for every component: the classification → rollup\nmapping is total.\n\nCommission is not priced at all — it is money owed BY us, so it\nbelongs to the Billing Aggregate's payable lines\n(`fullTermBillingInfo`). The retired `brokerCommission` /\n`programCommission` rollups are no longer computed.\n\nAn ABSENT or null container stays valid everywhere: a\npricing-free submission never enters the pricing rules.\n","properties":{"pricingComponents":{"oneOf":[{"type":"array","description":"The priced charges — one vocabulary, one shape. Every\ncomponent must carry a `classification` naming a LIVE entry\nin your company's classification registry —\nunconditionally, for every company. `label` (display text)\nand `value` (a plain number, USD) are also required.\n`qualifier` — a structured qualifier such as a jurisdiction\n— defaults to `\"\"`, and `earningSchedule` (`pro-rata` or\n`immediate`) defaults to `pro-rata`. Together\n`\u003cclassification, qualifier>` is the component's identity,\nunique within a contract, which makes `label` purely\ncosmetic.\n\n**The legacy vocabulary is retired.** The former `group`,\n`kind` and `earningBasis` fields are IGNORED AND DISCARDED\non input — never validated, never stored on a newly written\ncomponent. A client that GETs a stored component still\ncarrying them and POSTs it back keeps working (echo\ntolerance); the stated values simply do not participate.\n\n**Refusals (`400`, `InvalidPolicyData`).** A component with\nno `classification`; a `classification` that names no\nregistry entry, or names a deprecated one; an unrecognised\n`earningSchedule`; two components sharing one\n`\u003cclassification, qualifier>` pair; and any component sent\nwhile your company's classification registry has no entries\nat all — configure the classification registry first.\n","items":{"type":"object","required":["label","value","classification"],"properties":{"label":{"type":"string","description":"Display text. Purely cosmetic — identity lives in `\u003cclassification, qualifier>`.","isRequired":true,"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].label","typeLabel":"string"},"value":{"type":"number","description":"The charge amount in USD, a plain number.","isRequired":true,"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].value","typeLabel":"number"},"classification":{"type":"string","description":"Pricing classification key — the stable identity half. Must name a LIVE entry in your company's classification registry. Required on every component, for every company.","isRequired":true,"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].classification","typeLabel":"string"},"qualifier":{"oneOf":[{"type":"string","description":"Optional structured qualifier completing the identity, e.g. a jurisdiction. Defaults to `\"\"`.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].qualifier.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional structured qualifier completing the identity, e.g. a jurisdiction. Defaults to `\"\"`.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].qualifier.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].qualifier","typeLabel":"string | null"},"earningSchedule":{"oneOf":[{"type":"string","enum":["pro-rata","immediate"],"description":"How the charge earns. Omitted means `pro-rata`.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningSchedule.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pro-rata","immediate"],"description":"How the charge earns. Omitted means `pro-rata`.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningSchedule.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningSchedule","typeLabel":"enum\u003cstring> | null"},"group":{"type":"string","deprecated":true,"description":"RETIRED. Ignored and discarded on input — never validated, never stored on a newly written component. Documented only so a stored component still echoing it round-trips.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].group","typeLabel":"string"},"kind":{"type":"string","deprecated":true,"description":"RETIRED. Ignored and discarded on input — never validated, never stored on a newly written component. Documented only so a stored component still echoing it round-trips.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].kind","typeLabel":"string"},"earningBasis":{"oneOf":[{"type":"string","deprecated":true,"description":"RETIRED — succeeded by `earningSchedule`. Ignored and discarded on input; documented only so a stored component still echoing it round-trips.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningBasis.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"description":"RETIRED — succeeded by `earningSchedule`. Ignored and discarded on input; documented only so a stored component still echoing it round-trips.","uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningBasis.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX].earningBasis","typeLabel":"string | null"}},"additionalProperties":true,"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"The priced charges — one vocabulary, one shape. Every\ncomponent must carry a `classification` naming a LIVE entry\nin your company's classification registry —\nunconditionally, for every company. `label` (display text)\nand `value` (a plain number, USD) are also required.\n`qualifier` — a structured qualifier such as a jurisdiction\n— defaults to `\"\"`, and `earningSchedule` (`pro-rata` or\n`immediate`) defaults to `pro-rata`. Together\n`\u003cclassification, qualifier>` is the component's identity,\nunique within a contract, which makes `label` purely\ncosmetic.\n\n**The legacy vocabulary is retired.** The former `group`,\n`kind` and `earningBasis` fields are IGNORED AND DISCARDED\non input — never validated, never stored on a newly written\ncomponent. A client that GETs a stored component still\ncarrying them and POSTs it back keeps working (echo\ntolerance); the stated values simply do not participate.\n\n**Refusals (`400`, `InvalidPolicyData`).** A component with\nno `classification`; a `classification` that names no\nregistry entry, or names a deprecated one; an unrecognised\n`earningSchedule`; two components sharing one\n`\u003cclassification, qualifier>` pair; and any component sent\nwhile your company's classification registry has no entries\nat all — configure the classification registry first.\n","items":{"type":"object","required":["label","value","classification"],"properties":{"label":{"type":"string","description":"Display text. Purely cosmetic — identity lives in `\u003cclassification, qualifier>`."},"value":{"type":"number","description":"The charge amount in USD, a plain number."},"classification":{"type":"string","description":"Pricing classification key — the stable identity half. Must name a LIVE entry in your company's classification registry. Required on every component, for every company."},"qualifier":{"oneOf":[{"type":"string","description":"Optional structured qualifier completing the identity, e.g. a jurisdiction. Defaults to `\"\"`."},{"type":"null","description":"Optional structured qualifier completing the identity, e.g. a jurisdiction. Defaults to `\"\"`."}]},"earningSchedule":{"oneOf":[{"type":"string","enum":["pro-rata","immediate"],"description":"How the charge earns. Omitted means `pro-rata`."},{"type":"null","enum":["pro-rata","immediate"],"description":"How the charge earns. Omitted means `pro-rata`."}]},"group":{"type":"string","deprecated":true,"description":"RETIRED. Ignored and discarded on input — never validated, never stored on a newly written component. Documented only so a stored component still echoing it round-trips."},"kind":{"type":"string","deprecated":true,"description":"RETIRED. Ignored and discarded on input — never validated, never stored on a newly written component. Documented only so a stored component still echoing it round-trips."},"earningBasis":{"oneOf":[{"type":"string","deprecated":true,"description":"RETIRED — succeeded by `earningSchedule`. Ignored and discarded on input; documented only so a stored component still echoing it round-trips."},{"type":"null","deprecated":true,"description":"RETIRED — succeeded by `earningSchedule`. Ignored and discarded on input; documented only so a stored component still echoing it round-trips."}]}},"additionalProperties":true},"uniqueKey":"data.fullTermPricingInfo.pricingComponents.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermPricingInfo.pricingComponents","typeLabel":"object[] | null"}},"additionalProperties":true,"uniqueKey":"data.fullTermPricingInfo","typeLabel":"object"},"fullTermBillingInfo":{"oneOf":[{"type":"object","description":"The policy's **Billing Aggregate** for the term: what is owed, per line item,\nfree of invoices.\n\nIt is the billing sibling of `fullTermPricingInfo` — a policy states its price\nin one container and its billing obligations in the other — and, like it, is a\nreserved full-term container: invariant across every segment of the term,\nbanned from a `deltas` path at any depth (it has its own channel), and hoisted\nonto responses beside `fullTermPricingInfo`.\n\nIt deliberately carries no pricing `classification` and no rollup, so\nper-rollup cash stays a naming convention over line items rather than schema.\n\n**A quote's billing is calculated.** Quote billing is an always-owned\ncalculation: the company's Quote billing calculation derives it from the\nquote's pricing. By-value bind and Policy API inputs are caller-valued.\n\n**Structure is validated when billing is accepted** — shape, `direction` membership,\nfinite `amount`s, and `\u003cinvoiceType, lineItem>` uniqueness.\n\n**Two further laws apply unconditionally,**\non every persisted version that states an aggregate:\n\n- **The receivable checksum.** The `amount`s of the `receivable` lines sum\n exactly to `fullTermPricingInfo.total`. A transaction that moves the price\n without restating the lines is refused with a `400` and the error code\n `finv2-policy-billing-checksum`, which carries the gap in cents. This is also\n the endorsement restate-or-refuse gate: paid invoices are never edited, and a\n delta lands as new signed invoices. The message states\n the signed price-minus-receivables gap: a policy transaction is told to\n restate `fullTermBillingInfo` to match `fullTermPricingInfo.total`, and a\n quote bind to re-rate the quote.\n- **Per-line vocabulary and direction.** Each `\u003cinvoiceType, lineItem>` must\n name a live policy invoice type and line item type, and the `direction` you\n state must be the one that line item is configured with — a checked\n assertion, not an input. Otherwise the write is refused with a `400` and the\n code `finv2-policy-billing-vocabulary`, naming every offending line rather\n than the first.\n\nAn aggregate you do not state is exempt from both, and a policy with no billing\nconfiguration still prices and earns.\n\n**Every transaction stores the billing you state as is.** A cancel does not scale it and a reinstate does not restore it; pricing\nstill follows the earned-floor and restore rules, so state billing whose\n`receivable` lines add up to that price. Billing you do not state stores\nnone, so an endorse, cancel or reinstate that leaves it out drops a billed\nterm's billing. Billing is one part of the policy's layer in the\n[pricing stack](/api-reference/invoicing/pricing-stack): such a change keeps\nthe policy at its layer unless it names the move in `pricingStackLayerChange`, and one\nthat moves it without naming the move is refused with a `422` and the code\n`policy-pricing-stack-layer-change`. To keep a billed term's billing, state it\nagain, changed or unchanged. A saved quote's bind lands at the quote's\nintended layer instead.\n\nThis is **not** the retired pre-2026-08-05 `fullTermPolicyBillingInfo`, which\nstays rejected: that name belonged to the container now called\n`fullTermPricingInfo`. `fullTermBillingInfo` is a new container holding a\ngenuinely different fact — a price is not an obligation.\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":"data.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":"data.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":"data.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":"data.fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"additionalProperties":true,"uniqueKey":"data.fullTermBillingInfo.oneOf.0.lines.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.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":"data.fullTermBillingInfo.oneOf.0.lines.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermBillingInfo.oneOf.0.lines","typeLabel":"object[] | null"}},"additionalProperties":true,"uniqueKey":"data.fullTermBillingInfo.oneOf.0","typeLabel":"object"},{"type":"null","description":"The policy's **Billing Aggregate** for the term: what is owed, per line item,\nfree of invoices.\n\nIt is the billing sibling of `fullTermPricingInfo` — a policy states its price\nin one container and its billing obligations in the other — and, like it, is a\nreserved full-term container: invariant across every segment of the term,\nbanned from a `deltas` path at any depth (it has its own channel), and hoisted\nonto responses beside `fullTermPricingInfo`.\n\nIt deliberately carries no pricing `classification` and no rollup, so\nper-rollup cash stays a naming convention over line items rather than schema.\n\n**A quote's billing is calculated.** Quote billing is an always-owned\ncalculation: the company's Quote billing calculation derives it from the\nquote's pricing. By-value bind and Policy API inputs are caller-valued.\n\n**Structure is validated when billing is accepted** — shape, `direction` membership,\nfinite `amount`s, and `\u003cinvoiceType, lineItem>` uniqueness.\n\n**Two further laws apply unconditionally,**\non every persisted version that states an aggregate:\n\n- **The receivable checksum.** The `amount`s of the `receivable` lines sum\n exactly to `fullTermPricingInfo.total`. A transaction that moves the price\n without restating the lines is refused with a `400` and the error code\n `finv2-policy-billing-checksum`, which carries the gap in cents. This is also\n the endorsement restate-or-refuse gate: paid invoices are never edited, and a\n delta lands as new signed invoices. The message states\n the signed price-minus-receivables gap: a policy transaction is told to\n restate `fullTermBillingInfo` to match `fullTermPricingInfo.total`, and a\n quote bind to re-rate the quote.\n- **Per-line vocabulary and direction.** Each `\u003cinvoiceType, lineItem>` must\n name a live policy invoice type and line item type, and the `direction` you\n state must be the one that line item is configured with — a checked\n assertion, not an input. Otherwise the write is refused with a `400` and the\n code `finv2-policy-billing-vocabulary`, naming every offending line rather\n than the first.\n\nAn aggregate you do not state is exempt from both, and a policy with no billing\nconfiguration still prices and earns.\n\n**Every transaction stores the billing you state as is.** A cancel does not scale it and a reinstate does not restore it; pricing\nstill follows the earned-floor and restore rules, so state billing whose\n`receivable` lines add up to that price. Billing you do not state stores\nnone, so an endorse, cancel or reinstate that leaves it out drops a billed\nterm's billing. Billing is one part of the policy's layer in the\n[pricing stack](/api-reference/invoicing/pricing-stack): such a change keeps\nthe policy at its layer unless it names the move in `pricingStackLayerChange`, and one\nthat moves it without naming the move is refused with a `422` and the code\n`policy-pricing-stack-layer-change`. To keep a billed term's billing, state it\nagain, changed or unchanged. A saved quote's bind lands at the quote's\nintended layer instead.\n\nThis is **not** the retired pre-2026-08-05 `fullTermPolicyBillingInfo`, which\nstays rejected: that name belonged to the container now called\n`fullTermPricingInfo`. `fullTermBillingInfo` is a new container holding a\ngenuinely different fact — a price is not an obligation.\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"},"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}},{"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}}]}},"additionalProperties":true,"uniqueKey":"data.fullTermBillingInfo.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fullTermBillingInfo","typeLabel":"object | null"},"fullTermPolicyRatingResult":{"type":"object","description":"Optional canonical policy-level rating result for the renewal term. Caller-supplied.\n","additionalProperties":true,"uniqueKey":"data.fullTermPolicyRatingResult","typeLabel":"object"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"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>"},"displayAuthor":{"type":"string","maxLength":255,"description":"Optional user-visible author label (trimmed; must be non-empty). When set, the transaction is displayed as filed by this label (e.g. \"Data Import\") instead of the acting user; audit attribution (`createdBy`) stays server-set.","uniqueKey":"displayAuthor","typeLabel":"string"},"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"}},"uniqueKey":"","typeLabel":"object"},"examples":{"annualRenewal":{"title":"annualRenewal","value":{"data":{"policyStatus":"active","annualPremium":90000,"policyStartDate":{"date":"2026-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2027-01-01","timezone":"America/New_York"},"previousPolicy":"550e8400-e29b-41d4-a716-446655440001","fullTermPricingInfo":{"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","value":90000},{"label":"Policy Fee","classification":"policy-fee","value":500}]},"primaryInsured":{"id":"550e8400-e29b-41d4-a716-446655440010","exposureType":"MedicalFacility","bedCount":120},"additionalExposures":[]}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"14b27d83-3b66-4c1e-90f1-a0696e0c669b":{"description":"Renewal policy created 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","value":{"policyId":"550e8400-e29b-41d4-a716-446655440060","policyVersion":1,"transactionId":"550e8400-e29b-41d4-a716-446655440061","startDate":"2026-01-01","endDate":"2027-01-01","createdAt":"2025-12-15T10:30:00.000Z","primaryInsuredName":"Mercy General Hospital","primaryInsuredId":"550e8400-e29b-41d4-a716-446655440010","policyNumber":"POL-2026-000456","policyStartDate":{"date":"2026-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2027-01-01","timezone":"America/New_York"},"fullTermPricingInfo":{"premium":90000,"taxes":0,"fees":500,"total":90500,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":90000},{"label":"Policy Fee","classification":"policy-fee","qualifier":"","earningSchedule":"pro-rata","value":500}]},"fullTermBillingInfo":null,"fullTermPolicyRatingResult":null,"segments":[{"startDate":"2026-01-01","endDate":"2027-01-01","transactionType":"RENEW","data":{"policyStatus":"active","policyNumber":"POL-2026-000456","policyStartDate":{"date":"2026-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2027-01-01","timezone":"America/New_York"},"previousPolicy":"550e8400-e29b-41d4-a716-446655440001","primaryInsuredId":"550e8400-e29b-41d4-a716-446655440010","primaryInsuredName":"Mercy General Hospital","annualPremium":90000,"fullTermPricingInfo":{"premium":90000,"taxes":0,"fees":500,"total":90500,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":90000},{"label":"Policy Fee","classification":"policy-fee","qualifier":"","earningSchedule":"pro-rata","value":500}]},"primaryInsured":{"id":"550e8400-e29b-41d4-a716-446655440010","exposureType":"MedicalFacility","bedCount":120},"additionalExposures":[]}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"3d14c218-5352-4778-a405-888d9e8b31d5":{"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":{"invalidDateRange":{"title":"invalidDateRange","value":{"error":{"code":"InvalidDateRange","message":"policyEndDate must be after policyStartDate"}}},"startDateBeforePreviousEnd":{"title":"startDateBeforePreviousEnd","value":{"error":{"code":"InvalidRequest","message":"policyStartDate (2025-06-01) must be >= previous policy end date (2025-12-31)"}}},"missingPreviousPolicy":{"title":"missingPreviousPolicy","value":{"error":{"code":"InvalidRequest","message":"previousPolicy is required for RENEW (uuid)"}}},"policyStatedCancelled":{"title":"policyStatedCancelled","value":{"error":{"code":"SystemOwnedPolicyValue","message":"A renewal cannot change policyStatus: it is system-owned, and only the Cancel and Reinstate transactions switch a policy off and on. Leave it out, or send the value a new policy starts with (policyStatus: \"active\"); to cancel the policy, write it and then use the Cancel transaction."}}},"fieldConfigValidation":{"title":"fieldConfigValidation","value":{"error":{"code":"InvalidFieldModelV1Data","message":"Unknown field 'nonExistentField'; Field 'bedCount' expected number, got string"}}},"missingClassification":{"title":"missingClassification","value":{"error":{"code":"InvalidPolicyData","message":"'fullTermPricingInfo.pricingComponents[0]' states no classification — the legacy component vocabulary (group/kind/earningBasis) is no longer accepted as input; state a classification naming a live pricing classification (live keys: [policy-premium, surplus-lines-tax, policy-fee])"}}}},"exampleType":"examples"}},"exampleType":"examples"},"743633cd-c418-487e-892d-dc67d13614a9":{"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"},"d496a007-6ed0-4115-97d8-0a5bb6d4d13e":{"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"},"a71b4364-63d4-4c56-bc16-95723e6b5563":{"description":"Previous 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":{"previousPolicyNotFound":{"title":"previousPolicyNotFound","value":{"error":{"code":"NOT_FOUND","message":"Policy 550e8400-e29b-41d4-a716-446655440099 not found"}}}},"exampleType":"examples"}},"exampleType":"examples"},"6201f11d-3b50-4ecd-94c9-f61680e3bd79":{"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"},"7c711105-5cf4-4a78-81e2-dc4a4c8823f7":{"description":"invoicePlan failed policy-invoice binding, conservation, payment-lock, or restating preconditions, or the renewal term's pricing, billing and invoices fit no layer of the pricing stack (`policy-pricing-stack-layer-inconsistent`: billing without pricing); 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":{"newTermFitsNoLayer":{"title":"newTermFitsNoLayer","value":{"error":{"code":"policy-pricing-stack-layer-inconsistent","message":"This new term states fullTermBillingInfo without fullTermPricingInfo, so it fits no layer: billing needs pricing. State fullTermPricingInfo, or leave fullTermBillingInfo out.","userMessages":["This new term states fullTermBillingInfo without fullTermPricingInfo, so it fits no layer: billing needs pricing. State fullTermPricingInfo, or leave fullTermBillingInfo out."]}}}},"exampleType":"examples"}},"exampleType":"examples"},"c7f6dfa2-0b87-4601-9a1b-5a13af365fa0":{"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":"Renew Policy Transaction - AI Insurance","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T17:32:13.631Z","originalFileLocation":"api-reference/field-model-policy-transactions/renew-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=\"Creates the renewal term of an existing policy directly from its complete data as a RENEW transaction: a new bound policy, linked to the expiring one through data.previousPolicy, that starts on or after the expiring term ends. Use it when you already hold the renewal\u0026#x27;s data. To renew through a quote, generate the draft with Generate Quote from Policy (Stateless) (generateQuote) and transactionType: RENEW, then bind it. Value door (Invoicing a policy). The renewal term\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the new policy, and without one the term has no invoices. Creates a new policy via a RENEW transaction, linking it to a previous policy. RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or after the previous policy\u0026#x27;s end date. The request body is the complete initial policy state in data, exactly like NEW_BUSINESS. Term bounds and the renewal link all live at the policy root — policyStartDate, policyEndDate and previousPolicy are read from data. There are no top-level parameters. The transaction produces a new policy record with a single segment covering the full renewal term. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it commits atomically with the new policy. Billing needs pricing. The renewal term\u0026#x27;s own pricing, billing and invoices set its layer of the pricing stack, and some layer must accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo fits none and returns 422 policy-pricing-stack-layer-inconsistent, and nothing is saved. State the pricing (an empty pricingComponents list prices the term at zero), or leave the billing out. Required permission: policy.renew\">\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=\"Renew Policy Transaction - AI Insurance\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates the renewal term of an existing policy directly from its complete data as a RENEW transaction: a new bound policy, linked to the expiring one through data.previousPolicy, that starts on or after the expiring term ends. Use it when you already hold the renewal\u0026#x27;s data. To renew through a quote, generate the draft with Generate Quote from Policy (Stateless) (generateQuote) and transactionType: RENEW, then bind it. Value door (Invoicing a policy). The renewal term\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the new policy, and without one the term has no invoices. Creates a new policy via a RENEW transaction, linking it to a previous policy. RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or after the previous policy\u0026#x27;s end date. The request body is the complete initial policy state in data, exactly like NEW_BUSINESS. Term bounds and the renewal link all live at the policy root — policyStartDate, policyEndDate and previousPolicy are read from data. There are no top-level parameters. The transaction produces a new policy record with a single segment covering the full renewal term. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it commits atomically with the new policy. Billing needs pricing. The renewal term\u0026#x27;s own pricing, billing and invoices set its layer of the pricing stack, and some layer must accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo fits none and returns 422 policy-pricing-stack-layer-inconsistent, and nothing is saved. State the pricing (an empty pricingComponents list prices the term at zero), or leave the billing out. Required permission: policy.renew\">\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/renew-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=Renew+Policy+Transaction\u0026amp;description=Creates+the+renewal+term+of+an+existing+policy+directly+from+its+complete%0Adata+as+a+RENEW+transaction%3A+a+new+bound+policy%2C+linked+to+the+expiring+one%0Athrough+%60d\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=68d8cd43533e925b965018f982234583a279c9997e63090d0ae68e495b6cbd78\">\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=\"Renew Policy Transaction - AI Insurance\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates the renewal term of an existing policy directly from its complete data as a RENEW transaction: a new bound policy, linked to the expiring one through data.previousPolicy, that starts on or after the expiring term ends. Use it when you already hold the renewal\u0026#x27;s data. To renew through a quote, generate the draft with Generate Quote from Policy (Stateless) (generateQuote) and transactionType: RENEW, then bind it. Value door (Invoicing a policy). The renewal term\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the new policy, and without one the term has no invoices. Creates a new policy via a RENEW transaction, linking it to a previous policy. RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or after the previous policy\u0026#x27;s end date. The request body is the complete initial policy state in data, exactly like NEW_BUSINESS. Term bounds and the renewal link all live at the policy root — policyStartDate, policyEndDate and previousPolicy are read from data. There are no top-level parameters. The transaction produces a new policy record with a single segment covering the full renewal term. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it commits atomically with the new policy. Billing needs pricing. The renewal term\u0026#x27;s own pricing, billing and invoices set its layer of the pricing stack, and some layer must accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo fits none and returns 422 policy-pricing-stack-layer-inconsistent, and nothing is saved. State the pricing (an empty pricingComponents list prices the term at zero), or leave the billing out. Required permission: policy.renew\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=Renew+Policy+Transaction\u0026amp;description=Creates+the+renewal+term+of+an+existing+policy+directly+from+its+complete%0Adata+as+a+RENEW+transaction%3A+a+new+bound+policy%2C+linked+to+the+expiring+one%0Athrough+%60d\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=68d8cd43533e925b965018f982234583a279c9997e63090d0ae68e495b6cbd78\">\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/renew-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/renew-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/renew-policy-transaction#webpage\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction\",\"name\":\"Renew Policy Transaction\",\"description\":\"Creates the renewal term of an existing policy directly from its complete data as a RENEW transaction: a new bound policy, linked to the expiring one through data.previousPolicy, that starts on or after the expiring term ends. Use it when you already hold the renewal's data. To renew through a quote, generate the draft with Generate Quote from Policy (Stateless) (generateQuote) and transactionType: RENEW, then bind it. Value door (Invoicing a policy). The renewal term's invoices come from the request: the invoicePlan you send commits with the new policy, and without one the term has no invoices. Creates a new policy via a RENEW transaction, linking it to a previous policy. RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or after the previous policy's end date. The request body is the complete initial policy state in data, exactly like NEW_BUSINESS. Term bounds and the renewal link all live at the policy root — policyStartDate, policyEndDate and previousPolicy are read from data. There are no top-level parameters. The transaction produces a new policy record with a single segment covering the full renewal term. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it commits atomically with the new policy. Billing needs pricing. The renewal term's own pricing, billing and invoices set its layer of the pricing stack, and some layer must accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo fits none and returns 422 policy-pricing-stack-layer-inconsistent, and nothing is saved. State the pricing (an empty pricingComponents list prices the term at zero), or leave the billing out. Required permission: policy.renew\",\"dateModified\":\"2026-11-13T17:32:13.631Z\",\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-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\":\"Renew Policy Transaction\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction#apireference\",\"headline\":\"Renew Policy Transaction\",\"name\":\"Renew Policy Transaction\",\"description\":\"Creates the renewal term of an existing policy directly from its complete data as a RENEW transaction: a new bound policy, linked to the expiring one through data.previousPolicy, that starts on or after the expiring term ends. Use it when you already hold the renewal's data. To renew through a quote, generate the draft with Generate Quote from Policy (Stateless) (generateQuote) and transactionType: RENEW, then bind it. Value door (Invoicing a policy). The renewal term's invoices come from the request: the invoicePlan you send commits with the new policy, and without one the term has no invoices. Creates a new policy via a RENEW transaction, linking it to a previous policy. RENEW is NEW_BUSINESS plus a renewal link: the new policy term must start on or after the previous policy's end date. The request body is the complete initial policy state in data, exactly like NEW_BUSINESS. Term bounds and the renewal link all live at the policy root — policyStartDate, policyEndDate and previousPolicy are read from data. There are no top-level parameters. The transaction produces a new policy record with a single segment covering the full renewal term. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it commits atomically with the new policy. Billing needs pricing. The renewal term's own pricing, billing and invoices set its layer of the pricing stack, and some layer must accept them: a data.fullTermBillingInfo without data.fullTermPricingInfo fits none and returns 422 policy-pricing-stack-layer-inconsistent, and nothing is saved. State the pricing (an empty pricingComponents list prices the term at zero), or leave the billing out. Required permission: policy.renew\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/renew-policy-transaction#webpage\"},\"dateModified\":\"2026-11-13T17:32:13.631Z\",\"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/renew-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","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","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"},{"title":"Renew Policy Transaction","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)","description":"Starts an endorsement, renewal, cancellation or reinstatement of a bound\npolicy by returning the draft quote data for that change, without saving\nanything. Edit the draft, then bind it with Bind Quote by Reference or by\nValue (`bindQuoteByValue`), or save it with Create Entity (`createEntity`)\nand bind it with Bind Quote (`bindQuote`). New business has no source\npolicy, so build that quote yourself.\n\nReturns the editable Quote data a transaction on an existing policy would\nstart from — **without persisting anything**. No quote is stored, no quote\nnumber or id is allocated, no relationship is created, no audit row is\nwritten, and no token, draft session or retry receipt is minted. Generation\nis a pure read.\n\nUse it to build your own transaction UI: generate, let your user edit the\nreturned `data`, then either bind it by value with\n[Bind Quote by Reference or by Value](/api-reference/field-model-policy-transactions/bind-quote-by-reference-or-by-value),\nor save it as a quote and bind that quote, as described below. Bound by\nvalue, everything the server needs travels in the request, so there is no\nstate to keep between the two calls.\n\n**Changing a bound policy through a saved quote.** An endorsement,\ncancellation or reinstatement can go through a quote of its own, as in the\napp, so that its bind replaces the policy's invoices the way the quote's\ninvoicing says ([Quote invoicing](/api-reference/invoicing/quote-invoicing#starting-a-change-to-a-bound-policy)):\n\n1. Generate the change's draft here. Nothing is saved.\n2. Save it with [Create Entity](/api-reference/entities/create-entity)\n (`POST …/entities/quote`): send the draft's whole `data` as\n `entityData`, with your edits applied (for an endorsement, change only\n the fields that change\n and keep the rest as generated), and set two fields the draft leaves\n `null` unless your Conversion Rules write them: `referencingPolicy`, the\n policy's id, and the change's date in `endorsementEffectiveDate`,\n `cancellationEffectiveDate` or `reinstatementDate`. Use the\n `effectiveDate` you generated with, written the way the quote writes\n `policyStartDate`, for example\n `{\"date\": \"2026-12-15\", \"timezone\": \"America/New_York\"}`. An endorsement\n generated with an `endDate` also sets `endorsementEndDate`; without it\n the endorsement runs to `policyEndDate`.\n3. For an endorsement, rate the quote with\n [Rate Saved Quote by Id](/api-reference/field-model-rating/rate-saved-quote-by-id),\n which returns the rating without saving it on the quote (a rating that\n fails is still a `200`, with `diagnostics` and no `data`), and save the\n rating outputs from its `data` with\n [Update Entity](/api-reference/entities/update-entity). Don't rate a\n cancellation or reinstatement (it returns `400`): its draft already has\n the pricing the platform derives.\n4. Bind it with [Bind Quote](/api-reference/field-model-policy-transactions/bind-quote)\n and `{\"invoices\": \"generate\"}`, or prepare its plan with the\n [quote invoicing](/api-reference/invoicing/quote-invoicing) endpoints and\n bind with `{\"invoices\": \"saved\"}`.\n\nSaving a change quote without `referencingPolicy` is refused. Without its\nchange date it saves, but\n[Generate Quote Invoices](/api-reference/policy-invoicing/generate-quote-invoices)\nand [Attach Quote Invoice Plan](/api-reference/policy-invoicing/attach-quote-invoice-plan)\nrefuse it with `400 finv2-invalid-quote-transaction-metadata`, and its bind\nreturns `400`.\n`validationIssues` reports neither field, because a bind by value takes\nthe policy and the date from its own request.\n\n**What produces the data.** Your company's configured Conversion Rules for\n(`POLICY_TO_QUOTE`, the requested `transactionType`) are evaluated\nserver-side against a single resolved segment of the source policy. Each rule\nwrites one destination field on the Quote. The rules are part of your\nfield-model configuration — what carries between a policy and a quote is\nauthored and reviewable, not inferred.\n\n**The data is the finished draft.** It has every field your Quote\nconfiguration declares, with every calculated field worked out as a save\nwould, `fullTermBillingInfo` included (null while policy invoicing is\ndisabled). A field nothing fills is `null`. A value that needs a saved quote,\nsuch as a generated quote number, is `null` until the quote is saved.\nNothing is saved. `quoteType` is set from `transactionType` — `ENDORSE`\ngives `endorsement`, `RENEW` gives `renewal`, `CANCEL` gives\n`cancellation` and `REINSTATE` gives `reinstatement` — whatever your rules\nwrite, so calculated fields that read it are worked out for that\ntransaction. A field you must supply that the draft lacks is reported in\n`validationIssues` and comes back `null`. If a value fails its field's type\ncheck, the calculated fields are not worked out and the finding names the\nfield.\n\n**A `CANCEL` or `REINSTATE` draft carries the derived pricing its save will\nstore.** Its `cancelReinstateDerivedPricing` is the pricing the platform\nderives for the policy at `effectiveDate`, as the quote's save and bind\nderive it, and its `fullTermPricingInfo` starts from the same figures. A\npolicy whose pricing cannot be derived at that date, such as a\ncancellation of a policy that is no longer active then, returns\n`422 cancel-reinstate-pricing-unavailable`, the refusal its save would\nreturn, with no draft.\n\n**Which segment of the policy is read**, per transaction type — always\nagainst the policy's latest committed version:\n\n| `transactionType` | Segment read |\n| --- | --- |\n| `ENDORSE` | the segment covering `effectiveDate` |\n| `CANCEL` | the segment covering `effectiveDate` |\n| `REINSTATE` | the segment covering `effectiveDate` on the cancelled version |\n| `RENEW` | the last segment of the expiring term |\n\n**Four transaction types, and why `NEW_BUSINESS` is not one of them.** This\noperation converts *from* a policy, and new business has no source policy to\nconvert from. New business is fully supported at bind: compose the field bag\nyourself and post it, exactly as you do today.\n\n**Concurrency.** `sourcePolicy.policyVersion` is the version the returned bag\nwas derived from. Echo it as `expectedPolicyVersion` on the bind request and\nthe bind is refused with a `409` if the policy moved while your user was\nediting. That is the entire concurrency contract — the server holds nothing\non your behalf.\n\n**`200` with findings vs. an error.** The dividing rule is FIXABILITY, not\nseverity. Anything your user can fix by editing the returned draft comes back\nas a `200` with entries in `validationIssues` and a usable `data` bag.\nAnything they cannot fix by editing — an unknown policy, a policy in the\nwrong state for the transaction, missing or failing Conversion Rules — is a\nstructured error with no draft at all.\n\nConversion uses the company’s explicitly authored rules. Missing required\nconfiguration is an error; matching field names do not supply a fallback.\n\n**Required permission:** the requested `transactionType`'s own permission —\n`policy.endorse`, `policy.cancel`, `policy.reinstate` or `policy.renew`.\nGenerating is the read half of authoring that transaction.\n","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":"Renew 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"]}