Downloads the company’s whole configuration (fields, dropdown option sets,
custom objects, cards and screen layout, and the rest) as one JSON document.
Use it to back up the configuration, or to edit it in bulk and apply it with
Import Configuration (importFmv1Configuration). For a small change, such
as adding one field or one dropdown value, Patch Configuration
(patchFmv1Configuration) is simpler; to check whether anything changed
without downloading it, use Get Configuration Metadata
(getFmv1ConfigurationMetadata).
Exports the company’s FMV1 configuration as a structured JSON body. The
response is the structured FMV1 configuration shape — the exact shape the
import endpoint accepts. Each custom object is defined once in
customObjects with metadata and sub-fields together; each option set is
defined once in optionSets.
The returned body can be edited and re-applied via the import endpoint:
export → (edit) → import is a lossless, machine-to-machine configuration
round-trip.
The export reads the whole configuration from the database (resolved from the
credential’s tenant), so the request needs no body — POST an empty object.
Required permission:configuration.export
This endpoint requires an API key that holds the configuration.export
permission — the Admin role does.
See Authentication for how to create API keys with specific roles.
User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as Authorization: Bearer <jwt>. The request resolves to the user's identity and is authorized by their Role on the {companyId} in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both BearerAuth and ApiKeyAuth.
Path Parameters
companyId
string<uuid>
required
Company identifier
Body
application/json
No input is required — an empty object (or no body) is accepted.
Response
Configuration exported successfully — the structured importable
configuration body.
Canonical configuration export. Fields declare their type once in structured
typeInfo, without duplicate type or string-encoded typeArgs.
customObjects
object[]
required
Custom objects defined once, with metadata and sub-fields together. Keys must be unique.
Show child attributes
fields
object[]
required
Field definitions, keyed by entity + reference id.
Show child attributes
pages
object[]
required
Page definitions.
Show child attributes
cards
object[]
required
Card definitions.
Show child attributes
cardPageRelationships
object[]
required
Placements of cards onto pages.
Show child attributes
optionSets
object[]
required
Option sets and their options.
Show child attributes
fieldLocations
object[]
required
Field placements (the layout) onto cards.
Show child attributes
ratingWorkflows
object[]
required
Rating workflow definitions.
Show child attributes
entityInvariants
object[]
required
Per-entity invariant conditions enforced on every write.
Show child attributes
formLogicRules
object[]
Forms-logic rules (quote-flow auto-add rules). Optional — existing
payloads predate the "Forms" tab; absent ⇒ no rules.
Show child attributes
smartTags
object[]
Smart tags — the named values resolved into generated documents. Optional:
existing payloads predate the slice, and absent ⇒ no smart tags, which is
also how a company that has not yet moved to this format is recognised.
Omitted from an export when the company has none, rather than emitted as an
empty array.
Show child attributes
exportSurfaces
object[]
Declared export columns — the tenant-facing column set of each export
surface (the seven entity exports plus the bordereau). Optional: existing
payloads predate the slice, and absent ⇒ no declared columns, which is also
how a surface that still offers every configured field is recognised.
Activation is per surface: a surface with at least one row here resolves its
whole tenant column set through those rows, in the order they appear; a
surface with none behaves exactly as it did before this section existed.
Omitted from an export when the company has declared none, rather than
emitted as an empty array.
Show child attributes
listColumns
object[]
Declared list columns — the complete tenant-facing column set of each
entity list page. Optional: existing payloads predate the slice, and absent
⇒ no declared tenant columns, so each list renders only its platform/system
columns.
Rows declare membership, not order or default visibility. The platform's
per-page defaults and each user's saved view own those choices; the stored
configuration sorts rows canonically by (surface, key).
Omitted from an export when the company has declared none, rather than
emitted as an empty array.
Show child attributes
listFilters
object[]
Tenant-defined list filters, one per (surface, key). Together with
page-owned system filters, these rows are the complete user-visible filter
catalog. listColumns contributes no filters.
Optional for wire compatibility with payloads that predate the slice.
Absent or empty means that each entity list offers only its page-owned
system filters. Omitted from an export when the company has none.
Show child attributes
billingConditions
object[]
Optional named Quote billing conditions. Each condition key has one *
default and optional per-flow overrides. False conditions skip the billing
calculation and leave its value null without refusing saving or binding.
Rows are sorted by (conditionKey, quoteFlow). Omitted from
an export when absent or empty, preserving existing configuration exports.
Show child attributes
conversionRules
object[]
Exceptions to the default copy between Policy and Quote. At bind and at
draft generation, every shared field (declared on Quote and Policy with the
same referenceId and value type, and neither calculated on the
destination nor system-managed or platform-owned) is copied unchanged
unless a rule in that direction and transaction type names it. A rule
names a field when its destinationPath is the field or a path under it.
An expression of exactly SKIP() writes nothing; any other expression
writes its result, including to a differently named destination. A field
declared on one entity only is written only by a rule. The default copy
is not stored as rules and is not exported.
Each rule is identified by its (direction, transactionType,
destinationPath) triple; duplicates are rejected. The stored
configuration sorts the section canonically by that triple. Import
validates explicit rules and requires all framework-pinned rows, including
on first import. Omitting or emptying the section is invalid, even with
force enabled. Preserve the authored slice through whole-configuration imports. Field edits require
reviewing affected rules against business intent: adding a shared field
carries it with no rule, and deleting a rule on a shared field turns the
default copy on for it.
Show child attributes
retirementIdentities
object[]
Server-derived memory for retired data addresses. Records have exactly one
of three kinds: top-level field, custom-object subfield, or option-set
value. A submitted copy is accepted for export/import round trips but is
non-authoritative; the server derives the next set from the previous
immutable configuration version. Omitted when empty.
Option 1
Option 2
Option 3
Show child attributes
exportPlatformColumns
object[]
Spreadsheet types for built-in (platform) export columns, one per
(surface, column). Optional: absent or empty means platform columns
keep their built-in formatting. column must name a built-in column of the
surface (checked by name at import). Omitted from an export when empty.
Show child attributes
brokerPortal
object
Broker Portal customization. Optional, and omitted from an export when
absent. This section does not turn the portal on: a platform admin enables
the portal separately, and a configuration import cannot. The portal's logo
and colours are the company's branding in Company Settings, not
configuration.
Show child attributes
searchFields
object[]
The values the search index holds, per record type: list search and
global search find a record by them. A record's display-name field is
always searchable without a row. Optional: absent or empty means each
record is searchable by its name only. Omitted from an export when empty.
Show child attributes
searchResultFields
object[]
The fields or calculated values a global search result shows, per record type, read from the
record when the search runs. Optional: absent or empty means a result
shows its name and the fields that matched. Omitted from an export when
empty.
A field or calculated value shown in global search and authorized relationship
pickers. Without an expression, key names a top-level field of any kind.
With an expression, key is an independent identifier and valueType and
cardinality are required. Copy these three properties from a list column
on the same entity type. Expressions use the same bare field/JEXL grammar
and pure/temporal functions as list columns. VIEW_AS_OF_DATE() is today's
UTC date here. Database reads, entity-bound functions, mutations and attached
form numbers are unavailable. Values are evaluated when search runs; they
do not make records searchable and require no reindex.
Option 1
Option 2
Show child attributes
graphSettings
object
The company's graph settings: the time zone every graph reads today and
day boundaries in. Required once any graph data point is declared.
Omitted from an export when absent.
Show child attributes
graphDataPoints
object[]
Graph data points: how dashboard graphs read numbers out of records.
Optional: absent or empty means none. Omitted from an export when empty.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AI Insurance","colors":{"primary":"#714CC5","light":"#D3BFFF","dark":"#A887F3"},"logo":{"light":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","dark":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","href":"https://go.aiinsurance.io"},"favicon":"https://mintcdn.com/ai-insurance-fmv1/HtPQvD-FDA5nbM7L/logo/dark.jpg?fit=max\u0026auto=format\u0026n=HtPQvD-FDA5nbM7L\u0026q=85\u0026s=14ace86d6e87c6eab47960c514760266","navbar":{"links":[{"href":"mailto:support@aiinsurance.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://go.aiinsurance.io"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/a-i-insurance-inc"}},"seo":{"metatags":{"canonical":"https://docs.go.aiinsurance.io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ai-insurance-fmv1","hasAudioNarration":false,"actualSubdomain":"ai-insurance-fmv1","customDomains":["docs.go.aiinsurance.io"],"gitSource":{"type":"github","owner":"ai-insurance","repo":"docs-mirror","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":"","_id":"6af4b096ee8edba08e00c669"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af7498e75f3e5c02082a680","clientVersion":"0.0.4131","searchFilterCounts":[{"language":"default","tag":"API","count":244},{"language":"default","tag":"Financials","count":94},{"language":"default","tag":"App","count":35},{"language":"default","tag":"Policy Transactions","count":34},{"language":"default","tag":"Company Files","count":28},{"language":"default","tag":"Entities","count":25},{"language":"default","tag":"Record Emails","count":23},{"language":"default","tag":"Configuration","count":23},{"language":"default","tag":"Forms","count":18},{"language":"default","tag":"Guides","count":18}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/fmv1-configuration/export-configuration","slug":"/api-reference/fmv1-configuration/export-configuration","pageMetadata":{"title":"Export Configuration","description":"Downloads the company's whole configuration (fields, dropdown option sets,\ncustom objects, cards and screen layout, and the rest) as one JSON document.\nUse it to back up the configuration, or to edit it in bulk and apply it with\nImport Configuration (`importFmv1Configuration`). For a small change, such\nas adding one field or one dropdown value, Patch Configuration\n(`patchFmv1Configuration`) is simpler; to check whether anything changed\nwithout downloading it, use Get Configuration Metadata\n(`getFmv1ConfigurationMetadata`).\n\nExports the company's FMV1 configuration as a **structured JSON body**. The\nresponse is the structured FMV1 configuration shape — the exact shape the\n**import** endpoint accepts. Each custom object is defined once in\n`customObjects` with metadata and sub-fields together; each option set is\ndefined once in `optionSets`.\n\nThe returned body can be edited and re-applied via the **import** endpoint:\n`export` → (edit) → `import` is a lossless, machine-to-machine configuration\nround-trip.\n\nThe export reads the whole configuration from the database (resolved from the\ncredential's tenant), so the request needs **no body** — POST an empty object.\n\n**Required permission:** `configuration.export`\n\n\u003cNote>\nThis endpoint requires an API key that holds the `configuration.export`\npermission — the **Admin** role does.\nSee [Authentication](/api-reference/authentication) for how to create API keys with specific roles.\n\u003c/Note>\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/export","href":"/api-reference/fmv1-configuration/export-configuration","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n }, {Note} = _components;\n if (!Note) _missingMdxReference(\"Note\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Downloads the company’s whole configuration (fields, dropdown option sets,\\ncustom objects, cards and screen layout, and the rest) as one JSON document.\\nUse it to back up the configuration, or to edit it in bulk and apply it with\\nImport Configuration (\", _jsx(_components.code, {\n children: \"importFmv1Configuration\"\n }), \"). For a small change, such\\nas adding one field or one dropdown value, Patch Configuration\\n(\", _jsx(_components.code, {\n children: \"patchFmv1Configuration\"\n }), \") is simpler; to check whether anything changed\\nwithout downloading it, use Get Configuration Metadata\\n(\", _jsx(_components.code, {\n children: \"getFmv1ConfigurationMetadata\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Exports the company’s FMV1 configuration as a \", _jsx(_components.strong, {\n children: \"structured JSON body\"\n }), \". The\\nresponse is the structured FMV1 configuration shape — the exact shape the\\n\", _jsx(_components.strong, {\n children: \"import\"\n }), \" endpoint accepts. Each custom object is defined once in\\n\", _jsx(_components.code, {\n children: \"customObjects\"\n }), \" with metadata and sub-fields together; each option set is\\ndefined once in \", _jsx(_components.code, {\n children: \"optionSets\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The returned body can be edited and re-applied via the \", _jsx(_components.strong, {\n children: \"import\"\n }), \" endpoint:\\n\", _jsx(_components.code, {\n children: \"export\"\n }), \" → (edit) → \", _jsx(_components.code, {\n children: \"import\"\n }), \" is a lossless, machine-to-machine configuration\\nround-trip.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The export reads the whole configuration from the database (resolved from the\\ncredential’s tenant), so the request needs \", _jsx(_components.strong, {\n children: \"no body\"\n }), \" — POST an empty object.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Required permission:\"\n }), \" \", _jsx(_components.code, {\n children: \"configuration.export\"\n })]\n }), \"\\n\", _jsx(Note, {\n children: _jsxs(_components.p, {\n children: [\"This endpoint requires an API key that holds the \", _jsx(_components.code, {\n children: \"configuration.export\"\n }), \"\\npermission — the \", _jsx(_components.strong, {\n children: \"Admin\"\n }), \" role does.\\nSee \", _jsx(_components.a, {\n href: \"/api-reference/authentication\",\n children: \"Authentication\"\n }), \" for how to create API keys with specific roles.\"]\n })\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\n}\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Export Configuration","description":"Downloads the company's whole configuration (fields, dropdown option sets,\ncustom objects, cards and screen layout, and the rest) as one JSON document.\nUse it to back up the configuration, or to edit it in bulk and apply it with\nImport Configuration (`importFmv1Configuration`). For a small change, such\nas adding one field or one dropdown value, Patch Configuration\n(`patchFmv1Configuration`) is simpler; to check whether anything changed\nwithout downloading it, use Get Configuration Metadata\n(`getFmv1ConfigurationMetadata`).\n\nExports the company's FMV1 configuration as a **structured JSON body**. The\nresponse is the structured FMV1 configuration shape — the exact shape the\n**import** endpoint accepts. Each custom object is defined once in\n`customObjects` with metadata and sub-fields together; each option set is\ndefined once in `optionSets`.\n\nThe returned body can be edited and re-applied via the **import** endpoint:\n`export` → (edit) → `import` is a lossless, machine-to-machine configuration\nround-trip.\n\nThe export reads the whole configuration from the database (resolved from the\ncredential's tenant), so the request needs **no body** — POST an empty object.\n\n**Required permission:** `configuration.export`\n\n\u003cNote>\nThis endpoint requires an API key that holds the `configuration.export`\npermission — the **Admin** role does.\nSee [Authentication](/api-reference/authentication) for how to create API keys with specific roles.\n\u003c/Note>\n","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/configuration/export","href":"/api-reference/fmv1-configuration/export-configuration","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"exportFmv1Configuration","x-safe":true,"security":["4e26fc5f-c7a1-4040-b78d-7a86c4628c3c","2c4ee464-7129-4b9b-bea6-2b23656e19b3"],"summary":"Export Configuration","description":"Downloads the company's whole configuration (fields, dropdown option sets,\ncustom objects, cards and screen layout, and the rest) as one JSON document.\nUse it to back up the configuration, or to edit it in bulk and apply it with\nImport Configuration (`importFmv1Configuration`). For a small change, such\nas adding one field or one dropdown value, Patch Configuration\n(`patchFmv1Configuration`) is simpler; to check whether anything changed\nwithout downloading it, use Get Configuration Metadata\n(`getFmv1ConfigurationMetadata`).\n\nExports the company's FMV1 configuration as a **structured JSON body**. The\nresponse is the structured FMV1 configuration shape — the exact shape the\n**import** endpoint accepts. Each custom object is defined once in\n`customObjects` with metadata and sub-fields together; each option set is\ndefined once in `optionSets`.\n\nThe returned body can be edited and re-applied via the **import** endpoint:\n`export` → (edit) → `import` is a lossless, machine-to-machine configuration\nround-trip.\n\nThe export reads the whole configuration from the database (resolved from the\ncredential's tenant), so the request needs **no body** — POST an empty object.\n\n**Required permission:** `configuration.export`\n\n\u003cNote>\nThis endpoint requires an API key that holds the `configuration.export`\npermission — the **Admin** role does.\nSee [Authentication](/api-reference/authentication) for how to create API keys with specific roles.\n\u003c/Note>\n","tags":["FMV1 Configuration"],"parameters":["b2ba70c9-9664-41b6-a4fd-3da23010c9df"],"requestBody":"6724ce4a-7bcd-4acf-983f-2641c1b60b32","responses":{"200":"6a698037-1805-423e-a423-ee421bd05064","401":"1bb04821-77ea-470d-8487-fee9081ef88c","403":"8eff811c-3d4b-4f72-af04-eaf603b9c3eb","500":"45193dd5-a6d4-4a17-a004-234bcf4945fc"},"method":"post","type":"path","servers":["b4993f5b-e21e-4dbd-8ace-9c59b5197d8e"],"path":"/api/v1/companies/{companyId}/configuration/export","baseUrlOptions":["https://go.aiinsurance.io"],"title":"Export Configuration","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b2ba70c9-9664-41b6-a4fd-3da23010c9df":{"name":"companyId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Company identifier","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"Company identifier"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"No input is required — an empty object (or no body) is accepted.\n","uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"6a698037-1805-423e-a423-ee421bd05064":{"description":"Configuration exported successfully — the structured importable\nconfiguration body.\n","content":{"application/json":{"schema":{"type":"object","description":"Canonical configuration export. Fields declare their type once in structured\n`typeInfo`, without duplicate `type` or string-encoded `typeArgs`.\n","required":["customObjects","fields","pages","cards","cardPageRelationships","optionSets","fieldLocations","ratingWorkflows","entityInvariants"],"properties":{"customObjects":{"type":"array","description":"Custom objects defined once, with metadata and sub-fields together. Keys must be unique.","items":{"type":"object","description":"A complete custom-object definition with metadata and sub-fields.","required":["subFields","key","name","pluralizedName"],"properties":{"key":{"type":"string","description":"Stable key for the custom-object type.","isRequired":true,"uniqueKey":"customObjects.items.[INDEX].key","typeLabel":"string"},"name":{"type":"string","description":"Singular display name.","isRequired":true,"uniqueKey":"customObjects.items.[INDEX].name","typeLabel":"string"},"pluralizedName":{"type":"string","description":"Plural display name.","isRequired":true,"uniqueKey":"customObjects.items.[INDEX].pluralizedName","typeLabel":"string"},"subFields":{"type":"array","description":"The custom object's sub-field definitions. May be empty.","items":{"type":"object","description":"A custom-object sub-field definition — pure data, structurally a subset of a\ntop-level *Fields*-sheet field. Presentation (label / input modality /\ndisplay format) and per-placement conditional logic are owned by the layout\n(cards + field locations), not by the sub-field definition. Mirrors the\n`SubField` shape.\n","required":["referenceId","typeInfo"],"properties":{"referenceId":{"type":"string","description":"Stable reference id for the sub-field within its object.","isRequired":true,"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].referenceId","typeLabel":"string"},"typeInfo":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].typeInfo.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].typeInfo.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].typeInfo","typeLabel":"object"},"definition":{"type":"string","description":"Optional human description of the sub-field.","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].definition","typeLabel":"string"},"cardinality":{"type":"string","description":"Optional Single value or list axis for the sub-field.","enum":["Single","List"],"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].cardinality","typeLabel":"enum\u003cstring>"},"calculatedValue":{"oneOf":[{"type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"The JEXL expression.","isRequired":true,"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].calculatedValue.oneOf.0.expression","typeLabel":"string"}},"description":"Optional calculated-value expression computing the sub-field's read-only\nvalue. Unlike a top-level field's raw string, a sub-field carries it as\nan `{ expression }` object; `null` and absent both mean a plain input\nsub-field.\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].calculatedValue.oneOf.0","typeLabel":"object"},{"type":"null","required":["expression"],"properties":{"expression":{"type":"string","description":"The JEXL expression."}},"description":"Optional calculated-value expression computing the sub-field's read-only\nvalue. Unlike a top-level field's raw string, a sub-field carries it as\nan `{ expression }` object; `null` and absent both mean a plain input\nsub-field.\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].calculatedValue.oneOf.1","typeLabel":"null"}],"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].calculatedValue","typeLabel":"object | null"},"recalculate":{"type":"string","enum":["ALWAYS","WHEN_UNSET"],"description":"When the calculated value runs: `ALWAYS` recomputes on every resolve\npass; `WHEN_UNSET` runs only when no value exists yet, so an existing\nvalue is kept. Absent means `ALWAYS` (a plain calculated sub-field).\nRequires a `calculatedValue`.\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].recalculate","typeLabel":"enum\u003cstring>"},"clientValueAllowed":{"type":"boolean","description":"Whether a client-supplied value is accepted for the calculated\nsub-field. Absent means `false` (the value is fully server-computed).\n`true` requires `recalculate: WHEN_UNSET` — a sub-field cannot both\nrecalculate on every resolve and accept client values.\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].clientValueAllowed","typeLabel":"boolean"},"systemManaged":{"type":"boolean","description":"Declares the sub-field system-managed: the platform owns its canonical\nvalue. Client-supplied values are silently dropped on every generic write\nchannel; the write continues and the platform-maintained value wins. Omit\nthe property for caller-owned sub-fields.\n","uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX].systemManaged","typeLabel":"boolean"}},"uniqueKey":"customObjects.items.[INDEX].subFields.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customObjects.items.[INDEX].subFields","typeLabel":"object[]"},"displayNameExpression":{"type":"string","description":"Optional expression computing an instance's display name.","uniqueKey":"customObjects.items.[INDEX].displayNameExpression","typeLabel":"string"}},"uniqueKey":"customObjects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customObjects","typeLabel":"object[]"},"fields":{"type":"array","description":"Field definitions, keyed by entity + reference id.","items":{"type":"object","description":"Canonical top-level field definition, keyed by entity + reference id.\n`typeInfo` contains the kind and structured arguments together.\n","required":["entitySelector","referenceId","cardinality","typeInfo"],"properties":{"entitySelector":{"type":"string","description":"The entity the field belongs to (e.g. \"Exposure\").","isRequired":true,"uniqueKey":"fields.items.[INDEX].entitySelector","typeLabel":"string"},"referenceId":{"type":"string","description":"Stable per-entity reference id for the field.","isRequired":true,"uniqueKey":"fields.items.[INDEX].referenceId","typeLabel":"string"},"typeInfo":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"fields.items.[INDEX].typeInfo.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"fields.items.[INDEX].typeInfo.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"fields.items.[INDEX].typeInfo","typeLabel":"object"},"cardinality":{"type":"string","description":"Single value or list. Authoritative for the field's Single/List axis.","enum":["Single","List"],"isRequired":true,"uniqueKey":"fields.items.[INDEX].cardinality","typeLabel":"enum\u003cstring>"},"definition":{"type":"string","description":"Optional human description of the field.","uniqueKey":"fields.items.[INDEX].definition","typeLabel":"string"},"calculatedValue":{"type":"string","description":"Optional calculated-value expression.","uniqueKey":"fields.items.[INDEX].calculatedValue","typeLabel":"string"},"recalculate":{"type":"string","enum":["ALWAYS","WHEN_UNSET"],"description":"When the calculated value runs: `ALWAYS` recomputes on every resolve\npass; `WHEN_UNSET` runs only when no value exists yet, so an existing\nvalue is kept. Absent means `ALWAYS` (a plain calculated field).\nRequires a `calculatedValue`.\n","uniqueKey":"fields.items.[INDEX].recalculate","typeLabel":"enum\u003cstring>"},"clientValueAllowed":{"type":"boolean","description":"Whether a client-supplied value is accepted for the calculated field.\nAbsent means `false` (the value is fully server-computed). `true`\nrequires `recalculate: WHEN_UNSET` — a field cannot both recalculate on\nevery resolve and accept client values, because each resolve would\noverwrite the value the client just supplied.\n","uniqueKey":"fields.items.[INDEX].clientValueAllowed","typeLabel":"boolean"},"termInvariant":{"type":"boolean","description":"Declares the field term-invariant: it holds one value across every\nsegment of a policy version, so a write to it applies to the whole term.\nAccepted on `Policy` field rows only — no other entity is segmented —\nand `true` is rejected together with a calculated value, because the\ncalculated-value resolver runs per segment. Absent means `false`.\n","uniqueKey":"fields.items.[INDEX].termInvariant","typeLabel":"boolean"},"systemManaged":{"type":"boolean","description":"Declares the field system-managed: the platform owns its canonical value.\nClient-supplied values are silently dropped on every generic write channel;\nthe write continues and the platform-maintained value wins. Omit the\nproperty for caller-owned fields.\n","uniqueKey":"fields.items.[INDEX].systemManaged","typeLabel":"boolean"},"writePermission":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Declares the field write-locked behind a field write group (ADR 0080):\nevery field of this entity sharing the same `writePermission` value forms\nthe grantable permission `\u003centity>.field-\u003cvalue>` (e.g. `event.field-reserves`).\nA create or update whose caller-sent body names a locked field the\ncaller's role does not hold is refused WHOLE — unlike `readOnly` /\n`systemManaged`, the value is never silently stripped. An event's\nopen/close history that the platform builds or moves from caller-sent\ndates counts as a write of `eventOpenCloseHistory`: a create that sends\n`openedOn` / `closedDate`, or an update that changes `closedDate`, needs\nthat field's group. Valid only on a\ntop-level field of a permission-resource entity (Policy, Quote, Event,\nSubmission, Exposure, Person, Organization); rejected on a calculated\nfield, a `systemManaged` field, or a custom-object sub-field. Omit the\nproperty for a field with no write restriction.\n","uniqueKey":"fields.items.[INDEX].writePermission","typeLabel":"string"},"kickOut":{"type":"object","additionalProperties":false,"description":"Marks a Submission or Exposure field as a kick-out question. When the\nquestion applies, a blank answer, or one `acceptWhen` rejects, sends the\nsubmission to an underwriter instead of an instant price. Both conditions\nread the fields of the record the question is on (the submission, or that\nexposure) by bare name, plus `value`, the field's answer. Valid only on a\ntop-level Submission or Exposure field that is not `systemManaged`; a\ncalculated field is allowed. Rejected on a custom-object sub-field. Omit the\nproperty for a field that is not a kick-out question.\n","required":["acceptWhen","reason"],"properties":{"acceptWhen":{"type":"string","description":"A JEXL condition that returns a boolean and is true when the answer is\nacceptable. It runs only on an answered question; a blank answer is\nunanswered without it.\n","example":"!value","isRequired":true,"uniqueKey":"fields.items.[INDEX].kickOut.acceptWhen","typeLabel":"string"},"reason":{"type":"string","minLength":1,"description":"Why the answer sends the submission to an underwriter. Shown to the carrier only.","example":"Prior bankruptcy","isRequired":true,"uniqueKey":"fields.items.[INDEX].kickOut.reason","typeLabel":"string"},"appliesWhen":{"type":"string","description":"A JEXL condition that returns a boolean and is true when the question\nis asked. It runs before the answer is checked. Unless it evaluates to\n`true` (false, null, or an evaluation error), the question is not judged\nand is not listed. Omit it to always ask the question.\n","example":"physicianSignsOffAssessment","uniqueKey":"fields.items.[INDEX].kickOut.appliesWhen","typeLabel":"string"}},"uniqueKey":"fields.items.[INDEX].kickOut","typeLabel":"object"},"clearanceMatch":{"type":"string","enum":["name","taxId","address"],"description":"Marks the field as one that identifies an insured when checking a\nsubmission for duplicates, and names how its value is compared: `name`\nand `taxId` need a `Text` field, `address` an `Address` or `AddressV2`\nfield. Valid only on a top-level `Exposure` field with `Single`\ncardinality; rejected on a custom-object sub-field. Omit the property for\na field that takes no part in the check.\n","uniqueKey":"fields.items.[INDEX].clearanceMatch","typeLabel":"enum\u003cstring>"}},"uniqueKey":"fields.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"fields","typeLabel":"object[]"},"pages":{"type":"array","description":"Page definitions.","items":{"type":"object","description":"One page definition (a parsed *Onboarding* sheet page row). Mirrors the `Page` shape.","required":["name","pageType"],"properties":{"name":{"type":"string","description":"Human-readable page name.","isRequired":true,"uniqueKey":"pages.items.[INDEX].name","typeLabel":"string"},"pageType":{"type":"string","description":"How the page renders.","enum":["input","viewEdit","readonly","trackedActivity"],"isRequired":true,"uniqueKey":"pages.items.[INDEX].pageType","typeLabel":"enum\u003cstring>"},"pageKey":{"type":"string","description":"Optional stable key for the page (referenced by card-page relationships).","uniqueKey":"pages.items.[INDEX].pageKey","typeLabel":"string"},"entity":{"type":"string","description":"Optional entity-in-context for the page.","uniqueKey":"pages.items.[INDEX].entity","typeLabel":"string"}},"uniqueKey":"pages.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"pages","typeLabel":"object[]"},"cards":{"type":"array","description":"Card definitions.","items":{"type":"object","description":"One card definition (a parsed *Cards* sheet band-B row). Mirrors the `Card` shape.","required":["entity","name"],"properties":{"entity":{"type":"string","description":"Entity-in-context for the card.","isRequired":true,"uniqueKey":"cards.items.[INDEX].entity","typeLabel":"string"},"name":{"type":"string","description":"Human-readable card name.","isRequired":true,"uniqueKey":"cards.items.[INDEX].name","typeLabel":"string"},"cardKey":{"type":"string","description":"Optional stable key for the card (referenced by card-page relationships and field locations).","uniqueKey":"cards.items.[INDEX].cardKey","typeLabel":"string"},"cardType":{"type":"string","description":"Optional card render type (e.g. \"input\", \"viewEdit\", \"readonly\", \"trackedActivity\").","uniqueKey":"cards.items.[INDEX].cardType","typeLabel":"string"},"columnCount":{"type":"number","description":"Optional number of layout columns on the card.","uniqueKey":"cards.items.[INDEX].columnCount","typeLabel":"number"},"columnGap":{"type":"number","minimum":0,"description":"Extra horizontal space between card grid columns, in pixels. Omitted or zero preserves existing spacing.","uniqueKey":"cards.items.[INDEX].columnGap","typeLabel":"number"},"rowGap":{"type":"number","minimum":0,"description":"Extra vertical space between card grid rows, in pixels. Omitted or zero preserves existing spacing.","uniqueKey":"cards.items.[INDEX].rowGap","typeLabel":"number"},"displayCondition":{"type":"string","description":"Optional JEXL condition gating whether the card is shown — the\nexpression string of the card's `{ expression }` display condition (the\nsame shape carried by a field location's `displayCondition`). Omitted\nwhen the card has no display condition.\n","uniqueKey":"cards.items.[INDEX].displayCondition","typeLabel":"string"},"cardTitleExpression":{"type":"string","description":"Optional expression computing the card's title at render time.","uniqueKey":"cards.items.[INDEX].cardTitleExpression","typeLabel":"string"},"collapse":{"type":"string","enum":["expanded","collapsed"],"description":"Adds a collapse control with this initial state. Omitted keeps the body always open. Collapsed cards retain their header and field values; validation is unchanged.","uniqueKey":"cards.items.[INDEX].collapse","typeLabel":"enum\u003cstring>"},"section":{"type":"string","minLength":1,"description":"Label the broker portal lists this card under in the page's jump-to section nav. Omitted means the card is not listed.","uniqueKey":"cards.items.[INDEX].section","typeLabel":"string"}},"uniqueKey":"cards.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"cards","typeLabel":"object[]"},"cardPageRelationships":{"type":"array","description":"Placements of cards onto pages.","items":{"type":"object","description":"A static placement of a card onto a page (band C of the *Cards* sheet).\nMany-to-many; `displayPosition` orders cards within a page. Mirrors the\n`CardPageRelationship` shape.\n","required":["cardKey","pageKey","displayPosition"],"properties":{"cardKey":{"type":"string","description":"The placed card's `cardKey`.","isRequired":true,"uniqueKey":"cardPageRelationships.items.[INDEX].cardKey","typeLabel":"string"},"pageKey":{"type":"string","description":"The hosting page's `pageKey`.","isRequired":true,"uniqueKey":"cardPageRelationships.items.[INDEX].pageKey","typeLabel":"string"},"displayPosition":{"type":"number","description":"Ordering of this card within the page.","isRequired":true,"uniqueKey":"cardPageRelationships.items.[INDEX].displayPosition","typeLabel":"number"}},"uniqueKey":"cardPageRelationships.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"cardPageRelationships","typeLabel":"object[]"},"optionSets":{"type":"array","description":"Option sets and their options.","items":{"type":"object","description":"An option set and its options. Mirrors the `OptionSet` shape.","required":["name","options"],"properties":{"name":{"type":"string","description":"The option-set name.","isRequired":true,"uniqueKey":"optionSets.items.[INDEX].name","typeLabel":"string"},"options":{"type":"array","description":"The options in the set.","items":{"type":"object","required":["label","key","groupLabel"],"properties":{"label":{"type":"string","description":"Human-readable option label.","isRequired":true,"uniqueKey":"optionSets.items.[INDEX].options.items.[INDEX].label","typeLabel":"string"},"key":{"type":"string","description":"Stable option key (the stored value).","isRequired":true,"uniqueKey":"optionSets.items.[INDEX].options.items.[INDEX].key","typeLabel":"string"},"groupLabel":{"type":"string","description":"Group label for visually grouping options (may be empty).","isRequired":true,"uniqueKey":"optionSets.items.[INDEX].options.items.[INDEX].groupLabel","typeLabel":"string"}},"uniqueKey":"optionSets.items.[INDEX].options.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"optionSets.items.[INDEX].options","typeLabel":"object[]"}},"uniqueKey":"optionSets.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"optionSets","typeLabel":"object[]"},"fieldLocations":{"type":"array","description":"Field placements (the layout) onto cards.","items":{"type":"object","description":"One field placement (the layout) onto a card — a parsed *Field Locations*\nsheet row. Mirrors the `FieldLocationDefinition` shape. The nullable\npresentation fields (`inputModality`, `inputModalityArgs`, `displayFormat`,\n`displayFormatArgs`) carry an explicit `null` on the wire (the parser emits\n`null`, not omission).\n","required":["cardKey","entity","fieldReferenceId","label","sectionPosition","inputModality","inputModalityArgs","displayFormat","displayFormatArgs"],"properties":{"cardKey":{"type":"string","description":"The card this field is placed on (its `cardKey`).","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].cardKey","typeLabel":"string"},"entity":{"type":"string","description":"The entity-in-context for the placement.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].entity","typeLabel":"string"},"fieldReferenceId":{"type":"string","description":"The placed field's `referenceId`.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].fieldReferenceId","typeLabel":"string"},"label":{"type":"string","description":"The label rendered for the field at this location.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].label","typeLabel":"string"},"sectionPosition":{"type":"object","description":"The 1-based grid coordinates of the placement on the card.","required":["row","column","rowSpan","columnSpan","zAxis"],"properties":{"row":{"type":"integer","minimum":1,"description":"1-based grid row.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition.row","typeLabel":"integer"},"column":{"type":"integer","minimum":1,"description":"1-based grid column.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition.column","typeLabel":"integer"},"rowSpan":{"type":"integer","minimum":1,"description":"Number of grid rows spanned.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition.rowSpan","typeLabel":"integer"},"columnSpan":{"type":"integer","minimum":1,"description":"Number of grid columns spanned.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition.columnSpan","typeLabel":"integer"},"zAxis":{"type":"integer","minimum":1,"description":"Stacking order.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition.zAxis","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].sectionPosition","typeLabel":"object"},"inputModality":{"oneOf":[{"type":"string","description":"The edit-mode input control, or `null` when the placement is read-only /\nhas no input. One of the framework input modalities.\n","enum":["Text Box","Text Area","Comma Separated List","Phone Number (US/Canada)","Phone Number with Country Code","Exposure Name Picker","Number Box","Percentage Whole Number","Percentage Decimal","Comma Separated Numbers","Dollar Number","Switch","Checkbox","Labeled Dropdown","Single Select Dropdown","Multi Select Dropdown","Single Select Radio","Single Select Checkbox","Multi Select Checkbox","Address Typeahead","Custom Object Card List","Custom Object Table Input","Date Picker","String Or Number Input","ThirdPartyTypeaheadSingle","Join Picker","Pointer Picker","Embedded Exposure Single Select Dropdown","Embedded Exposure Table","Embedded Exposure Table Input"],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModality.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The edit-mode input control, or `null` when the placement is read-only /\nhas no input. One of the framework input modalities.\n","enum":["Text Box","Text Area","Comma Separated List","Phone Number (US/Canada)","Phone Number with Country Code","Exposure Name Picker","Number Box","Percentage Whole Number","Percentage Decimal","Comma Separated Numbers","Dollar Number","Switch","Checkbox","Labeled Dropdown","Single Select Dropdown","Multi Select Dropdown","Single Select Radio","Single Select Checkbox","Multi Select Checkbox","Address Typeahead","Custom Object Card List","Custom Object Table Input","Date Picker","String Or Number Input","ThirdPartyTypeaheadSingle","Join Picker","Pointer Picker","Embedded Exposure Single Select Dropdown","Embedded Exposure Table","Embedded Exposure Table Input"],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModality.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModality","typeLabel":"enum\u003cstring> | null"},"inputModalityArgs":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Modality-specific arguments, or `null` when none apply.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModalityArgs.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Modality-specific arguments, or `null` when none apply.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModalityArgs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].inputModalityArgs","typeLabel":"object | null"},"displayFormat":{"oneOf":[{"type":"string","description":"The read-mode display format, or `null` when none applies. One of the\nframework display formats.\n","enum":["Plain Text","Comma Separated List","Phone Number","Hyperlink","Plain Number","Percentage","Dollar Number - Cents","Dollar Number - Nearest Dollar","Dollar Number - Optional Cents","Yes/No","True/False","Switch","Checkbox","Labeled","Date Format - mm/dd/yyyy","Date Format - yyyy-mm-dd","Address Format","Custom Object Card List","Custom Object Table Display","String Or Number Display","Pricing Table","Option Labels","Join Link","Join Card List","Join Table","Pointer Link","Pointer Card List","Pointer Table","Embedded Exposure Link","Embedded Exposure Card List","Embedded Exposure Table Display"],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormat.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The read-mode display format, or `null` when none applies. One of the\nframework display formats.\n","enum":["Plain Text","Comma Separated List","Phone Number","Hyperlink","Plain Number","Percentage","Dollar Number - Cents","Dollar Number - Nearest Dollar","Dollar Number - Optional Cents","Yes/No","True/False","Switch","Checkbox","Labeled","Date Format - mm/dd/yyyy","Date Format - yyyy-mm-dd","Address Format","Custom Object Card List","Custom Object Table Display","String Or Number Display","Pricing Table","Option Labels","Join Link","Join Card List","Join Table","Pointer Link","Pointer Card List","Pointer Table","Embedded Exposure Link","Embedded Exposure Card List","Embedded Exposure Table Display"],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormat.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormat","typeLabel":"enum\u003cstring> | null"},"displayFormatArgs":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Display-format-specific arguments, or `null` when none apply.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormatArgs.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Display-format-specific arguments, or `null` when none apply.","isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormatArgs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fieldLocations.items.[INDEX].displayFormatArgs","typeLabel":"object | null"},"subFieldReferenceId":{"type":"string","description":"Optional sub-field reference id (dot-notation placement into a custom-object field).","uniqueKey":"fieldLocations.items.[INDEX].subFieldReferenceId","typeLabel":"string"},"changeFormat":{"type":"string","description":"How a placement on a `trackedActivity` card reads a recorded change on\nthe entity's Activity tab. Absent means the field kind's default. Only\n`trackedActivity` cards take one.\n","enum":["Before and After","New Value Only","Before and After with Difference","Turned On or Off","Inline Text Diff","Added and Removed","Changed Lines","Changed Members","Row Changes Table","Screening Change"],"uniqueKey":"fieldLocations.items.[INDEX].changeFormat","typeLabel":"enum\u003cstring>"},"changeFormatArgs":{"type":"object","additionalProperties":true,"description":"Change-format-specific arguments: `rowCard` (required) and `showUnchanged`\nfor Row Changes Table, `card` for Changed Members, `showPercent` for\nBefore and After with Difference, `showUnchanged` for Added and Removed.\n","uniqueKey":"fieldLocations.items.[INDEX].changeFormatArgs","typeLabel":"object"},"displayCondition":{"type":"string","description":"Optional JEXL condition gating whether the field is shown at this location.","uniqueKey":"fieldLocations.items.[INDEX].displayCondition","typeLabel":"string"},"requiredCondition":{"type":"string","description":"Optional JEXL condition making the field required at this location.","uniqueKey":"fieldLocations.items.[INDEX].requiredCondition","typeLabel":"string"},"autoSetCalculation":{"type":"string","description":"Optional expression whose result is auto-written to the field.","uniqueKey":"fieldLocations.items.[INDEX].autoSetCalculation","typeLabel":"string"},"autoSetTrigger":{"type":"string","description":"When the auto-set calculation writes its value to the target field.","enum":["UNSET","UNSET_OR_DEPENDENCY_CHANGE","VISIBLE_OR_DEPENDENCY_CHANGE"],"uniqueKey":"fieldLocations.items.[INDEX].autoSetTrigger","typeLabel":"enum\u003cstring>"},"autoSetConfirmation":{"type":"string","description":"Optional confirmation message shown before an auto-set overwrite.","uniqueKey":"fieldLocations.items.[INDEX].autoSetConfirmation","typeLabel":"string"}},"uniqueKey":"fieldLocations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"fieldLocations","typeLabel":"object[]"},"ratingWorkflows":{"type":"array","description":"Rating workflow definitions.","items":{"type":"object","description":"A single named rating workflow: a name plus an ordered list of stages. A\ncompany has many of these (no versions); the quote flow selects one by name\nat rating time. Mirrors the `RatingWorkflow` shape.\n","required":["name","stages"],"properties":{"name":{"type":"string","description":"The workflow name (non-empty; selected by the quote flow at rating time).","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].name","typeLabel":"string"},"stages":{"type":"array","description":"The ordered rating stages.","items":{"type":"object","required":["stageType","raterSpec","callOncePerPath","outputPath"],"properties":{"stageType":{"type":"string","description":"The stage the rater runs in. Must agree with the rater's own stage.","enum":["segment","fullTerm"],"isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].stageType","typeLabel":"enum\u003cstring>"},"raterSpec":{"type":"object","description":"The rater to run and its opaque, rater-specific arguments.","required":["raterType","args","raterDebugName"],"properties":{"raterType":{"type":"string","description":"Canonical, stage-qualified rater identifier.","enum":["segment-exposure-inscipher","segment-policy-inscipher","full-term-inscipher","segment-inscipher-tax-plan-builder","segment-policy-inscipher-tax-plan-builder","full-term-inscipher-tax-plan-builder","segment-exposure-aufort","segment-policy-aufort","full-term-aufort","segment-rating-service","full-term-rating-service","segment-stub","full-term-stub"],"isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].raterSpec.raterType","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Opaque, rater-specific configuration. Each rater reads the keys it needs.","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].raterSpec.args","typeLabel":"object"},"raterDebugName":{"type":"string","description":"Human-readable name for the rater step (non-empty).","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].raterSpec.raterDebugName","typeLabel":"string"}},"isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].raterSpec","typeLabel":"object"},"callOncePerPath":{"type":"string","description":"The `quote`-rooted dot-path naming the container to iterate (e.g.\n`quote` to run once for the whole quote, `quote.exposures` to run\nonce per exposure). No brackets and no empty segments.\n","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].callOncePerPath","typeLabel":"string"},"outputPath":{"type":"string","description":"Where the stage writes its computed output.","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX].outputPath","typeLabel":"string"}},"uniqueKey":"ratingWorkflows.items.[INDEX].stages.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].stages","typeLabel":"object[]"},"preconditions":{"type":"array","description":"Gates on rating. Every expression must evaluate true before this workflow\nmay rate: the underwriting workbench disables Generate Rating while any is\nunmet, and the rate endpoints refuse with a `400` listing each unmet\nmessage. Evaluated against the Quote field bag, so every expression must\nbe safe to evaluate in the browser. Omit the key, or send an empty array,\nfor a workflow that always rates.\n","items":{"type":"object","description":"One authored rating rule: a JEXL boolean over the Quote's field values plus\nthe message shown when it does not hold. A rating workflow's `preconditions`\nand `warnings` share this shape and differ only in what a false verdict does.\nThe retired `billingPreconditions` list keeps the shape, but configuration\nimport and validate refuse any entry in it.\n","required":["expression","message"],"properties":{"expression":{"type":"string","minLength":1,"description":"JEXL evaluating to a boolean against the Quote field bag. True means\nsatisfied. It must compile, type-check against the Quote's fields, and\ncall only functions that need no request bindings — a configuration\nimport is refused otherwise, because such a call throws at evaluation\ntime and is read as \"not satisfied\".\n","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].preconditions.items.[INDEX].expression","typeLabel":"string"},"message":{"type":"string","minLength":1,"description":"The text shown to the underwriter when the expression does not hold.","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].preconditions.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"ratingWorkflows.items.[INDEX].preconditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ratingWorkflows.items.[INDEX].preconditions","typeLabel":"object[]"},"billingPreconditions":{"type":"array","deprecated":true,"description":"Retired: nothing evaluates it. Configuration import and validate refuse\na workflow that lists any billing precondition. State\nbilling requirements as top-level `billingConditions` instead. Omit the\nkey, or send an empty array.\n","items":{"type":"object","description":"One authored rating rule: a JEXL boolean over the Quote's field values plus\nthe message shown when it does not hold. A rating workflow's `preconditions`\nand `warnings` share this shape and differ only in what a false verdict does.\nThe retired `billingPreconditions` list keeps the shape, but configuration\nimport and validate refuse any entry in it.\n","required":["expression","message"],"properties":{"expression":{"type":"string","minLength":1,"description":"JEXL evaluating to a boolean against the Quote field bag. True means\nsatisfied. It must compile, type-check against the Quote's fields, and\ncall only functions that need no request bindings — a configuration\nimport is refused otherwise, because such a call throws at evaluation\ntime and is read as \"not satisfied\".\n","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].billingPreconditions.items.[INDEX].expression","typeLabel":"string"},"message":{"type":"string","minLength":1,"description":"The text shown to the underwriter when the expression does not hold.","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].billingPreconditions.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"ratingWorkflows.items.[INDEX].billingPreconditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ratingWorkflows.items.[INDEX].billingPreconditions","typeLabel":"object[]"},"warnings":{"type":"array","description":"Advisories shown to the underwriter. Each expression that does NOT\nevaluate true when the workflow rates rides out as a `warning` rating\ndiagnostic (code `rating-workflow-warning`) beside the rated data — the\nrate still succeeds, and nothing here can stop it. The polarity matches\n`preconditions`: true means satisfied and silent. Same expression\ncontract, evaluated against the Quote field bag.\n","items":{"type":"object","description":"One authored rating rule: a JEXL boolean over the Quote's field values plus\nthe message shown when it does not hold. A rating workflow's `preconditions`\nand `warnings` share this shape and differ only in what a false verdict does.\nThe retired `billingPreconditions` list keeps the shape, but configuration\nimport and validate refuse any entry in it.\n","required":["expression","message"],"properties":{"expression":{"type":"string","minLength":1,"description":"JEXL evaluating to a boolean against the Quote field bag. True means\nsatisfied. It must compile, type-check against the Quote's fields, and\ncall only functions that need no request bindings — a configuration\nimport is refused otherwise, because such a call throws at evaluation\ntime and is read as \"not satisfied\".\n","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].warnings.items.[INDEX].expression","typeLabel":"string"},"message":{"type":"string","minLength":1,"description":"The text shown to the underwriter when the expression does not hold.","isRequired":true,"uniqueKey":"ratingWorkflows.items.[INDEX].warnings.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"ratingWorkflows.items.[INDEX].warnings.items.[INDEX]","typeLabel":"object"},"uniqueKey":"ratingWorkflows.items.[INDEX].warnings","typeLabel":"object[]"}},"uniqueKey":"ratingWorkflows.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"ratingWorkflows","typeLabel":"object[]"},"entityInvariants":{"type":"array","description":"Per-entity invariant conditions enforced on every write.","items":{"type":"object","description":"One per-entity invariant condition enforced on every write (a parsed *Entity\nInvariants* sheet row). Mirrors the `EntityInvariantDefinition` shape.\n","required":["entity","condition","errorMessage"],"properties":{"entity":{"type":"string","description":"Top-level entity the invariant applies to (e.g. \"Exposure\").","isRequired":true,"uniqueKey":"entityInvariants.items.[INDEX].entity","typeLabel":"string"},"condition":{"type":"string","description":"JEXL condition that must evaluate `true` on every write. The entity's\nfields are available by reference ID. Policy invariant conditions also\nreceive `transaction` and `policyVersions`. Other entity types do not\nreceive these roots. A condition passes only when it returns Boolean true.\nSee the JEXL authoring guide for the roots and macro availability.\n","isRequired":true,"uniqueKey":"entityInvariants.items.[INDEX].condition","typeLabel":"string"},"errorMessage":{"type":"string","description":"Error message returned when the condition fails.","isRequired":true,"uniqueKey":"entityInvariants.items.[INDEX].errorMessage","typeLabel":"string"}},"uniqueKey":"entityInvariants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"entityInvariants","typeLabel":"object[]"},"formLogicRules":{"type":"array","description":"Forms-logic rules (quote-flow auto-add rules). Optional — existing\npayloads predate the \"Forms\" tab; absent ⇒ no rules.\n","items":{"type":"object","description":"One forms-logic rule — an auto-add rule for the quote flow. Mirrors the\n`FormLogicRuleDefinition` shape.\n","required":["formNumber","rank"],"properties":{"formNumber":{"type":"string","description":"The referenced form template's `FM-XXXX` number. Must match an existing,\nnon-deleted Quote or Policy form template for the company.\n","isRequired":true,"uniqueKey":"formLogicRules.items.[INDEX].formNumber","typeLabel":"string"},"rank":{"type":"integer","minimum":1,"description":"Evaluation / ordering rank — a positive integer, unique within the\ncompany. Lower ranks are evaluated (and added) first.\n","isRequired":true,"uniqueKey":"formLogicRules.items.[INDEX].rank","typeLabel":"integer"},"addCondition":{"type":"string","description":"JEXL condition gating whether the form is auto-added to the quote flow.\nEmpty or absent ⇒ the form is NOT auto-added (it stays available for\nmanual selection); \"always add\" is an explicit `true`.\n","uniqueKey":"formLogicRules.items.[INDEX].addCondition","typeLabel":"string"},"transactionTypes":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["newBusiness","endorsement","renewal","cancellation","reinstatement"],"uniqueKey":"formLogicRules.items.[INDEX].transactionTypes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The quote transaction types this rule applies to. Absent ⇒ new business\nonly — what every rule authored before this field existed meant. When\npresent the list must be non-empty and must not repeat a value.\n\nThe scope is a filter, not a replacement for `addCondition`: a form that\nbehaves differently across transaction types stays ONE rule (a rule's\nidentity is its `formNumber`) whose condition branches on the `quoteType`\nfield — for example\n`quoteType == \"newBusiness\" || (quoteType == \"endorsement\" \u0026\u0026 someFieldChanged)`.\n","uniqueKey":"formLogicRules.items.[INDEX].transactionTypes","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"formLogicRules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"formLogicRules","typeLabel":"object[]"},"smartTags":{"type":"array","description":"Smart tags — the named values resolved into generated documents. Optional:\nexisting payloads predate the slice, and absent ⇒ no smart tags, which is\nalso how a company that has not yet moved to this format is recognised.\n\nOmitted from an export when the company has none, rather than emitted as an\nempty array.\n","items":{"type":"object","description":"One smart tag — a named value destined to be resolved into a generated document\nat generation time. Mirrors the `SmartTagDefinition` shape.\n\nThis section is the ONLY place a smart tag can be declared: a document\ngeneration resolves its anchors from these rows.\n\nA tag's identity is the (`formType`, `key`) PAIR: there is one row per form\ntype, so a tag offered on several form types is several rows sharing a `key`\nand a `name`. Names are therefore unique within a form type, not company-wide.\n","required":["key","name","formType","expression","valueType","cardinality"],"properties":{"key":{"type":"string","minLength":1,"description":"The tag's identifier within its form type, and the only input to the\nanchor written into a document template. Changing it changes the anchor,\nso an existing template stops resolving the tag.\n","isRequired":true,"uniqueKey":"smartTags.items.[INDEX].key","typeLabel":"string"},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Display name shown in the tag catalog and the insertion drawer. Must be\nunique within a form type (sibling rows on other form types share it).\nMust not be whitespace-only.\n","isRequired":true,"uniqueKey":"smartTags.items.[INDEX].name","typeLabel":"string"},"formType":{"type":"string","enum":["event","quote-flow","quote-bind-flow","insured","submission","person","organization"],"description":"The form type this tag belongs to. It determines which entity contexts\n`expression` may read: `event` reads `event`, `quote-flow` and\n`quote-bind-flow` both read `policy` (the quote on a quote form, the\npolicy segment on a policy form), `insured` reads `exposure`, and\n`submission` reads `submission`, the Submission the form is generated\nagainst, including its `exposures` list. `person` reads `person`, and\n`organization` reads `organization`, the record the form is generated\nagainst.\n\n`unknown` is not accepted — a form with no category cannot be generated,\nso a tag scoped to it could never resolve.\n","isRequired":true,"uniqueKey":"smartTags.items.[INDEX].formType","typeLabel":"enum\u003cstring>"},"expression":{"type":"string","minLength":1,"description":"JEXL evaluated when a document is generated, against the form type's\ncontexts, each addressed by name — for example `policy.quoteNumber` or\n`exposure.glClaimLimit ?? policy.glClaimLimit`. The `??` operator is the\nfallback form: it returns the value on its left when present, and the value\non its right otherwise. Use `(IS_PRESENT(value)) ? value : fallback` only\nwhen an explicit Boolean condition is needed; a field reference by itself\nis not a Boolean condition.\n\nUsually just a pointer at a field. Arithmetic belongs in a calculated\nfield with the tag pointing at it; a computing expression here earns its\nkeep only when the value must come from more than one context, or on an\n`insured` or `quote-flow` form, where field formulas are not recomputed at\ngeneration.\n\nA tag's expression may only READ. Functions that allocate a number from a\ncounter, return a different value per call, read the wall clock, or need an\nentity being saved are rejected — a tag's expression also runs for the\nsidebar preview and the out-of-date check, so those would burn real\nnumbers or mark every document permanently out of sync. Cross-record\n`LINKED_*` reads stay available.\n","isRequired":true,"uniqueKey":"smartTags.items.[INDEX].expression","typeLabel":"string"},"valueType":{"type":"object","description":"The tag's own type, driving formatting (dates, currency, option labels,\ntable columns). It no longer comes from a field, so it must carry\neverything the formatter needs.\n\n`Join` and `Pointer` are accepted but reported as a warning:\nthey are not values, so the tag lists as unsupported and resolves to\nnothing on every document. They are not rejected outright because a tag\nmigrated from a field of one of those types is existing configuration, and\nrefusing it would fail the whole import rather than the one dead tag. An\noption set or custom object the configuration does not define IS rejected —\nthat name resolves to nothing anywhere, so nothing can describe what the\ntag was meant to show.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"smartTags.items.[INDEX].valueType.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"smartTags.items.[INDEX].valueType.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"smartTags.items.[INDEX].valueType","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"description":"Required, and not inferred from `valueType`: the formatter branches on it\nindependently, so a `List` of objects renders as a table where a `Single`\nrenders as text.\n","isRequired":true,"uniqueKey":"smartTags.items.[INDEX].cardinality","typeLabel":"enum\u003cstring>"},"emptyText":{"oneOf":[{"type":"string","minLength":1,"maxLength":200,"description":"Text substituted when the tag resolves to nothing — for example\n\"Generated when bound\". Absent ⇒ the default behaviour: the anchor is left\nunresolved and a warning is reported. An explicit `null` is accepted and\nmeans the same as absent — it is what the get-configuration surface\nserves for a tag with no empty text. A whitespace-only value — a single\nspace — is accepted, and is how an empty tag is made to print blank\ninstead of as the unresolved placeholder; the empty string is rejected.\n","uniqueKey":"smartTags.items.[INDEX].emptyText.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"maxLength":200,"description":"Text substituted when the tag resolves to nothing — for example\n\"Generated when bound\". Absent ⇒ the default behaviour: the anchor is left\nunresolved and a warning is reported. An explicit `null` is accepted and\nmeans the same as absent — it is what the get-configuration surface\nserves for a tag with no empty text. A whitespace-only value — a single\nspace — is accepted, and is how an empty tag is made to print blank\ninstead of as the unresolved placeholder; the empty string is rejected.\n","uniqueKey":"smartTags.items.[INDEX].emptyText.oneOf.1","typeLabel":"null"}],"uniqueKey":"smartTags.items.[INDEX].emptyText","typeLabel":"string | null"}},"uniqueKey":"smartTags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"smartTags","typeLabel":"object[]"},"exportSurfaces":{"type":"array","description":"Declared export columns — the tenant-facing column set of each export\nsurface (the seven entity exports plus the bordereau). Optional: existing\npayloads predate the slice, and absent ⇒ no declared columns, which is also\nhow a surface that still offers every configured field is recognised.\n\nActivation is per surface: a surface with at least one row here resolves its\nwhole tenant column set through those rows, in the order they appear; a\nsurface with none behaves exactly as it did before this section existed.\n\nOmitted from an export when the company has declared none, rather than\nemitted as an empty array.\n","items":{"type":"object","description":"One declared export column — a tenant-facing column on one export surface.\nMirrors the `ExportSurfaceRowDefinition` shape.\n\nA surface is one column set: each of the seven entity exports, plus the\nbordereau and insured bordereau. The `insured-bordereau` surface reads each\nchanged embedded Exposure snapshot, with policy fields under\n`transaction.after`. `bordereau` reads Policy fields like the `policy` surface does, but\nit is a separate report with its own fixed columns, so it is its own surface.\n\nA column's identity is the (`surface`, `key`) PAIR: there is one row per\nsurface, so the same `key` on two surfaces is two independent columns that may\ndisagree about everything else. Labels are therefore unique within a surface,\nnot company-wide.\n\nColumns are explicitly declared. A surface with no declarations exports only\nits platform columns. An optional rowSource makes a declaration available when\nexporting one row per item of that saved Object/List field.\n\nCOLUMN ORDER IS CANONICAL, not authored: the stored configuration sorts this\nsection by (`surface`, `key`), so the order rows appear in a request body does\nnot survive the round trip. Read a column's position off its key, never off its\nposition here.\n","required":["surface","key","label","expression","spreadsheetType"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy","bordereau","insured-bordereau"],"description":"The surface this column belongs to. The seven entity-export values are the\nsame slugs the export endpoints take in their paths. A bare-reference\n`expression` must name a field on the surface's entity — `Policy` for both\n`policy` and `bordereau` — and a JEXL `expression` is validated against\nthat entity's fields.\n","isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"description":"The column's identifier within its surface — what an export request names\nand what a saved column selection carries (on the bordereau, as\n`field:\u003ckey>`). Changing it changes which saved selections resolve.\n`__itemId` and `__itemIndex` are reserved for system item columns.\n","isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"description":"The column header the export renders. Must not be empty or\nwhitespace-only, and is capped at 1000 characters — a sanity bound, not a\nstyle rule, because today's headers include prose-length labels resolved\nfrom form layouts.\n\nTwo further rules are checked but do NOT reject the configuration; each\nreturns a WARNING, because these headers are what the exports already\nprint:\n\n - a label should be unique within its surface (case-insensitively);\n - a label should not name a column that surface already emits — a system\n export column (`id`, `ID`, `Created At`, `Updated At`) on any surface,\n plus the 12 fixed bordereau headers (`Policy Number`, `Insured Name`,\n …) on the `bordereau` surface only.\n\nEither produces two columns under one header, which is worth telling an\nauthor about but is not grounds for refusing a configuration that merely\ndescribes today's export.\n","isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].label","typeLabel":"string"},"expression":{"type":"string","minLength":1,"description":"What the column reads. It may be either the bare `referenceId` of a field\ndeclared on the surface's entity, or a JEXL expression over that entity's\nfields (ADR 0053). A bare reference that names no field is rejected at\nimport.\n\nA JEXL expression must compile and may call only `pure` or `temporal`\nfunctions — the same gate as list columns. Data-reading, entity-bound,\nmutating, nondeterministic, and otherwise unclassified functions are\nrejected at import. The cell is formatted from the row's declared\n`spreadsheetType`; an expression that throws during an export produces an\nempty cell, never a failed run.\n","isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].expression","typeLabel":"string"},"spreadsheetType":{"oneOf":[{"type":"object","description":"How the column's cell is typed and formatted in a spreadsheet export.\n`valueType` and `cardinality` are not accepted on export rows.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["text"],"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.0.kind","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.0","typeLabel":"object"},{"type":"object","description":"How the column's cell is typed and formatted in a spreadsheet export.\n`valueType` and `cardinality` are not accepted on export rows.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["number"],"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["Automatic","Number","Percent","Scientific","Currency","Accounting","Financial"],"description":"Number format. Absent means `Automatic`.","uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.1.format","typeLabel":"enum\u003cstring>"},"decimals":{"type":"integer","minimum":0,"maximum":6,"description":"Decimal places to show. Absent means the value's own decimals.\n","uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.1.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.1","typeLabel":"object"},{"type":"object","description":"How the column's cell is typed and formatted in a spreadsheet export.\n`valueType` and `cardinality` are not accepted on export rows.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["date"],"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["MM/DD/YYYY","M/D/YYYY","DD/MM/YYYY","YYYY-MM-DD","DD-MMM-YYYY","MMMM D, YYYY","YYYYMMDD"],"description":"Date format. Absent means `MM/DD/YYYY`.","uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.2.format","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.2","typeLabel":"object"},{"type":"object","description":"How the column's cell is typed and formatted in a spreadsheet export.\n`valueType` and `cardinality` are not accepted on export rows.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["datetime"],"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["MM/DD/YYYY HH:mm UTC"],"description":"Date-time format. Absent means `MM/DD/YYYY HH:mm UTC`.","uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.3.format","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"exportSurfaces.items.[INDEX].spreadsheetType","typeLabel":"object"},"rowSource":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Direct referenceId of a saved Object/List field on the surface entity.\nCalculated list sources and bordereau are not supported. When present,\nexpression resolves against that object's item fields; when omitted,\nexpression resolves against the parent entity. Only explicitly declared\nchild columns are available. Identity remains (surface, key).\n","uniqueKey":"exportSurfaces.items.[INDEX].rowSource","typeLabel":"string"}},"uniqueKey":"exportSurfaces.items.[INDEX]","typeLabel":"object"},"uniqueKey":"exportSurfaces","typeLabel":"object[]"},"listColumns":{"type":"array","description":"Declared list columns — the complete tenant-facing column set of each\nentity list page. Optional: existing payloads predate the slice, and absent\n⇒ no declared tenant columns, so each list renders only its platform/system\ncolumns.\n\nRows declare membership, not order or default visibility. The platform's\nper-page defaults and each user's saved view own those choices; the stored\nconfiguration sorts rows canonically by (`surface`, `key`).\n\nOmitted from an export when the company has declared none, rather than\nemitted as an empty array.\n","items":{"type":"object","description":"One declared list column — a tenant-facing column on one entity list page.\nMirrors the `ListColumnRowDefinition` shape.\n\nA column's identity is the (`surface`, `key`) PAIR: there is one row per\nsurface, so the same `key` on two surfaces is two independent columns that may\ndisagree about everything else. Labels are therefore unique within a surface,\nnot company-wide.\n\nA surface's declared rows ARE its complete tenant column vocabulary. Platform\nsystem columns are always added separately; no field sweep fills in missing\ntenant columns. Deleting every row for a surface therefore leaves that list\nwith its system columns and no tenant columns.\n\nROWS DECLARE MEMBERSHIP, NOT ORDER. The platform's per-page defaults and each\nuser's saved view own column visibility and order. The stored configuration\nsorts this section by (`surface`, `key`), so the order rows appear in a request\nbody does not survive the round trip and is not an on-screen position.\n","required":["surface","key","label","expression","valueType","cardinality"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy","portal-submission","portal-policy"],"description":"The entity list page this column belongs to. The seven carrier lists use\nthe same entity slugs as the corresponding export surfaces. There is no\n`bordereau`: the bordereau is a report, not a list page. The two\n`portal-` surfaces are the Broker Portal's submission and policy lists;\nthey resolve against Submission and Policy. `expression` resolves its\nfield references against this surface's entity.\n","isRequired":true,"uniqueKey":"listColumns.items.[INDEX].surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"description":"The column's stable identifier within its surface — what saved views and\ncolumn-visibility preferences name. Changing it can stop stored selections\nfrom resolving, so moving or renaming a key should be treated as a delete\nplus an add.\n","isRequired":true,"uniqueKey":"listColumns.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"description":"The column header rendered in the list, column picker, and filter UI. Must\nnot be empty or whitespace-only, and is capped at 1000 characters — a\nsanity bound matching the declared export-column slice.\n\nTwo further rules are checked but do NOT reject the configuration; each\nreturns a WARNING because these rows declare existing tenant vocabulary:\n\n - a label should be unique within its surface (case-insensitively);\n - a label should not duplicate a platform header rendered on that surface\n (`Created`, `Last Updated`, `Created By`, or `Updated By` on six lists;\n `Policy Created` or `Version Created` on the Policy list).\n\nEither produces two columns under one header, which is worth telling an\nauthor about but does not make the configuration invalid.\n","isRequired":true,"uniqueKey":"listColumns.items.[INDEX].label","typeLabel":"string"},"expression":{"type":"string","minLength":1,"description":"What the column reads. It may be either the bare `referenceId` of a field\ndeclared on the surface's entity, or a JEXL expression over that entity's\nfields. A bare reference that names no field is rejected at import.\n\nA JEXL expression must compile and may call only cheap `pure` or `temporal`\nfunctions. Database-reading, entity-bound, mutating, nondeterministic, and\notherwise unclassified functions are rejected so rendering a bounded list\ncannot become a query per row per column. Type complaints from JEXL are\nreported as warnings because its inference is stricter than the runtime.\n","isRequired":true,"uniqueKey":"listColumns.items.[INDEX].expression","typeLabel":"string"},"valueType":{"type":"object","description":"The column's own type hint, driving cell formatting such as dates,\ncurrency, and option labels. It is not inferred from `expression`, so it\nmust carry everything the formatter needs, including for a computed value.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"listColumns.items.[INDEX].valueType.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"listColumns.items.[INDEX].valueType.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"listColumns.items.[INDEX].valueType","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"description":"Required, and not inferred from `valueType`: a `List` cell formats\ndifferently from a `Single` cell independently of its value type.\n","isRequired":true,"uniqueKey":"listColumns.items.[INDEX].cardinality","typeLabel":"enum\u003cstring>"}},"uniqueKey":"listColumns.items.[INDEX]","typeLabel":"object"},"uniqueKey":"listColumns","typeLabel":"object[]"},"listFilters":{"type":"array","description":"Tenant-defined list filters, one per (`surface`, `key`). Together with\npage-owned system filters, these rows are the complete user-visible filter\ncatalog. `listColumns` contributes no filters.\n\nOptional for wire compatibility with payloads that predate the slice.\nAbsent or empty means that each entity list offers only its page-owned\nsystem filters. Omitted from an export when the company has none.\n","items":{"type":"object","description":"One tenant-defined filter on an entity list page. The permanent user-visible\ncatalog consists of page-owned system filters plus these rows; `listColumns`\nnever creates filters and labels never replace columns.\n\nA definition separates:\n\n1. `expression` — how PostgreSQL calculates the value;\n2. `kindInfo` + `cardinality` — what that value logically is;\n3. `operators` — which predicates callers may apply.\n\nIdentity is the (`surface`, `key`) pair. Keys and exact labels are unique\nwithin a surface. Stored rows are canonically ordered by (`surface`, `key`);\nauthored request order does not survive a round trip.\n","required":["surface","key","label","expression","kindInfo","cardinality","operators"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy"],"description":"The list page this filter belongs to — the same seven entity slugs the\ndeclared list columns use. There is no `bordereau`: the bordereau is a\nreport, not a list page. `expression` resolves its field references against\nthis surface's entity.\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"description":"The filter's identifier within its surface — what a filter request and a\nsaved view name. Changing it changes which saved selections resolve, so it is\nnot editable in place: moving or renaming is a delete plus an add.\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"description":"The filter's UI name. Exact labels must be unique within a surface; a\ncase-only near-duplicate is warned because it is confusing but remains a\ndistinct identity. Labels do not match, overlay, or replace list columns.\nMust not be empty or whitespace-only.\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].label","typeLabel":"string"},"expression":{"type":"string","minLength":1,"description":"HOW PostgreSQL calculates the value, written in a restricted value-expression\nlanguage — not an application-time formula language, and not free SQL. It\ncompiles to a parameterized fragment applied INSIDE the list query, before\npagination and counting, so a declared filter never falls back to filtering\nrows after they are fetched.\n\nThe language references LOGICAL fields and declared relations, never physical\ntable aliases, and supports the vocabulary these filters need: field\nreferences (including members of object-shaped and JSON-backed values),\n`CASE`, comparisons, boolean composition, NULL checks, casts, literals,\nquery-time dates via `TODAY()` and `VIEW_AS_OF_DATE()` (the Policies list's\n\"View as of\" date, else today), `COALESCE` / `CONCAT_WS`, JSON access, the\nclosed `ADDRESS_SEARCH_TEXT(addressField)` projection, and\n`ATTACHED_FORM_NUMBERS()`, the form numbers attached to each row on the\nQuotes and Policies lists only (a `String` × `List` value). The address\nprojection follows the configured field type: `Address` reads only flat\naddress keys, while `AddressV2` reads only canonical `enteredAddress` keys.\nValues supplied by a filter request are always bound parameters.\n\nThe expression is TYPE-CHECKED against the surface's entity at import, and\nthe result it produces must match `kindInfo` and `cardinality` exactly. A\ndefinition cannot claim a type the server would then trust: an expression\nreading a JSON object cannot be declared a `String`, and an `Enum` result must\nbe provably inside its domain.\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].expression","typeLabel":"string"},"kindInfo":{"type":"object","description":"The logical type of the value the expression produces. It is the SQL-value\nvocabulary, not the storage vocabulary a field carries — see the schema for\nwhy a calculated amount filters as a Number.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The logical kind of the filter's value. Together with `cardinality` it\ndecides which operators the definition may expose.\n","enum":["String","Number","Percentage","Boolean","Date","Enum","Json"],"isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo.kind","typeLabel":"enum\u003cstring>"},"domain":{"oneOf":[{"type":"object","description":"REQUIRED when `kind` is `Enum`, and not accepted for any other kind. Exactly\none of the two forms:\n\n- `{ \"values\": [{ \"key\": \"...\", \"label\": \"...\" }, ...] }` — an INLINE\n domain, for a value that exists nowhere else in the configuration. A\n query-time lifecycle computed from dates has no option set to point at, and\n inventing one would put a fictional field-model concept in front of every\n author. Keys must be unique and the list must be non-empty; the `key` is\n what the compiled SQL compares against, and the `label` is what a user\n picks.\n- `{ \"optionSet\": \"Coverage Types\" }` — a REFERENCE to a configured option\n set, for a value that already has a domain. The option set must exist in\n the same configuration, and its keys become the admissible values, so the\n domain cannot drift from the option set the way an inline copy would.\n\nAn expression must be PROVABLY inside the declared domain: either it reads an\noption-set-backed field, or it produces string literals the domain contains.\nA definition claiming an Enum result from an arbitrary string is rejected.\n","required":["values"],"properties":{"values":{"type":"array","minItems":1,"items":{"type":"object","required":["key","label"],"properties":{"key":{"type":"string","minLength":1,"description":"The stored value the compiled SQL compares against.","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.0.values.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"description":"What the filter UI shows for this value.","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.0.values.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.0.values.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.0.values","typeLabel":"object[]"}},"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.0","typeLabel":"object"},{"type":"object","description":"REQUIRED when `kind` is `Enum`, and not accepted for any other kind. Exactly\none of the two forms:\n\n- `{ \"values\": [{ \"key\": \"...\", \"label\": \"...\" }, ...] }` — an INLINE\n domain, for a value that exists nowhere else in the configuration. A\n query-time lifecycle computed from dates has no option set to point at, and\n inventing one would put a fictional field-model concept in front of every\n author. Keys must be unique and the list must be non-empty; the `key` is\n what the compiled SQL compares against, and the `label` is what a user\n picks.\n- `{ \"optionSet\": \"Coverage Types\" }` — a REFERENCE to a configured option\n set, for a value that already has a domain. The option set must exist in\n the same configuration, and its keys become the admissible values, so the\n domain cannot drift from the option set the way an inline copy would.\n\nAn expression must be PROVABLY inside the declared domain: either it reads an\noption-set-backed field, or it produces string literals the domain contains.\nA definition claiming an Enum result from an arbitrary string is rejected.\n","required":["optionSet"],"properties":{"optionSet":{"type":"string","minLength":1,"description":"The name of an option set declared in this configuration. Its option\nKEYS — never its labels — are the admissible filter values.\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.1.optionSet","typeLabel":"string"}},"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain.oneOf.1","typeLabel":"object"}],"uniqueKey":"listFilters.items.[INDEX].kindInfo.domain","typeLabel":"object"}},"isRequired":true,"uniqueKey":"listFilters.items.[INDEX].kindInfo","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"description":"Required, and not inferred from `kindInfo`: `Enum × Single` and `Enum × List`\nare different filters with disjoint operators — \"is the row's one value among\nthese\" versus \"does the row's array contain these\".\n","isRequired":true,"uniqueKey":"listFilters.items.[INDEX].cardinality","typeLabel":"enum\u003cstring>"},"operators":{"type":"array","minItems":1,"description":"The exact predicates this filter exposes. Explicit and non-empty, with no\nrepeats.\n\nWhich operators are POSSIBLE follows from `kindInfo.kind` × `cardinality`:\n\n - `String × Single`: `equals`, `notEquals`, `contains`, `doesNotContain`\n - `String × List`: `includesAny`, `includesAll`, `excludes` (each request\n string is a case-insensitive substring search over stored list elements)\n - `Number × Single`: `equals`, `notEquals`, `gt`, `lt`, `gtOrEqual`,\n `ltOrEqual`, `between`\n - `Percentage × Single`: the same operators as `Number × Single`\n - `Boolean × Single`: `equals`\n - `Date × Single`: `equals`, `before`, `after`, `between`\n - `Enum × Single`: `in`, `notIn`\n - `Enum × List`: `includesAny`, `includesAll`, `excludes`\n - `Json × Single`: `jsonContains`, `hasKey`\n\nThis list may be NARROWER than that set — offering only `between` on an amount\nis a legitimate choice — but never wider: an incompatible operator is rejected\nat import, because it has no SQL lowering for the declared result. An empty\nlist is rejected too, rather than read as \"offer everything\": it would declare\na filter nobody can apply.\n","items":{"type":"string","enum":["equals","notEquals","contains","doesNotContain","gt","lt","gtOrEqual","ltOrEqual","between","before","after","in","notIn","includesAny","includesAll","excludes","jsonContains","hasKey"],"uniqueKey":"listFilters.items.[INDEX].operators.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"listFilters.items.[INDEX].operators","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"listFilters.items.[INDEX]","typeLabel":"object"},"uniqueKey":"listFilters","typeLabel":"object[]"},"billingConditions":{"type":"array","description":"Optional named Quote billing conditions. Each condition key has one `*`\ndefault and optional per-flow overrides. False conditions skip the billing\ncalculation and leave its value null without refusing saving or binding.\nRows are sorted by (`conditionKey`, `quoteFlow`). Omitted from\nan export when absent or empty, preserving existing configuration exports.\n","items":{"type":"object","additionalProperties":false,"description":"A named Quote billing condition, identified by (`conditionKey`, `quoteFlow`).\nEvery condition key requires exactly one `*` default. A flow-specific row\nreplaces that default's expression and message for the matching quote type.\nAn override with expression `true` waives the condition for that flow.\n\nExpressions must return a\nboolean and use only browser-pure functions, including through calculated\ndependencies. A false condition skips the Quote billing calculation and leaves\n`fullTermBillingInfo` null; it does not itself refuse saving or binding.\n","required":["conditionKey","quoteFlow","expression","message"],"properties":{"conditionKey":{"type":"string","minLength":1,"description":"Stable name shared by the default and its flow overrides.","isRequired":true,"uniqueKey":"billingConditions.items.[INDEX].conditionKey","typeLabel":"string"},"quoteFlow":{"type":"string","enum":["*","newBusiness","endorsement","renewal","cancellation","reinstatement"],"description":"Default for every quote flow, or a specific quote type override.","isRequired":true,"uniqueKey":"billingConditions.items.[INDEX].quoteFlow","typeLabel":"enum\u003cstring>"},"expression":{"type":"string","minLength":1,"description":"Pure JEXL boolean over Quote fields. True satisfies the condition.","isRequired":true,"uniqueKey":"billingConditions.items.[INDEX].expression","typeLabel":"string"},"message":{"type":"string","description":"Message shown on the Billing step when this row fails.","isRequired":true,"uniqueKey":"billingConditions.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"billingConditions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"billingConditions","typeLabel":"object[]"},"conversionRules":{"type":"array","description":"Exceptions to the default copy between Policy and Quote. At bind and at\ndraft generation, every shared field (declared on Quote and Policy with the\nsame `referenceId` and value type, and neither calculated on the\ndestination nor system-managed or platform-owned) is copied unchanged\nunless a rule in that direction and transaction type names it. A rule\nnames a field when its `destinationPath` is the field or a path under it.\nAn `expression` of exactly `SKIP()` writes nothing; any other expression\nwrites its result, including to a differently named destination. A field\ndeclared on one entity only is written only by a rule. The default copy\nis not stored as rules and is not exported.\n\nEach rule is identified by its (`direction`, `transactionType`,\n`destinationPath`) triple; duplicates are rejected. The stored\nconfiguration sorts the section canonically by that triple. Import\nvalidates explicit rules and requires all framework-pinned rows, including\non first import. Omitting or emptying the section is invalid, even with\nforce enabled. Preserve the authored slice through whole-configuration imports. Field edits require\nreviewing affected rules against business intent: adding a shared field\ncarries it with no rule, and deleting a rule on a shared field turns the\ndefault copy on for it.\n","items":{"type":"object","description":"One declared conversion rule for a single destination when one entity is\nconverted into another: a policy seeding a quote at the start of a mid-term\nor renewal transaction, a quote binding onto the policy, a submission\npre-filling a quote, or a quote's first save writing values back to its\nsubmission. In every direction but `QUOTE_TO_SUBMISSION`, a rule is an\nexception to the default copy of shared fields; a `QUOTE_TO_SUBMISSION`\nconversion has no default copy and carries only its rules. Mirrors the\n`ConversionRuleDefinition` shape.\n\nA rule's identity is the (`direction`, `transactionType`, `destinationPath`)\nTRIPLE: one rule per destination per (direction, transaction type), so the\nsame destination under two transaction types is two independent rules that may\nproduce different values. Duplicate triples are rejected at import.\n\nRows carry NO order: rules address disjoint destinations within one\n(direction, transaction type), so nothing about their meaning depends on\nposition. The stored configuration sorts this section canonically — by\n`direction` and `transactionType` in their declared vocabulary order, then\n`destinationPath` — so the order rows appear in a request body does not\nsurvive the round trip.\n\nEvery property is shape-checked only. Which (direction, transactionType)\npairs are legal, whether `destinationPath` names a real destination, and\nwhether `expression` is valid over the source entity are semantic rules\nenforced by later configuration validators, not by this schema.\n","required":["direction","transactionType","destinationPath","expression"],"properties":{"direction":{"type":"string","enum":["POLICY_TO_QUOTE","QUOTE_TO_POLICY","SUBMISSION_TO_QUOTE","QUOTE_TO_SUBMISSION"],"description":"Which way the value flows. `POLICY_TO_QUOTE` runs when a quote is seeded\nfrom an existing policy (the start of a mid-term or renewal transaction);\n`QUOTE_TO_POLICY` runs when a quote is bound onto the policy.\n`SUBMISSION_TO_QUOTE` pre-fills a new-business or renewal quote from its\nsubmission; `QUOTE_TO_SUBMISSION` writes chosen values from such a quote\nback to its submission.\n","isRequired":true,"uniqueKey":"conversionRules.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"transactionType":{"type":"string","enum":["NEW_BUSINESS","ENDORSE","CANCEL","REINSTATE","RENEW"],"description":"The policy transaction the rule applies under. Values are listed in\nlifecycle order, which is also the canonical sort order of the section.\n","isRequired":true,"uniqueKey":"conversionRules.items.[INDEX].transactionType","typeLabel":"enum\u003cstring>"},"destinationPath":{"type":"string","minLength":1,"description":"WHERE the produced value lands on the destination entity (the quote for\n`POLICY_TO_QUOTE` and `SUBMISSION_TO_QUOTE`, the policy for\n`QUOTE_TO_POLICY`, the submission for `QUOTE_TO_SUBMISSION`).\n","isRequired":true,"uniqueKey":"conversionRules.items.[INDEX].destinationPath","typeLabel":"string"},"expression":{"type":"string","minLength":1,"description":"HOW the value is produced — a JEXL expression evaluated over the source\nentity, or exactly `SKIP()` to write nothing to the destination. `SKIP()`\nis valid only as the whole expression. Must be non-empty; that it compiles\nand is legal over the source entity is enforced by later configuration\nvalidators.\n","isRequired":true,"uniqueKey":"conversionRules.items.[INDEX].expression","typeLabel":"string"}},"uniqueKey":"conversionRules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"conversionRules","typeLabel":"object[]"},"retirementIdentities":{"type":"array","description":"Server-derived memory for retired data addresses. Records have exactly one\nof three kinds: top-level field, custom-object subfield, or option-set\nvalue. A submitted copy is accepted for export/import round trips but is\nnon-authoritative; the server derives the next set from the previous\nimmutable configuration version. Omitted when empty.\n","items":{"oneOf":[{"type":"object","required":["kind","entity","referenceId","signature"],"properties":{"kind":{"type":"string","enum":["field"],"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"entity":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.entity","typeLabel":"string"},"referenceId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.referenceId","typeLabel":"string"},"signature":{"type":"object","additionalProperties":false,"required":["typeInfo"],"properties":{"typeInfo":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.signature.typeInfo.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.signature.typeInfo.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.signature.typeInfo","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.signature.cardinality","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0.signature","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["kind","customObjectKey","referenceId","signature"],"properties":{"kind":{"type":"string","enum":["customObjectSubfield"],"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"customObjectKey":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.customObjectKey","typeLabel":"string"},"referenceId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.referenceId","typeLabel":"string"},"signature":{"type":"object","additionalProperties":false,"required":["typeInfo"],"properties":{"typeInfo":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.signature.typeInfo.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.signature.typeInfo.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.signature.typeInfo","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.signature.cardinality","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1.signature","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["kind","optionSetName","optionKey","signature"],"properties":{"kind":{"type":"string","enum":["optionSetValue"],"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.kind","typeLabel":"enum\u003cstring>"},"optionSetName":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.optionSetName","typeLabel":"string"},"optionKey":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.optionKey","typeLabel":"string"},"signature":{"type":"object","additionalProperties":false,"required":["label","groupLabel"],"properties":{"label":{"type":"string","isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.signature.label","typeLabel":"string"},"groupLabel":{"type":"string","isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.signature.groupLabel","typeLabel":"string"}},"isRequired":true,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2.signature","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"retirementIdentities.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"retirementIdentities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"retirementIdentities","typeLabel":"object[]"},"exportPlatformColumns":{"type":"array","description":"Spreadsheet types for built-in (platform) export columns, one per\n(`surface`, `column`). Optional: absent or empty means platform columns\nkeep their built-in formatting. `column` must name a built-in column of the\nsurface (checked by name at import). Omitted from an export when empty.\n","items":{"type":"object","description":"The spreadsheet type of one built-in (platform) column on an export surface.\nPlatform columns are not declared in `exportSurfaces`; this row only sets how\na column the platform already emits is typed and formatted.\n\n`column` must name a built-in column of the surface: on the entity surfaces\n`id`, `__notes`, `__itemId`, `createdAt`, `updatedAt`, `__notesLastUpdated`,\n`__itemIndex`; the `bordereau` surface has its 12 fixed column keys. This is\nchecked at import, by name only, never against field types.\n\nA (`surface`, `column`) pair may appear once; duplicates are refused.\n","required":["surface","column","spreadsheetType"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy","bordereau","insured-bordereau"],"description":"The export surface the platform column belongs to.","isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].surface","typeLabel":"enum\u003cstring>"},"column":{"type":"string","minLength":1,"description":"The built-in column's key on that surface.","isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].column","typeLabel":"string"},"spreadsheetType":{"oneOf":[{"type":"object","description":"How an export cell is typed and formatted in a spreadsheet — a discriminated\nunion on `kind`. Each kind accepts only its own optional properties.\n\nAn absent `format` means the kind's default: `Automatic` for `number`,\n`MM/DD/YYYY` for `date`, `MM/DD/YYYY HH:mm UTC` for `datetime`. An absent\n`decimals` on a `number` keeps the value's own decimals.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["text"],"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.0.kind","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.0","typeLabel":"object"},{"type":"object","description":"How an export cell is typed and formatted in a spreadsheet — a discriminated\nunion on `kind`. Each kind accepts only its own optional properties.\n\nAn absent `format` means the kind's default: `Automatic` for `number`,\n`MM/DD/YYYY` for `date`, `MM/DD/YYYY HH:mm UTC` for `datetime`. An absent\n`decimals` on a `number` keeps the value's own decimals.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["number"],"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["Automatic","Number","Percent","Scientific","Currency","Accounting","Financial"],"description":"Number format. Absent means `Automatic`.","uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.1.format","typeLabel":"enum\u003cstring>"},"decimals":{"type":"integer","minimum":0,"maximum":6,"description":"Decimal places to show. Absent means the value's own decimals.\n","uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.1.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.1","typeLabel":"object"},{"type":"object","description":"How an export cell is typed and formatted in a spreadsheet — a discriminated\nunion on `kind`. Each kind accepts only its own optional properties.\n\nAn absent `format` means the kind's default: `Automatic` for `number`,\n`MM/DD/YYYY` for `date`, `MM/DD/YYYY HH:mm UTC` for `datetime`. An absent\n`decimals` on a `number` keeps the value's own decimals.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["date"],"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["MM/DD/YYYY","M/D/YYYY","DD/MM/YYYY","YYYY-MM-DD","DD-MMM-YYYY","MMMM D, YYYY","YYYYMMDD"],"description":"Date format. Absent means `MM/DD/YYYY`.","uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.2.format","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.2","typeLabel":"object"},{"type":"object","description":"How an export cell is typed and formatted in a spreadsheet — a discriminated\nunion on `kind`. Each kind accepts only its own optional properties.\n\nAn absent `format` means the kind's default: `Automatic` for `number`,\n`MM/DD/YYYY` for `date`, `MM/DD/YYYY HH:mm UTC` for `datetime`. An absent\n`decimals` on a `number` keeps the value's own decimals.\n","required":["kind"],"properties":{"kind":{"type":"string","enum":["datetime"],"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["MM/DD/YYYY HH:mm UTC"],"description":"Date-time format. Absent means `MM/DD/YYYY HH:mm UTC`.","uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.3.format","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"exportPlatformColumns.items.[INDEX].spreadsheetType","typeLabel":"object"}},"uniqueKey":"exportPlatformColumns.items.[INDEX]","typeLabel":"object"},"uniqueKey":"exportPlatformColumns","typeLabel":"object[]"},"brokerPortal":{"type":"object","additionalProperties":false,"description":"Broker Portal customization. Optional, and omitted from an export when\nabsent. This section does not turn the portal on: a platform admin enables\nthe portal separately, and a configuration import cannot. The portal's logo\nand colours are the company's branding in Company Settings, not\nconfiguration.\n","properties":{"declineCopyTo":{"type":"string","format":"email","description":"The address the decline dialog prefills in \"Send a copy of the\napplication to\". Omitted when not set, and then the field starts empty.\nUse a shared team mailbox: the configuration is versioned and exported.\n","uniqueKey":"brokerPortal.declineCopyTo","typeLabel":"string\u003cemail>"},"declineForms":{"type":"array","description":"The form numbers of the Submission form templates the decline dialog\nattaches to the copy of the application by default, in attachment order.\nEach must name a live Submission template of the company; import and\nvalidation refuse an unknown number or a template of another category.\nNo number repeats. Omitted when not set, and then no form is preselected.\n","items":{"type":"string","uniqueKey":"brokerPortal.declineForms.items.[INDEX]","typeLabel":"string"},"uniqueKey":"brokerPortal.declineForms","typeLabel":"string[]"},"billingMode":{"type":"object","additionalProperties":false,"description":"The billing mode the server sets on the first quote of a Broker Portal\nsubmission that passes its kick-outs and clearance: option `option` of\nthe Quote option-set field `quoteField`. A broker cannot set it. Import\nand validation refuse a field that is not a Quote option-set field, or an\noption its set does not have. Omitted when not set, and then the quote\nhas no billing mode until a carrier user sets one.\n","required":["quoteField","option"],"properties":{"quoteField":{"type":"string","example":"billingMode","isRequired":true,"uniqueKey":"brokerPortal.billingMode.quoteField","typeLabel":"string"},"option":{"type":"string","example":"agencyBill","isRequired":true,"uniqueKey":"brokerPortal.billingMode.option","typeLabel":"string"}},"uniqueKey":"brokerPortal.billingMode","typeLabel":"object"},"commission":{"type":"object","additionalProperties":false,"description":"Where the server reads the commission it sets on that same first quote:\nthe submitting broker's Person record at `brokerField` (a field, or\n`field.subField` for a custom-object sub-field), copied into the Quote\nfield `quoteField`. The two must have the same type, and no Broker Portal\npage may let a broker edit `brokerField`. A broker with no value there\nleaves the quote's commission empty. Omitted when not set, and then the\nquote has no commission until a carrier user sets one.\n","required":["quoteField","brokerField"],"properties":{"quoteField":{"type":"string","example":"brokerCommissionRate","isRequired":true,"uniqueKey":"brokerPortal.commission.quoteField","typeLabel":"string"},"brokerField":{"type":"string","example":"brokerDetails.defaultCommissionPercentage","isRequired":true,"uniqueKey":"brokerPortal.commission.brokerField","typeLabel":"string"}},"uniqueKey":"brokerPortal.commission","typeLabel":"object"},"notificationInbox":{"type":"string","format":"email","description":"The carrier's shared mailbox for Broker Portal emails meant for the\ncarrier when a submission has no assigned underwriter with an email.\nOmitted when not set, and then such an email goes to no one.\n","uniqueKey":"brokerPortal.notificationInbox","typeLabel":"string\u003cemail>"},"pages":{"type":"array","description":"The company's Broker Portal pages. A portal page exists for the company\nonly when this list names it, so cards can be placed on it only then.\nOnly Broker Portal page keys are allowed; a Go App page key is refused.\nWhile the portal is on, the list must include `portalSubmission` and\n`portalQuoteView`. `portalRequest` is accepted but unused. Omitted from\nan export when absent; export's top-level `pages` lists only Go App\npages.\n","items":{"type":"string","enum":["portalSubmission","portalRequest","portalQuoteView","portalPolicyView","portalBrokerProfile","portalExposureCreate"],"uniqueKey":"brokerPortal.pages.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"brokerPortal.pages","typeLabel":"enum\u003cstring>[]"},"assignableUsers":{"type":"array","description":"The users a Broker Portal request may be assigned to, by user id. On\nsubmit, an empty list leaves the Submission's `submissionAssignee` alone,\none user is assigned automatically, and with more than one the broker picks\none or more of them. No id may repeat.\n","items":{"type":"string","format":"uuid","uniqueKey":"brokerPortal.assignableUsers.items.[INDEX]","typeLabel":"string\u003cuuid>"},"uniqueKey":"brokerPortal.assignableUsers","typeLabel":"string\u003cuuid>[]"}},"uniqueKey":"brokerPortal","typeLabel":"object"},"searchFields":{"type":"array","description":"The values the search index holds, per record type: list search and\nglobal search find a record by them. A record's display-name field is\nalways searchable without a row. Optional: absent or empty means each\nrecord is searchable by its name only. Omitted from an export when empty.\n","items":{"type":"object","additionalProperties":false,"description":"An indexed searchFields value. Identity is (surface, key); rows declare\nmembership and are sorted by that identity. Key names a field or a dotted\ncustom-object path, such as vehicles.vin. Boolean, Object and relationship\nvalues cannot be directly indexed. Record display names are always searchable.\nCalculated shown values belong in searchResultFields instead.\n","required":["surface","key"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy"],"description":"The record type the row applies to.","isRequired":true,"uniqueKey":"searchFields.items.[INDEX].surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"description":"A field's `referenceId`, or (in `searchFields`) a dotted sub-field path.","isRequired":true,"uniqueKey":"searchFields.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S","description":"The name a search result gives the field. Absent, the result uses the\nfield's first placement label, else its humanized `referenceId`.\n","uniqueKey":"searchFields.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"searchFields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"searchFields","typeLabel":"object[]"},"searchResultFields":{"type":"array","description":"The fields or calculated values a global search result shows, per record type, read from the\nrecord when the search runs. Optional: absent or empty means a result\nshows its name and the fields that matched. Omitted from an export when\nempty.\n","items":{"oneOf":[{"type":"object","description":"A field or calculated value shown in global search and authorized relationship\npickers. Without an expression, key names a top-level field of any kind.\nWith an expression, key is an independent identifier and valueType and\ncardinality are required. Copy these three properties from a list column\non the same entity type. Expressions use the same bare field/JEXL grammar\nand pure/temporal functions as list columns. VIEW_AS_OF_DATE() is today's\nUTC date here. Database reads, entity-bound functions, mutations and attached\nform numbers are unavailable. Values are evaluated when search runs; they\ndo not make records searchable and require no reindex.\n","required":["surface","key"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy"],"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S","description":"Optional result label; defaults to the field label or a humanized key.","uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.label","typeLabel":"string"},"expression":{"type":"string","minLength":1,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.expression","typeLabel":"string"},"valueType":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.valueType.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.valueType.args","typeLabel":"object"}},"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.valueType","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0.cardinality","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A field or calculated value shown in global search and authorized relationship\npickers. Without an expression, key names a top-level field of any kind.\nWith an expression, key is an independent identifier and valueType and\ncardinality are required. Copy these three properties from a list column\non the same entity type. Expressions use the same bare field/JEXL grammar\nand pure/temporal functions as list columns. VIEW_AS_OF_DATE() is today's\nUTC date here. Database reads, entity-bound functions, mutations and attached\nform numbers are unavailable. Values are evaluated when search runs; they\ndo not make records searchable and require no reindex.\n","required":["surface","key","expression","valueType","cardinality"],"properties":{"surface":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy"],"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.surface","typeLabel":"enum\u003cstring>"},"key":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.key","typeLabel":"string"},"expression":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.expression","typeLabel":"string"},"valueType":{"type":"object","description":"Structured field-type model — a `kind` discriminant plus kind-specific\n`args`. The typed form of the legacy \"Field Type\" string. The field's\nSingle/List axis is NOT here — it lives on the separate `cardinality` field,\nwhich is authoritative.\n\nArgless kinds (`Text`, `URL`, `Email`, `Number`, `Boolean`, `Date`, `Address`,\n`AddressV2`, `StringOrNumber`, `Percentage`, `EmbeddedExposure`)\ncarry only `kind` (no `args`). Arg-bearing kinds carry a kind-specific `args`\nobject:\n- `OptionSet` → `{ optionSetName }`\n- `Object` → `{ objectKey }`\n- `Join` → join args (`{ sourceEntity, targetEntity, sourceCardinality, targetCardinality, qualifier?, whoAmI }`)\n- `Pointer` → `{ targetEntity }`\n\n`Phone` accepts optional `args: { allowUnparsed: true }` to preserve\nunparseable nonblank phone text verbatim. Valid numbers still normalize to\nE.164 and blanks become null. Omitted or false keeps strict validation.\n\n`EmbeddedExposure` embeds Exposure value(s) inline and takes no arguments —\nthe embedded target is not configurable.\n","required":["kind"],"properties":{"kind":{"type":"string","description":"The per-field type discriminant.","enum":["Text","Number","Boolean","Date","Phone","URL","Email","Address","AddressV2","StringOrNumber","Percentage","OptionSet","Object","EmbeddedExposure","Join","Pointer"],"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.valueType.kind","typeLabel":"enum\u003cstring>"},"args":{"type":"object","additionalProperties":true,"description":"Kind-specific argument payload. Omitted for argless kinds. For arg-bearing\nkinds the shape depends on `kind`:\n\n- `OptionSet`: `{ optionSetName: string }`\n- `Object`: `{ objectKey: string }`\n- `Join`: `{ sourceEntity: string, targetEntity: string, sourceCardinality: \"1\"|\"N\", targetCardinality: \"1\"|\"N\", qualifier?: string, whoAmI: \"source\"|\"target\" }`\n- `Pointer`: `{ targetEntity: string }`\n- `Phone` (optional): `{ allowUnparsed?: boolean }`; defaults to false\n","uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.valueType.args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.valueType","typeLabel":"object"},"cardinality":{"type":"string","enum":["Single","List"],"isRequired":true,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.cardinality","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S","description":"Optional result label; defaults to the field label or a humanized key.","uniqueKey":"searchResultFields.items.[INDEX].oneOf.1.label","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"searchResultFields.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"searchResultFields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"searchResultFields","typeLabel":"object[]"},"graphSettings":{"type":"object","description":"The company's graph settings: the time zone every graph reads today and\nday boundaries in. Required once any graph data point is declared.\nOmitted from an export when absent.\n","required":["timeZone"],"properties":{"timeZone":{"type":"string","enum":["UTC","Etc/UTC","America/Adak","America/Anchorage","America/Boise","America/Chicago","America/Denver","America/Detroit","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Los_Angeles","America/Menominee","America/Metlakatla","America/New_York","America/Nome","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Phoenix","America/Puerto_Rico","America/Sitka","America/St_Thomas","America/Yakutat","Pacific/Guam","Pacific/Honolulu","Pacific/Pago_Pago","Pacific/Saipan"],"description":"The time zone graphs read today and the day each timestamp falls on in.","isRequired":true,"uniqueKey":"graphSettings.timeZone","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"graphSettings","typeLabel":"object"},"graphDataPoints":{"type":"array","description":"Graph data points: how dashboard graphs read numbers out of records.\nOptional: absent or empty means none. Omitted from an export when empty.\n","items":{"type":"object","description":"One graph data point: how dashboard graphs read one number out of a record.\nIts identity is `key`, unique across the company; the stored configuration\nsorts the slice by `key`. Each component is a bare field `referenceId` or a\npure JEXL expression over the source's row. Every source offers a `record`\nroot whose `createdAt` is the day the record was created in the company's\ngraph time zone; `policy-segment` adds `segment.startDate` and\n`segment.endDate`, and `bordereau` adds the `transaction` root.\n","required":["key","label","source","value"],"properties":{"key":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z][A-Za-z0-9]*$","description":"The data point's company-unique key, a camelCase identifier.","isRequired":true,"uniqueKey":"graphDataPoints.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":1000,"pattern":"\\S","description":"The name config admin and the graph editor show.","isRequired":true,"uniqueKey":"graphDataPoints.items.[INDEX].label","typeLabel":"string"},"source":{"type":"string","enum":["event","exposure","quote","submission","person","organization","policy","policy-segment","bordereau"],"description":"What one row stands for: a record of one of the six record types, a\npolicy (`policy`), a segment of a policy's latest version\n(`policy-segment`), or a policy transaction (`bordereau`).\n","isRequired":true,"uniqueKey":"graphDataPoints.items.[INDEX].source","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"pattern":"\\S","description":"A bare field `referenceId` or a JEXL expression evaluating to a number. A record whose value is null or not a number writes no row.","isRequired":true,"uniqueKey":"graphDataPoints.items.[INDEX].value","typeLabel":"string"},"date":{"type":"string","minLength":1,"pattern":"\\S","description":"A bare field `referenceId` or a JEXL expression evaluating to the first day of the row's range, such as `record.createdAt`. Absent: the data point is undated.","uniqueKey":"graphDataPoints.items.[INDEX].date","typeLabel":"string"},"endDate":{"type":"string","minLength":1,"pattern":"\\S","description":"A bare field `referenceId` or a JEXL expression evaluating to the day the range ends, exclusive. Absent: the range ends the day after `date`, so each row covers one day. Only a data point with a `date` may declare one.","uniqueKey":"graphDataPoints.items.[INDEX].endDate","typeLabel":"string"},"group":{"type":"string","minLength":1,"pattern":"\\S","description":"A bare field `referenceId` or a JEXL expression evaluating to a scalar a graph can split by: an option's key, a linked record's id, text, a number or a boolean. Absent: the data point is ungrouped.","uniqueKey":"graphDataPoints.items.[INDEX].group","typeLabel":"string"},"rowSource":{"type":"string","minLength":1,"description":"A saved Object List field of the source's record type; one row per item. Record sources only.","uniqueKey":"graphDataPoints.items.[INDEX].rowSource","typeLabel":"string"}},"uniqueKey":"graphDataPoints.items.[INDEX]","typeLabel":"object"},"uniqueKey":"graphDataPoints","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"success":{"title":"success","value":{"fields":[],"pages":[],"cards":[],"cardPageRelationships":[],"optionSets":[],"customObjects":[],"fieldLocations":[],"ratingWorkflows":[],"entityInvariants":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"1bb04821-77ea-470d-8487-fee9081ef88c":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missingApiKey":{"title":"missingApiKey","value":{"error":{"code":"AuthenticationError","message":"API key authentication required","userMessages":["API key authentication required"]}}},"invalidApiKey":{"title":"invalidApiKey","value":{"error":{"code":"AuthenticationError","message":"Invalid API key","userMessages":["Invalid API key"]}}}},"exampleType":"examples"}},"exampleType":"examples"},"8eff811c-3d4b-4f72-af04-eaf603b9c3eb":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"insufficientPermissions":{"title":"insufficientPermissions","value":{"error":{"code":"AuthorizationError","message":"User is not authorized to perform the requested action","userMessages":["User is not authorized to perform the requested action"]}}},"companyMismatch":{"title":"companyMismatch","value":{"error":{"code":"AuthorizationError","message":"API key is not scoped to the requested company","userMessages":["API key is not scoped to the requested company"]}}}},"exampleType":"examples"}},"exampleType":"examples"},"45193dd5-a6d4-4a17-a004-234bcf4945fc":{"description":"Internal Server Error - Unexpected error occurred","content":{"application/json":{"schema":{"type":"object","description":"Standard error response for all external API endpoints","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code","example":"VALIDATION_ERROR","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"submissionId: Required field is missing","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"userMessages":{"type":"array","description":"Clean, verbatim-displayable messages — one entry per failure, free of error-code tags, field paths, and internal noise. Suitable for showing to end users as-is.","items":{"type":"string","uniqueKey":"error.userMessages.items.[INDEX]","typeLabel":"string"},"example":["Exposures of type 'company' require an address"],"uniqueKey":"error.userMessages","typeLabel":"string[]"},"details":{"type":"array","description":"Additional details for validation errors (field-level errors)","items":{"type":"object","properties":{"field":{"type":"string","description":"The field that caused the error","example":"submissionId","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Stable problem code for this individual validation failure","example":"BLANK_LIST_ELEMENT","uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"reason":{"type":"string","description":"Stable reason the value violates its canonical contract","example":"blank-list-element","uniqueKey":"error.details.items.[INDEX].reason","typeLabel":"string"},"expected":{"type":"string","description":"The expected canonical value contract","example":"nonblank trimmed string","uniqueKey":"error.details.items.[INDEX].expected","typeLabel":"string"},"message":{"type":"string","description":"Description of the field error","example":"Required field is missing","uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"internalError":{"title":"internalError","value":{"error":{"code":"UncaughtActionError","message":"Uncaught error occurred in \u003cactionName>","userMessages":["An unexpected error occurred. Please try again later."]}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"4e26fc5f-c7a1-4040-b78d-7a86c4628c3c":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as `Authorization: Bearer \u003cjwt>`. The request resolves to the user's identity and is authorized by their Role on the `{companyId}` in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both `BearerAuth` and `ApiKeyAuth`.","scopes":[],"schemeName":"BearerAuth"}},"2c4ee464-7129-4b9b-bea6-2b23656e19b3":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"b4993f5b-e21e-4dbd-8ace-9c59b5197d8e":{"url":"https://go.aiinsurance.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as `Authorization: Bearer \u003cjwt>`. The request resolves to the user's identity and is authorized by their Role on the `{companyId}` in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both `BearerAuth` and `ApiKeyAuth`.","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as `Authorization: Bearer \u003cjwt>`. The request resolves to the user's identity and is authorized by their Role on the `{companyId}` in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both `BearerAuth` and `ApiKeyAuth`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Authorization","type":"string","description":"API key authentication. Send your raw API key as the `Authorization` header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key` header; those are not accepted.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi/generated-external-api.yaml"},"subdomain":"ai-insurance-fmv1","siteName":"AI Insurance","title":"Export Configuration - AI Insurance","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T17:32:14.919Z","originalFileLocation":"api-reference/fmv1-configuration/export-configuration.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Downloads the company\u0026#x27;s whole configuration (fields, dropdown option sets, custom objects, cards and screen layout, and the rest) as one JSON document. Use it to back up the configuration, or to edit it in bulk and apply it with Import Configuration (importFmv1Configuration). For a small change, such as adding one field or one dropdown value, Patch Configuration (patchFmv1Configuration) is simpler; to check whether anything changed without downloading it, use Get Configuration Metadata (getFmv1ConfigurationMetadata). Exports the company\u0026#x27;s FMV1 configuration as a structured JSON body. The response is the structured FMV1 configuration shape — the exact shape the import endpoint accepts. Each custom object is defined once in customObjects with metadata and sub-fields together; each option set is defined once in optionSets. The returned body can be edited and re-applied via the import endpoint: export → (edit) → import is a lossless, machine-to-machine configuration round-trip. The export reads the whole configuration from the database (resolved from the credential\u0026#x27;s tenant), so the request needs no body — POST an empty object. Required permission: configuration.export This endpoint requires an API key that holds the configuration.export permission — the Admin role does. See Authentication for how to create API keys with specific roles.\">\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=\"Export Configuration - AI Insurance\">\u003cmeta data-mint-head property=\"og:description\" content=\"Downloads the company\u0026#x27;s whole configuration (fields, dropdown option sets, custom objects, cards and screen layout, and the rest) as one JSON document. Use it to back up the configuration, or to edit it in bulk and apply it with Import Configuration (importFmv1Configuration). For a small change, such as adding one field or one dropdown value, Patch Configuration (patchFmv1Configuration) is simpler; to check whether anything changed without downloading it, use Get Configuration Metadata (getFmv1ConfigurationMetadata). Exports the company\u0026#x27;s FMV1 configuration as a structured JSON body. The response is the structured FMV1 configuration shape — the exact shape the import endpoint accepts. Each custom object is defined once in customObjects with metadata and sub-fields together; each option set is defined once in optionSets. The returned body can be edited and re-applied via the import endpoint: export → (edit) → import is a lossless, machine-to-machine configuration round-trip. The export reads the whole configuration from the database (resolved from the credential\u0026#x27;s tenant), so the request needs no body — POST an empty object. Required permission: configuration.export This endpoint requires an API key that holds the configuration.export permission — the Admin role does. See Authentication for how to create API keys with specific roles.\">\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/fmv1-configuration/export-configuration\">\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=Inspect\u0026amp;title=Export+Configuration\u0026amp;description=Downloads+the+company%27s+whole+configuration+%28fields%2C+dropdown+option+sets%2C%0Acustom+objects%2C+cards+and+screen+layout%2C+and+the+rest%29+as+one+JSON+document.%0AUse+it+t\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=0b877937ed60500535f16d8a8ed8701c29cc501746d7dc298fb533a49ffc97c5\">\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=\"Export Configuration - AI Insurance\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Downloads the company\u0026#x27;s whole configuration (fields, dropdown option sets, custom objects, cards and screen layout, and the rest) as one JSON document. Use it to back up the configuration, or to edit it in bulk and apply it with Import Configuration (importFmv1Configuration). For a small change, such as adding one field or one dropdown value, Patch Configuration (patchFmv1Configuration) is simpler; to check whether anything changed without downloading it, use Get Configuration Metadata (getFmv1ConfigurationMetadata). Exports the company\u0026#x27;s FMV1 configuration as a structured JSON body. The response is the structured FMV1 configuration shape — the exact shape the import endpoint accepts. Each custom object is defined once in customObjects with metadata and sub-fields together; each option set is defined once in optionSets. The returned body can be edited and re-applied via the import endpoint: export → (edit) → import is a lossless, machine-to-machine configuration round-trip. The export reads the whole configuration from the database (resolved from the credential\u0026#x27;s tenant), so the request needs no body — POST an empty object. Required permission: configuration.export This endpoint requires an API key that holds the configuration.export permission — the Admin role does. See Authentication for how to create API keys with specific roles.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ai-insurance-fmv1.mintlify.site/_mintlify/api/og/v2?division=Inspect\u0026amp;title=Export+Configuration\u0026amp;description=Downloads+the+company%27s+whole+configuration+%28fields%2C+dropdown+option+sets%2C%0Acustom+objects%2C+cards+and+screen+layout%2C+and+the+rest%29+as+one+JSON+document.%0AUse+it+t\u0026amp;theme=0995c531691aeb9df7f9b066\u0026amp;signature=0b877937ed60500535f16d8a8ed8701c29cc501746d7dc298fb533a49ffc97c5\">\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/fmv1-configuration/export-configuration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/fmv1-configuration/export-configuration.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/fmv1-configuration/export-configuration#webpage\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration\",\"name\":\"Export Configuration\",\"description\":\"Downloads the company's whole configuration (fields, dropdown option sets, custom objects, cards and screen layout, and the rest) as one JSON document. Use it to back up the configuration, or to edit it in bulk and apply it with Import Configuration (importFmv1Configuration). For a small change, such as adding one field or one dropdown value, Patch Configuration (patchFmv1Configuration) is simpler; to check whether anything changed without downloading it, use Get Configuration Metadata (getFmv1ConfigurationMetadata). Exports the company's FMV1 configuration as a structured JSON body. The response is the structured FMV1 configuration shape — the exact shape the import endpoint accepts. Each custom object is defined once in customObjects with metadata and sub-fields together; each option set is defined once in optionSets. The returned body can be edited and re-applied via the import endpoint: export → (edit) → import is a lossless, machine-to-machine configuration round-trip. The export reads the whole configuration from the database (resolved from the credential's tenant), so the request needs no body — POST an empty object. Required permission: configuration.export This endpoint requires an API key that holds the configuration.export permission — the Admin role does. See Authentication for how to create API keys with specific roles.\",\"dateModified\":\"2026-11-13T17:32:14.919Z\",\"isPartOf\":{\"@id\":\"https://docs.go.aiinsurance.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Configuration Management\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/configuration/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Export Configuration\",\"item\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration#apireference\",\"headline\":\"Export Configuration\",\"name\":\"Export Configuration\",\"description\":\"Downloads the company's whole configuration (fields, dropdown option sets, custom objects, cards and screen layout, and the rest) as one JSON document. Use it to back up the configuration, or to edit it in bulk and apply it with Import Configuration (importFmv1Configuration). For a small change, such as adding one field or one dropdown value, Patch Configuration (patchFmv1Configuration) is simpler; to check whether anything changed without downloading it, use Get Configuration Metadata (getFmv1ConfigurationMetadata). Exports the company's FMV1 configuration as a structured JSON body. The response is the structured FMV1 configuration shape — the exact shape the import endpoint accepts. Each custom object is defined once in customObjects with metadata and sub-fields together; each option set is defined once in optionSets. The returned body can be edited and re-applied via the import endpoint: export → (edit) → import is a lossless, machine-to-machine configuration round-trip. The export reads the whole configuration from the database (resolved from the credential's tenant), so the request needs no body — POST an empty object. Required permission: configuration.export This endpoint requires an API key that holds the configuration.export permission — the Admin role does. See Authentication for how to create API keys with specific roles.\",\"url\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration\",\"mainEntityOfPage\":{\"@id\":\"https://docs.go.aiinsurance.io/api-reference/fmv1-configuration/export-configuration#webpage\"},\"dateModified\":\"2026-11-13T17:32:14.919Z\",\"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/fmv1-configuration/export-configuration.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","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml delete /api/v1/companies/{companyId}/tasks/{taskId}","href":"/api-reference/tasks/delete-task"}]},{"group":"Imports","hidden":true,"pages":[{"title":"Overview","href":"/api-reference/imports/overview"},{"title":"Import Rows","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/rows","href":"/api-reference/imports/import-rows"},{"title":"Queue Import Job","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/jobs","href":"/api-reference/imports/queue-import-job"},{"title":"Get Import Job","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/jobs/{jobId}","href":"/api-reference/imports/get-import-job"},{"title":"Import Entity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports","href":"/api-reference/imports/import-entity"},{"title":"Retry Import","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/imports/retry","href":"/api-reference/imports/retry-import"},{"title":"List Import Rows","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/rows","href":"/api-reference/imports/list-import-rows"},{"title":"Get Import Row","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/rows/{importRowId}","href":"/api-reference/imports/get-import-row"},{"title":"List Import Attempts","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/attempts","href":"/api-reference/imports/list-import-attempts"},{"title":"Get Import Attempt","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/imports/attempts/{importAttemptId}","href":"/api-reference/imports/get-import-attempt"},{"title":"Replace Record Legacy Activity","deprecated":null,"version":null,"openapi":"/openapi/generated-external-api.yaml put /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/legacy-activity","href":"/api-reference/imports/replace-record-legacy-activity"}]},{"group":"Configuration Management","pages":[{"title":"Overview","href":"/api-reference/configuration/overview"},{"title":"Conversion Rules","href":"/api-reference/configuration/conversion-rules"},{"title":"Author JEXL expressions","href":"/api-reference/configuration/jexl-authoring"},{"title":"JEXL reference","description":"Macros, custom operators, transforms, and accepted expression locations.","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)","description":"Summarizes what the company's configuration contains, listing each entity\nwith its number of fields, each custom object, and each dropdown (option\nset) with its number of values. Use it to answer \"how many fields does\nPolicy have?\" or \"which dropdowns exist?\", and as the first call before the\nother describe operations. For one entity's list of fields, call Describe\nConfiguration Entity (`describeFmv1ConfigurationEntity`); for the values of\none dropdown, call Describe Configuration Option Set\n(`describeFmv1ConfigurationOptionSet`).\n\nReturns the configuration **run-down** — a small orientation summary of the\ncompany's FMV1 configuration: every top-level entity (with its field count),\nevery custom object (with its name, sub-field count, and lock state), and\nevery option set (with its option count and lock state), plus a `revision`\nstring identifying the stored configuration.\n\nThis is the first read for an automated config editor: call `describe` to\nlearn what exists, then the per-entity describe endpoint\n(`describe/{entityOrObjectKey}`) to see one entity's or custom object's\nfields. It does **not** list individual fields.\n\nThe run-down reads the whole configuration from the database (resolved from\nthe API key's tenant), so the request needs **no body** — POST an empty\nobject.\n\n**Required permission:** `configuration.view`\n\n\u003cNote>\nThis endpoint requires an API key that holds the `configuration.view`\npermission — the **Admin** role does.\nSee [Authentication](/api-reference/authentication) for how to create API keys with specific roles.\n\u003c/Note>\n","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":"Export Configuration - AI Insurance","buildId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","deploymentId":"dpl_5joLUXmnJgwqjrHAS4dxZrQTdxgh","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DPDWPCdE.js","utils-DyjUHyLo.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BWYE1cdS.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-COAzxpEw.js","snippetPresets-DNiD_S52.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-CjwVt80x.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ByHQMk7z.js","shallow-CaZuw1AO.js","getApiPlaygroundDisplay-DPVPOknm.js","CodeSnippet-B31CH-Mp.js","CodeSnippets-BxTYZWz6.js","Page-DDHbuAIY.js","getPastedJson-DhoAwiNO.js","icon-Dhq8z75J.js","MethodPill-DLXmKOwr.js","DuplicateIcon-jzdVwyRU.js","createIcon-eD0b3klN.js","DynamicMarkdown-BfddVCX7.js","SectionHeading-2pSCIo17.js","axios-vUo_bRtp.js","Markdown-DsWjhwJ4.js","clsx-B2t_mZQG.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CUljsAY7.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Cf70306N.js"]}