Skip to main content
Object primitives are five built-in object shapes that FMV1 fields can be typed as. Unlike custom objects (which you define in your configuration spreadsheet), object primitives have a fixed structure across every company and are recognized natively by the rating engine, snapshots, and bind logic. You will encounter object primitives whenever a field’s fieldType in your configuration is one of:
  • Object: Address
  • Object: CoverageLimit
  • Object: Currency
  • Object: Date
  • Object: QuoteBindError

Required-completeness rule

If an object-primitive field is provided in a create/update payload, every sub-field listed below is required. Partial values are rejected with HTTP 400 and a problem code naming the offending sub-field:
The rule only fires when the parent field is provided. Omitting the field entirely is unchanged — object-primitive fields can still be optional at the field-definition level. What counts as missing: null, undefined, or empty string (""). Numeric 0 and Boolean false are valid values. Whitespace-only strings (e.g. " ") currently slip past this validator — trim sub-field strings client-side before submitting. Custom objects keep their existing rules. Sub-fields of a custom object follow each sub-field’s own requiredCondition from your configuration; only object primitives are strict-by-default. This rule applies to every FMV1 external write endpoint:
  • POST / PUT exposures, events, quotes
  • POST Basic Policies
  • All segmented policy transactions (new-business, endorse, renew)
  • POST / PUT custom objects (including an object-primitive sub-field nested inside a custom object)

Address

Structured postal address. Used wherever a property, mailing, or risk location appears in your field model.
zipCode must be a JSON string, never a number. JSON numbers cannot represent leading zeros — 02140 parses as 2140, silently corrupting the ZIP. The API rejects numeric zipCode values with 400:
This is the most common failure when payloads are generated from spreadsheets, OpenAPI codegen with the wrong type, or LLMs that “helpfully” unquote numeric-looking strings — always quote ZIP codes in your payload.
If your upstream data does not include county, call GET /api/external/companies/{companyId}/resolve-address first to derive a complete address before submitting.

CoverageLimit

A single coverage limit pair: a name and a monetary amount.

Currency

A monetary value with its currency code.

Date

A calendar date with an explicit timezone. The API accepts two input shapes and stores both in the canonical DMY form.
You may also submit the ISO form on input — the API canonicalizes it to the DMY form before storage:
timezone is required in both shapes. Responses always use the DMY form.

QuoteBindError

A single bind-time error surfaced on a quote that failed to bind. The bind endpoint populates quoteBindErrors (an Object List of these) on the quote when bind fails; you generally do not write this directly.

Cardinality

Any of these object primitives can appear as a single value or as a list, depending on how the field is configured. List-cardinality fields enforce the same required-completeness rule per array element — each item must be a complete object primitive.