Documentation Index
Fetch the complete documentation index at: https://docs.aiinsurance.io/llms.txt
Use this file to discover all available pages before exploring further.
V1 API Changelog
Track changes, additions, and deprecations to the V1 API.2026-05-07
New endpoint: Update Expected Totals for V1 events
AddedPATCH /api/v1/external/companies/{companyId}/events/{eventId}/financials/expected-totals
for Field Model V1 events.
The legacy expected-totals endpoint at /api/external/... relies on an internal type column
that is always null for V1-created events, causing a TypeMismatch error. This new endpoint
resolves the event type from fieldModelV1Data.eventType instead.
The request body is identical to the legacy endpoint (type, categoryId, expectedTotal,
optional asOfDate). The type field is still required for permission routing.
2026-05-01
Event→Policy relationship migrated to eventPolicy Join field (additive)
Event responses now surface the associated policy in two places: the existing
top-level policyId and the new eventPolicy key inside fieldModelV1Data.
Both reflect the same value — policyId stays at the top level for backwards
compatibility, while eventPolicy is the underlying Join: Policy field
where the value is stored.
What changed:
GET /api/v1/external/companies/{companyId}/eventsand/events/{eventId}responses includeeventPolicyinsidefieldModelV1Dataalongside the pre-existing top-levelpolicyId. No fields were removed.POSTandPUTevent endpoints continue to acceptpolicyIdas a top-level request param. The server maps it tofieldModelV1Data.eventPolicyinternally; clients that already submitpolicyIdneed no changes.policyIdis no longer stored on a dedicatedevents.policy_idcolumn on the FMV1 read/write paths — it now lives infieldModelV1Data.eventPolicy, consistent with howeventInsuredswas migrated previously. The external API contract is unchanged for existing integrators.
eventPolicy and
continue using policyId, or migrate to reading the value from
fieldModelV1Data.eventPolicy to align with the rest of the field model.
Address.zipCode must be a JSON string (breaking)
Address system-object writes that send zipCode as a JSON number are now rejected with 400 and problemCode: "InvalidAddressZipCode". Previously, numeric ZIPs were accepted by the API but silently lost their leading zeros — 02140 parses as 2140, corrupting the stored address.
Affected endpoints: every FMV1 create/update endpoint that can carry an Address value (top-level field or nested inside a custom object), including all exposure, event, quote, basic-policy, segmented-policy-transaction, and custom-object writes.
What to send: quote ZIP codes in your payload — "zipCode": "02140", never "zipCode": 02140. The Address sub-field reference and the Fmv1Address OpenAPI schema both call this out explicitly.
Why this is most likely to bite:
- Spreadsheets (Excel / Google Sheets) auto-coerce ZIP-shaped cells to numbers — export as text or wrap in
=TEXT(...)before serializing. - OpenAPI clients / codegen that infer the
zipCodeJSON type from a sample value rather than the schema (which has always beentype: string). - LLM-generated requests that “helpfully” unquote numeric-looking strings.
GET /resolve-address already returns zipCode as a string — paste responses straight into your write payload and you avoid this failure.
2026-04-29
Documentation: System Objects + Address Tools
- New System Objects reference page documenting the five FMV1 built-in object shapes (
Address,CoverageLimit,Currency,Date,QuoteBindError) — sub-field tables, JSON examples, the strict-completeness rule, and List cardinality. - New Resolve Address endpoint page surfacing the V1-relevant pre-flight utility for deriving a complete
Address(includingcounty) from a freeform input string. The endpoint itself was added on 2026-04-27 under the legacy URL — this page exposes it to V1 integrators directly. - OpenAPI spec now exports reusable
Fmv1Address,Fmv1CoverageLimit,Fmv1Currency,Fmv1Date, andFmv1QuoteBindErrorschemas undercomponents.schemasfor client-codegen consumers. Schemas mark every sub-field asrequired.
2026-04-28
Strict system-object sub-field validation (breaking)
When a request body for an FMV1 create/update endpoint includes a system-object value (Address, CoverageLimit, Currency, Date, QuoteBindError), every declared sub-field must now be present and non-empty. Affected endpoints:
POST/PATCH /api/v1/external/companies/{companyId}/exposuresand/exposures/{id}POST/PATCH /api/v1/external/companies/{companyId}/eventsand/events/{id}POST/PATCH /api/v1/external/companies/{companyId}/quotesand/quotes/{id}POST /api/v1/external/companies/{companyId}/policies(Basic Policies)- All segmented policy transaction endpoints (
new-business,endorse,renew) POST/PATCH /api/v1/external/companies/{companyId}/custom-objects/{objectType}and/{objectId}
- A
null,undefined, or empty-string ("") sub-field on a present system-object value now returns400withField '<parentField>' is missing required sub-field '<refId>'. Previously, partial system objects were silently accepted and surfaced as confusing rating errors downstream. The most common case isAddresswithoutcounty— callGET /api/external/companies/{companyId}/resolve-addressfirst if upstream data lacks county. - Numeric
0(e.g.Currency.value: 0) and Booleanfalseare still valid — the rule only treatsnull/undefined/""as missing. - Whitespace-only strings (e.g.
" ") are NOT treated as missing by this validator. A consumer sendingcounty: " "will pass this check; downstream rating may still reject it. Trim/normalize sub-field strings client-side before submitting. - Custom-object sub-fields keep their existing
requiredConditionrules unchanged. - Omitting the parent system-object field entirely is unchanged — the strict rule only fires when the parent value is provided.
2026-04-20
- Bind Quote — documented under Basic Policies:
POST /api/v1/external/companies/{companyId}/quotes/{quoteId}/bind. Binds a Field Model V1 quote to create a Basic Policy. Returns{ policyId, policyNumber, bindErrors }. Requirescompany.quote:create.
2026-04-17
- Basic Policies API — introduced as a simplified CRUD alternative to the transaction-based Policy API at
GET/POST /api/v1/external/companies/{companyId}/policiesandGET/DELETE /api/v1/external/companies/{companyId}/policies/{policyId}. Request body is a flat field-model object with nestedexposures. See the Basic Policies overview. - List Basic Policies supports
id,policyNumberFilterText(substring match onpolicyNumberonly), andfilters(structured per-fieldFieldModelV1ListFilter[]against any FMV1 field or system column, combined with AND). - Removed the “Deprecated” group from the V1 docs. The previous CRUD endpoint shape (
{ referenceId, startsAtDate, endsAtDate, segments: [...] }) is no longer documented; use the new flat-shape Basic Policies API instead.
