Custom Fields API

📡

Custom Fields API

Custom fields require the Growth plan or above. Requests on Starter return a 403 error.

List custom fields

Returns all custom fields in the Space. Optionally filter by entity type.

Query parameters

Parameter

Type

Required

Description

entity_type

string

No

Filter by entity: client, collection_link, or testimonial

Example request

curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields?entity_type=client" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields?entity_type=client" \
  -H "Authorization: Bearer sk_live_your_api_key_here"
curl "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields?entity_type=client" \
  -H "Authorization: Bearer sk_live_your_api_key_here"

Response

{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Budget",
      "key": "budget",
      "field_type": "number",
      "label": "Budget",
      "config": {
        "input_variant": "currency",
        "currency_unit": "$"
      },
      "default_value": null,
      "required": false,
      "entity_type": "client"
    }
  ]
}
{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Budget",
      "key": "budget",
      "field_type": "number",
      "label": "Budget",
      "config": {
        "input_variant": "currency",
        "currency_unit": "$"
      },
      "default_value": null,
      "required": false,
      "entity_type": "client"
    }
  ]
}
{
  "ok": true,
  "data": [
    {
      "id": "uuid",
      "name": "Budget",
      "key": "budget",
      "field_type": "number",
      "label": "Budget",
      "config": {
        "input_variant": "currency",
        "currency_unit": "$"
      },
      "default_value": null,
      "required": false,
      "entity_type": "client"
    }
  ]
}

Response fields

Field

Type

Description

id

UUID


name

string

The field name shown in the UI

key

string

Lowercase slugified key used in custom_field_values

field_type

string

text, number, date, url, image, select, boolean

label

string

Display label

config

object or null

Additional configuration (e.g. currency unit, dropdown options, input variant)

default_value

string or null


required

boolean

Whether the field is required on forms

entity_type

string

client, collection_link, or testimonial

Create a custom field

Creates a new custom field. Requires Growth plan.

Request body

{
  "name": "Budget",
  "entity_type": "client",
  "field_type": "currency",
  "label": "Budget",
  "required": false,
  "config": {
    "input_variant": "currency",
    "currency_unit": "$"
  }
}
{
  "name": "Budget",
  "entity_type": "client",
  "field_type": "currency",
  "label": "Budget",
  "required": false,
  "config": {
    "input_variant": "currency",
    "currency_unit": "$"
  }
}
{
  "name": "Budget",
  "entity_type": "client",
  "field_type": "currency",
  "label": "Budget",
  "required": false,
  "config": {
    "input_variant": "currency",
    "currency_unit": "$"
  }
}

Field

Type

Required

Description

name

string

Yes

Display name for the field

entity_type

string

Yes

client, collection_link, or testimonial

field_type

string

Yes

See supported types below

label

string

No

Defaults to name if omitted

required

boolean

No

Default false

config

object

No

Type-specific config (see below)

default_value

string

No


Supported field types

field_type value

UI label

Notes

text

Text


number

Number


currency

Currency

Include config.input_variant: "currency" and config.currency_unit

date

Date and time

Include config.input_variant: "datetime" for date + time

boolean or yes_no

Yes / No

Include config.input_variant: "yes_no" and config.label_true, config.label_false

select

Dropdown

Include config.options: [{ label, value }]

Example request

curl -X POST "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Budget",
    "entity_type": "client",
    "field_type": "currency",
    "config": { "input_variant": "currency", "currency_unit": "$" }
  }'
curl -X POST "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Budget",
    "entity_type": "client",
    "field_type": "currency",
    "config": { "input_variant": "currency", "currency_unit": "$" }
  }'
curl -X POST "https://app.endors.io/api/spaces/YOUR_SPACE_ID/custom-fields" \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Budget",
    "entity_type": "client",
    "field_type": "currency",
    "config": { "input_variant": "currency", "currency_unit": "$" }
  }'

Response

{
  "ok": true,
  "data": {
    "id": "uuid"
  }
}
{
  "ok": true,
  "data": {
    "id": "uuid"
  }
}
{
  "ok": true,
  "data": {
    "id": "uuid"
  }
}

Errors

HTTP

Code

Message

400

BAD_JSON

"Invalid JSON body"

400

BAD_REQUEST

"name, entity_type, and field_type are required"

403

PLAN_RESTRICTION

"Custom fields require the Growth plan or above. Upgrade your plan to enable this feature."

409

DUPLICATE_FIELD

"A field named \"Budget\" already exists."

500

DB_ERROR

Internal database error

Delete a custom field

Deleting custom fields requires a browser session and is not accessible via API key. Use the Endors dashboard under Settings > Custom Fields.