Skip to content

Event endpoints

Both endpoints are unauthenticated, read-only GETs, scoped to one venue by the {slug} path segment. The JSON below comes straight from test-asserted fixtures: real API output, not hand-maintained examples.

List events

GET /t/{slug}/api/events

Returns the venue's publicly listed events, soonest first, 12 to a page: published events plus cancelled events the venue still lists, dated today or later in the venue's timezone. Responses are wrapped in the pagination envelope described in the introduction.

bash
curl -s https://platypus.tickets/t/nbt/api/events
json
{
    "data": [
        {
            "type": "events",
            "id": "1",
            "attributes": {
                "title": "An Evening of One-Act Plays",
                "slug": "an-evening-of-one-act-plays-2030-03-14",
                "category": "Drama",
                "event_date": "2030-03-14T00:00:00.000000Z",
                "event_time": "19:30:00",
                "date_mode": "single",
                "occurrence_count": 0,
                "next_occurrence": null,
                "occurrences": [],
                "description": "Four short plays from local writers, performed back to back with one interval.",
                "location": "Main Stage",
                "over_18": false,
                "publish_status": "published",
                "tickets_enabled": true,
                "show_images": true,
                "small_image_path": null,
                "cancellation_reason": null,
                "cancelled_at": null,
                "ticket_office": {
                    "status": "open",
                    "reason": null,
                    "closes_at": null,
                    "closed_at": null,
                    "message": null
                }
            },
            "links": {
                "self": "https://platypus.tickets/t/nbt/api/events/1"
            }
        },
        {
            "type": "events",
            "id": "2",
            "attributes": {
                "title": "The Long Run",
                "slug": "the-long-run-2030-04-05",
                "category": "Comedy",
                "event_date": "2030-04-05T00:00:00.000000Z",
                "event_time": "19:30:00",
                "date_mode": "multiple",
                "occurrence_count": 3,
                "next_occurrence": {
                    "occurrence_date": "2030-04-05",
                    "time_label": "7:30 PM",
                    "location_label": "Main Stage",
                    "status": "scheduled"
                },
                "occurrences": [
                    {
                        "occurrence_date": "2030-04-05",
                        "time_label": "7:30 PM",
                        "location_label": "Main Stage",
                        "status": "scheduled"
                    },
                    {
                        "occurrence_date": "2030-04-06",
                        "time_label": "7:30 PM",
                        "location_label": "Main Stage",
                        "status": "scheduled"
                    },
                    {
                        "occurrence_date": "2030-04-07",
                        "time_label": "2:00 PM",
                        "location_label": "Main Stage",
                        "status": "scheduled"
                    }
                ],
                "description": "A three-night season of our award season favourite.",
                "location": "Main Stage",
                "over_18": false,
                "publish_status": "published",
                "tickets_enabled": true,
                "show_images": true,
                "small_image_path": null,
                "cancellation_reason": null,
                "cancelled_at": null,
                "ticket_office": {
                    "status": "open",
                    "reason": null,
                    "closes_at": null,
                    "closed_at": null,
                    "message": null
                }
            },
            "links": {
                "self": "https://platypus.tickets/t/nbt/api/events/2"
            }
        }
    ],
    "links": {
        "first": "https://platypus.tickets/t/nbt/api/events?page=1",
        "last": "https://platypus.tickets/t/nbt/api/events?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "page": null,
                "active": false
            },
            {
                "url": "https://platypus.tickets/t/nbt/api/events?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "page": null,
                "active": false
            }
        ],
        "path": "https://platypus.tickets/t/nbt/api/events",
        "per_page": 12,
        "to": 2,
        "total": 2
    }
}

Get one event

GET /t/{slug}/api/events/{id}

{id} is the numeric event id: take it from the id in the index response, or follow the links.self URL directly. Unknown ids, drafts, private events, and hidden-cancelled events all return 404.

bash
curl -s https://platypus.tickets/t/nbt/api/events/1
json
{
    "data": {
        "type": "events",
        "id": "1",
        "attributes": {
            "title": "An Evening of One-Act Plays",
            "slug": "an-evening-of-one-act-plays-2030-03-14",
            "category": "Drama",
            "event_date": "2030-03-14T00:00:00.000000Z",
            "event_time": "19:30:00",
            "date_mode": "single",
            "occurrence_count": 0,
            "next_occurrence": null,
            "occurrences": [],
            "description": "Four short plays from local writers, performed back to back with one interval.",
            "location": "Main Stage",
            "over_18": false,
            "publish_status": "published",
            "tickets_enabled": true,
            "show_images": true,
            "small_image_path": null,
            "cancellation_reason": null,
            "cancelled_at": null,
            "ticket_office": {
                "status": "open",
                "reason": null,
                "closes_at": null,
                "closed_at": null,
                "message": null
            }
        },
        "links": {
            "self": "https://platypus.tickets/t/nbt/api/events/1"
        }
    }
}

