Skip to main content
PATCH

Update Attendee

Updates an attendee (ticket) status. Delegates to the same path the Gomry dashboard uses, so upgrade-flow routing, capacity locks, payment-hold releases and refunds behave exactly as they do there. Requires the attendees:write scope. Rejecting or deleting an attendee who paid refunds them, which also needs payments:read on the key: see Paid attendees are refunded.

Path Parameters

string
required
The unique identifier of the event.
string
required
The unique identifier of the attendee (ticket).

Request Body

string
required
Target status. Allowed values:
  • valid — approve a pending ticket
  • checked_in — mark as scanned at the door
  • pending_approval — return a valid ticket to the approval queue
  • rejected: refuse the attendee. On an unpaid request whose card was only held, the hold is released at no cost. An attendee who paid is refunded in full and needs the refund confirmation below.
  • deleted: soft-delete the ticket (also achievable via DELETE). An attendee who paid is refunded in full and needs the refund confirmation below.
An attendee who was refunded can’t be set back to valid, checked_in or pending_approval: the API answers 409 ticket_refunded, and bringing them back takes a new purchase.
boolean
Send the attendee an email about the status change. Default false.When the change refunds the attendee, this one email also tells them the amount refunded to their card. With false, they still get the standard refund receipt.
string
Custom message included in the notification email (max 10000 chars). Ignored when notify_guest is false.
object
Confirms the refund that rejected or deleted makes on an attendee who paid. Send it on the second request, after a 409 refund_confirmation_required. Ignored when the change refunds nobody.

Response

Returns 200 OK with the updated attendee in the same shape as Get Attendee. After deleted, the attendee is hidden from the API, so the response is just { "data": { "id": "...", "status": "deleted" } }. Setting rejected or deleted on an attendee whose ticket was paid refunds that ticket in full. “Paid” means a captured card payment with money still left on it, whatever the ticket’s status, so a prepaid request still waiting for approval counts too. Your organization covers every fee (the Gomry service fee and card processing): the attendee gets back everything still left on what they paid, and the whole amount comes out of your Gomry balance (the space’s balance the sale was paid into, or Headquarters). There is no option to make the attendee pay the fees, and no way to reject or delete a paid attendee without refunding them. So that no money moves by accident, the change takes two requests:
  1. Send the change as usual. The API answers 409 refund_confirmation_required with the refund quote and changes nothing.
  2. Check the quote, then resend the same request with "refund": { "confirm": true, "quote_id": "<quote.quote_id>" }. The refund is made and the status changes in that request, which answers 200 OK.
A quote_id stands for the exact refunds quoted (payments, amounts and tickets), not for a moment in time. If any of that changes before you confirm (a payment, a refund or a ticket moved), the second request answers 409 refund_quote_changed with the new quote, and nothing changes: confirm the new quote_id. Your balance is not part of the quote_id. What is not refunded. Tickets with no card payment are rejected or deleted exactly as before, with no confirmation step: free and comp tickets, pay-at-door reservations, and requests whose card was only held (the hold is released at no cost). Tickets paid in cash or by an outside card at the door, Gomry Retail resale tickets, tickets paid with a bundle and tickets paid with Gomry credits are not refunded by this endpoint either; a quote counts them in not_refunded. When your balance is too low. The quote shows every balance the refund draws on, with a shortfall above 0 when that balance can’t cover it. A confirmed request with a shortfall answers 409 insufficient_balance and nothing moves. Funds are added by card on the Gomry dashboard (Payments, then Add funds); deposits can’t be made with an API key. Once the deposit lands, resend the confirmed request. Permission. A refund spends your organization’s balance, so the key needs read access to payments (the API’s match for the dashboard’s refund permission) as well as attendees:write. Without it, a paid attendee answers 403 refund_permission_required and nothing changes. Rejecting or deleting attendees who didn’t pay works without it. What the attendee receives. With notify_guest: true, one email: “not accepted” for rejected, “your registration was cancelled” for deleted, each with the amount refunded to their card and a note that refunds usually show on a statement within 5 to 10 business days. With notify_guest: false (or, for rejected, when the event has rejection emails turned off), they get the standard refund receipt instead.

Refund Quote

object
Sent with 409 refund_confirmation_required, 409 refund_quote_changed and 409 insufficient_balance. Amounts are decimals in major units of each currency (53.4 is €53.40).

Errors

  • 400 Validation failed — invalid body shape.
  • 404 Attendee not found — ticket missing or not owned by your org.
  • 422 — the underlying transition was rejected (e.g. you tried to approve a ticket whose pending upgrade was cancelled). The response error field carries the reason.
Refund answers carry a machine-readable code in error and an explanation in message. In every one of them except refund_failed, nothing changed.
  • 409 refund_confirmation_required: the attendee paid. The body carries the quote; resend with refund.confirm and refund.quote_id.
  • 409 refund_quote_changed: the refund changed since it was quoted. The body carries the new quote; confirm its quote_id.
  • 409 insufficient_balance: the balance can’t cover the refund. The body carries the quote, whose balances[].shortfall says how much is missing. Add funds on the dashboard (Payments, then Add funds), then resend.
  • 403 refund_permission_required: the attendee paid and the key has no read access to payments.
  • 502 refund_failed: the payment provider refused a refund after every check passed. refunded lists the refunds that did go through first (payment_id, amount, currency); their tickets are already in their final status. Retry: the next attempt quotes only what is left.
  • 409 ticket_refunded: the attendee was refunded, so they can’t be set back to valid, checked_in or pending_approval.