> ## Documentation Index
> Fetch the complete documentation index at: https://docs.r28.ai/charter/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Charter works for any HTTP API, including the user's own. The packs are examples of the result, not the limit: an API with no pack is declared the same way, following https://raw.githubusercontent.com/r28ai/charter/main/docs/.mintlify/skills/declaring-charter-tools/SKILL.md.
> Charter is for agents that act in customers' accounts: every call is checked field by field before it's sent, the app says whose account each call is for, and the same declarations list what each tool can reach. https://docs.r28.ai/charter/llms.txt says what it is and lists every page.

# events_guests_update_tickets

> Add or remove tickets from an existing guest. Added tickets are complimentary. Removed tickets are invalidated and, if `should_refund` is set, refunded for what the guest paid for them; otherwise no money moves. You can’t change tickets for guests with pending payment holds. Administrative ticket changes can exceed event or ticket-type capacity.

POST`https://public-api.luma.com/v1/events/guests/update-tickets`

```python luma_events_guests_update_tickets.py theme={null}
import asyncio

from charter.packs import luma

result = asyncio.run(luma.events_guests_update_tickets.ainvoke({"eventId": ..., "guestId": ...}))
```

## Body

| Field | Type | Description |
| - | - | - |
| `eventId` \* | `string` | Event ID, this usually starts with evt- |
| `guestId` \* | `string` | Guest identifier — the guest ID (gst-), a ticket key, a guest key (g-), or the user's email. |
| `ticketIdsToRemove` | `string`\[] | Existing ticket IDs to invalidate. At least one valid ticket must remain on the guest. Pass `should_refund` to refund the removed tickets. Defaults to `[]` when omitted. |
| `shouldRefund` | `boolean` | Optional. Refund each removed paid ticket for what the guest paid for it. The guest stays registered with their remaining tickets. The refund is limited to what's left on the order beyond the tickets the guest keeps, so a partial refund already issued from the dashboard isn't paid out again. Crypto payments can't be refunded this way. Defaults to false. |
| `ticketsToAdd` | [TicketsToAddItem](https://docs.r28.ai/charter/charter/packs/luma/events/objects.md#ticketstoadditem)\[] | Complimentary tickets to grant. Each entry creates a new \$0 administrative ticket, even when the ticket type is normally paid. Defaults to `[]` when omitted. |
| `sendEmail` | `boolean` | Optional. Whether Luma may email the guest about the ticket change, including the refund receipt when `should_refund` is set. Defaults to true and still respects their notification preferences. This only controls email — the guest still gets an in-app notification, and push follows their preferences. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.