Skip to content
Core API
Esc
↑↓navigate↵open⌘Jpreview
On this page

Registrants

Create and update registrants with complete curl request examples.

Release timing: This page includes changes planned for 9 October 2026. See the deployment note before using the updated operations or inputs.

Build a request

Example data only. No request is sent.

POST
Choose the destination IDs
Start with these fields

External identifier.

Invited identity email.

Invited first name.

Invited last name.

Defaults to true. Use a JSON boolean, not the string "false".

Add optional fields (14)

Invited company.

Invited title.

Networking pitch.

Networking preference.

dark, light, or system.

Invalid or omitted POST values fall back to the event's default ticket type.

Full custom-list membership replacement. [] removes all custom-list memberships.

Name, not ID. Brella imports or resolves the event value.

Name, not ID.

Name, not ID.

Entries use interest_id and intent_ids. PATCH replaces unselected interests.

Entries use key plus value or values.

Requested seat count. Default to 1 \- Do NOT use values larger than 1\. Seats are a legacy concept that is to be deprecated.

External QR override, at most 255 characters and unique within the event. Null or blank clears the record override. Internal Brella QR formats, including encoded variants, are rejected. A joined registrant may then inherit a personal invite value; read external-qr-string for the effective value and internal-qr-string for the stable Brella value.

Use the API address and token from your environment. Set up authentication.

curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/registrants' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "external_id": "CRM-10042",
  "external_email": "alex@example.com",
  "external_first_name": "Alex",
  "external_last_name": "Morgan",
  "send_email": false
}'
201 CreatedIllustrative response
{
  "data": {
    "id": "1201",
    "type": "registrant"
  }
}

The token scope determines returned fields. This selector illustrates that configuration; it does not change your token or the request.

Collection path: events/{event_id}/registrants

POST creates an invited registrant. PATCH uses Brella’s invited-registrant update flow and can be rejected when the record’s current state is not compatible with that flow.

POST a registrant

View the complete cURL example
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/registrants' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "external_id": "CRM-10042",
  "external_email": "alex@example.com",
  "external_first_name": "Alex",
  "external_last_name": "Morgan",
  "external_company": "Example Ltd",
  "external_title": "VP Partnerships",
  "pitch": "Looking for distribution partners",
  "skip_networking": false,
  "ticket_type_list_id": 301,
  "custom_list_ids": [
    401,
    402
  ],
  "persona": "Buyer",
  "function": "Partnerships",
  "industry": "Technology",
  "selected_interests": [
    {
      "interest_id": 701,
      "intent_ids": [
        801,
        802
      ]
    }
  ],
  "custom_fields_attributes": [
    {
      "key": "company_size",
      "values": [
        "51-200"
      ]
    }
  ],
  "seats": 1,
  "send_email": false,
  "external_qr_string": "BADGE-10042"
}'

The response type is registrant. Useful write-response fields include external_id, external_email, external_first_name, external_last_name, ticket_type_list_id, seats_count, and updated_at.

PATCH a registrant

This example updates profile source data and fully replaces custom-list membership and interest selections.

View the complete cURL example
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request PATCH \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/registrants/1201' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "external_title": "SVP Partnerships",
  "pitch": "Expanding our partner network",
  "custom_list_ids": [
    401,
    403
  ],
  "selected_interests": [
    {
      "interest_id": 701,
      "intent_ids": [
        801
      ]
    }
  ],
  "send_email": false
}'

Set or clear an external QR value

Allow the external_qr_string input mapping in the registrant scope. POST can set it on a new invited registrant; PATCH can set an override on an invited or joined registrant:

{ "external_qr_string": "BADGE-10042" }

Clear the target record’s override with:

{ "external_qr_string": null }

Blank strings also clear it. Non-blank values must be unique within the event, at most 255 characters and outside Brella’s internal QR format. Internal-format and duplicate values return validation errors.

Configure external_qr_string and internal_qr_string as readable or write-response fields only when needed. external-qr-string returns the effective value; a joined registrant can inherit a claimed personal invite’s value after its own override is cleared. internal-qr-string remains the stable Brella QR value. Check both to verify the intended scanning result; QR behavior explains the fallback.

Input reference

19 inputs. Expand a field for its request type and update behavior. These are the example request keys; your administrator can configure aliases.

external_idScalar string or `null`
POST
Optional
PATCH
Optional

External identifier.

external_emailScalar string or `null`
POST
Optional
PATCH
Optional

Invited identity email.

external_first_nameScalar string or `null`
POST
Optional
PATCH
Optional

Invited first name.

external_last_nameScalar string or `null`
POST
Optional
PATCH
Optional

Invited last name.

external_companyScalar string or `null`
POST
Optional
PATCH
Optional

Invited company.

external_titleScalar string or `null`
POST
Optional
PATCH
Optional

Invited title.

pitchScalar string or `null`
POST
Optional
PATCH
Optional

Networking pitch.

skip_networkingJSON boolean
POST
Optional
PATCH
Optional

Networking preference.

appearanceScalar string or `null`
POST
Optional
PATCH
Optional

dark, light, or system.

ticket_type_list_idScalar ID
POST
Optional
PATCH
Optional

Invalid or omitted POST values fall back to the event's default ticket type.

custom_list_idsArray of scalar IDs
POST
Optional
PATCH
Optional

Full custom-list membership replacement. [] removes all custom-list memberships.

personaScalar string or `null`
POST
Optional
PATCH
Optional

Name, not ID. Brella imports or resolves the event value.

functionScalar string or `null`
POST
Optional
PATCH
Optional

Name, not ID.

industryScalar string or `null`
POST
Optional
PATCH
Optional

Name, not ID.

selected_interestsArray of objects
POST
Optional
PATCH
Optional

Entries use interest_id and intent_ids. PATCH replaces unselected interests.

custom_fields_attributesArray of objects
POST
Optional
PATCH
Optional

Entries use key plus value or values.

seatsScalar number
POST
Optional
PATCH
Optional

Requested seat count. Default to 1 \- Do NOT use values larger than 1\. Seats are a legacy concept that is to be deprecated.

send_emailJSON boolean
POST
Optional
PATCH
Optional

Defaults to true. Use a JSON boolean, not the string "false".

external_qr_stringScalar string or `null`
POST
Optional
PATCH
Optional, including joined registrants

External QR override, at most 255 characters and unique within the event. Null or blank clears the record override. Internal Brella QR formats, including encoded variants, are rejected. A joined registrant may then inherit a personal invite value; read external-qr-string for the effective value and internal-qr-string for the stable Brella value.

Understand collection updates

What does this PATCH change?

Compare omitted, replaced and cleared collections. These are conceptual field values, not a live API response.

Before
{
  "custom_list_ids": [
    401,
    402
  ]
}
PATCH body
{}
After
{
  "custom_list_ids": [
    401,
    402
  ]
}

Omitting the field keeps the existing collection.

List IDs must belong to the event. This illustrates a valid, authorized update.

Last updated on October 9, 2026