The caller's current ticket for an edition
The authenticated user's active ticket for the edition — their own registration (`attendee_user_id` = caller) in `pending` (reserved, unpaid) or `confirmed` (paid) state — with its ticket type, so the front can show upgrade options on the more expensive ticket types. `data` is `null` when the caller holds no ticket (normal flow: they buy fresh). Read-only; never transitions state. The upgrade itself is a follow-up — this is only the "what do I hold" read.
/editions/{edition_id}/my-ticketThe authenticated user's active ticket for the edition — their own
registration (attendee_user_id = caller) in pending (reserved,
unpaid) or confirmed (paid) state — with its ticket type, so the
front can show upgrade options on the more expensive ticket types.
data is null when the caller holds no ticket (normal flow: they
buy fresh). Read-only; never transitions state. The upgrade itself
is a follow-up — this is only the "what do I hold" read.
Authorization
bearerAuth JWT issued by IdentityX, signed with Ed25519
In: header
Path Parameters
Edition ID.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/editions/497f6eca-6276-4993-bfeb-53cbbbba6f08/my-ticket"{
"code": 0,
"message": "string",
"error": {
"code": "BAD_REQUEST",
"message": "string",
"fields": [
{
"field": "string",
"message": "string"
}
],
"meta": {},
"debug": {
"raw_error": "string",
"stack_trace": "string"
}
},
"pagination": {
"page": 1,
"limit": 1,
"total": 0,
"has_next": true,
"has_prev": true,
"next_page": 0,
"prev_page": 0
},
"timestamp": "2019-08-24T14:15:22Z",
"module": "string",
"data": {
"registration_id": "7b2966db-5b97-451d-80d4-713d3a44078b",
"ticket_type": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"edition_id": "aeda7fca-56fe-426a-8c37-1876faaaf005",
"name": "string",
"description": "string",
"access_level": 0,
"price_cents": 0,
"max_quantity": 0,
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z"
},
"status": "pending"
}
}{
"code": 0,
"message": "string",
"error": {
"code": "BAD_REQUEST",
"message": "string",
"fields": [
{
"field": "string",
"message": "string"
}
],
"meta": {},
"debug": {
"raw_error": "string",
"stack_trace": "string"
}
},
"timestamp": "2019-08-24T14:15:22Z",
"module": "string"
}{
"code": 0,
"message": "string",
"error": {
"code": "BAD_REQUEST",
"message": "string",
"fields": [
{
"field": "string",
"message": "string"
}
],
"meta": {},
"debug": {
"raw_error": "string",
"stack_trace": "string"
}
},
"timestamp": "2019-08-24T14:15:22Z",
"module": "string"
}{
"code": 0,
"message": "string",
"error": {
"code": "BAD_REQUEST",
"message": "string",
"fields": [
{
"field": "string",
"message": "string"
}
],
"meta": {},
"debug": {
"raw_error": "string",
"stack_trace": "string"
}
},
"timestamp": "2019-08-24T14:15:22Z",
"module": "string"
}Resume a purchase GET
The buyer's single source of truth for a purchase (issue #61: "fonte da verdade: tabela de purchases"): reads `purchases` + `purchase_items` and, when the purchase is still `pending` and carries a Payssage intent, the intent's current status — so a resume surfaces `intent.updated` without polling. Owner-only: the caller must be the purchase's `purchaser_id`; anything else is 404 (no existence leak). Strictly a read — the webhook receiver and the expiry worker own all status changes.
List an edition's ticket types GET
Lists the ticket types available for the edition. Public.