Skip to main content
DELETE

Delete Attendee

Soft-deletes a single attendee (ticket). Routes through the same canonical action as PATCH { status: "deleted" }, so statusChangeHistory, payment-hold releases and refunds behave exactly as they do on the dashboard. An attendee who paid is refunded in full first, and the delete needs a refund confirmation: see Paid attendees are refunded. Requires the attendees:write scope. Deleting an attendee who paid also needs payments:read on the key.

Path Parameters

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

Query Parameters

For clients that can’t send a body with DELETE, the refund confirmation can go in the query string instead.
boolean
true confirms the refund. Only read together with quote_id.
string
quote.quote_id from the 409 refund_confirmation_required answer.

Request Body

The body is optional. Send one only to confirm a refund.
object
Confirms the refund the delete makes on an attendee who paid. Send it on the second request, after a 409 refund_confirmation_required. Ignored when the delete refunds nobody. Any other body field answers 400 Validation failed.

Response

Returns 200 OK with:
A deleted attendee is hidden from the API afterwards: Get Attendee answers 404. Deleting an attendee whose ticket was paid (a captured card payment with money still left on it, whatever the ticket’s status) refunds that ticket in full. Your organization covers every fee (the Gomry service fee and card processing), and the whole amount comes out of your Gomry balance. There is no way to delete a paid attendee without refunding them. The steps are the same as on Update Attendee:
  1. Send the DELETE. The API answers 409 refund_confirmation_required with the refund quote and changes nothing.
  2. Resend it with { "refund": { "confirm": true, "quote_id": "<quote.quote_id>" } } as the body, or with ?confirm_refund=true&quote_id=<quote.quote_id>. The refund is made and the attendee deleted in that request.
The quote’s fields, what is left out of a refund (cash, resale, bundle and credit payments) and what happens when your balance is too low are described in Update Attendee. Unpaid attendees (free, comp, pay-at-door, or a request whose card was only held) are deleted exactly as before, with no confirmation. DELETE sends no status email, so a refunded attendee gets the standard refund receipt for the amount returned to their card. To send them the “your registration was cancelled” email with the refund in it instead, use PATCH with status: "deleted" and notify_guest: true.

Errors

  • 404 Attendee not found — ticket missing or not owned by your org.
  • 422 — the underlying delete was rejected (e.g. the ticket is part of an in-flight upgrade flow). The response error field carries the reason.
  • 400 Validation failed: the body was sent but isn’t { "refund": { "confirm": true, "quote_id": "..." } }.
  • 409 refund_confirmation_required: the attendee paid. The body carries the quote; resend with the confirmation. Nothing changed.
  • 409 refund_quote_changed: the refund changed since it was quoted. The body carries the new quote; confirm its quote_id. Nothing changed.
  • 409 insufficient_balance: the balance can’t cover the refund (see quote.balances[].shortfall). Add funds on the dashboard (Payments, then Add funds), then resend; deposits can’t be made with an API key. Nothing changed.
  • 403 refund_permission_required: the attendee paid and the key has no read access to payments. Nothing changed.
  • 502 refund_failed: the payment provider refused a refund after every check passed. refunded lists the refunds that went through first (payment_id, amount, currency). Retry: the next attempt quotes only what is left.