Address, AddressV2, Date and StringOrNumber each define their own JSON value shape. These shapes are shared across companies; a tenant configuration selects a field’s type and does not redefine that type’s members.
Read a field’s typeInfo.kind from its configuration before writing its value. The API validates values against that declared field type on create and update, including values nested in custom objects and policy transactions. Invalid values receive a 400 response with the affected field path.
Address and AddressV2 are independent field types with different shapes. A company may configure both. Custom objects such as NumberLimit instead define their members in the tenant’s objects configuration.
Address
Structured postal address as a single flat set of components. Used wherever a property, mailing, or risk location appears in your field model.Address is a permanent field type with its own flat storage contract. It is not an alternate input shape for AddressV2.
Required sub-fields: none. A partial address (e.g. street + city, no county) is valid — Address sub-fields are all optional, so partial address values are accepted. (Whether an address must exist at all is governed by the embedding field’s own required condition.)
AddressV2
A postal address modelled as an authoritative entered address plus an optional geocode computed from it.AddressV2 is not a superset of Address — the sub-fields are renamed and re-nested. A payload written for Address is not a valid AddressV2, and vice versa. Check the field’s configured type before writing it; see the warning at the top of this page.
Read one half or the other, never a blend. enteredAddress is what a person typed or confirmed, and is the half to render as the address. geocode carries provider output only — county, coordinates, precision. There is deliberately no county in enteredAddress and no street text in geocode.
Required sub-fields: none at the top level; all three are optional, as is every sub-field of enteredAddress. The one requiredness rule sits inside geocode: if you send a geocode object at all, status and source must both be present and non-empty.
enteredAddress
There is no
county here. County is provider output and lives on geocode.
geocode
Never typed or edited by a user. null when no geocode has been recorded.
granularity, most precise first:
Writing an AddressV2 field
Send enteredAddress. The platform geocodes server-side on save and fills geocode for you:
- Geocoding never gates the write. A provider miss or outage is recorded as an
"unmatched"or"failed"geocode, not a4xxor5xxon your save. - You can supply your own geocode. Send it with
source: "provided"and it is stored as given, with no provider lookup. Ageocodesent with any othersourceis discarded and replaced by the platform’s own result. - An unchanged entered address keeps its geocode verbatim.
address2is excluded from the components the geocode is computed from, so adding a suite number to an already-matched address does not re-geocode it or lose its match. - Only top-level
AddressV2fields are geocoded on save. AnAddressV2value nested inside a custom object is stored as you send it.
Date
A calendar day pinned to an IANA time zone — the day a person wrote on the policy, not an instant. One canonical form, stored and returned as-is. Required sub-field:date. timezone is optional on a write (it defaults to America/New_York) and is always present in a response.
policyStartDate / policyEndDate on policy transactions are ordinary Date fields and accept this canonical object. See the policy transaction endpoints.
The policy endorsement deltas channel stores each value exactly as sent, so for a Date field it accepts only this shape, with both sub-fields stated — see the API changelog entry of 2026-09-04.
StringOrNumber
A discriminated value that is either a string or a number, chosen per-row. The two typed slots are mutually exclusive — the inactive one isnull.
Required sub-fields: kind. The text / number slots are optional (the inactive slot is null).
Cardinality
Any of these field types can appear as a single value or as a list, depending on how the field is configured. List-cardinality fields enforce the same field-type validation per array element — each item must satisfy its type’s value contract.Related
- V1 API Changelog — the strict-validation rule was rolled out on 2026-04-28 and corrected to field-type requiredness on 2026-06-26.
