Custom Fields
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:
POST /v2/custom-fields/reorder
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
updates
array<object> required
updates[].customFieldId
string (uuid) required
updates[].ranking
integer required
Example
{
"updates": [
{
"customFieldId": "00000000-0000-0000-0000-000000000000",
"ranking": 0
}
]
}
Responses
200 — Successful response
Content-Type: application/json
data
object required
data.custom_fields
array<object> required
data.custom_fields[].id
string (uuid) required
data.custom_fields[].user_id
string
data.custom_fields[].name
string
data.custom_fields[].field_type
string
data.custom_fields[].categories
array<string>
data.custom_fields[].ranking
integer | null
data.pagination
object
data.pagination.nextCursor
string | null
data.pagination.count
integer
Example
{
"data": {
"custom_fields": [
{
"id": "00000000-0000-0000-0000-000000000000"
}
]
}
}
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/reorder \
--request POST \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"updates": [
{
"customFieldId": "00000000-0000-0000-0000-000000000000",
"ranking": 0
}
]
}'
fetch('https://api.prod.getdex.com/v2/custom-fields/reorder', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
updates: [
{
customFieldId: '00000000-0000-0000-0000-000000000000',
ranking: 0
}
]
})
})
requests.post(
"https://api.prod.getdex.com/v2/custom-fields/reorder",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"updates": [
{
"customFieldId": "00000000-0000-0000-0000-000000000000",
"ranking": 0
}
]
}
)
Delete a custom field
Permanently delete a custom field definition (per-contact values cascade). Returns `{ data: { affected: 1, ids: [customFieldId] } }`. `Idempotency-Key` is optional. Deleting a missing field returns 40
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?

