Create a custom field

Create a contact custom field. The field_key (the key values are stored under) is derived from field_name the same way the app does, unless you pass one.

POST https://api.centerfy.ai/webhooks/inbound/custom-fields

Headers

HeaderRequiredValueDescription
x-api-keyYesyour sub-account API key (cfy_…)Authenticates the request; or use Authorization: Bearer <key>.

Body parameters

NameTypeRequiredDefaultDescription
field_namestringYes—Display name, 1–200 characters.
field_typestringYes—One of text, number, date, select, textarea, checkbox, multiselect.
optionsstring[] | nullNo—Choices for select / multiselect fields (max 200); required and non-empty for those types. Blank entries are dropped.
is_requiredbooleanNo—Whether the field is marked required in the app. Defaults to false.
sort_orderintegerNo—Display position; minimum 0. Defaults to after the existing Centerfy fields.
field_keystringNo—Storage key (max 64). Lower-cased, with runs of other characters turned into _. Defaults to the same treatment of field_name.

Request body

{
  "field_name": "Plan tier",
  "field_type": "select",
  "options": [
    "Basic",
    "Pro",
    "Enterprise"
  ]
}

Example

curl -X POST "https://api.centerfy.ai/webhooks/inbound/custom-fields" \
  -H "x-api-key: $CENTERFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "field_name": "Plan tier",
  "field_type": "select",
  "options": [
    "Basic",
    "Pro",
    "Enterprise"
  ]
}'
import { CenterfyClient } from "@centerfy/sdk";

const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });

const result = await centerfy.customFields.create({
  "field_name": "Plan tier",
  "field_type": "select",
  "options": [
    "Basic",
    "Pro",
    "Enterprise"
  ]
});
console.log(result);
centerfy customFields create '{"field_name":"Plan tier","field_type":"select","options":["Basic","Pro","Enterprise"]}'

MCP tool: centerfy_custom_fields_create (see MCP server)

Response

{
  "status": "success",
  "custom_field": {
    "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 field_name is empty, field_key has no letters or digits, or a select / multiselect field has no options.
  • 409 — if a field with that key already exists in this sub-account (including archived and GoHighLevel fields).

Notes

Returns 201. New fields always have source platform.

© 2026 Centerfy AI. All rights reserved.