List Custom Fields
Custom fields define extra structured data you can store on contacts. Each field has a slug (unique per workspace) used when setting values on a contact. Fields can be scoped to a profile.
The custom field object
{
"id": "cf_2dP...",
"profile_id": null,
"name": "Plan",
"slug": "plan",
"type": "select",
"options": ["free", "pro", "enterprise"],
"created_at": "2026-07-12T10:00:00.000Z",
"updated_at": "2026-07-12T10:00:00.000Z"
}
Field type is one of text, number, date, boolean, or select. options applies to select.
GET
/v1/custom-fieldsFilter with ?profile_id=.
{
"custom_fields": [
{
"id": "cf_2dP...",
"profile_id": null,
"name": "Plan",
"slug": "plan",
"type": "select",
"options": [
"free",
"pro",
"enterprise"
],
"created_at": "2026-07-12T10:00:00.000Z",
"updated_at": "2026-07-12T10:00:00.000Z"
}
]
} Create Custom Field
POST
/v1/custom-fieldsBody parameters
| Field | Type | Notes |
|---|---|---|
name | string | Required |
type | string | Required |
slug | string | Optional; derived from name if omitted |
profile_id | string | Optional |
options | array | For select |
{
"custom_field": {
"id": "cf_2dP...",
"profile_id": null,
"name": "Plan",
"slug": "plan",
"type": "select",
"options": [
"free",
"pro",
"enterprise"
],
"created_at": "2026-07-12T10:00:00.000Z",
"updated_at": "2026-07-12T10:00:00.000Z"
}
} Update Custom Field
PATCH
/v1/custom-fields/:idUpdate name or options.
{
"custom_field": {
"id": "cf_2dP...",
"profile_id": null,
"name": "Plan",
"slug": "plan",
"type": "select",
"options": [
"free",
"pro",
"enterprise"
],
"created_at": "2026-07-12T10:00:00.000Z",
"updated_at": "2026-07-12T10:00:00.000Z"
}
} Delete Custom Field
DELETE
/v1/custom-fields/:id{ "ok": true } To set a value on a contact, see Set Custom Field.