List custom fields
List the sub-account's contact custom field definitions, ordered by sort_order then name.
GET
https://api.centerfy.ai/webhooks/inbound/custom-fields Headers
| Header | Required | Value | Description |
|---|---|---|---|
x-api-key | Yes | your sub-account API key (cfy_…) | Authenticates the request; or use Authorization: Bearer <key>. |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
limit | integer | No | 50 | Page size; minimum 1, maximum 100 (larger values are rejected with 400). |
offset | integer | No | 0 | Number of records to skip for paging; minimum 0. |
source | string | No | — | One of platform (created in Centerfy) or ghl (mirrored from GoHighLevel). |
include_archived | boolean | No | false | Also return archived definitions. |
Example
curl -X GET "https://api.centerfy.ai/webhooks/inbound/custom-fields?limit=50&offset=0&include_archived=false" \
-H "x-api-key: $CENTERFY_API_KEY" import { CenterfyClient } from "@centerfy/sdk";
const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });
const result = await centerfy.customFields.list({
"limit": 50,
"offset": 0,
"include_archived": "false"
});
console.log(result); centerfy customFields list '{"limit":50,"offset":0,"include_archived":"false"}' MCP tool: centerfy_custom_fields_list (see MCP server)
Response
{
"status": "success",
"total": 1,
"limit": 50,
"offset": 0,
"has_more": false,
"custom_fields": [
{
"id": "4b5c6d7e-8f90-4a1b-9c2d-3e4f5a6b7c8d",
"field_name": "Plan tier",
"field_key": "plan_tier",
"field_type": "select",
"options": [
"Basic",
"Pro",
"Enterprise"
],
"is_required": false,
"sort_order": 0,
"source": "platform",
"external_key": null,
"archived_at": null,
"created_at": "2026-10-01T10:00:00.000Z",
"updated_at": "2026-10-01T10:00:00.000Z"
}
]
}Errors
400— if source is not platform or ghl.
Notes
options is null for field types without choices.