Custom Fields
Set custom-field values on contacts
Batch-set per-contact custom-field VALUES (the `contacts_custom_fields` rows, not the field definitions). Body: `{ custom_fields: [{ contact_id, custom_field_id, text_value?, array_value?, date_value?
POST /v2/custom-fields/contacts/values
Parameters
Header parameters
Idempotency-Key
string required
Required. UUID per logical operation, reused on every retry. See
apps/rest-api/src/shared/idempotency.ts for the full contract. Missing → 400 BadRequest; same key + different body → 409 Conflict.Request body
Content-Type: application/json
custom_fields
array<object> required
custom_fields[].contact_id
string (uuid) required
custom_fields[].custom_field_id
string (uuid) required
custom_fields[].text_value
string
custom_fields[].date_value
string
custom_fields[].array_value
array<string>
Example
{
"custom_fields": [
{
"contact_id": "00000000-0000-0000-0000-000000000000",
"custom_field_id": "00000000-0000-0000-0000-000000000000"
}
]
}
Responses
200 — Successful response
Content-Type: application/json
data
object required
data.affected
integer required
data.ids
array<string>
data.failed
array<object>
data.failed[].id
string
data.failed[].error
object
data.failed[].error.code
string
data.failed[].error.message
string
Example
{
"data": {
"affected": 0
}
}
400
No response body.
401
No response body.
403
No response body.
404
No response body.
409
No response body.
429
No response body.
500
No response body.
Code samples
curl https://api.prod.getdex.com/v2/custom-fields/contacts/values \
--request POST \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"custom_fields": [
{
"contact_id": "00000000-0000-0000-0000-000000000000",
"custom_field_id": "00000000-0000-0000-0000-000000000000"
}
]
}'
fetch('https://api.prod.getdex.com/v2/custom-fields/contacts/values', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
custom_fields: [
{
contact_id: '00000000-0000-0000-0000-000000000000',
custom_field_id: '00000000-0000-0000-0000-000000000000'
}
]
})
})
requests.post(
"https://api.prod.getdex.com/v2/custom-fields/contacts/values",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"custom_fields": [
{
"contact_id": "00000000-0000-0000-0000-000000000000",
"custom_field_id": "00000000-0000-0000-0000-000000000000"
}
]
}
)
Reorder custom fields
Batch ranking update (`{ updates: [{ customFieldId, ranking }] }`, max 100). Stale IDs are silently skipped. **Requires `Idempotency-Key`.** Returns the full re-ranked list: `{ data: { custom_fields:
Get a contact
Retrieve a single contact by its unique ID. Returns the full contact record including name, company, job title, emails, phone numbers, and all associated metadata.

