Sign the caller up for an occurrence
Self-service registration (activity registration feature). The caller must hold a confirmed (paid or free) ticket in the occurrence's edition, and the activity's access rules apply: `staff_only` programs require an event staff role, and `min_access_level` gates on the ticket's access level. Inside a transaction the occurrence row is locked, occupancy is checked against `max_capacity`, and a duplicate active registration is rejected (409) — the partial unique index (`uniq_program_participations_active_per_occurrence_attendee`) is the concurrency backstop. Registering is always a fresh row: the participation ledger is append-only, cancelled rows free the slot.
/occurrences/{occurrence_id}/registrationSelf-service registration (activity registration feature). The
caller must hold a confirmed (paid or free) ticket in the
occurrence's edition, and the activity's access rules apply:
staff_only programs require an event staff role, and
min_access_level gates on the ticket's access level. Inside a
transaction the occurrence row is locked, occupancy is checked
against max_capacity, and a duplicate active registration is
rejected (409) — the partial unique index
(uniq_program_participations_active_per_occurrence_attendee) is
the concurrency backstop. Registering is always a fresh row: the
participation ledger is append-only, cancelled rows free the slot.
Authorization
bearerAuth JWT issued by IdentityX, signed with Ed25519
In: header
Path Parameters
Occurrence ID.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/occurrences/497f6eca-6276-4993-bfeb-53cbbbba6f08/registration"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"edition_id": "aeda7fca-56fe-426a-8c37-1876faaaf005",
"occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b",
"registration_id": "7b2966db-5b97-451d-80d4-713d3a44078b",
"status": "registered",
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 401,
"title": "Unauthenticated"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 403,
"title": "Insufficient Role"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 404,
"title": "Not Found"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 409,
"title": "Person Has Ticket"
}{
"detail": "string",
"instance": "../dictionary",
"errors": [
{
"field": "string",
"message": "string"
}
],
"type": "http://example.com",
"status": 500,
"title": "Internal Server Error"
}Delete an occurrence DELETE
Soft-deletes an occurrence. The actor must be an owner or admin of the event.
Cancel the caller's sign-up for an occurrence DELETE
Self-service de-registration. Flips the caller's live participation to `cancelled` (history is kept; a re-registration inserts a fresh row). The spot is locked once attendance is marked: a guarded update only flips rows still in `registered`, so an `attended`/`no_show` participation returns 409. Unknown occurrence or not signed up is 404.