Custom checkout fields are extra questions you can ask buyers during checkout. They support four field types (text, textarea, select, checkbox) and two scopes:

  • order: answered once for the whole order. Used for buyer-level questions (dietary preferences, billing notes).
  • attendee: answered once per ticket in the order. Used for per-attendee questions (attendee name, t-shirt size).

Answers are emitted on order webhooks. See the webhooks doc for the answer format.

Custom fields aren’t returned from a top-level list endpoint, they’re embedded in the event show response and can be created, updated, or deleted via the endpoints below.

Required answers, later completion, and the editing deadline are independent settings. For a menu that must be selected at checkout but can still be changed afterwards, use required: true, completable_later: false, and your answers_editable_until deadline. Enabling completable_later lets the buyer leave an answer blank at checkout. All answers remain editable from the order until the deadline, regardless of these two flags. The event start is the latest possible deadline.

POST /admin/events/:slug/custom_fields

Creates a new custom field on the event.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"label": "T-shirt size", "field_type": "select", "per": "attendee", "required": true, "options_text": "S\nM\nL\nXL"}' \
  https://app.usetix.io/admin/events/spring-showcase/custom_fields

Body parameters:

Field Required Notes
label yes The question shown to the buyer.
field_type yes text, textarea, select, or checkbox.
per yes order or attendee.
help_text no Optional clarifying text shown under the label.
details no Plain text in an information popup beside the question, e.g. descriptions of each menu. Line breaks and blank lines are preserved. Send an empty string to remove it.
required no true to require an answer. Defaults to false. Combined with completable_later, a required answer can be filled in after purchase.
completable_later no true to show the question at checkout without blocking, so the buyer can answer later from the order. Defaults to false.
answers_editable_until no ISO 8601 UTC datetime after which buyers can no longer change this answer. Omit or null to use the event start. Must be at or before the event start.
options_text conditional Required for field_type: select. Newline-separated list of options ("Small\nMedium\nLarge").

Response: 201 Created with the custom field JSON.

PATCH /admin/events/:slug/custom_fields/:id

Updates a custom field. Send only the fields you want to change. Omitting answers_editable_until preserves the existing deadline; send null to reset it to the event start.

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"required": false}' \
  https://app.usetix.io/admin/events/spring-showcase/custom_fields/43

Response: 200 OK with the updated custom field JSON.

DELETE /admin/events/:slug/custom_fields/:id

Deletes a custom field. Existing order answers for this field remain stored in our database, but stop appearing in webhook payloads going forward, see webhooks → custom field answers.

curl -X DELETE \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/custom_fields/43

Response: 204 No Content.

PATCH /admin/events/:slug/custom_fields/:id/position

Moves a custom field to a new checkout display position. Lower numbers sort first.

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"position": 3}' \
  https://app.usetix.io/admin/events/spring-showcase/custom_fields/43/position

Response: 204 No Content.

Custom field fields

Field Type Notes
id integer Internal numeric ID. Path parameter. Stable; safe to use as a key in your integration.
label string The question.
help_text string | null Optional clarifying text.
details string | null Plain text in the buyer-facing information popup, preserving line breaks and blank lines.
field_type string text, textarea, select, or checkbox.
per string order or attendee.
required boolean true if an answer is required. With completable_later, checkout does not block on a blank answer.
completable_later boolean true if the buyer can skip this at checkout and answer later from the order.
answers_editable_until string | null ISO 8601 UTC datetime after which buyers can no longer change this answer. null means the event start.
options array For select fields, the list of options as an array of strings. Empty array for non-select fields.
position integer Display order at checkout (low to high).