Attributes

AttributeTypeNotes
titlestringEvent title
slugstringURL slug of the public event page (/t/{slug}/events/{event-slug})
categorystringVenue-chosen category label (e.g. Drama)
event_datestringEvent date as a datetime string. For multiple-mode events this mirrors the current/next stop and advances as stops pass
event_timestringHH:MM:SS. Mirrors the current stop for multiple-mode events
date_modestringsingle or multiple
occurrence_countintegerNumber of stops. Always 0 for single-mode events
next_occurrenceobject | nullCompact occurrence the venue is pointing at now (see below); null in single mode
occurrencesarrayAll stops in date order (see below). Empty ([]) for single-mode events
descriptionstringEvent description; may contain HTML authored in the admin editor
locationstringVenue/location label
over_18booleanAge-restriction flag
publish_statusstringpublished or cancelled (drafts are never returned)
tickets_enabledbooleanWhether ticketing is configured for the event. Read ticket_office for whether online sales are open right now
show_imagesbooleanWhether the venue wants event imagery shown
small_image_pathstring | nullPath of the event image, or null
cancellation_reasonstring | nullSet when publish_status is cancelled
cancelled_atstring | nullISO-8601 timestamp of cancellation
ticket_officeobjectWhether online sales are open right now, and if not, why (see below)

Ticket Office

The ticket_office object says whether the venue's online sales for the event are open at the moment of the request. Render your own buy affordance from status rather than from publish_status and tickets_enabled, which describe configuration, not sellability.

FieldTypeNotes
statusstringopen or closed
reasonstring | nullnull while open. While closed: manual (the venue closed it), scheduled (a scheduled closure fired), event_ended (a single-date event's day has passed), cancelled, or not_ticketed
closes_atstring | nullISO-8601 UTC instant of a scheduled closure, present while one is pending or after it fired
closed_atstring | nullISO-8601 UTC instant the office closed, for manual and scheduled
messagestring | nullThe venue's plain-text line for buyers, only while reason is manual or scheduled. Escape it before rendering

While a closure is pending, status stays open and closes_at carries the deadline, so a consumer can show it ahead of time.

Multi-date events

When a venue schedules an event across several dates (date_mode: "multiple"), every stop is embedded in the event itself. There is no separate occurrences endpoint to call. Each compact occurrence carries occurrence_date (YYYY-MM-DD), time_label, location_label, and status (scheduled or cancelled). next_occurrence points at the nearest upcoming stop, and the flat event_date/event_time mirror it.

bash
curl -s https://platypus.tickets/t/nbt/api/events/2
json
{
    "data": {
        "type": "events",
        "id": "2",
        "attributes": {
            "title": "The Long Run",
            "slug": "the-long-run-2030-04-05",
            "category": "Comedy",
            "event_date": "2030-04-05T00:00:00.000000Z",
            "event_time": "19:30:00",
            "date_mode": "multiple",
            "occurrence_count": 3,
            "next_occurrence": {
                "occurrence_date": "2030-04-05",
                "time_label": "7:30 PM",
                "location_label": "Main Stage",
                "status": "scheduled"
            },
            "occurrences": [
                {
                    "occurrence_date": "2030-04-05",
                    "time_label": "7:30 PM",
                    "location_label": "Main Stage",
                    "status": "scheduled"
                },
                {
                    "occurrence_date": "2030-04-06",
                    "time_label": "7:30 PM",
                    "location_label": "Main Stage",
                    "status": "scheduled"
                },
                {
                    "occurrence_date": "2030-04-07",
                    "time_label": "2:00 PM",
                    "location_label": "Main Stage",
                    "status": "scheduled"
                }
            ],
            "description": "A three-night season of our award season favourite.",
            "location": "Main Stage",
            "over_18": false,
            "publish_status": "published",
            "tickets_enabled": true,
            "show_images": true,
            "small_image_path": null,
            "cancellation_reason": null,
            "cancelled_at": null,
            "ticket_office": {
                "status": "open",
                "reason": null,
                "closes_at": null,
                "closed_at": null,
                "message": null
            }
        },
        "links": {
            "self": "https://platypus.tickets/t/nbt/api/events/2"
        }
    }
}

Hitting CORS errors when you call these endpoints from a browser? The CORS rules in the introduction explain which origins are allowed and where the fix lives.

Platypus.Tickets reference documentation. Contact & support.