---
title: "Custom field definitions"
description: "Create and update custom field definitions with complete curl request examples."
lastModified: "2026-08-25"
---

**Collection path:** `events/{event_id}/custom-field-definitions`

| Input | Type | POST | PATCH | Notes |
| :---- | :---- | ----: | ----: | :---- |
| `key` | Scalar string | Required by the model | Ignored | Must be unique within the event's definitions. |
| `title` | Scalar string | Required by the model | Used | Display title. |
| `customizable_type` | Scalar string | Required by the model | Ignored | Allowed values are `Event`, `Event::Invite`, `Event::Registrant`, `RegistrantList`, `Event::TicketPurchase`, `Speaker`, `Sponsors::Sponsor`, `Timeslot`, and `Sponsors::Lead`. `Event::Invite` is normalized to `Event::Registrant`. |
| `visible_to_sponsors` | JSON boolean | Used | Used | Sponsor visibility. |
| `filterable` | JSON boolean | Used | Used | Filtering setting. |
| `field_type` | Scalar string | Required by the model | Used | `Text`, `SingleChoice`, `MultipleChoice`, or `CustomValues`. |
| `options` | Array of scalar values | Conditional | Used | Required and non-empty for `SingleChoice` and `MultipleChoice`. |
| `visible_on_registrant_profile` | JSON boolean | Used | Used | Maps to the introspected field `visible_on_attendee_profile`. |

## POST a custom field definition

```shell
curl --request POST \
  --url "${BRELLA_API_BASE_URL}/api/core/organizations/${BRELLA_ORGANIZATION_ID}/events/${BRELLA_EVENT_ID}/custom-field-definitions" \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "key": "linkedin_url",
    "title": "LinkedIn URL",
    "customizable_type": "Event::Registrant",
    "visible_to_sponsors": true,
    "filterable": false,
    "field_type": "Text",
    "options": [],
    "visible_on_registrant_profile": true
  }'
```

The response type is `custom-field-definition`; response attributes include configured fields in kebab-case, such as `customizable-type` and `field-type`.

## PATCH a custom field definition

```shell
curl --request PATCH \
  --url "${BRELLA_API_BASE_URL}/api/core/organizations/${BRELLA_ORGANIZATION_ID}/events/${BRELLA_EVENT_ID}/custom-field-definitions/901" \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "title": "LinkedIn profile URL",
    "visible_to_sponsors": false,
    "filterable": true,
    "field_type": "Text",
    "options": [],
    "visible_on_registrant_profile": true
  }'
```

Do not use PATCH to rename `key` or change `customizable_type`; the current mutation silently ignores both fields.
