> For the complete documentation index, see [llms.txt](https://eventx-hq.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://eventx-hq.gitbook.io/knowledge-base/api-v2/custom-fields.md).

# Custom Fields

Custom field definitions per event (question\_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP

## List custom fields

> List custom field definitions for an event — paginated, filterable by label substring and type. Excludes soft-deleted (trashed) by default; pass includeDeleted=true to include. Requires organizer\_api\_token read, org or event scoped.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"custom fields","description":"Custom field definitions per event (question_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"security":[{"organizerApiToken":[]}],"components":{"securitySchemes":{"organizerApiToken":{"type":"http","scheme":"bearer","description":"Organizer API token — Authorization: Bearer evtx_live_… (Org/Event scoped, read/write)."}}},"paths":{"/v2/events/{eventId}/custom-fields":{"get":{"tags":["custom fields"],"summary":"List custom fields","description":"List custom field definitions for an event — paginated, filterable by label substring and type. Excludes soft-deleted (trashed) by default; pass includeDeleted=true to include. Requires organizer_api_token read, org or event scoped.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","description":"Filter by label substring (case-insensitive)"},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","description":"Filter by type: text, textArea, multipleText, radioGroup, checkboxGroup, dropdown, singleCheckbox, fileUpload, datePicker, timePicker, phoneField"},"required":false,"name":"type","in":"query"},{"schema":{"type":["boolean","null"],"description":"Include soft-deleted (trashed) fields"},"required":false,"name":"includeDeleted","in":"query"}],"responses":{"200":{"description":"Paginated custom fields","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Custom field ID, UUID"},"eventId":{"type":"string","description":"Event ID"},"label":{"type":"string","description":"Field label"},"type":{"type":"string","description":"text | textArea | multipleText | radioGroup | checkboxGroup | dropdown | singleCheckbox | fileUpload | datePicker | timePicker | phoneField"},"isRequired":{"type":"boolean","description":"Whether field is required"},"isEditableByAttendee":{"type":["boolean","null"],"description":"Whether attendee can edit after submission"},"config":{"description":"Type-specific config (e.g. options for radioGroup/dropdown)"},"contentI18n":{"description":"Translations"},"isDeleted":{"type":"boolean","description":"Soft-deleted (trashed), recoverable via PATCH deletedAt:null"},"deletedAt":{"type":["string","null"],"description":"Soft delete timestamp, null if active"},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","label","type","isRequired","isEditableByAttendee","isDeleted","deletedAt","createdAt","updatedAt"],"description":"Custom field row — per-event definition stored in question_library.questions, soft-deleted (trash, recoverable). Scoped by organizer_api_token (Org or Event, not user)."}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["data","total","limit","offset"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"404":{"description":"Event not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Create custom field

> Create custom field — event-create allowed for event-scoped token (token.eventId must match). Requires write.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"custom fields","description":"Custom field definitions per event (question_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"security":[{"organizerApiToken":[]}],"components":{"securitySchemes":{"organizerApiToken":{"type":"http","scheme":"bearer","description":"Organizer API token — Authorization: Bearer evtx_live_… (Org/Event scoped, read/write)."}}},"paths":{"/v2/events/{eventId}/custom-fields":{"post":{"tags":["custom fields"],"summary":"Create custom field","description":"Create custom field — event-create allowed for event-scoped token (token.eventId must match). Requires write.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"eventId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200,"description":"Field label, required 1-200"},"type":{"type":"string","enum":["text","textArea","multipleText","radioGroup","checkboxGroup","dropdown","singleCheckbox","fileUpload","datePicker","timePicker","phoneField"],"description":"Field type, required"},"isRequired":{"type":"boolean","description":"Required flag, defaults false"},"isEditableByAttendee":{"type":"boolean"},"config":{"description":"Type-specific config, e.g. options for choice types"},"contentI18n":{}},"required":["label","type"],"description":"Create custom field — requires organizer_api_token write, org or event scoped. Type must be one of the supported CustomQuestionType values."}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Custom field ID, UUID"},"eventId":{"type":"string","description":"Event ID"},"label":{"type":"string","description":"Field label"},"type":{"type":"string","description":"text | textArea | multipleText | radioGroup | checkboxGroup | dropdown | singleCheckbox | fileUpload | datePicker | timePicker | phoneField"},"isRequired":{"type":"boolean","description":"Whether field is required"},"isEditableByAttendee":{"type":["boolean","null"],"description":"Whether attendee can edit after submission"},"config":{"description":"Type-specific config (e.g. options for radioGroup/dropdown)"},"contentI18n":{"description":"Translations"},"isDeleted":{"type":"boolean","description":"Soft-deleted (trashed), recoverable via PATCH deletedAt:null"},"deletedAt":{"type":["string","null"],"description":"Soft delete timestamp, null if active"},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","label","type","isRequired","isEditableByAttendee","isDeleted","deletedAt","createdAt","updatedAt"],"description":"Custom field row — per-event definition stored in question_library.questions, soft-deleted (trash, recoverable). Scoped by organizer_api_token (Org or Event, not user)."}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"404":{"description":"Event not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Get custom field

