Creates a bound policy directly from its complete data as a NEW_BUSINESS
transaction, covering policyStartDate to policyEndDate with the premium,
billing and invoice plan you send. Use it to load policies bound elsewhere
or to book a policy without a quote. To bind a saved quote, use Bind Quote
(bindQuote); for the next term of an existing policy, use Renew Policy
Transaction (renewPolicyTransaction). Call Get Policy Configuration
(getPolicyV1Configuration) first for the field keys that data takes.
Value door (Invoicing a policy). The new
policy’s invoices come from the request: the invoicePlan you send
commits with the policy, and without one the policy has no invoices.
Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the
transaction-based policy lifecycle. The transaction produces a single segment covering
the full policy term.
The request body is the complete initial policy state in data — the policy-level fields
at the top level of that object. Any embedded exposure fields your company configuration
defines (e.g. primaryInsured / additionalExposures in the default configuration) ride
along as ordinary configured fields, validated per-field against the Exposure
configuration. The primary insured is derived from those exposures; you do not send it.
Term bounds come solely from the policy’s own root fields.policyStartDate and
policyEndDate are read from data.policyStartDate and data.policyEndDate — there are
no top-level date parameters. The transaction’s effective date is the policy start date.
Policy invoices.invoicePlan is an
invoice plan: nothing in it is
defaulted or inferred, and it is validated and committed atomically with
the policy.
Billing needs pricing. The new policy’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.
Headers
Idempotency-Key
string
A unique key of 1 to 255 printable ASCII characters for retrying this write. Within 30 days of the successful attempt's admission, reuse with the same request returns the original transaction; retries do not extend that window. After 30 days the same key runs as a new write, even if the request differs.
Required string length: 1 - 255
Path Parameters
companyId
string<uuid>
required
Company identifier
Body
application/json
data
object
required
The policy-level fields, at the top level of this object. Must include
policyStartDate and policyEndDate. 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
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/new-business-transaction","slug":"/api-reference/field-model-policy-transactions/new-business-transaction","pageMetadata":{"title":"New Business Transaction","description":"Creates a bound policy directly from its complete data as a NEW_BUSINESS\ntransaction, covering `policyStartDate` to `policyEndDate` with the premium,\nbilling and invoice plan you send. Use it to load policies bound elsewhere\nor to book a policy without a quote. To bind a saved quote, use Bind Quote\n(`bindQuote`); for the next term of an existing policy, use Renew Policy\nTransaction (`renewPolicyTransaction`). Call Get Policy Configuration\n(`getPolicyV1Configuration`) first for the field keys that `data` takes.\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The new\npolicy's invoices come from the request: the `invoicePlan` you send\ncommits with the policy, and without one the policy has no invoices.\n\nCreates a new policy via a NEW_BUSINESS transaction. This is the entry point for the\ntransaction-based policy lifecycle. The transaction produces a single segment covering\nthe full policy term.\n\nThe request body is the complete initial policy state in `data` — the policy-level fields\nat the top level of that object. Any embedded exposure fields your company configuration\ndefines (e.g. `primaryInsured` / `additionalExposures` in the default configuration) ride\nalong as ordinary configured fields, validated per-field against the Exposure\nconfiguration. The primary insured is derived from those exposures; you do not send it.\n\n**Term bounds come solely from the policy's own root fields.** `policyStartDate` and\n`policyEndDate` are read from `data.policyStartDate` and `data.policyEndDate` — there are\nno top-level date parameters. The transaction's effective date is the policy start date.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred, and it is validated and committed atomically with\nthe policy.\n\n**Billing needs pricing.** The new policy'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.new-business`\n","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","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 a bound policy directly from its complete data as a NEW_BUSINESS\\ntransaction, covering \", _jsx(_components.code, {\n children: \"policyStartDate\"\n }), \" to \", _jsx(_components.code, {\n children: \"policyEndDate\"\n }), \" with the premium,\\nbilling and invoice plan you send. Use it to load policies bound elsewhere\\nor to book a policy without a quote. To bind a saved quote, use Bind Quote\\n(\", _jsx(_components.code, {\n children: \"bindQuote\"\n }), \"); for the next term of an existing policy, use Renew Policy\\nTransaction (\", _jsx(_components.code, {\n children: \"renewPolicyTransaction\"\n }), \"). Call Get Policy Configuration\\n(\", _jsx(_components.code, {\n children: \"getPolicyV1Configuration\"\n }), \") first for the field keys that \", _jsx(_components.code, {\n children: \"data\"\n }), \" takes.\"]\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 new\\npolicy’s invoices come from the request: the \", _jsx(_components.code, {\n children: \"invoicePlan\"\n }), \" you send\\ncommits with the policy, and without one the policy has no invoices.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the\\ntransaction-based policy lifecycle. The transaction produces a single segment covering\\nthe full policy term.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The request body is the complete initial policy state in \", _jsx(_components.code, {\n children: \"data\"\n }), \" — the policy-level fields\\nat the top level of that object. Any embedded exposure fields your company configuration\\ndefines (e.g. \", _jsx(_components.code, {\n children: \"primaryInsured\"\n }), \" / \", _jsx(_components.code, {\n children: \"additionalExposures\"\n }), \" in the default configuration) ride\\nalong as ordinary configured fields, validated per-field against the Exposure\\nconfiguration. The primary insured is derived from those exposures; you do not send it.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Term bounds come solely from the policy’s own root fields.\"\n }), \" \", _jsx(_components.code, {\n children: \"policyStartDate\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"policyEndDate\"\n }), \" are read from \", _jsx(_components.code, {\n children: \"data.policyStartDate\"\n }), \" and \", _jsx(_components.code, {\n children: \"data.policyEndDate\"\n }), \" — there are\\nno top-level date parameters. The transaction’s effective date is the policy start date.\"]\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 is validated and committed atomically with\\nthe policy.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Billing needs pricing.\"\n }), \" The new policy’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.new-business\"\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":"New Business Transaction","description":"Creates a bound policy directly from its complete data as a NEW_BUSINESS\ntransaction, covering `policyStartDate` to `policyEndDate` with the premium,\nbilling and invoice plan you send. Use it to load policies bound elsewhere\nor to book a policy without a quote. To bind a saved quote, use Bind Quote\n(`bindQuote`); for the next term of an existing policy, use Renew Policy\nTransaction (`renewPolicyTransaction`). Call Get Policy Configuration\n(`getPolicyV1Configuration`) first for the field keys that `data` takes.\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The new\npolicy's invoices come from the request: the `invoicePlan` you send\ncommits with the policy, and without one the policy has no invoices.\n\nCreates a new policy via a NEW_BUSINESS transaction. This is the entry point for the\ntransaction-based policy lifecycle. The transaction produces a single segment covering\nthe full policy term.\n\nThe request body is the complete initial policy state in `data` — the policy-level fields\nat the top level of that object. Any embedded exposure fields your company configuration\ndefines (e.g. `primaryInsured` / `additionalExposures` in the default configuration) ride\nalong as ordinary configured fields, validated per-field against the Exposure\nconfiguration. The primary insured is derived from those exposures; you do not send it.\n\n**Term bounds come solely from the policy's own root fields.** `policyStartDate` and\n`policyEndDate` are read from `data.policyStartDate` and `data.policyEndDate` — there are\nno top-level date parameters. The transaction's effective date is the policy start date.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred, and it is validated and committed atomically with\nthe policy.\n\n**Billing needs pricing.** The new policy'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.new-business`\n","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","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"newBusinessPolicyTransaction","summary":"New Business Transaction","description":"Creates a bound policy directly from its complete data as a NEW_BUSINESS\ntransaction, covering `policyStartDate` to `policyEndDate` with the premium,\nbilling and invoice plan you send. Use it to load policies bound elsewhere\nor to book a policy without a quote. To bind a saved quote, use Bind Quote\n(`bindQuote`); for the next term of an existing policy, use Renew Policy\nTransaction (`renewPolicyTransaction`). Call Get Policy Configuration\n(`getPolicyV1Configuration`) first for the field keys that `data` takes.\n\n**Value door** ([Invoicing a policy](/api-reference/invoicing/overview)). The new\npolicy's invoices come from the request: the `invoicePlan` you send\ncommits with the policy, and without one the policy has no invoices.\n\nCreates a new policy via a NEW_BUSINESS transaction. This is the entry point for the\ntransaction-based policy lifecycle. The transaction produces a single segment covering\nthe full policy term.\n\nThe request body is the complete initial policy state in `data` — the policy-level fields\nat the top level of that object. Any embedded exposure fields your company configuration\ndefines (e.g. `primaryInsured` / `additionalExposures` in the default configuration) ride\nalong as ordinary configured fields, validated per-field against the Exposure\nconfiguration. The primary insured is derived from those exposures; you do not send it.\n\n**Term bounds come solely from the policy's own root fields.** `policyStartDate` and\n`policyEndDate` are read from `data.policyStartDate` and `data.policyEndDate` — there are\nno top-level date parameters. The transaction's effective date is the policy start date.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred, and it is validated and committed atomically with\nthe policy.\n\n**Billing needs pricing.** The new policy'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.new-business`\n","tags":["Field Model Policy Transactions"],"parameters":["53579cbf-3f56-4bb2-ae01-d1b8cfca8417","cab448e1-abe4-46bd-a5e2-a6b3f83eed3d"],"requestBody":"524b4921-b2fe-4487-a69e-96292575ca0e","responses":{"201":"799e7d8c-8180-4147-8eb9-6daa627d72f8","400":"25cddfed-c1fa-4a8c-b961-4fe06152fa4d","401":"cb1a9e4d-2504-43cd-a6bb-305fb322a477","403":"420e0bb0-6448-4755-84a9-a768582ac316","404":"ae87f65a-10ff-4408-98ab-30bc9dea3706","409":"ed5add90-2dc0-4159-984c-8af16ba32252","422":"e80c1b63-47ac-4a1e-be5c-3bd3cbf07368","500":"6e5df914-1d71-4eff-9110-7fc916ab7be8"},"method":"post","type":"path","servers":["b4993f5b-e21e-4dbd-8ace-9c59b5197d8e"],"security":["35370c79-340a-4ed7-a68a-8c786f4a2235"],"path":"/api/v1/companies/{companyId}/policies/transaction/new-business","baseUrlOptions":["https://go.aiinsurance.io"],"title":"New Business Transaction","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"53579cbf-3f56-4bb2-ae01-d1b8cfca8417":{"name":"companyId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Company identifier","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Company identifier"},"cab448e1-abe4-46bd-a5e2-a6b3f83eed3d":{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique key of 1 to 255 printable ASCII characters for retrying this write. Within 30 days of the successful attempt's admission, reuse with the same request returns the original transaction; retries do not extend that window. After 30 days the same key runs as a new write, even if the request differs.","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"A unique key of 1 to 255 printable ASCII characters for retrying this write. Within 30 days of the successful attempt's admission, reuse with the same request returns the original transaction; retries do not extend that window. After 30 days the same key runs as a new write, even if the request differs.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object","description":"The policy-level fields, at the top level of this object. Must include\n`policyStartDate` and `policyEndDate`. May also include\n`fullTermPricingInfo`, `fullTermBillingInfo`,\n`fullTermPolicyRatingResult` and any custom\nfields defined in your field configuration — including embedded exposure\nfields (the default configuration models a `primaryInsured` object + an\n`additionalExposures` list, but the platform imposes no structural exposure\nshape).\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"],"properties":{"policyStartDate":{"type":"object","description":"Policy term start date — defines the lower term bound. Invariant across\nevery segment of the term. 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":"Policy term end date — defines the upper term bound. Must be after\n`policyStartDate`. Invariant across every segment of the term. Send the\ncanonical `Date` object; `timezone` may be omitted and defaults to\n`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"},"policyStatus":{"type":"string","enum":["active"],"description":"Segment-scoped policy status, owned by the platform. A new policy 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 policy, create it here and\nthen cancel it.\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 policy number. Invariant across every segment of the term. Omit it\nwhen your configuration mints one; a minted number is preserved from the\nprior version on later writes, so an endorsement that omits it does not\nmint a second number.\n","uniqueKey":"data.policyNumber","typeLabel":"string"},"fullTermPricingInfo":{"type":"object","description":"The policy's full-term 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. Registry keys are lower-kebab-case (`^[a-z0-9]+(?:-[a-z0-9]+)*$`, at most 64 characters), e.g. `surplus-lines-tax`. 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. Registry keys are lower-kebab-case (`^[a-z0-9]+(?:-[a-z0-9]+)*$`, at most 64 characters), e.g. `surplus-lines-tax`. 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 full term. Caller-supplied.\nInvariant across every segment. Element-level rating output is placed inline at its\nhost instead (e.g. an embedded exposure's `crossSegmentRatingOutputs`).\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":{"medicalFacility":{"title":"medicalFacility","description":"Only the framework fields are universal: `policyStatus`,\n`policyStartDate` and `policyEndDate` (`policyStatus` may be left\nout; a new policy starts `active`). The remaining fields shown\nhere — `annualPremium`, the embedded `primaryInsured`\n(`exposureType`, `bedCount`), and `additionalExposures` — are\n**specific to the default tenant configuration**, not part of\nthe framework contract. They validate only on a company whose\nconfiguration defines them; your own configuration will have\ndifferent custom fields. The `fullTermPricingInfo` object is\nframework-optional; when present, supply `pricingComponents` —\neach naming a `classification` from your company's registry —\nand the four rollups are computed by the platform.\n","value":{"data":{"policyStatus":"active","annualPremium":85000,"policyStartDate":{"date":"2025-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2026-01-01","timezone":"America/New_York"},"fullTermPricingInfo":{"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","value":85000},{"label":"Policy Fee","classification":"policy-fee","value":500}]},"primaryInsured":{"id":"550e8400-e29b-41d4-a716-446655440010","exposureType":"MedicalFacility","bedCount":120},"additionalExposures":[]}}},"classifiedPricingAndBilling":{"title":"classifiedPricingAndBilling","description":"The same policy with a jurisdiction-qualified tax and an\nimmediately-earned fee. Each component names a `classification`\nfrom the company's registry and a `qualifier` (empty for the\npremium, the taxing jurisdiction for the tax). The non-refundable\npolicy fee states `earningSchedule: \"immediate\"` so it is\nrecognized at inception rather than pro-rata.\n\n`fullTermBillingInfo` is the separate billing channel: what is\nowed, per line item, with commission as a `payable`. It carries no\nclassification and no rollup. Its `receivable` lines sum to\n`fullTermPricingInfo.total` — 85000 + 4250 + 500 = 89750 — which is\nthe receivable checksum every stated aggregate must satisfy.\n","value":{"data":{"policyStatus":"active","policyStartDate":{"date":"2025-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2026-01-01","timezone":"America/New_York"},"fullTermPricingInfo":{"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","value":85000},{"label":"Surplus Lines Tax (NY)","classification":"surplus-lines-tax","qualifier":"NY","value":4250},{"label":"Policy Fee","classification":"policy-fee","earningSchedule":"immediate","value":500}]},"fullTermBillingInfo":{"lines":[{"invoiceType":"Policy Invoice","lineItem":"Premium Installment","direction":"receivable","amount":89750},{"invoiceType":"Commission Invoice","lineItem":"Producer Commission","direction":"payable","amount":12750}]},"primaryInsured":{"id":"550e8400-e29b-41d4-a716-446655440010","exposureType":"MedicalFacility","bedCount":120},"additionalExposures":[]}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"799e7d8c-8180-4147-8eb9-6daa627d72f8":{"description":"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-446655440001","policyVersion":1,"transactionId":"550e8400-e29b-41d4-a716-446655440002","startDate":"2025-01-01","endDate":"2026-01-01","createdAt":"2025-01-15T10:30:00.000Z","primaryInsuredName":"Mercy General Hospital","primaryInsuredId":"550e8400-e29b-41d4-a716-446655440010","policyNumber":"POL-2025-000123","policyStartDate":{"date":"2025-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2026-01-01","timezone":"America/New_York"},"fullTermPricingInfo":{"premium":85000,"taxes":0,"fees":500,"total":85500,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":85000},{"label":"Policy Fee","classification":"policy-fee","qualifier":"","earningSchedule":"pro-rata","value":500}]},"fullTermBillingInfo":null,"fullTermPolicyRatingResult":null,"segments":[{"startDate":"2025-01-01","endDate":"2026-01-01","transactionType":"NEW_BUSINESS","data":{"policyStatus":"active","policyNumber":"POL-2025-000123","policyStartDate":{"date":"2025-01-01","timezone":"America/New_York"},"policyEndDate":{"date":"2026-01-01","timezone":"America/New_York"},"primaryInsuredId":"550e8400-e29b-41d4-a716-446655440010","primaryInsuredName":"Mercy General Hospital","annualPremium":85000,"fullTermPricingInfo":{"premium":85000,"taxes":0,"fees":500,"total":85500,"pricingComponents":[{"label":"Policy Premium","classification":"policy-premium","qualifier":"","earningSchedule":"pro-rata","value":85000},{"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"},"25cddfed-c1fa-4a8c-b961-4fe06152fa4d":{"description":"Validation error An invalid Idempotency-Key returns `INVALID_IDEMPOTENCY_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":{"invalidDateRange":{"title":"invalidDateRange","value":{"error":{"code":"InvalidDateRange","message":"policyEndDate must be after policyStartDate"}}},"missingTerm":{"title":"missingTerm","value":{"error":{"code":"InvalidDateRange","message":"policyStartDate and policyEndDate must be valid dates"}}},"policyStatedCancelled":{"title":"policyStatedCancelled","value":{"error":{"code":"SystemOwnedPolicyValue","message":"A new-business transaction 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."}}},"termOnlyInContainer":{"title":"termOnlyInContainer","value":{"error":{"code":"InvalidPolicyData","message":"'policyStartDate' is required (Date object); 'policyEndDate' is required (Date object)"}}},"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])"}}},"emptyClassificationRegistry":{"title":"emptyClassificationRegistry","value":{"error":{"code":"InvalidPolicyData","message":"'fullTermPricingInfo.pricingComponents[0]' states no classification, and this company has no pricing classifications configured — configure the classification registry, then state a classification on every pricing component"}}}},"exampleType":"examples"}},"exampleType":"examples"},"cb1a9e4d-2504-43cd-a6bb-305fb322a477":{"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"},"420e0bb0-6448-4755-84a9-a768582ac316":{"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"},"ae87f65a-10ff-4408-98ab-30bc9dea3706":{"description":"An invoice referenced by invoicePlan was 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":{"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"},"ed5add90-2dc0-4159-984c-8af16ba32252":{"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"},"e80c1b63-47ac-4a1e-be5c-3bd3cbf07368":{"description":"invoicePlan failed policy-invoice binding, conservation, payment-lock, or restating preconditions, or the policy'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. Reusing an Idempotency-Key with a different request returns `IDEMPOTENCY_KEY_REUSED`.","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"},"6e5df914-1d71-4eff-9110-7fc916ab7be8":{"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":"New Business Transaction - AI Insurance","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T17:32:13.581Z","originalFileLocation":"api-reference/field-model-policy-transactions/new-business-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 a bound policy directly from its complete data as a NEW_BUSINESS transaction, covering policyStartDate to policyEndDate with the premium, billing and invoice plan you send. Use it to load policies bound elsewhere or to book a policy without a quote. To bind a saved quote, use Bind Quote (bindQuote); for the next term of an existing policy, use Renew Policy Transaction (renewPolicyTransaction). Call Get Policy Configuration (getPolicyV1Configuration) first for the field keys that data takes. Value door (Invoicing a policy). The new policy\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the policy, and without one the policy has no invoices. Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the transaction-based policy lifecycle. The transaction produces a single segment covering the full policy term. The request body is the complete initial policy state in data — the policy-level fields at the top level of that object. Any embedded exposure fields your company configuration defines (e.g. primaryInsured / additionalExposures in the default configuration) ride along as ordinary configured fields, validated per-field against the Exposure configuration. The primary insured is derived from those exposures; you do not send it. Term bounds come solely from the policy\u0026#x27;s own root fields. policyStartDate and policyEndDate are read from data.policyStartDate and data.policyEndDate — there are no top-level date parameters. The transaction\u0026#x27;s effective date is the policy start date. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it is validated and committed atomically with the policy. Billing needs pricing. The new policy\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.new-business\">\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=\"New Business Transaction - AI Insurance\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a bound policy directly from its complete data as a NEW_BUSINESS transaction, covering policyStartDate to policyEndDate with the premium, billing and invoice plan you send. Use it to load policies bound elsewhere or to book a policy without a quote. To bind a saved quote, use Bind Quote (bindQuote); for the next term of an existing policy, use Renew Policy Transaction (renewPolicyTransaction). Call Get Policy Configuration (getPolicyV1Configuration) first for the field keys that data takes. Value door (Invoicing a policy). The new policy\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the policy, and without one the policy has no invoices. Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the transaction-based policy lifecycle. The transaction produces a single segment covering the full policy term. The request body is the complete initial policy state in data — the policy-level fields at the top level of that object. Any embedded exposure fields your company configuration defines (e.g. primaryInsured / additionalExposures in the default configuration) ride along as ordinary configured fields, validated per-field against the Exposure configuration. The primary insured is derived from those exposures; you do not send it. Term bounds come solely from the policy\u0026#x27;s own root fields. policyStartDate and policyEndDate are read from data.policyStartDate and data.policyEndDate — there are no top-level date parameters. The transaction\u0026#x27;s effective date is the policy start date. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it is validated and committed atomically with the policy. Billing needs pricing. The new policy\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.new-business\">\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/new-business-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=New+Business+Transaction\u0026amp;description=Creates+a+bound+policy+directly+from+its+complete+data+as+a+NEW_BUSINESS%0Atransaction%2C+covering+%60policyStartDate%60+to+%60policyEndDate%60+with+the+premium%2C%0Abilling+an\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=ab06a6a16390eb4dacc8ee115763922249aa86dc800c8644de77613b0ab98bf7\">\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=\"New Business Transaction - AI Insurance\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a bound policy directly from its complete data as a NEW_BUSINESS transaction, covering policyStartDate to policyEndDate with the premium, billing and invoice plan you send. Use it to load policies bound elsewhere or to book a policy without a quote. To bind a saved quote, use Bind Quote (bindQuote); for the next term of an existing policy, use Renew Policy Transaction (renewPolicyTransaction). Call Get Policy Configuration (getPolicyV1Configuration) first for the field keys that data takes. Value door (Invoicing a policy). The new policy\u0026#x27;s invoices come from the request: the invoicePlan you send commits with the policy, and without one the policy has no invoices. Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the transaction-based policy lifecycle. The transaction produces a single segment covering the full policy term. The request body is the complete initial policy state in data — the policy-level fields at the top level of that object. Any embedded exposure fields your company configuration defines (e.g. primaryInsured / additionalExposures in the default configuration) ride along as ordinary configured fields, validated per-field against the Exposure configuration. The primary insured is derived from those exposures; you do not send it. Term bounds come solely from the policy\u0026#x27;s own root fields. policyStartDate and policyEndDate are read from data.policyStartDate and data.policyEndDate — there are no top-level date parameters. The transaction\u0026#x27;s effective date is the policy start date. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it is validated and committed atomically with the policy. Billing needs pricing. The new policy\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.new-business\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=New+Business+Transaction\u0026amp;description=Creates+a+bound+policy+directly+from+its+complete+data+as+a+NEW_BUSINESS%0Atransaction%2C+covering+%60policyStartDate%60+to+%60policyEndDate%60+with+the+premium%2C%0Abilling+an\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=ab06a6a16390eb4dacc8ee115763922249aa86dc800c8644de77613b0ab98bf7\">\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/new-business-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/new-business-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/new-business-transaction#webpage\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction\",\"name\":\"New Business Transaction\",\"description\":\"Creates a bound policy directly from its complete data as a NEW_BUSINESS transaction, covering policyStartDate to policyEndDate with the premium, billing and invoice plan you send. Use it to load policies bound elsewhere or to book a policy without a quote. To bind a saved quote, use Bind Quote (bindQuote); for the next term of an existing policy, use Renew Policy Transaction (renewPolicyTransaction). Call Get Policy Configuration (getPolicyV1Configuration) first for the field keys that data takes. Value door (Invoicing a policy). The new policy's invoices come from the request: the invoicePlan you send commits with the policy, and without one the policy has no invoices. Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the transaction-based policy lifecycle. The transaction produces a single segment covering the full policy term. The request body is the complete initial policy state in data — the policy-level fields at the top level of that object. Any embedded exposure fields your company configuration defines (e.g. primaryInsured / additionalExposures in the default configuration) ride along as ordinary configured fields, validated per-field against the Exposure configuration. The primary insured is derived from those exposures; you do not send it. Term bounds come solely from the policy's own root fields. policyStartDate and policyEndDate are read from data.policyStartDate and data.policyEndDate — there are no top-level date parameters. The transaction's effective date is the policy start date. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it is validated and committed atomically with the policy. Billing needs pricing. The new policy'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.new-business\",\"dateModified\":\"2026-11-13T17:32:13.581Z\",\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-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\":\"New Business Transaction\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction#apireference\",\"headline\":\"New Business Transaction\",\"name\":\"New Business Transaction\",\"description\":\"Creates a bound policy directly from its complete data as a NEW_BUSINESS transaction, covering policyStartDate to policyEndDate with the premium, billing and invoice plan you send. Use it to load policies bound elsewhere or to book a policy without a quote. To bind a saved quote, use Bind Quote (bindQuote); for the next term of an existing policy, use Renew Policy Transaction (renewPolicyTransaction). Call Get Policy Configuration (getPolicyV1Configuration) first for the field keys that data takes. Value door (Invoicing a policy). The new policy's invoices come from the request: the invoicePlan you send commits with the policy, and without one the policy has no invoices. Creates a new policy via a NEW_BUSINESS transaction. This is the entry point for the transaction-based policy lifecycle. The transaction produces a single segment covering the full policy term. The request body is the complete initial policy state in data — the policy-level fields at the top level of that object. Any embedded exposure fields your company configuration defines (e.g. primaryInsured / additionalExposures in the default configuration) ride along as ordinary configured fields, validated per-field against the Exposure configuration. The primary insured is derived from those exposures; you do not send it. Term bounds come solely from the policy's own root fields. policyStartDate and policyEndDate are read from data.policyStartDate and data.policyEndDate — there are no top-level date parameters. The transaction's effective date is the policy start date. Policy invoices. invoicePlan is an invoice plan: nothing in it is defaulted or inferred, and it is validated and committed atomically with the policy. Billing needs pricing. The new policy'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.new-business\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/field-model-policy-transactions/new-business-transaction#webpage\"},\"dateModified\":\"2026-11-13T17:32:13.581Z\",\"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/new-business-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","description":"Permanently deletes every policy of a sandbox company, with all versions and\ntransactions, so that a breaking configuration import can be retried from a\nclean slate. To remove one policy, use Delete Policy (`deletePolicy`). To\nundo only a policy's latest transaction, use Delete Policy Transaction\n(`deletePolicyTransaction`).\n\n**Hard-deletes every Policy record for the company.** The wipe removes\nPolicy anchors, every live and archived transaction, transaction deltas,\nsegments, relationship rows touching a Policy, and Policy-scoped sequence\ncounters. Other entity types, company configuration, financial records,\nand financial configuration are kept.\n\nUse this endpoint with the other reset operations when a breaking\nconfiguration import must be retried. Policy is intentionally outside the\ngeneric entity CRUD API, so `POST .../entities/policy/deleteAll` remains\ninvalid; this dedicated Policy route is the complete reset surface.\n\n**Guarded.** If financials holds a live claim on any Policy, or a live Quote\nor Event still references one (including an in-flight renewal draft), the\nwhole wipe returns `409` and nothing is deleted. Clear financial records\nwith `POST .../financials/deleteAll` and delete the referring records first,\nthen retry.\n\n**Sandbox only.** Live and Retired companies return `409` without deleting\ndata. A successful request is idempotent: retrying after the wipe succeeds\nwith `deletedRecords: 0`.\n\n**Required permission:** `company.reset` — the **Admin** role holds it.\n","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","description":"Makes a mid-term change to a bound policy (an endorsement) as an ENDORSE\ntransaction: change coverages, limits, insureds or other field values from a\ndate, and restate the premium and billing when the price moves. Use it when\nyou already hold the change; to endorse through a quote, generate the draft\nwith Generate Quote from Policy (Stateless) (`generateQuote`) and\n`transactionType: ENDORSE`. A cancelled policy takes no endorsement until\nReinstate Policy Transaction (`reinstatePolicyTransaction`) brings it back.\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\nApplies an ENDORSE transaction to an existing policy. An endorsement carries one\nor more of **five channels**. The engine recomputes segments after applying every\nchannel — adjacent segments with identical data are automatically merged — and the\nresponse includes the full resulting segment set.\n\n**A cancelled policy takes no endorsement.** Cancel and reinstate only switch a\npolicy off and on; every other change is an endorsement. A policy whose latest\nversion carries a cancellation, whether it has taken effect or is still to come,\nis refused with `409 PolicyCancelled` until it is reinstated. To change a policy\nand cancel it, endorse it and then cancel it; to reinstate it with changes,\nreinstate it and then endorse it.\n\n**An endorsement does not switch a policy off or on.** `policy.policyStatus` and\n`policy.cancellationEffectiveOnDate` are owned by the platform: only\n[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)\nchange them. A delta that would change either one, directly or inside a whole-`policy`\nOverwrite, is refused with `400 SystemOwnedPolicyValue`, and nothing is saved. A delta\nthat restates the value the policy holds is accepted and dropped, so a whole policy\nobject read and sent back still endorses; a whole-`policy` Overwrite that leaves them\nout keeps them.\n\n**A delta under a calculated field is not applied.** The configuration\ncalculates such a field (Get Policy Configuration marks it `readOnly` and\n`x-calculated`), so the endorsement drops the delta and still succeeds. The\nresponse lists each one in `ignoredDeltas`, with `derivedFrom`, the Policy\nfields the calculation reads: write those instead. A property schedule built\nfrom the policy's exposures, for example, changes when you add an exposure to\n`policy.exposures`.\n\n**Input channel:**\n\n- **`deltas`** — changes to policy field data. Each carries its own\n `startDate` / `endDate` within the policy term, a `path`, an `action`\n (Add / Remove / Overwrite), and a `value`.\n\n**Amending the term.** Shortening a term is a `deltas` write to the ROOT\n`policy.policyEndDate` (or `policy.policyStartDate`) stating the **whole term** as\nits window. There is no separate policy-info channel — the retired `fullTermDeltas`\ncontainer channel was removed once the root fields became the single writable\nsource.\n\n**Whole-term policy fields.** Four ROOT paths hold values that are invariant across\nthe policy term — `policy.policyNumber`, `policy.policyStartDate`,\n`policy.policyEndDate` and `policy.previousPolicy`. A delta on `deltas` that touches\none of them (at any depth, and including an ancestor path such as a whole-`policy`\nOverwrite) must state the **whole term** as its window (`startDate` = the policy start,\n`endDate` = the policy end) or the write is rejected.\n\n**A term bound may not move outward**, through either input channel and at any path\ndepth: moving `policyEndDate` later or `policyStartDate` earlier is rejected\n(`TermLengtheningNotSupported`), because no endorsement path can create the extra days.\n\n**Date values.** A `deltas` value written to a `Date` field — at any depth, including a\nDate nested inside a custom object or an embedded exposure — must be the canonical\n`{ date: \"YYYY-MM-DD\", timezone }` object (the `Fmv1Date` schema) with **both** members\nstated. Delta values are stored exactly as sent, so this channel never converts: the\nretired `{ day, month, year, timezone }` spelling is refused (`400`, `InvalidDelta`),\nand so is a write to a single member of a Date (`policy.policyEndDate.year`) — a Date\nis written whole.\n\n**Derived channels (additive on either input channel):**\n\n- **`fullTermPricingInfo`** — whole-object overwrite of the policy-root pricing\n contract. Supply `pricingComponents` (each\n `{label, value, classification[, qualifier, earningSchedule]}` — every component\n must name a live `classification` from your company's classification registry);\n the four rollups (`premium`, `taxes`, `fees`, `total`) are computed by the\n platform from the components — any caller-supplied rollup value is ignored and\n recomputed.\n- **`fullTermBillingInfo`** — whole-object overwrite of the policy-root Billing\n Aggregate: `{ lines: [{ invoiceType, lineItem, direction, amount }] }`, the\n term's billing obligations free of invoices, with no rollup and no classification.\n An endorsement that moves the price must restate these lines: a stated\n aggregate's `receivable` lines must sum to\n `fullTermPricingInfo.total`, so moving the price without restating them is refused.\n- **`fullTermPolicyRatingResult`** — whole-object overwrite of the policy-root canonical\n rating result (the twin of `fullTermPricingInfo`).\n- **`crossSegmentRatingOutputs`** — element-level rating output, `[{ path, value }]`. Each\n `path` terminates at a `crossSegmentRatingOutputs` container on a list element (or the\n policy); `value` is the whole rating-output object for that host. There is no action\n (always an Overwrite) and no dates — the server derives each write's range from the\n host's presence across segments, so it applies cleanly to part-term hosts.\n\nAt least one channel is required. Any of `deltas`,\n`fullTermPricingInfo`, `fullTermBillingInfo`, `fullTermPolicyRatingResult` or\n`crossSegmentRatingOutputs` satisfies it, so an endorsement that restates\nonly the Billing Aggregate is a legal transaction on its own.\n\n**Path syntax — predicate addressing.** Index into a list by a predicate on any field:\n`policy.exposures[id = '\u003cuuid>'].bedCount`,\n`policy.coverages[coverageType = 'GL'].limits[name = 'occurrence']`. The predicate must\nresolve to **exactly one** element wherever it is applied (throws on zero or multiple\nmatches) — this uniqueness rule is the cross-segment identity guarantee.\n\n**Policy invoices.** `invoicePlan` is an\n[invoice plan](/api-reference/invoicing/invoice-plans): nothing in it is\ndefaulted or inferred. Once active invoices exist, a change that moves the\nbilling they add up to must carry a plan, so kept and new invoices add up\nto the new billing; without one it is refused with\n`422 finv2-policy-restates-invoices`. The version and invoices commit\natomically.\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` again, changed or\nunchanged. 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. An endorsement keeps the\npolicy at its layer unless `pricingStackLayerChange` names the move it makes:\n\n- leaving out `fullTermBillingInfo` on a billed policy drops its billing, a move from\n `billing` to `pricing`;\n- stating billing on a policy that has none moves it from `pricing` to `billing`;\n- an `invoicePlan` that voids every active invoice moves the policy down from\n `invoicing`, and one that gives it its first invoices moves it up to `invoicing`.\n A plan that voids every active invoice and creates none needs no billing, so one\n endorsement can take an invoiced policy to `pricing` with\n `pricingStackLayerChange: {\"from\": \"invoicing\", \"to\": \"pricing\"}`.\n\nA move the request does not name, or a named move it does not make, returns\n`422 policy-pricing-stack-layer-change` and saves nothing; its message names the actual move\nand the exact `pricingStackLayerChange` that would name it. Billing that owes nothing sits at\nboth `billing` and `invoicing`, so a change between those two needs no `pricingStackLayerChange`.\n\n**Required permission:** `policy.endorse`\n","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","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)","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":"New Business 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"]}