August 25, 2026
Contact custom fields API and webhooks
Read your organization’s Contact custom field definitions and read and write custom field values directly on Contact records. Custom fields capture user-defined and organization-defined data (e.g. lead source, estimated contract value, customer segment, renewal date, fields mapped from event-type invitee questions). Values are returned as self-describing entries so a consumer can render a Contact without a second lookup, and they flow through the same Contact reads, writes, and lifecycle webhooks you already use.
New endpoints:
- GET /contacts/custom_field_definitions – List custom field definitions, including
uri,label,field_type(text,number,currency,tags,date,single_select, orinvitee_question),created_at,updated_at, and type-specific metadata such asoptionsandcurrency. - GET /contacts/custom_field_definitions/{uuid} – Retrieve a single custom field definition.
Updated Contact endpoints:
- GET /contacts and GET /contacts/{contact_uuid} – Now return a
custom_fieldsarray by default. Each entry carries the field’suri,label, andvalue. Every defined field is included, with unset scalars asnulland unset arrays as[]. Passexcludeto trimcustom_fieldsfrom the payload. - POST /contacts – Now accepts custom_fields. Each entry sends only
uuidandvalue;labeland schema fields are ignored on write. - PATCH /contacts/{contact_uuid} – Now accepts partial
custom_fieldsupdates using merge semantics. Include an entry only for fields you are changing, sendvalue: nullto clear a scalar, andvalue: []to clear a tags field.
Updated webhook events:
- contact.created – Payload now includes the
custom_fieldsarray, with an entry for every defined field. - contact.updated – Payload now includes the
custom_fieldsarray, so subscribers can distinguish a cleared value from an absent one. Treat the payload as a full representation. - contact.deleted – Unchanged. Delete events carry no custom fields.
Notes:
- Custom fields use the existing
contacts:readandcontacts:writescopes. No new scopes are introduced. - Values are validated against their definitions. Writes referencing an unknown or retired field
uuidare rejected. - Currency values are integer minor units (
8500000is $85,000.00), with the currency code held on the definition. Tags fields are free-form string arrays with no controlled vocabulary.