Skip to main content
The Custom Objects API allows you to manage company-defined entity types with dynamic fields and relationships. Custom object types are configured per company — use the List Types endpoint to discover available types. Key Concepts:
  • Discovery: Call GET /custom-objects to list available types, then use the type value as the objectType path parameter for all other endpoints.
  • Configuration: Call GET /custom-objects/{objectType}/configuration to get a JSON Schema for data fields and metadata about relationship fields.
  • Data vs relationships: Responses include separate data (regular field values) and relationships (linked entity IDs) objects. Create and update only accept data — relationship fields are rejected with a clear error directing you to the relationship management endpoints.
  • Relationship management: Dedicated PUT / DELETE endpoints for linking and unlinking entities. Use the fieldRefId from the configuration endpoint.
  • Object type format: Object types use snake_case in URLs and responses.

Discovery

Call GET /v1/custom-objects to list the custom object types configured for your company:
{
  "items": [
    { "id": "...", "type": "vehicle", "displayNameExpression": "vehicleMake + \" \" + vehicleModel" },
    { "id": "...", "type": "building_info", "displayNameExpression": null }
  ]
}
Use the type value (e.g., vehicle) as the {objectType} path parameter in all other endpoints.

Configuration

Call GET /v1/custom-objects/{objectType}/configuration to get:
  • data: JSON Schema (draft 2020-12) describing the available fields, their types, and which are required.
  • relationships: Array of relationship metadata, each with fieldRefId, label, targetType, and cardinality.

Data vs Relationships

GET responses split the object’s data into two sections:
{
  "id": "...",
  "type": "vehicle",
  "displayName": "Toyota Camry",
  "data": {
    "vehicleMake": "Toyota",
    "vehicleModel": "Camry",
    "year": 2024
  },
  "relationships": {
    "ownerExposure": "550e8400-e29b-41d4-a716-446655440200"
  }
}
  • data: Regular field values. Can be set via create/update.
  • relationships: Linked entity IDs keyed by fieldRefId. Single-cardinality relationships have a string value; multi-cardinality relationships have an array of strings. Managed via the relationship endpoints only.

Relationship Management

Use the dedicated relationship endpoints to link and unlink entities:
  • Add: PUT /custom-objects/{objectType}/{objectId}/relationships/{fieldRefId}/{targetId}
  • Remove: DELETE /custom-objects/{objectType}/{objectId}/relationships/{fieldRefId}/{targetId}
Cardinality behavior:
CardinalityAdd Behavior
one_to_oneReplaces any existing link on both sides
one_to_manyReplaces existing link from the source (the “one” side); target can have many
many_to_oneAppends link; existing links to the target from the “one” side are replaced
many_to_manyAppends link; both sides can have multiple
Both operations are idempotent — adding an existing link returns created: false, removing a non-existent link returns removed: false.

API Endpoints


Permissions

OperationRequired Permission
List Typescompany.fmv1_custom_object:read
Get Configurationcompany.fmv1_custom_object:read
List Custom Objectscompany.fmv1_custom_object:read
Get Custom Objectcompany.fmv1_custom_object:read
Create Custom Objectcompany.fmv1_custom_object:create
Update Custom Objectcompany.fmv1_custom_object:update
Delete Custom Objectcompany.fmv1_custom_object:delete
Add Relationshipcompany.fmv1_custom_object:update
Remove Relationshipcompany.fmv1_custom_object:update

Sorting (List Custom Objects)

Sort FieldDescription
createdAtSort by creation date (default)
updatedAtSort by last update date
displayNameSort by computed display name