> 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/attendee-addons.md).

# Attendee Addons

Attendee addon selection

## List attendee addons

> Returns all addon items for a specific attendee within an event. Each addon represents the attendee's selection of a ticket class add-on, including quantity and selection status.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"attendee addons","description":"Attendee addon selection"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"paths":{"/v2/events/{eventId}/attendees/{attendeeId}/addons":{"get":{"tags":["attendee addons"],"summary":"List attendee addons","description":"Returns all addon items for a specific attendee within an event. Each addon represents the attendee's selection of a ticket class add-on, including quantity and selection status.","parameters":[{"schema":{"type":"string","format":"uuid","description":"Event UUID"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Attendee UUID"},"required":true,"name":"attendeeId","in":"path"}],"responses":{"200":{"description":"Array of addon items belonging to the attendee","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"claimedByAttendeeId":{"type":["string","null"]},"orderItemId":{"type":["string","null"]},"addOnId":{"type":"string"},"qty":{"type":"number"},"selectionStatus":{"type":["string","null"]},"waitlistedAt":{"type":["string","null"]},"confirmedAt":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","claimedByAttendeeId","orderItemId","addOnId","qty","selectionStatus","waitlistedAt","confirmedAt","createdAt","updatedAt"],"description":"Attendee addon row — represents an attendee's selected addon item within an event"}}}}},"401":{"description":"Unauthorized — missing or invalid JWT","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden — user is not an organiser of this event","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Create an attendee addon

> Adds a new addon selection for an attendee. The addon is linked to a ticket class add-on ID and starts with a selection status (default: regular).

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"attendee addons","description":"Attendee addon selection"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"paths":{"/v2/events/{eventId}/attendees/{attendeeId}/addons":{"post":{"tags":["attendee addons"],"summary":"Create an attendee addon","description":"Adds a new addon selection for an attendee. The addon is linked to a ticket class add-on ID and starts with a selection status (default: regular).","parameters":[{"schema":{"type":"string","format":"uuid","description":"Event UUID"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Attendee UUID"},"required":true,"name":"attendeeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"addOnId":{"type":"string","format":"uuid","description":"The ticket class add-on ID that this attendee has selected"},"qty":{"type":"integer","minimum":1,"default":1,"description":"Quantity of this addon selected"},"selectionStatus":{"type":"string","enum":["regular","confirmed","waitlisted"],"default":"regular","description":"Initial selection status"}},"required":["addOnId"]}}}},"responses":{"201":{"description":"Addon item created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"claimedByAttendeeId":{"type":["string","null"]},"orderItemId":{"type":["string","null"]},"addOnId":{"type":"string"},"qty":{"type":"number"},"selectionStatus":{"type":["string","null"]},"waitlistedAt":{"type":["string","null"]},"confirmedAt":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","claimedByAttendeeId","orderItemId","addOnId","qty","selectionStatus","waitlistedAt","confirmedAt","createdAt","updatedAt"],"description":"Attendee addon row — represents an attendee's selected addon item within an event"}}}},"400":{"description":"Validation error — invalid request body","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"401":{"description":"Unauthorized — missing or invalid JWT","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden — user is not an organiser of this event","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Get attendee addon by ID

> Returns a single addon item by its ID, scoped to a specific attendee and event.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"attendee addons","description":"Attendee addon selection"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"paths":{"/v2/events/{eventId}/attendees/{attendeeId}/addons/{addOnId}":{"get":{"tags":["attendee addons"],"summary":"Get attendee addon by ID","description":"Returns a single addon item by its ID, scoped to a specific attendee and event.","parameters":[{"schema":{"type":"string","format":"uuid","description":"Event UUID"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Attendee UUID"},"required":true,"name":"attendeeId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Addon item UUID"},"required":true,"name":"addOnId","in":"path"}],"responses":{"200":{"description":"Addon item","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"claimedByAttendeeId":{"type":["string","null"]},"orderItemId":{"type":["string","null"]},"addOnId":{"type":"string"},"qty":{"type":"number"},"selectionStatus":{"type":["string","null"]},"waitlistedAt":{"type":["string","null"]},"confirmedAt":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","claimedByAttendeeId","orderItemId","addOnId","qty","selectionStatus","waitlistedAt","confirmedAt","createdAt","updatedAt"],"description":"Attendee addon row — represents an attendee's selected addon item within an event"}}}},"401":{"description":"Unauthorized — missing or invalid JWT","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden — user is not an organiser of this event","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 — addon item does not exist for this attendee","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```

## Update attendee addon

> Updates an attendee addon item. Accepts optional fields: selection\_status (with transition validation), qty, and addOnId. At least one field must be provided. Valid status transitions: regular→waitlisted, waitlisted→confirmed, confirmed→waitlisted.

```json
{"openapi":"3.1.0","info":{"title":"EventX Public API v2","version":"v2"},"tags":[{"name":"attendee addons","description":"Attendee addon selection"}],"servers":[{"url":"https://api.eventx.io","description":"EventX Public API server"}],"paths":{"/v2/events/{eventId}/attendees/{attendeeId}/addons/{addOnId}":{"patch":{"tags":["attendee addons"],"summary":"Update attendee addon","description":"Updates an attendee addon item. Accepts optional fields: selection_status (with transition validation), qty, and addOnId. At least one field must be provided. Valid status transitions: regular→waitlisted, waitlisted→confirmed, confirmed→waitlisted.","parameters":[{"schema":{"type":"string","format":"uuid","description":"Event UUID"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Attendee UUID"},"required":true,"name":"attendeeId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"Addon item UUID"},"required":true,"name":"addOnId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selection_status":{"type":"string","enum":["confirmed","waitlisted"],"description":"New selection status. Transitions: regular→waitlisted, waitlisted→confirmed, confirmed→waitlisted. See route description for status meanings."},"qty":{"type":"integer","minimum":1,"description":"New quantity"},"addOnId":{"type":"string","format":"uuid","description":"New add-on ID"}}}}}},"responses":{"200":{"description":"Addon item updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"claimedByAttendeeId":{"type":["string","null"]},"orderItemId":{"type":["string","null"]},"addOnId":{"type":"string"},"qty":{"type":"number"},"selectionStatus":{"type":["string","null"]},"waitlistedAt":{"type":["string","null"]},"confirmedAt":{"type":["string","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","eventId","claimedByAttendeeId","orderItemId","addOnId","qty","selectionStatus","waitlistedAt","confirmedAt","createdAt","updatedAt"],"description":"Attendee addon row — represents an attendee's selected addon item within an event"}}}},"400":{"description":"Validation error or invalid status transition","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"401":{"description":"Unauthorized — missing or invalid JWT","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}},"403":{"description":"Forbidden — user is not an organiser of this event","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 — addon item does not exist for this attendee","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"number"},"meta":{}},"required":["code","message","status"]}}}}}}}}}
```