> Get single custom field by ID, scoped to event. Soft-deleted (trashed) returns 404 unless includeDeleted. Requires read.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"custom fields","description":"Custom field definitions per event (question_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"security":[{"organizerApiToken":[]}],"components":{"securitySchemes":{"organizerApiToken":{"type":"http","scheme":"bearer","description":"Organizer API token — Authorization: Bearer evtx_live_… (Org/Event scoped, read/write)."}}},"paths":{"/v2/events/{eventId}/custom-fields/{fieldId}":{"get":{"tags":["custom fields"],"summary":"Get custom field","description":"Get single custom field by ID, scoped to event. Soft-deleted (trashed) returns 404 unless includeDeleted. Requires read.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fieldId","in":"path"},{"schema":{"type":["boolean","null"]},"required":false,"name":"includeDeleted","in":"query"}],"responses":{"200":{"description":"Custom field","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Custom field ID, UUID"},"eventId":{"type":"string","description":"Event ID"},"label":{"type":"string","description":"Field label"},"type":{"type":"string","description":"text | textArea | multipleText | radioGroup | checkboxGroup | dropdown | singleCheckbox | fileUpload | datePicker | timePicker | phoneField"},"isRequired":{"type":"boolean","description":"Whether field is required"},"isEditableByAttendee":{"type":["boolean","null"],"description":"Whether attendee can edit after submission"},"config":{"description":"Type-specific config (e.g. options for radioGroup/dropdown)"},"contentI18n":{"description":"Translations"},"isDeleted":{"type":"boolean","description":"Soft-deleted (trashed), recoverable via PATCH deletedAt:null"},"deletedAt":{"type":["string","null"],"description":"Soft delete timestamp, null if active"},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","label","type","isRequired","isEditableByAttendee","isDeleted","deletedAt","createdAt","updatedAt"],"description":"Custom field row — per-event definition stored in question_library.questions, soft-deleted (trash, recoverable). Scoped by organizer_api_token (Org or Event, not user)."}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Delete custom field

> Soft delete (trash) — sets deletedAt, recoverable via PATCH deletedAt:null. Requires write.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"custom fields","description":"Custom field definitions per event (question_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"security":[{"organizerApiToken":[]}],"components":{"securitySchemes":{"organizerApiToken":{"type":"http","scheme":"bearer","description":"Organizer API token — Authorization: Bearer evtx_live_… (Org/Event scoped, read/write)."}}},"paths":{"/v2/events/{eventId}/custom-fields/{fieldId}":{"delete":{"tags":["custom fields"],"summary":"Delete custom field","description":"Soft delete (trash) — sets deletedAt, recoverable via PATCH deletedAt:null. Requires write.","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fieldId","in":"path"}],"responses":{"204":{"description":"Deleted (trashed)"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Patch custom field

> Partial update — at least one field. Restore soft-deleted via deletedAt:null. Requires write and human confirmation when via MCP (confirm:true).

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"custom fields","description":"Custom field definitions per event (question_library) — soft-deleted (trash, recoverable via PATCH deletedAt:null), org/event scoped, write needs confirm via MCP"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"security":[{"organizerApiToken":[]}],"components":{"securitySchemes":{"organizerApiToken":{"type":"http","scheme":"bearer","description":"Organizer API token — Authorization: Bearer evtx_live_… (Org/Event scoped, read/write)."}}},"paths":{"/v2/events/{eventId}/custom-fields/{fieldId}":{"patch":{"tags":["custom fields"],"summary":"Patch custom field","description":"Partial update — at least one field. Restore soft-deleted via deletedAt:null. Requires write and human confirmation when via MCP (confirm:true).","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"type":{"type":"string","enum":["text","textArea","multipleText","radioGroup","checkboxGroup","dropdown","singleCheckbox","fileUpload","datePicker","timePicker","phoneField"]},"isRequired":{"type":"boolean"},"isEditableByAttendee":{"type":"boolean"},"config":{},"contentI18n":{},"deletedAt":{"type":["string","null"],"description":"Set null to restore soft-deleted field, ISO string to trash"}},"description":"Partial update — at least one field required. Restore soft-deleted via deletedAt:null. Trash is soft, recoverable."}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Custom field ID, UUID"},"eventId":{"type":"string","description":"Event ID"},"label":{"type":"string","description":"Field label"},"type":{"type":"string","description":"text | textArea | multipleText | radioGroup | checkboxGroup | dropdown | singleCheckbox | fileUpload | datePicker | timePicker | phoneField"},"isRequired":{"type":"boolean","description":"Whether field is required"},"isEditableByAttendee":{"type":["boolean","null"],"description":"Whether attendee can edit after submission"},"config":{"description":"Type-specific config (e.g. options for radioGroup/dropdown)"},"contentI18n":{"description":"Translations"},"isDeleted":{"type":"boolean","description":"Soft-deleted (trashed), recoverable via PATCH deletedAt:null"},"deletedAt":{"type":["string","null"],"description":"Soft delete timestamp, null if active"},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","label","type","isRequired","isEditableByAttendee","isDeleted","deletedAt","createdAt","updatedAt"],"description":"Custom field row — per-event definition stored in question_library.questions, soft-deleted (trash, recoverable). Scoped by organizer_api_token (Org or Event, not user)."}}}},"400":{"description":"Validation","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```
