---
description: "Edit attendee contact fields and answers, change products, manage archived questions, and resend tickets."
group: "Resources"
order: 21
---

# Attendee management

Update registration data while preserving event and order relationships.

## Read before editing {#read-before-editing}

Read `/{event_id}/order_lines/edit_data/{attendee_id}.json` for the current attendee, answers, question definitions and order/product context. A purchased attendee has an archived question snapshot; changing a live product definition does not automatically rewrite it. Order payment state determines whether editing is allowed.

## Save contact fields and answers {#save-contact-fields-and-answers}

PUT `/{event_id}/order_lines/save/{attendee_id}.json` with `OrderLine`. Writable contact fields are `title`, `firstname`, `lastname`, `email` and `phone`. Answers use allowed current/historical question UUIDs as keys inside that same object.

```
{"OrderLine":{"firstname":"Alex","lastname":"Example","email":"alex@example.com","77777777-7777-4777-8777-777777777777":"Vegetarian"}}
```

Replace the example question UUID with a question supplied by attendee detail. File answers are skipped by this edit path. A submitted `id` must match the route. Success is `{"ok":true,"data":{"id":"..."}}`; validation uses 400, missing/inaccessible attendees 404, and non-editable orders 409.

## Attendee write fields {#attendee-write-fields}

[Question types and answers](/en-us/docs/question-types.md) documents selected-label arrays, Other objects, workshop option keys and date/time strings. Existing paid-question snapshots are preserved by the save action. It deliberately bypasses extra-question validation; validate values against the attendee's returned current/historical definition. Omitted answers keep their stored values.

| Writable field inside OrderLine | Rule |
| --- | --- |
| `id` | Optional; must match the route attendee UUID when supplied. |
| `title`, `firstname`, `lastname`, `phone` | Contact strings; send the fields you intend to change. Organizer contact validation still applies. |
| `email` | Email string; invalid values return HTTP 400 validation errors. |
| Question UUID | Scalar, choice array or Other object according to its definition. Only permitted current/historical IDs are extracted; files and paid snapshots are protected. |
| `product_id`, `order_id`, associations | Not writable here. Use the separate eligible-product/change-product action to change tickets. |

## Change the ticket product {#change-the-ticket-product}

Read `GET /{event_id}/order_lines/eligible_products.json`, then POST `/{event_id}/order_lines/edit_product/{attendee_id}.json` with `{"OrderLine":{"product_id":"..."}}` and optional `event_date`. The new product must be eligible in the same event. Date, archived question and order-state checks apply; inspect `ok` and refresh attendee detail afterwards.

## Manage archived questions {#manage-archived-questions}

POST these actions with the attendee and question UUIDs in the path. They update the attendee's archived registration snapshot and enforce event ownership and editable order state.

-   `/{event_id}/order_lines/add_question/{attendee_id}/{question_id}.json` adds an applicable question.
-   `/{event_id}/order_lines/update_question/{attendee_id}/{question_id}.json` refreshes it from the current definition.
-   `/{event_id}/order_lines/delete_question/{attendee_id}/{question_id}.json` removes it from that attendee.

## Deliver the ticket {#deliver-the-ticket}

POST `/{event_id}/order_lines/resend_one_ticket/{attendee_id}.json` to queue an individual ticket email. Delivery depends on the current ticket/order state. Require `ok:true`; don't replay an uncertain request automatically. Organizer detail can report mail-delivery problems, but queue acceptance is not final delivery confirmation.

Use [check-in](/en-us/docs/check-in.md) to record attendance and [exports](/en-us/docs/exports.md) to download attendee records.
