The FMV1 Configuration API provides JSON-native endpoints for exporting and importing company configuration. This is the programmatic interface to the configuration pipeline. A new company starts from a complete configuration document posted to Import Configuration.For Quote–Policy mappings and JEXL transformations, see
Conversion Rules.
For expression syntax, macro availability, and entity invariant rules, see
Author JEXL expressions.
Authentication
These endpoints require an API key that holds the configuration permissions. The Admin role holds them; a role without them returns 403.To create an API key with this role, go to Settings > API Keys and select the Admin role when generating the key.
Workflow
The JSON round-trip workflow is:
Export — Pull current config as a structured JSON body
Edit the JSON
Import — Apply the edited JSON body to the database
export → edit → import is a lossless, machine-to-machine round-trip. For a fresh company, POST the complete initial document directly to Import.Rating workflow stages accept only stageType, raterSpec, callOncePerPath,
outputPath, and optional inputs. Validation rejects unknown stage properties
with the affected stage’s JSON path, so a misspelled property cannot silently
discard input selection or output routing.
API Endpoints
The Configuration Management endpoints are listed in the left navigation:
Export Configuration (POST /configuration/export) — Return current config as a structured JSON body. The output is the exact shape import accepts, so export → edit → import is a lossless round-trip.
Get Configuration Metadata (POST /configuration/metadata) — Return a stable config version token plus last-modified / last-imported timestamps, without the full config body. Use it for cheap staleness checks before pulling the full export payload.
Import Configuration (POST /configuration/import) — Apply a structured JSON configuration body to the database.
Start Data Validation Run (POST /configuration/data-validation-runs) — Start a background scan that classifies every stored record against a configuration. Send a complete configuration body to scan a candidate, or send no body at all to scan the live configuration. Returns a runId to poll.
Get Data Validation Run (GET /configuration/data-validation-runs/{runId}) — Poll a run’s status and its running counts of records scanned, adhering, holding undeclared keys, and breaking.
List Data Validation Run Findings (GET /configuration/data-validation-runs/{runId}/findings) — Page through which records would not survive the scanned configuration and why. Paginated (page / pageSize) because a poll must not re-transfer thousands of findings; filter with entityType to build a per-type view.
Field type declarations
Full configuration imports, validation and comparison accept a field’s structured
typeInfo without duplicate type or typeArgs properties. The add-field patch
change accepts the same declaration, including when adding a custom-object subfield:
For a full configuration field, use entitySelector instead of entity and omit
kind: "add-field". Argless types need only their kind, such as
"typeInfo": { "kind": "Text" }.Existing type and JSON-string typeArgs inputs remain accepted. When you send
both forms, they must describe the same type and arguments; conflicts identify
the field in the error. Configuration exports declare each field type once in
typeInfo, without type or typeArgs duplicates. Field values and cardinality
rules are unchanged.
Reserved Quote field names
pricingSetup and invoices are reserved names for Quote fields, because
each also names a quote option. A quote’s
create takes
entityCreateOptions.pricingSetup, its pricing setup, and the
update that completes a quote takes
entityUpdateOptions.invoices, which generates its invoices as it completes.
The names stay reserved because those requests refuse them among a quote’s
fields: pricingSetup in a create’s entityData, and invoices in an
update’s, get 400 ENTITY_OPTION_MOVED, naming the option.
Import, validation and patches therefore refuse a Quote field with either
name, with an error that names the field. Fields on other entities, and
custom-object subfields, may use them.
Card spacing
Any card can set optional rowGap and columnGap to add vertical and horizontal
space between its grid rows and columns. Each value is a nonnegative number of
pixels. Omit it, or use 0, to keep the existing spacing in that direction.
The layout editor exposes Extra row spacing (px) and Extra column spacing
(px) in the card properties; previews and the live app use the same settings.For example, this card adds 10 pixels between both rows and columns:
The extra gaps are in addition to the normal spacing: 12 pixels between
columns, and 24 pixels from a value or an input to the label below it, the
same when viewing and editing. Here, each of those grows by 10 pixels. Other
cards keep their existing spacing. Empty rows still collapse;
rowGap applies between the rows that remain visible. Column positions and
spans stay as authored.
Join picker order
A field location whose inputModality is Join Picker or Pointer Picker
can set the order of the picker’s options with inputModalityArgs.sort:
field is createdAt (the date the record was created), updatedAt (the
date it last changed), or the referenceId of a field on the entity the
picker lists. That field sorts as its list column does: numbers by value,
dates by day, option-set fields by option label, text case-insensitively.
Relationship fields (Join and Pointer) can’t be sorted.
direction is asc (oldest, lowest or A to Z first) or desc (newest,
highest or Z to A first).
The order applies to every option the picker can offer, after the picker’s
other filters (filter, relationshipFilter) and the user’s typed search,
so the first options shown are the true top of the list. Options with no
value for the field come last in both directions, and records with the same
value always appear in the same order.Without sort, the picker keeps its default order: by display name, or best
match first while the user’s search covers every field.Import and validation refuse a sort that isn’t an object, a direction
other than asc or desc, a field that isn’t createdAt, updatedAt or a
sortable field of the listed entity, a sort on a picker of users, and a
sort alongside optionsFrom. Each error names the field location and the
problem.
Checking configuration against stored data
Validate and compare are configuration-only: neither reads a single stored record, which is why both answer instantly regardless of how much data a company holds. They tell you a configuration is well-formed and how it differs from the current one — not whether the records you already have would survive it.Data validation runs answer that second question. A run reads every stored record of every entity type and classifies each one, so the natural order before a risky import is: validate (is the config well-formed?) → compare (what changes?) → a run (which of my records would break?) → import.Four properties are worth knowing before you build against it:
A run snapshots its configuration when it starts, so a verdict cannot drift — an import that lands mid-scan does not change what the scan is measuring against.
Starts collapse and are capped. Starting a run whose configuration matches one already in flight returns that run’s id with outcome: "duplicate" instead of starting a second scan (pass ?force=true to override). A company may have 3 runs in flight; a 4th distinct configuration is refused with a 429 carrying inFlightRunIds so you can poll those instead.
The counts and the detail are separate reads. The poll is fixed-size — status plus four counts — and findings is a separate, paginated endpoint, so polling a run costs the same whether the book is clean or badly broken. Poll until the run is terminal, then page the findings once.
A run’s status and findings stay readable for as long as the run exists. Nothing removes a run or its findings on a timer, so a run started months ago still answers in full. A run’s age is never a failure on either by-id read: neither reports a run as too old to read, and a run id that belongs to no run of this company is a 404.
Permissions
Operation
Required Permission
Export
configuration.export
Import
configuration.edit (plus company.reset when force=true, Sandbox Company only)
Start Data Validation Run
configuration.validate
Get Data Validation Run
configuration.validate
List Data Validation Run Findings
configuration.validate
Framework-Required Rows
Some configuration rows are required by the framework: the import rejects a configuration that omits them or changes their type, cardinality, or join shape. Most framework-required rows also have a fixed calculated value the import enforces byte-for-byte, but a few are flagged customer-supplied: the row’s presence and shape are enforced, while its JEXL calculated-value expression is yours to author and maintain. The main example is referencingExposures on Quote, Policy, and Submission. Quote.fullTermBillingInfo is another; see Quote billing calculations.
Quote billing calculations
Every configuration states Quote.fullTermBillingInfo as an always-owned Live calculation, and every company invoices. The calculation is a real one that the browser can evaluate: configuration import and validate refuse a blank calculation or a bare null as the whole calculation, and refuse server-only or non-pure functions, including through other calculated fields it reads. The error identifies the field and function that cannot run in the browser. CLEAR() is a real calculation that bills nothing.Import and validate also refuse a rating workflow stage that writes fullTermBillingInfo, rating workflow billingPreconditions (use billing conditions instead), and a Conversion Rule that writes fullTermBillingInfo other than the pinned billing copy.
Billing conditions
A configuration can declare optional top-level billingConditions. Each named
condition has a * default; a row for a specific quote flow replaces its default
expression and message. A true override waives the condition for that flow.
An empty quote type uses the default.
This fragment belongs in a complete configuration document. Import refuses a
duplicate (conditionKey, quoteFlow), an override without its default, or an
expression that cannot return a browser-pure boolean. That check includes
calculated fields read by the condition. Conditions require a billing calculation
on Quote.fullTermBillingInfo.When any selected condition is false, saving and rating skip the billing
calculation and return null billing.
The Billing step shows the selected condition messages and
updates them from unsaved Quote inputs. Satisfying the conditions recalculates
billing immediately, without generating rating or refreshing billing. Pricing
remains visible while a condition holds billing at null.
False conditions do not themselves refuse saving or binding; the ordinary financial
integrity checks and the pricing stack’s
layer checks still apply. A condition expression
that throws remains a calculation error.Use typed patches add-billing-condition-row, update-billing-condition-row,
and delete-billing-condition-row to address a row by its conditionKey and
quoteFlow. An update changes expression, message, or both; changing its
identity requires deleting and adding a row. The complete resulting configuration
is validated, so deleting a default while retaining its overrides is refused.Export omits the section when it is absent or
empty and sorts declared rows by (conditionKey, quoteFlow).
Broker Portal section
The optional top-level brokerPortal section holds the
pages the Broker Portal uses and its decline,
assignment and quote settings. It does not turn the portal on; a platform admin
does that, and a configuration import cannot.The portal’s logo and colours are not configuration. They are your company’s
branding, set in Company Settings, and your emails use them too once you
turn on email branding there. Import
refuses a branding key in brokerPortal, as it refuses any other unknown key.The typed patches set-broker-portal-decline-copy-to,
set-broker-portal-decline-forms and set-broker-portal-assignable-users
create the section when the configuration has none. Export omits the section
when the configuration has none.
Broker Portal pages
There are five Broker Portal pages. A company has one only when its
brokerPortal.pages names it:
Place cards on a named portal page with cardPageRelationships, as on any
other page. A card on a portal page the configuration does not name is refused.Only the keys above are allowed in brokerPortal.pages. An app page key such as
exposureCreate is refused with its path, for example brokerPortal.pages.1.
A key listed twice is refused at brokerPortal.pages.
While a company’s Broker Portal is on, the list must include portalRequest:
import and validate refuse a configuration without it, and the portal cannot be
turned on until the configuration has it. Export lists the app pages in the
top-level pages for every company; Broker Portal pages appear only in
brokerPortal.pages.
Card sections
A card can set an optional section, a non-empty label. On the Broker
Portal’s portalSubmission page, a jump-to section nav lists the card under
that label, and clicking it scrolls to the card. A card without section is
not listed, and other pages ignore it.
add-card and update-card take section too. Send "section": null on
update-card to clear it.
Broker Portal decline copy-to address
brokerPortal.declineCopyTo is an optional email address. When an underwriter
declines a Broker Portal request, the decline dialog prefills it in “Send a
copy of the application to”. Without it the field starts empty. Use a shared
team mailbox, not a personal address: the configuration is versioned and
exported.
Import refuses a value that is not an email address. Use the typed patch
set-broker-portal-decline-copy-to to set it, or send null to clear it. The
patch needs an existing brokerPortal section.
brokerPortal.declineForms lists, by form number, the Submission form
templates the decline dialog attaches to the copy of the application by
default, in attachment order. Each form is generated against the declined
submission and attached as a PDF; the underwriter can change the selection
before declining. Without it no form is preselected.
Import refuses a number that names no live template of the company, a
template whose category is not Submission, and a repeated number. Use the
typed patch set-broker-portal-decline-forms to replace the list, or send an
empty list to clear it. The patch needs an existing brokerPortal section.
brokerPortal.assignableUsers lists the user ids a broker’s request may be
assigned to. When a broker submits a request, the Submission’s
submissionAssignee is set from it:
No users listed: the assignee is left as it is.
One user: that user is assigned.
More than one: the broker picks one or more of the listed users.
The patch replaces the whole list. It is refused when the configuration has no
brokerPortal section yet, so set the branding first, and when an id is not a
user of your company. Company Settings in the app edits the same list.
Configuration Categories
The compare endpoint returns change counts for each category. It includes
billingConditions only when either compared configuration declares condition rows:
Category
Description
fieldDefinitions
Field definitions (name, type, reference ID, etc.)
optionSets
Option set values for dropdown fields
customObjects
Custom object type definitions
cardDefinitions
UI card layout definitions
cardSections
Sections within cards
fieldLocations
Where fields appear on cards
billingConditions
Named billing conditions and per-flow overrides; present only when declared
{"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/configuration/overview","slug":"/api-reference/configuration/overview","pageMetadata":{"title":"Overview","description":null,"href":"/api-reference/configuration/overview"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The FMV1 Configuration API provides JSON-native endpoints for exporting and importing company configuration. This is the programmatic interface to the configuration pipeline. A new company starts from a complete configuration document posted to `,_jsx(_components.strong,{children:`Import Configuration`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`For Quote–Policy mappings and JEXL transformations, see\n`,_jsx(_components.a,{href:`/api-reference/configuration/conversion-rules`,children:`Conversion Rules`}),`.\nFor expression syntax, macro availability, and entity invariant rules, see\n`,_jsx(_components.a,{href:`/api-reference/configuration/jexl-authoring`,children:`Author JEXL expressions`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[`These endpoints require an API key that holds the configuration permissions. The `,_jsx(_components.strong,{children:`Admin`}),` role holds them; a role without them returns `,_jsx(_components.code,{children:`403`}),`.`]}),_jsxs(_components.p,{children:[`To create an API key with this role, go to `,_jsx(_components.strong,{children:`Settings > API Keys`}),` and select the `,_jsx(_components.strong,{children:`Admin`}),` role when generating the key.`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`workflow`,children:`Workflow`}),`\n`,_jsx(_components.p,{children:`The JSON round-trip workflow is:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Export`}),` — Pull current config as a structured JSON body`]}),`\n`,_jsx(_components.li,{children:`Edit the JSON`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Import`}),` — Apply the edited JSON body to the database`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`export`}),` → edit → `,_jsx(_components.code,{children:`import`}),` is a lossless, machine-to-machine round-trip. For a fresh company, POST the complete initial document directly to `,_jsx(_components.strong,{children:`Import`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Rating workflow stages accept only `,_jsx(_components.code,{children:`stageType`}),`, `,_jsx(_components.code,{children:`raterSpec`}),`, `,_jsx(_components.code,{children:`callOncePerPath`}),`,\n`,_jsx(_components.code,{children:`outputPath`}),`, and optional `,_jsx(_components.code,{children:`inputs`}),`. Validation rejects unknown stage properties\nwith the affected stage’s JSON path, so a misspelled property cannot silently\ndiscard input selection or output routing.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`api-endpoints`,children:`API Endpoints`}),`\n`,_jsx(_components.p,{children:`The Configuration Management endpoints are listed in the left navigation:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Export Configuration`}),` (`,_jsx(_components.code,{children:`POST /configuration/export`}),`) — Return current config as a structured JSON body. The output is the exact shape `,_jsx(_components.strong,{children:`import`}),` accepts, so `,_jsx(_components.code,{children:`export`}),` → edit → `,_jsx(_components.code,{children:`import`}),` is a lossless round-trip.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Get Configuration Metadata`}),` (`,_jsx(_components.code,{children:`POST /configuration/metadata`}),`) — Return a stable config version token plus last-modified / last-imported timestamps, `,_jsx(_components.em,{children:`without`}),` the full config body. Use it for cheap staleness checks before pulling the full `,_jsx(_components.strong,{children:`export`}),` payload.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Import Configuration`}),` (`,_jsx(_components.code,{children:`POST /configuration/import`}),`) — Apply a structured JSON configuration body to the database.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start Data Validation Run`}),` (`,_jsx(_components.code,{children:`POST /configuration/data-validation-runs`}),`) — Start a background scan that classifies `,_jsx(_components.strong,{children:`every stored record`}),` against a configuration. Send a complete configuration body to scan a candidate, or `,_jsx(_components.strong,{children:`send no body at all`}),` to scan the live configuration. Returns a `,_jsx(_components.code,{children:`runId`}),` to poll.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Get Data Validation Run`}),` (`,_jsx(_components.code,{children:`GET /configuration/data-validation-runs/{runId}`}),`) — Poll a run’s `,_jsx(_components.code,{children:`status`}),` and its running counts of records scanned, adhering, holding undeclared keys, and breaking.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`List Data Validation Run Findings`}),` (`,_jsx(_components.code,{children:`GET /configuration/data-validation-runs/{runId}/findings`}),`) — Page through `,_jsx(_components.em,{children:`which`}),` records would not survive the scanned configuration and `,_jsx(_components.em,{children:`why`}),`. Paginated (`,_jsx(_components.code,{children:`page`}),` / `,_jsx(_components.code,{children:`pageSize`}),`) because a poll must not re-transfer thousands of findings; filter with `,_jsx(_components.code,{children:`entityType`}),` to build a per-type view.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`field-type-declarations`,children:`Field type declarations`}),`\n`,_jsxs(_components.p,{children:[`Full configuration imports, validation and comparison accept a field’s structured\n`,_jsx(_components.code,{children:`typeInfo`}),` without duplicate `,_jsx(_components.code,{children:`type`}),` or `,_jsx(_components.code,{children:`typeArgs`}),` properties. The `,_jsx(_components.code,{children:`add-field`}),` patch\nchange accepts the same declaration, including when adding a custom-object subfield:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"add-field\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"entity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Exposure\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"referenceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"territory\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"typeInfo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"OptionSet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"optionSetName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Territory\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cardinality\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Single\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For a full configuration field, use `,_jsx(_components.code,{children:`entitySelector`}),` instead of `,_jsx(_components.code,{children:`entity`}),` and omit\n`,_jsx(_components.code,{children:`kind: \"add-field\"`}),`. Argless types need only their kind, such as\n`,_jsx(_components.code,{children:`\"typeInfo\": { \"kind\": \"Text\" }`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Existing `,_jsx(_components.code,{children:`type`}),` and JSON-string `,_jsx(_components.code,{children:`typeArgs`}),` inputs remain accepted. When you send\nboth forms, they must describe the same type and arguments; conflicts identify\nthe field in the error. Configuration exports declare each field type once in\n`,_jsx(_components.code,{children:`typeInfo`}),`, without `,_jsx(_components.code,{children:`type`}),` or `,_jsx(_components.code,{children:`typeArgs`}),` duplicates. Field values and cardinality\nrules are unchanged.`]}),`\n`,_jsx(Heading,{level:`3`,id:`reserved-quote-field-names`,children:`Reserved Quote field names`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`pricingSetup`}),` and `,_jsx(_components.code,{children:`invoices`}),` are reserved names for Quote fields, because\neach also names a quote option. A quote’s\n`,_jsx(_components.a,{href:`/api-reference/entities/create-entity`,children:`create`}),` takes\n`,_jsx(_components.code,{children:`entityCreateOptions.pricingSetup`}),`, its pricing setup, and the\n`,_jsx(_components.a,{href:`/api-reference/entities/update-entity`,children:`update`}),` that completes a quote takes\n`,_jsx(_components.code,{children:`entityUpdateOptions.invoices`}),`, which generates its invoices as it completes.\nThe names stay reserved because those requests refuse them among a quote’s\nfields: `,_jsx(_components.code,{children:`pricingSetup`}),` in a create’s `,_jsx(_components.code,{children:`entityData`}),`, and `,_jsx(_components.code,{children:`invoices`}),` in an\nupdate’s, get `,_jsx(_components.code,{children:`400 ENTITY_OPTION_MOVED`}),`, naming the option.\nImport, validation and patches therefore refuse a Quote field with either\nname, with an error that names the field. Fields on other entities, and\ncustom-object subfields, may use them.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`card-spacing`,children:`Card spacing`}),`\n`,_jsxs(_components.p,{children:[`Any card can set optional `,_jsx(_components.code,{children:`rowGap`}),` and `,_jsx(_components.code,{children:`columnGap`}),` to add vertical and horizontal\nspace between its grid rows and columns. Each value is a nonnegative number of\npixels. Omit it, or use `,_jsx(_components.code,{children:`0`}),`, to keep the existing spacing in that direction.\nThe layout editor exposes `,_jsx(_components.strong,{children:`Extra row spacing (px)`}),` and `,_jsx(_components.strong,{children:`Extra column spacing\n(px)`}),` in the card properties; previews and the live app use the same settings.`]}),`\n`,_jsx(_components.p,{children:`For example, this card adds 10 pixels between both rows and columns:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cardKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"billingInputs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"entity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Quote\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Billing Inputs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cardType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"input\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"columnCount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`12`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"rowGap\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"columnGap\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The extra gaps are in addition to the normal spacing: 12 pixels between\ncolumns, and 24 pixels from a value or an input to the label below it, the\nsame when viewing and editing. Here, each of those grows by 10 pixels. Other\ncards keep their existing spacing. Empty rows still collapse;\n`,_jsx(_components.code,{children:`rowGap`}),` applies between the rows that remain visible. Column positions and\nspans stay as authored.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`join-picker-order`,children:`Join picker order`}),`\n`,_jsxs(_components.p,{children:[`A field location whose `,_jsx(_components.code,{children:`inputModality`}),` is `,_jsx(_components.code,{children:`Join Picker`}),` or `,_jsx(_components.code,{children:`Pointer Picker`}),`\ncan set the order of the picker’s options with `,_jsx(_components.code,{children:`inputModalityArgs.sort`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"entity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fieldReferenceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"referencingPolicy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"inputModality\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Join Picker\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"inputModalityArgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sort\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"field\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"direction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"desc\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`field`}),` is `,_jsx(_components.code,{children:`createdAt`}),` (the date the record was created), `,_jsx(_components.code,{children:`updatedAt`}),` (the\ndate it last changed), or the `,_jsx(_components.code,{children:`referenceId`}),` of a field on the entity the\npicker lists. That field sorts as its list column does: numbers by value,\ndates by day, option-set fields by option label, text case-insensitively.\nRelationship fields (Join and Pointer) can’t be sorted.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`direction`}),` is `,_jsx(_components.code,{children:`asc`}),` (oldest, lowest or A to Z first) or `,_jsx(_components.code,{children:`desc`}),` (newest,\nhighest or Z to A first).`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The order applies to every option the picker can offer, after the picker’s\nother filters (`,_jsx(_components.code,{children:`filter`}),`, `,_jsx(_components.code,{children:`relationshipFilter`}),`) and the user’s typed search,\nso the first options shown are the true top of the list. Options with no\nvalue for the field come last in both directions, and records with the same\nvalue always appear in the same order.`]}),`\n`,_jsxs(_components.p,{children:[`Without `,_jsx(_components.code,{children:`sort`}),`, the picker keeps its default order: by display name, or best\nmatch first while the user’s search covers every field.`]}),`\n`,_jsxs(_components.p,{children:[`Import and validation refuse a `,_jsx(_components.code,{children:`sort`}),` that isn’t an object, a `,_jsx(_components.code,{children:`direction`}),`\nother than `,_jsx(_components.code,{children:`asc`}),` or `,_jsx(_components.code,{children:`desc`}),`, a `,_jsx(_components.code,{children:`field`}),` that isn’t `,_jsx(_components.code,{children:`createdAt`}),`, `,_jsx(_components.code,{children:`updatedAt`}),` or a\nsortable field of the listed entity, a `,_jsx(_components.code,{children:`sort`}),` on a picker of users, and a\n`,_jsx(_components.code,{children:`sort`}),` alongside `,_jsx(_components.code,{children:`optionsFrom`}),`. Each error names the field location and the\nproblem.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`checking-configuration-against-stored-data`,children:`Checking configuration against stored data`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Validate`}),` and `,_jsx(_components.strong,{children:`compare`}),` are configuration-only: neither reads a single stored record, which is why both answer instantly regardless of how much data a company holds. They tell you a configuration is well-formed and how it differs from the current one — not whether the records you already have would survive it.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Data validation runs`}),` answer that second question. A run reads every stored record of every entity type and classifies each one, so the natural order before a risky import is: `,_jsx(_components.strong,{children:`validate`}),` (is the config well-formed?) → `,_jsx(_components.strong,{children:`compare`}),` (what changes?) → a `,_jsx(_components.strong,{children:`run`}),` (which of my records would break?) → `,_jsx(_components.strong,{children:`import`}),`.`]}),`\n`,_jsx(_components.p,{children:`Four properties are worth knowing before you build against it:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A run snapshots its configuration when it starts`}),`, so a verdict cannot drift — an import that lands mid-scan does not change what the scan is measuring against.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Starts collapse and are capped.`}),` Starting a run whose configuration matches one already in flight returns that run’s id with `,_jsx(_components.code,{children:`outcome: \"duplicate\"`}),` instead of starting a second scan (pass `,_jsx(_components.code,{children:`?force=true`}),` to override). A company may have `,_jsx(_components.strong,{children:`3`}),` runs in flight; a 4th distinct configuration is refused with a `,_jsx(_components.code,{children:`429`}),` carrying `,_jsx(_components.code,{children:`inFlightRunIds`}),` so you can poll those instead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The counts and the detail are separate reads.`}),` The poll is fixed-size — `,_jsx(_components.code,{children:`status`}),` plus four counts — and `,_jsx(_components.strong,{children:`findings`}),` is a separate, paginated endpoint, so polling a run costs the same whether the book is clean or badly broken. Poll until the run is terminal, then page the findings once.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A run’s status and findings stay readable for as long as the run exists.`}),` Nothing removes a run or its findings on a timer, so a run started months ago still answers in full. `,_jsx(_components.strong,{children:`A run’s age is never a failure`}),` on either by-id read: neither reports a run as too old to read, and a run id that belongs to no run of this company is a `,_jsx(_components.code,{children:`404`}),`.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`permissions`,children:`Permissions`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Operation`}),_jsx(_components.th,{children:`Required Permission`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Export`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`configuration.export`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Import`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`configuration.edit`}),` (plus `,_jsx(_components.code,{children:`company.reset`}),` when `,_jsx(_components.code,{children:`force=true`}),`, Sandbox Company only)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Start Data Validation Run`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`configuration.validate`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Get Data Validation Run`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`configuration.validate`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`List Data Validation Run Findings`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`configuration.validate`})})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`framework-required-rows`,children:`Framework-Required Rows`}),`\n`,_jsxs(_components.p,{children:[`Some configuration rows are required by the framework: the import rejects a configuration that omits them or changes their type, cardinality, or join shape. Most framework-required rows also have a fixed calculated value the import enforces byte-for-byte, but a few are flagged `,_jsx(_components.strong,{children:`customer-supplied`}),`: the row’s presence and shape are enforced, while its JEXL calculated-value expression is yours to author and maintain. The main example is `,_jsx(_components.code,{children:`referencingExposures`}),` on Quote, Policy, and Submission. `,_jsx(_components.code,{children:`Quote.fullTermBillingInfo`}),` is another; see `,_jsx(_components.a,{href:`#quote-billing-calculations`,children:`Quote billing calculations`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`quote-billing-calculations`,children:`Quote billing calculations`}),`\n`,_jsxs(_components.p,{children:[`Every configuration states `,_jsx(_components.code,{children:`Quote.fullTermBillingInfo`}),` as an always-owned Live calculation, and every company invoices. The calculation is a real one that the browser can evaluate: configuration import and validate refuse a blank calculation or a bare `,_jsx(_components.code,{children:`null`}),` as the whole calculation, and refuse server-only or non-pure functions, including through other calculated fields it reads. The error identifies the field and function that cannot run in the browser. `,_jsx(_components.code,{children:`CLEAR()`}),` is a real calculation that bills nothing.`]}),`\n`,_jsxs(_components.p,{children:[`Import and validate also refuse a rating workflow stage that writes `,_jsx(_components.code,{children:`fullTermBillingInfo`}),`, rating workflow `,_jsx(_components.code,{children:`billingPreconditions`}),` (use `,_jsx(_components.a,{href:`#billing-conditions`,children:`billing conditions`}),` instead), and a Conversion Rule that writes `,_jsx(_components.code,{children:`fullTermBillingInfo`}),` other than the pinned billing copy.`]}),`\n`,_jsx(Heading,{level:`2`,id:`billing-conditions`,children:`Billing conditions`}),`\n`,_jsxs(_components.p,{children:[`A configuration can declare optional top-level `,_jsx(_components.code,{children:`billingConditions`}),`. Each named\ncondition has a `,_jsx(_components.code,{children:`*`}),` default; a row for a specific quote flow replaces its default\nexpression and message. A `,_jsx(_components.code,{children:`true`}),` override waives the condition for that flow.\nAn empty quote type uses the default.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`22`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`22`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"billingConditions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conditionKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pricing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"quoteFlow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"*\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expression\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IS_PRESENT(fullTermPricingInfo.pricingComponents)\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Generate Rating to see billing.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conditionKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"commission\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"quoteFlow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"*\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expression\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IS_PRESENT(brokerCommissionRate)\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Enter a broker commission rate.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conditionKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"commission\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"quoteFlow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cancellation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expression\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"true\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This fragment belongs in a complete configuration document. Import refuses a\nduplicate `,_jsx(_components.code,{children:`(conditionKey, quoteFlow)`}),`, an override without its default, or an\nexpression that cannot return a browser-pure boolean. That check includes\ncalculated fields read by the condition. Conditions require a billing calculation\non `,_jsx(_components.code,{children:`Quote.fullTermBillingInfo`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`When any selected condition is false, saving and rating skip the billing\ncalculation and return null billing.\nThe Billing step shows the selected condition messages and\nupdates them from unsaved Quote inputs. Satisfying the conditions recalculates\nbilling immediately, without generating rating or refreshing billing. Pricing\nremains visible while a condition holds billing at null.\nFalse conditions do not themselves refuse saving or binding; the ordinary financial\nintegrity checks and the `,_jsx(_components.a,{href:`/api-reference/invoicing/pricing-stack`,children:`pricing stack’s`}),`\nlayer checks still apply. A condition expression\nthat throws remains a calculation error.`]}),`\n`,_jsxs(_components.p,{children:[`Use typed patches `,_jsx(_components.code,{children:`add-billing-condition-row`}),`, `,_jsx(_components.code,{children:`update-billing-condition-row`}),`,\nand `,_jsx(_components.code,{children:`delete-billing-condition-row`}),` to address a row by its `,_jsx(_components.code,{children:`conditionKey`}),` and\n`,_jsx(_components.code,{children:`quoteFlow`}),`. An update changes `,_jsx(_components.code,{children:`expression`}),`, `,_jsx(_components.code,{children:`message`}),`, or both; changing its\nidentity requires deleting and adding a row. The complete resulting configuration\nis validated, so deleting a default while retaining its overrides is refused.`]}),`\n`,_jsxs(_components.p,{children:[`Export omits the section when it is absent or\nempty and sorts declared rows by `,_jsx(_components.code,{children:`(conditionKey, quoteFlow)`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`broker-portal-section`,children:`Broker Portal section`}),`\n`,_jsxs(_components.p,{children:[`The optional top-level `,_jsx(_components.code,{children:`brokerPortal`}),` section holds the\n`,_jsx(_components.a,{href:`#broker-portal-pages`,children:`pages`}),` the Broker Portal uses and its decline,\nassignment and quote settings. It does not turn the portal on; a platform admin\ndoes that, and a configuration import cannot.`]}),`\n`,_jsxs(_components.p,{children:[`The portal’s logo and colours are not configuration. They are your company’s\nbranding, set in `,_jsx(_components.strong,{children:`Company Settings`}),`, and your emails use them too once you\nturn on email branding there. Import\nrefuses a `,_jsx(_components.code,{children:`branding`}),` key in `,_jsx(_components.code,{children:`brokerPortal`}),`, as it refuses any other unknown key.`]}),`\n`,_jsxs(_components.p,{children:[`The typed patches `,_jsx(_components.code,{children:`set-broker-portal-decline-copy-to`}),`,\n`,_jsx(_components.code,{children:`set-broker-portal-decline-forms`}),` and `,_jsx(_components.code,{children:`set-broker-portal-assignable-users`}),`\ncreate the section when the configuration has none. Export omits the section\nwhen the configuration has none.`]}),`\n`,_jsx(Heading,{level:`2`,id:`broker-portal-pages`,children:`Broker Portal pages`}),`\n`,_jsxs(_components.p,{children:[`There are five Broker Portal pages. A company has one only when its\n`,_jsx(_components.code,{children:`brokerPortal.pages`}),` names it:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Page key`}),_jsx(_components.th,{children:`Page`}),_jsx(_components.th,{children:`Entity`}),_jsx(_components.th,{children:`Page type`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portalRequest`})}),_jsx(_components.td,{children:`Broker Portal - Request`}),_jsx(_components.td,{children:`Quote`}),_jsx(_components.td,{children:`input`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portalQuoteView`})}),_jsx(_components.td,{children:`Broker Portal - Quote`}),_jsx(_components.td,{children:`Quote`}),_jsx(_components.td,{children:`viewEdit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portalPolicyView`})}),_jsx(_components.td,{children:`Broker Portal - Policy`}),_jsx(_components.td,{children:`Policy`}),_jsx(_components.td,{children:`viewEdit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portalBrokerProfile`})}),_jsx(_components.td,{children:`Broker Portal - Broker Profile`}),_jsx(_components.td,{children:`Person`}),_jsx(_components.td,{children:`viewEdit`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`portalExposureCreate`})}),_jsx(_components.td,{children:`Broker Portal - Create Exposure`}),_jsx(_components.td,{children:`Exposure`}),_jsx(_components.td,{children:`input`})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"brokerPortal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"portalRequest\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"portalQuoteView\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"portalPolicyView\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Place cards on a named portal page with `,_jsx(_components.code,{children:`cardPageRelationships`}),`, as on any\nother page. A card on a portal page the configuration does not name is refused.`]}),`\n`,_jsxs(_components.p,{children:[`Only the keys above are allowed in `,_jsx(_components.code,{children:`brokerPortal.pages`}),`. An app page key such as\n`,_jsx(_components.code,{children:`exposureCreate`}),` is refused with its path, for example `,_jsx(_components.code,{children:`brokerPortal.pages.1`}),`.\nA key listed twice is refused at `,_jsx(_components.code,{children:`brokerPortal.pages`}),`.\nWhile a company’s Broker Portal is on, the list must include `,_jsx(_components.code,{children:`portalRequest`}),`:\nimport and validate refuse a configuration without it, and the portal cannot be\nturned on until the configuration has it. Export lists the app pages in the\ntop-level `,_jsx(_components.code,{children:`pages`}),` for every company; Broker Portal pages appear only in\n`,_jsx(_components.code,{children:`brokerPortal.pages`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`card-sections`,children:`Card sections`}),`\n`,_jsxs(_components.p,{children:[`A card can set an optional `,_jsx(_components.code,{children:`section`}),`, a non-empty label. On the Broker\nPortal’s `,_jsx(_components.code,{children:`portalSubmission`}),` page, a jump-to section nav lists the card under\nthat label, and clicking it scrolls to the card. A card without `,_jsx(_components.code,{children:`section`}),` is\nnot listed, and other pages ignore it.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cardKey\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"insuredDetails\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"entity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Quote\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Insured Details\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cardType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"input\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"section\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Insured\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`add-card`}),` and `,_jsx(_components.code,{children:`update-card`}),` take `,_jsx(_components.code,{children:`section`}),` too. Send `,_jsx(_components.code,{children:`\"section\": null`}),` on\n`,_jsx(_components.code,{children:`update-card`}),` to clear it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`broker-portal-decline-copy-to-address`,children:`Broker Portal decline copy-to address`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`brokerPortal.declineCopyTo`}),` is an optional email address. When an underwriter\ndeclines a Broker Portal request, the decline dialog prefills it in “Send a\ncopy of the application to”. Without it the field starts empty. Use a shared\nteam mailbox, not a personal address: the configuration is versioned and\nexported.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"brokerPortal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"branding\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"primaryColor\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"#1f3a68\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"accentColor\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"#0e8f8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"declineCopyTo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"underwriting@example.com\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Import refuses a value that is not an email address. Use the typed patch\n`,_jsx(_components.code,{children:`set-broker-portal-decline-copy-to`}),` to set it, or send `,_jsx(_components.code,{children:`null`}),` to clear it. The\npatch needs an existing `,_jsx(_components.code,{children:`brokerPortal`}),` section.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"set-broker-portal-decline-copy-to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"declineCopyTo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"underwriting@example.com\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`broker-portal-decline-forms`,children:`Broker Portal decline forms`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`brokerPortal.declineForms`}),` lists, by form number, the Submission form\ntemplates the decline dialog attaches to the copy of the application by\ndefault, in attachment order. Each form is generated against the declined\nsubmission and attached as a PDF; the underwriter can change the selection\nbefore declining. Without it no form is preselected.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"brokerPortal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"branding\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"primaryColor\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"#1f3a68\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"accentColor\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"#0e8f8a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"declineForms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"FM-0001\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"FM-0004\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Import refuses a number that names no live template of the company, a\ntemplate whose category is not Submission, and a repeated number. Use the\ntyped patch `,_jsx(_components.code,{children:`set-broker-portal-decline-forms`}),` to replace the list, or send an\nempty list to clear it. The patch needs an existing `,_jsx(_components.code,{children:`brokerPortal`}),` section.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"set-broker-portal-decline-forms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"declineForms\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"FM-0001\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"FM-0004\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`broker-portal-request-assignees`,children:`Broker Portal request assignees`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`brokerPortal.assignableUsers`}),` lists the user ids a broker’s request may be\nassigned to. When a broker submits a request, the Submission’s\n`,_jsx(_components.code,{children:`submissionAssignee`}),` is set from it:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`No users listed: the assignee is left as it is.`}),`\n`,_jsx(_components.li,{children:`One user: that user is assigned.`}),`\n`,_jsx(_components.li,{children:`More than one: the broker picks one or more of the listed users.`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"set-broker-portal-assignable-users\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"assignableUsers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5b0f8c1e-2f4a-4c1d-9a7e-3d2b1c0a9f8e\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The patch replaces the whole list. It is refused when the configuration has no\n`,_jsx(_components.code,{children:`brokerPortal`}),` section yet, so set the branding first, and when an id is not a\nuser of your company. Company Settings in the app edits the same list.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`configuration-categories`,children:`Configuration Categories`}),`\n`,_jsxs(_components.p,{children:[`The compare endpoint returns change counts for each category. It includes\n`,_jsx(_components.code,{children:`billingConditions`}),` only when either compared configuration declares condition rows:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Category`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fieldDefinitions`})}),_jsx(_components.td,{children:`Field definitions (name, type, reference ID, etc.)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`optionSets`})}),_jsx(_components.td,{children:`Option set values for dropdown fields`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customObjects`})}),_jsx(_components.td,{children:`Custom object type definitions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cardDefinitions`})}),_jsx(_components.td,{children:`UI card layout definitions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cardSections`})}),_jsx(_components.td,{children:`Sections within cards`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fieldLocations`})}),_jsx(_components.td,{children:`Where fields appear on cards`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billingConditions`})}),_jsx(_components.td,{children:`Named billing conditions and per-flow overrides; present only when declared`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Overview","description":null,"href":"/api-reference/configuration/overview"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Authentication","slug":"authentication","depth":2,"children":[]},{"title":"Workflow","slug":"workflow","depth":2,"children":[]},{"title":"API Endpoints","slug":"api-endpoints","depth":2,"children":[]},{"title":"Field type declarations","slug":"field-type-declarations","depth":2,"children":[{"title":"Reserved Quote field names","slug":"reserved-quote-field-names","depth":3,"children":[]}]},{"title":"Card spacing","slug":"card-spacing","depth":2,"children":[]},{"title":"Join picker order","slug":"join-picker-order","depth":2,"children":[]},{"title":"Checking configuration against stored data","slug":"checking-configuration-against-stored-data","depth":2,"children":[]},{"title":"Permissions","slug":"permissions","depth":2,"children":[]},{"title":"Framework-Required Rows","slug":"framework-required-rows","depth":2,"children":[]},{"title":"Quote billing calculations","slug":"quote-billing-calculations","depth":2,"children":[]},{"title":"Billing conditions","slug":"billing-conditions","depth":2,"children":[]},{"title":"Broker Portal section","slug":"broker-portal-section","depth":2,"children":[]},{"title":"Broker Portal pages","slug":"broker-portal-pages","depth":2,"children":[{"title":"Card sections","slug":"card-sections","depth":3,"children":[]}]},{"title":"Broker Portal decline copy-to address","slug":"broker-portal-decline-copy-to-address","depth":2,"children":[]},{"title":"Broker Portal decline forms","slug":"broker-portal-decline-forms","depth":2,"children":[]},{"title":"Broker Portal request assignees","slug":"broker-portal-request-assignees","depth":2,"children":[]},{"title":"Configuration Categories","slug":"configuration-categories","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"ai-insurance-fmv1","siteName":"AI Insurance","title":"Overview - AI Insurance","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T12:56:58.686Z","originalFileLocation":"api-reference/configuration/overview.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=\"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=\"Overview - AI Insurance\">\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/configuration/overview\">\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=Configuration+Management\u0026amp;title=Overview\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=b1e40bfcb379471630e22fc4380a96db5690809329e059ce6c055d9b26ef4e66\">\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=\"Overview - AI Insurance\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Configuration+Management\u0026amp;title=Overview\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=b1e40bfcb379471630e22fc4380a96db5690809329e059ce6c055d9b26ef4e66\">\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/configuration/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/configuration/overview.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/configuration/overview#webpage\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview\",\"name\":\"Overview\",\"dateModified\":\"2026-11-13T12:56:58.686Z\",\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"AI Insurance\",\"item\":\"https://docs.go.aiinsurance.io\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Overview\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview#article\",\"headline\":\"Overview\",\"name\":\"Overview\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview\",\"mainEntityOfPage\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview#webpage\"},\"dateModified\":\"2026-11-13T12:56:58.686Z\",\"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/configuration/overview.md","siteName":"AI Insurance","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/homepage"}]},{"tab":"App","pages":[{"title":"App","href":"/app/getting-started/overview"}]},{"tab":"Entities","pages":[{"title":"Entities","href":"/entities/overview"}]},{"tab":"Markets","pages":[{"title":"Markets","href":"/markets/overview"}]},{"tab":"Financials","pages":[{"title":"Financials","href":"/financials/overview"}]},{"tab":"API","groups":[{"group":"Getting Started","pages":[{"title":"Overview","href":"/api-reference/overview"},{"title":"Roadmap","href":"/api-reference/roadmap"},{"title":"Generating API Keys","href":"/api-reference/authentication"},{"title":"MCP Connector (Beta)","href":"/api-reference/mcp-connector"}]},{"group":"User","pages":[{"title":"Get my profile","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/me","href":"/api-reference/user/get-my-profile"},{"title":"List my accessible companies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/me/companies","href":"/api-reference/user/list-my-accessible-companies"}]},{"group":"Companies","pages":[{"title":"Companies","href":"/api-reference/companies/overview"},{"title":"Get Company Metadata","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}","href":"/api-reference/companies/get-company-metadata"},{"title":"List Company Members","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/members","href":"/api-reference/companies/list-company-members"},{"title":"Get Company Lifecycle","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/lifecycle","href":"/api-reference/companies/get-company-lifecycle"},{"title":"Reset Sandbox","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/reset","href":"/api-reference/companies/reset-sandbox"},{"title":"Get Company Email Branding","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/email-branding","href":"/api-reference/companies/get-company-email-branding"},{"title":"Set Company Email Branding","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/email-branding","href":"/api-reference/companies/set-company-email-branding"}]},{"group":"Entities","pages":[{"title":"Overview","href":"/api-reference/entities/overview"},{"title":"List Entity Types","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entity-types","href":"/api-reference/entities/list-entity-types"},{"title":"Get Page Layout","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/pages/{pageKey}/layout","href":"/api-reference/entities/get-page-layout"},{"title":"Get Entity Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/configuration","href":"/api-reference/entities/get-entity-configuration"},{"title":"Create Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}","href":"/api-reference/entities/create-entity"},{"title":"Create Entity Batch","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/batch","href":"/api-reference/entities/create-entity-batch"},{"title":"List Entities","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}","href":"/api-reference/entities/list-entities"},{"title":"Start Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/export-runs","href":"/api-reference/entities/start-entity-export-run"},{"title":"Get Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/export-runs/{runId}","href":"/api-reference/entities/get-entity-export-run"},{"title":"Download Entity Export Run","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/export-runs/{runId}/download","href":"/api-reference/entities/download-entity-export-run"},{"title":"List Export Presets For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/export-presets","href":"/api-reference/entities/list-export-presets-for-member"},{"title":"Create Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/export-presets","href":"/api-reference/entities/create-export-preset-for-member"},{"title":"Replace Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/export-presets/{presetId}","href":"/api-reference/entities/replace-export-preset-for-member"},{"title":"Delete Export Preset For Member","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/export-presets/{presetId}","href":"/api-reference/entities/delete-export-preset-for-member"},{"title":"Get Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/get-entity"},{"title":"Update Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml patch /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/update-entity"},{"title":"Delete Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/entities/{entityType}/{entityId}","href":"/api-reference/entities/delete-entity"}]},{"group":"Submission and Quote Lifecycle","pages":[{"title":"Rate, Quote, Bind","href":"/api-reference/rate-quote-bind"},{"title":"Close Submission","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/submissions/{submissionId}/close","href":"/api-reference/submission-and-quote-lifecycle/close-submission"},{"title":"Reopen Submission","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/submissions/{submissionId}/reopen","href":"/api-reference/submission-and-quote-lifecycle/reopen-submission"},{"title":"Cancel Quote","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/quotes/{quoteId}/cancel","href":"/api-reference/submission-and-quote-lifecycle/cancel-quote"}]},{"group":"Event Lifecycle","pages":[{"title":"Overview","href":"/api-reference/event-lifecycle/overview"},{"title":"Close Event","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/events/{eventId}/close","href":"/api-reference/event-lifecycle/close-event"},{"title":"Re-open Event","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/events/{eventId}/reopen","href":"/api-reference/event-lifecycle/re-open-event"},{"title":"Replace Event Open/Close History","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/events/{eventId}/open-close-history","href":"/api-reference/event-lifecycle/replace-event-openclose-history"}]},{"group":"Record Emails","pages":[{"title":"Overview","href":"/api-reference/record-emails/overview"},{"title":"List Record Email Conversations","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations","href":"/api-reference/record-emails/list-record-email-conversations"},{"title":"Get Record Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations/{threadId}","href":"/api-reference/record-emails/get-record-email-conversation"},{"title":"Remove Record Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-conversations/{threadId}/remove","href":"/api-reference/record-emails/remove-record-email-conversation"},{"title":"Link Earlier Record Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-people/{personId}/link-earlier","href":"/api-reference/record-emails/link-earlier-record-emails"},{"title":"Unlink Record Person Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-people/{personId}/unlink","href":"/api-reference/record-emails/unlink-record-person-emails"},{"title":"List Record Email Link Events","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events","href":"/api-reference/record-emails/list-record-email-link-events"},{"title":"List Record Sendable Email Templates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/sendable-email-templates","href":"/api-reference/record-emails/list-record-sendable-email-templates"},{"title":"Preview Record Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/emails/preview","href":"/api-reference/record-emails/preview-record-email"},{"title":"Send Record Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/emails","href":"/api-reference/record-emails/send-record-email"},{"title":"Retry Record Email Delivery","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-deliveries/{deliveryId}/retry","href":"/api-reference/record-emails/retry-record-email-delivery"},{"title":"List Record Packet Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/packet-emails","href":"/api-reference/record-emails/list-record-packet-emails"},{"title":"List Policy Email Conversations","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-conversations","href":"/api-reference/record-emails/list-policy-email-conversations"},{"title":"Get Policy Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-conversations/{threadId}","href":"/api-reference/record-emails/get-policy-email-conversation"},{"title":"Remove Policy Email Conversation","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-conversations/{threadId}/remove","href":"/api-reference/record-emails/remove-policy-email-conversation"},{"title":"Link Earlier Policy Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-people/{personId}/link-earlier","href":"/api-reference/record-emails/link-earlier-policy-emails"},{"title":"Unlink Policy Person Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-people/{personId}/unlink","href":"/api-reference/record-emails/unlink-policy-person-emails"},{"title":"List Policy Email Link Events","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/email-link-events","href":"/api-reference/record-emails/list-policy-email-link-events"},{"title":"List Policy Sendable Email Templates","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/sendable-email-templates","href":"/api-reference/record-emails/list-policy-sendable-email-templates"},{"title":"Preview Policy Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/emails/preview","href":"/api-reference/record-emails/preview-policy-email"},{"title":"Send Policy Email","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/emails","href":"/api-reference/record-emails/send-policy-email"},{"title":"Retry Policy Email Delivery","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/email-deliveries/{deliveryId}/retry","href":"/api-reference/record-emails/retry-policy-email-delivery"},{"title":"List Policy Packet Emails","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/{policyId}/packet-emails","href":"/api-reference/record-emails/list-policy-packet-emails"}]},{"group":"OFAC Screening","pages":[{"title":"Overview","href":"/api-reference/ofac-screening/overview"},{"title":"Screen Exposure For OFAC","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/ofac/screen","href":"/api-reference/ofac-screening/screen-exposure-for-ofac"}]},{"group":"Policy Transactions","pages":[{"title":"Overview","href":"/api-reference/policies/overview"},{"title":"Concepts","href":"/api-reference/policies/concepts"},{"title":"Effective Dates \u0026 the Policy Timeline","href":"/api-reference/policies/effective-dates"},{"title":"Lifecycle Walkthrough","href":"/api-reference/policies/lifecycle-walkthrough"},{"group":"Configuration","pages":[{"title":"Get Policy Configuration","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/policies/configuration","href":"/api-reference/field-model-policy-configuration/get-policy-configuration"}]},{"group":"Reset","pages":[{"title":"Delete All Policies","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/deleteAll","href":"/api-reference/policies/delete-all-policies"}]},{"group":"Transactions","pages":[{"title":"New Business Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/transaction/new-business","href":"/api-reference/field-model-policy-transactions/new-business-transaction"},{"title":"Endorse Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/endorse","href":"/api-reference/field-model-policy-transactions/endorse-policy-transaction"},{"title":"Cancel Policy Transaction","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/policies/{policyId}/transaction/cancel","href":"/api-reference/field-model-policy-transactions/cancel-policy-transaction"},{"title":"Reinstate Policy Transaction","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","description":"Soft-deletes a to-do (task) so it no longer appears in List Tasks\n(`listTasks`) or Get Task (`getTask`).\n\n**Required permission:** `task.delete`\n","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","description":"Store source rows once, then queue independent transformation jobs","href":"/api-reference/imports/overview"},{"title":"Import Rows","description":"Stores up to 1000 records from a spreadsheet or another system, as JSON\nvalues, without mapping or writing any records yet. It is the first step of\na bulk load or migration; tag the rows with an `importBatch`, then map them\ninto records with Queue Import Job (`queueFmv1ImportJob`). For one record\nwith an immediate result, use Import Entity (`createFmv1Import`).\n\nStores each element of `rows` unchanged as a separate import row. No entity type, mapping, guard or FMV1 configuration is needed. No attempt or entity is created. Returns the IDs in request order. Queue an import job to transform them, now or later.\n\nA request accepts 1 to 1000 arbitrary JSON values; send multiple batches for larger loads. Repeating a request stores additional rows. Storage preserves JSON values, not the original JSON text's whitespace or key order.\n\nFor an indivisible source record too large for an ordinary request, send\n`rowsGzipBase64` instead of `rows`: standard padded base64 of gzip-compressed\nUTF-8 JSON for the whole rows array. The server authenticates before decoding,\naccepts at most 16 MiB compressed and 128 MiB expanded, then validates and\nstores the original values. Never send both alternatives. Encoded source\npayloads are excluded from audit logs.\n\n**Required permission:** any one of `event.import`, `exposure.import`, `quote.import`, `submission.import`, `person.import`, `organization.import` or `policy.import`. Untyped rows are readable by any caller holding one of these permissions in the company.\n","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","description":"Maps stored import rows into records in bulk, in the background, for a\nmigration or spreadsheet load. Store the rows first with Import Rows\n(`ingestFmv1ImportRows`), then follow the job with Get Import Job\n(`getFmv1ImportJob`) and List Import Attempts (`listFmv1ImportAttempts`)\nfiltered by `jobId`. To fix failed rows or change the mapping, queue another\njob; for one record with an immediate result, use Import Entity\n(`createFmv1Import`).\n\nQueues transformations over stored import rows. The response contains the job ID and returns before mapping or writing. A new job is also how to retry or change a mapping; no re-import is needed. Jobs run in queue order within a company, with one attempt per result. Different jobs can map the same row into different entity types.\n\nExpressions read `row` (the first source JSON value) and `rows` (all source JSON values for this result). Mapping starts with an empty target entity. Use `groupBy` to combine related rows. Within a result rows are ordered by storage time, then row ID; do not assume a source record kind is first.\n\nSelectors are snapshotted when the job is accepted. Mapping and guard failures are recorded on attempts and processing continues. Queue dispatch failures leave the job queued for automatic recovery. GET the job and list attempts with `jobId` to follow progress.\n\nPolicy jobs require `policyMode: whole-policy` or `single-transaction` and refuse `groupBy`. Their transformations produce the corresponding policy command envelope. Both modes support execution and `dryRun: true`. Single commands return one receipt; whole-policy rows return ordered transaction receipts. See [Policy import contracts](/api-reference/imports/overview#policy-import-contracts).\n\n**Required permission:** the target entity type's import permission (`policy.import` for `Policy`, `exposure.import` for `Exposure`, for example). Selecting rows stored by the synchronous endpoint additionally requires their original entity type's import permission. Permissions and API-key revocation are checked again by the worker.\n","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","description":"Returns an import job's definition, status, and result counts. Poll it after\nQueue Import Job (`queueFmv1ImportJob`). A completed job can contain failed\nattempts, so inspect each result and its source row IDs with List Import\nAttempts (`listFmv1ImportAttempts`) filtered by `jobId`.\n\nAn unknown, cross-company or unauthorized job returns 404.\n\n**Required permission:** the job entity type's import permission, for example `exposure.import`.\n","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","description":"Imports one record from another system, or one spreadsheet row sent as JSON,\nas a claim (`Event`), exposure, quote, submission, person, or organization,\nmapping your source fields with `transformations` and checking them with\n`guards`. Use it to load or migrate records one at a time with an immediate\nresult; for a bulk load, store the rows with Import Rows\n(`ingestFmv1ImportRows`) and map them with Queue Import Job\n(`queueFmv1ImportJob`). The row is stored even when the import fails, so fix\nit with Retry Import (`retryFmv1Import`) rather than sending it again.\n\nImports one record from another system as an FMV1 entity, in the shape you\nhold it rather than the company's field model.\n\n1. **`data` is stored as an import row**, as sent, before anything else can\n fail.\n2. The **transformations** turn `data.\u003centityKey>` into an entity in this\n company's field model.\n3. The **guards** run against the transformed entity.\n4. If both succeeded, the entity is **created**, or **updated** when the\n transformed entity carries an `id`. Keys the field model does not declare\n are dropped first; the write is then held to every rule an ordinary\n entity create or update is, including the company's own invariants.\n\nEvery request that gets past validation stores its row and answers `201`\nwith the **import attempt** recording each step, whether or not the entity\nwas written: check `importAttempt.writeResult`. A refused write is reported\nthere as the error the entity endpoint would have answered with. The attempt\nis the one Get Import Attempt returns; the request's `importBatch` is its\n`attemptBatch`.\n\nThe attempt is recorded before the transformations run, and each step's\nresult is stored on it as the step completes. The entity write and its\n`writeResult` commit together, so if the request fails part-way (a `5xx`\nor a dropped connection), read the row's attempts: one whose guards passed\nand whose `writeResult` is `null` wrote nothing, and retrying it cannot\nleave two entities.\n\nA malformed request is a `400`, and stores nothing.\n\nThere is no `Idempotency-Key`: sending the same request twice stores two\nrows, and may write twice. To try a stored row again, retry it rather than\nsending the request again.\n\n**Required permission:** `\u003centityType>.import` for the request's\n`entityType`, such as `submission.import` to import a Submission. The\npermission is the target entity type's own `import` verb; one type's\npermission does not import another type.\n","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","description":"Fixes a failed import by running a stored row again with corrected\n`transformations` or `guards`, without sending the data again. It applies to\nrows stored by Import Entity (`createFmv1Import`); rows stored by Import\nRows (`ingestFmv1ImportRows`), and attempts made by an import job, are run\nagain by queueing another job with Queue Import Job (`queueFmv1ImportJob`).\nFind the failed row or attempt with List Import Attempts\n(`listFmv1ImportAttempts`).\n\nRetries a stored import row: fixes a failed import with new transformations\nor guards, without sending the data again. Name the row by `importRowId`, to\nretry it with the transformations and guards you send, or by\n`importAttemptId`, to retry that attempt's row with the attempt's own.\n\nThe retry reads the row's `data` and entity type, then runs the steps of\nImport Entity after the row is stored: the **transformations** turn\n`data.\u003centityKey>` into an entity, the **guards** run against it, and the\nentity is **created**, or **updated** when the transformed entity carries an\n`id`. A row that already created its entity creates another unless the\ntransformations set `id`, such as with `LOOKUP`. A row cannot be retried as\nanother entity type.\n\nEvery retry of a row you can import answers `201` with the new **import\nattempt**, linked to the same row, whether or not the entity was written:\ncheck `importAttempt.writeResult`. Its `attemptBatch` is the request's. No\nrow is stored.\n\nA malformed request is a `400`, and records nothing: both ids or neither,\n`transformations` or `guards` sent with an `importAttemptId`, an id that is\nnot a UUID, a blank `attemptBatch`, a body key this endpoint does not take,\nor any query parameter.\n\nThere is no `Idempotency-Key`: sending the same retry twice records two\nattempts, and may write twice.\n\n**Required permission:** `\u003centityType>.import` for the stored row's entity\ntype, such as `submission.import` to retry a Submission row. The row's type\nis known only once it is read, so a caller holding no import permission is\na `403`, and a row or attempt of a type you cannot import is a `404`, the\nsame as an id that exists nowhere.\n","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","description":"Lists the source data stored for imports, newest first, exactly as it\narrived through Import Entity (`createFmv1Import`) or Import Rows\n(`ingestFmv1ImportRows`). Use it to check what a migration or spreadsheet\nload sent, filtered by `importBatch` or `entityType`; to see how each row\nwas mapped and whether it failed, use List Import Attempts\n(`listFmv1ImportAttempts`).\n\nReturns a page of the company's **import rows**, newest first. An import row\nis the data an Import Entity request or an Import Rows request received,\nstored as it arrived, before any\ntransformation.\n\nFilter by `entityType` and by `importBatch`, the batch key the `import`\nrequests carried. `totalCount` counts every matching row, ignoring the\npagination. Continue while `page * pageSize \u003c totalCount`.\n\nAny query parameter not listed here is a `400`.\n\nUntyped rows are visible to any importer in the company. Synchronous rows retain their entity-type permissions: a key holding\n`person.import` alone sees untyped rows and Person rows, and `totalCount` counts only\nthose.\n\n**Required permission:** `\u003centityType>.import` for the `entityType` filter\n(`person.import` for `Person`); without the filter, any one of\n`event.import`, `exposure.import`, `quote.import`, `submission.import`,\n`person.import`, `organization.import` or `policy.import`.\n","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","description":"Returns one import row, the source data exactly as it arrived before any\nmapping. Use it to see what was sent for a row an import attempt or job\nresult names; to see how the row was mapped and whether it failed, use Get\nImport Attempt (`getFmv1ImportAttempt`).\n\nA row whose entity type you may not import reads as `404`, exactly as an id\nthat exists nowhere does.\n\n**Required permission:** any one of `event.import`, `exposure.import`,\n`quote.import`, `submission.import`, `person.import` or\n`organization.import` or `policy.import`; the row's own type's `import` to read it.\n","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","description":"Lists import attempts, newest first. Each attempt is one try at mapping an\nimport row into a record and writing it, with what failed if it did. Use it\nto find failed import rows, filtered by `jobId` for an import job or by\n`importBatch` for a batch, and open one with Get Import Attempt\n(`getFmv1ImportAttempt`).\n\nLists the company's **import attempts**, newest first. Each attempt is one\ntransform → guard → write pass over an import row, recorded whether or not\nthe write happened, with the transformations and guards it ran with and what\neach stage produced. Each item is the whole attempt, as\n**`GET /imports/attempts/{importAttemptId}`** returns it.\n\n### Filtering\n\nEvery filter is optional and exact-match; filters combine with AND.\n\n- **`importBatch`** — attempts on import rows sent with that `importBatch`.\n This finds every attempt on a batch's rows, including retries that carry an\n `attemptBatch` of their own.\n- **`attemptBatch`** — attempts recorded with that `attemptBatch`. An\n attempt made by an `import` request takes the request's `importBatch`; a\n retry carries the `attemptBatch` it was sent with.\n- **`jobId`** — attempts made by that import job.\n- **`importRowId`**, **`entityType`**, **`action`** — attempts on one row, of\n one entity type, or that created or updated.\n\nAn unknown query parameter, or a filter value outside its allowed values, is\na `400`, never an unfiltered or empty page.\n\n### Paging\n\n`page` and `pageSize` are the standard 1-based pagination parameters.\n`totalCount` counts every attempt matching the filters, ignoring the paging.\nContinue while `page * pageSize \u003c totalCount`.\n\nOnly attempts whose entity type you may import are listed: a key holding\n`person.import` alone sees only Person attempts, and `totalCount` counts\nonly those.\n\n**Required permission:** `\u003centityType>.import` for the `entityType` filter\n(`person.import` for `Person`); without the filter, any one of\n`event.import`, `exposure.import`, `quote.import`, `submission.import`,\n`person.import`, `organization.import` or `policy.import`.\n","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","description":"Returns one import attempt, showing how an import row was mapped, which\nguards failed, and whether the record was created or updated. Use it to see\nwhy a row failed to import, then fix it with Retry Import\n(`retryFmv1Import`) or, for an attempt made by an import job, queue another\njob with Queue Import Job (`queueFmv1ImportJob`).\n\nReturns one **import attempt**: a single transform → guard → write pass\nover an import row, with the transformations and guards it ran with and what\neach stage produced.\n\nThe attempt is recorded before its first step runs, and each stage's\nresult is stored as that stage completes, so a `null` result is one the\nattempt has not reached, or never reached.\n\n- **`transformationResult`** — the transformed entity, or the fields that\n failed to transform.\n- **`guardResult`** — whether every guard held, and each one that did not.\n `null` when the guards never ran.\n- **`writeResult`** — the outcome of the create or update. `null` when no\n write was attempted, because the transformations or a guard failed. It is\n stored in the same transaction as the write, so on an attempt whose\n guards passed, `null` means no entity was written: the attempt is in\n progress, or it crashed before its write committed.\n\nAttempt ids are scoped to their company: an id belonging to another company\nreturns `404`, exactly as an id that exists nowhere does.\n\nAn attempt whose entity type you may not import reads as `404`, exactly as\nan id that exists nowhere does.\n\n**Required permission:** any one of `event.import`, `exposure.import`,\n`quote.import`, `submission.import`, `person.import` or\n`organization.import` or `policy.import`; the attempt's own type's `import` to read it.\n","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","description":"Preserves a record's activity from the legacy system. The body carries the\nrecord's whole legacy activity feed, each entry already worded as the\nlegacy system displayed it, and replaces whatever was preserved on the\nrecord before. Repeating the request leaves the same entries, so a\nmigration can be rerun. Send an empty `entries` array to clear the record.\n\nThe entries appear on the record's Activity tab under **Before migration**,\nnewest first, below the activity recorded since. They are read-only and are\nshown as sent.\n\nAn entry is held by one record at a time. When a `sourceId` in the request\nis already preserved on another record, the entry moves to this record, and\n`movedEntryCount` counts such entries.\n\nTo check that every legacy activity row was preserved, add up\n`sourceRowCount` across the migrated records and compare it with the legacy\nsystem's row count.\n\n**Required permission:** `\u003cresource>.import` for the path's `{entityType}`\n(`event.import`, `exposure.import`, `policy.import`, `quote.import`,\n`submission.import`). An entry with `privileged: true` also requires\n`note.view-privileged`.\n","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","description":"Shared fields copy between Quotes and Policies, and from a Submission to a Quote, by default. Conversion Rules state the exceptions, with SKIP() or a JEXL expression.","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":"Overview - AI Insurance","buildId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","deploymentId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","dynamics":[],"chunks":[]}