EventIO API Documentation
Welcome to the EventIO API documentation. This API provides read-only access to event management data including events, tickets, bookings, groups, and customers.
Base URL
https://api.eventio.uk/api/v2
API Version
Current version: 2.0.0
Authentication
The EventIO API uses Bearer Token authentication via Laravel Sanctum.
All API requests must include a valid access token in the Authorization header.
Obtaining an Access Token
Access tokens are created through the EventIO dashboard or by an administrator. Contact your system administrator to obtain API credentials for your account.
Using Your Token
Include the token in the Authorization header of every request:
Authorization: Bearer YOUR_API_TOKEN
Example Request
curl -X GET "https://api.eventio.uk/api/v2/events" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json"
Token Expiration
Access tokens may have an expiration date set by your administrator.
If your token expires, you will receive a 401 Unauthorized response.
Contact your administrator to obtain a new token.
Token Abilities
Tokens can be scoped with specific abilities that limit what actions can be performed. Common abilities include:
*- Full access (all permissions)event.read- Read event databookings.read- Read booking datagroups.read- Read group datacustomers.read- Read customer dataroles.read- Read role datausers.read- Read user data
Query Parameters
The API supports flexible querying through filter, sort, and include parameters powered by Spatie Query Builder.
Filtering
Filter results using the filter parameter:
# Exact match
GET /api/v2/events?filter[slug]=conference-2026
# Partial match (where supported)
GET /api/v2/events?filter[name]=Annual
# Multiple filters
GET /api/v2/event/1/bookings?filter[status]=confirmed&filter[booking_type]=participant
Sorting
Sort results using the sort parameter. Prefix with - for descending order:
# Ascending
GET /api/v2/events?sort=start_date
# Descending
GET /api/v2/events?sort=-start_date
# Multiple sorts
GET /api/v2/event/1/bookings?sort=-created_at,status
Including Relations
Include related data using the include parameter:
# Single include
GET /api/v2/events?include=tickets
# Multiple includes
GET /api/v2/event/1/bookings?include=tickets,group
# Nested includes
GET /api/v2/event/1/bookings?include=tickets.ticket,group.customer
Error Handling
The API uses standard HTTP status codes to indicate success or failure:
| Status Code | Description |
|---|---|
200 OK |
Request successful |
401 Unauthorized |
Missing or invalid authentication token |
403 Forbidden |
Insufficient permissions for the requested resource |
404 Not Found |
Requested resource does not exist |
422 Unprocessable Entity |
Validation error (invalid query parameters) |
500 Internal Server Error |
Server error - contact support |
Error Response Format
{
"message": "Description of the error",
"errors": {
"field_name": [
"Specific error message"
]
}
}
User
Retrieve information about the currently authenticated user.
/api/v2/user
Description
Get the authenticated user's profile information.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
eventId |
integer | Optional. Include to get the user's role for a specific event. |
Response
{
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
}
With Event Role
GET /api/v2/user?eventId=1
{
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"event_role": {
"id": 1,
"title": "Event Manager"
}
}
Events
Access event information and statistics.
/api/v2/events
Description
List all events accessible to the authenticated user.
Filters
filter[id]- Exact match by IDfilter[slug]- Exact match by slugfilter[name]- Partial match by namefilter[start_date]- Exact match by start datefilter[end_date]- Exact match by end date
Sorts
id,slug,name,start_date,end_date
Includes
tickets- Include event ticketsbookings- Include event bookings
Response
{
"data": [
{
"id": 1,
"slug": "conference-2026",
"name": "Annual Conference 2026",
"start_date": "2026-06-15",
"end_date": "2026-06-17"
}
]
}
/api/v2/event/{eventId}
Requires: event.read
Description
Get details for a specific event.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
eventId |
integer | The event ID |
Response
{
"data": {
"id": 1,
"slug": "conference-2026",
"name": "Annual Conference 2026",
"start_date": "2026-06-15",
"end_date": "2026-06-17"
}
}
/api/v2/event/{eventId}/stats
Requires: event.read
Description
Get booking statistics for an event.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
no-cache |
flag | Force refresh of cached statistics |
ticketId |
integer | Filter stats by ticket ID |
ticket |
string | Filter stats by ticket title (partial match) |
participant_type |
string | Filter stats by participant type |
Response
{
"event_id": 1,
"event_name": "Annual Conference 2026",
"stats": [
{
"id": 1,
"participant_type": "adult",
"title": "Adult Ticket",
"total_confirmed_tickets_sold": 150,
"total_provisional_tickets_sold": 25
}
],
"total_confirmed": 150,
"total_provisional": 175,
"generated_at": "2026-01-15T10:30:00+00:00"
}
Tickets
Access ticket information for events.
/api/v2/event/{eventId}/tickets
Requires: event.read
Description
List all tickets for an event.
Filters
filter[id]- Exact match by IDfilter[title]- Partial match by titlefilter[participant_type]- Exact match by participant type
Sorts
id,title,price,seq
Includes
event- Include parent event
Response
{
"data": [
{
"id": 1,
"event_id": 1,
"title": "Adult Ticket",
"participant_type": "adult",
"price": "99.00"
}
]
}
/api/v2/event/{eventId}/tickets/{ticketId}
Requires: event.read
Description
Get a specific ticket.
Response
{
"data": {
"id": 1,
"event_id": 1,
"title": "Adult Ticket",
"participant_type": "adult",
"price": "99.00"
}
}
Bookings
Access booking information for events.
/api/v2/event/{eventId}/bookings
Requires: bookings.read
Description
List all active bookings for an event. Returns bookings with status: provisional, confirmed, or waiting_list.
Filters
filter[id]- Exact match by IDfilter[reference]- Exact match by booking referencefilter[status]- Exact match by status (provisional, confirmed, waiting_list)filter[booking_type]- Exact match by booking typefilter[group_id]- Exact match by group ID
Sorts
id,created_at,status,booking_reference
Includes
tickets- Include booking ticket linestickets.ticket- Include ticket details for each booking ticketgroup- Include associated groupgroup.customer- Include group's customer
Response
{
"data": [
{
"id": 1,
"event_id": 1,
"booking_type": "participant",
"booking_reference": "EVT-ABC123",
"status": "confirmed",
"created_at": "2026-01-10T14:30:00.000000Z"
}
]
}
/api/v2/event/{eventId}/bookings/{bookingId}
Requires: bookings.read
Description
Get a specific booking.
Example with Includes
GET /api/v2/event/1/bookings/1?include=tickets,group.customer
{
"data": {
"id": 1,
"event_id": 1,
"booking_type": "participant",
"booking_reference": "EVT-ABC123",
"status": "confirmed",
"created_at": "2026-01-10T14:30:00.000000Z",
"tickets": [
{
"id": 1,
"booking_id": 1,
"ticket_id": 1,
"qty": 2,
"price": "198.00"
}
],
"group": {
"id": 1,
"name": "ACME Corp",
"customer": {
"id": 1,
"full_name": "Jane Smith",
"email_address": "jane@acme.com"
}
}
}
}
Booking Tickets
Access individual ticket lines within a booking.
/api/v2/event/{eventId}/bookings/{bookingId}/tickets
Requires: bookings.read
Description
List all ticket lines for a booking.
Filters
filter[id]- Exact match by IDfilter[ticket_id]- Exact match by ticket type ID
Sorts
id,ticket_id,qty,price
Includes
booking- Include parent bookingticket- Include ticket type detailsticket.event- Include ticket's event
Response
{
"data": [
{
"id": 1,
"booking_id": 1,
"ticket_id": 1,
"ticket_title": "Adult Ticket",
"participant_type": "adult",
"qty": 2,
"price": "198.00"
}
]
}
/api/v2/event/{eventId}/bookings/{bookingId}/tickets/{bookingTicketId}
Requires: bookings.read
Description
Get a specific booking ticket line.
Groups
Access group information for events.
/api/v2/event/{eventId}/groups
Requires: groups.read
Description
List all groups for an event.
Filters
filter[id]- Exact match by IDfilter[name]- Partial match by namefilter[association]- Partial match by associationfilter[customer_id]- Exact match by customer ID
Sorts
id,name,association
Includes
customer- Include group's customerbookings- Include group's bookingsbookings.tickets- Include booking ticket linesevent- Include parent event
Response
{
"data": [
{
"id": 1,
"event_id": 1,
"name": "ACME Corporation",
"association": "Corporate Partner"
}
]
}
/api/v2/event/{eventId}/groups/{groupId}
Requires: groups.read
Description
Get a specific group.
/api/v2/event/{eventId}/groups/{groupId}/bookings
Requires: groups.read + bookings.read
Description
List all bookings for a specific group.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
include_cancelled |
flag | Include cancelled bookings in results |
Filters
filter[id]- Exact match by IDfilter[status]- Exact match by statusfilter[booking_type]- Exact match by booking type
Includes
tickets- Include booking ticketstickets.ticket- Include ticket details
Customers
Access customer information.
/api/v2/event/{eventId}/customers
Requires: customers.read
Description
List all customers associated with an event (via groups).
Filters
filter[id]- Exact match by IDfilter[email]- Partial match by emailfilter[first_name]- Partial match by first namefilter[last_name]- Partial match by last namefilter[post_code]- Partial match by post code
Sorts
id,email,first_name,last_name
Includes
groups- Include customer's groupsgroups.event- Include group eventsgroups.bookings- Include group bookings
Response
{
"data": [
{
"id": 1,
"full_name": "Jane Smith",
"email_address": "jane@example.com",
"post_code": "SW1A 1AA"
}
]
}
/api/v2/event/{eventId}/customers/{customerId}
Requires: customers.read
Description
Get a specific customer.
Event Roles
Access role definitions for events.
/api/v2/event/{eventId}/roles
Requires: roles.read
Description
List all roles defined for an event.
Filters
filter[id]- Exact match by IDfilter[title]- Partial match by title
Sorts
id,title
Includes
event- Include parent eventpermissions- Include role permissionseventUsers- Include users with this roleeventUsers.user- Include user details
Response
{
"data": [
{
"id": 1,
"title": "Event Manager"
}
]
}
With Permissions
GET /api/v2/event/1/roles?include=permissions
{
"data": [
{
"id": 1,
"title": "Event Manager",
"permissions": [
{
"id": 1,
"event_role_id": 1,
"area": "event",
"permission": "admin"
},
{
"id": 2,
"event_role_id": 1,
"area": "bookings",
"permission": "write"
}
]
}
]
}
/api/v2/event/{eventId}/roles/{roleId}
Requires: roles.read
Description
Get a specific role.
Event Users
Access user assignments for events.
/api/v2/event/{eventId}/users
Requires: users.read
Description
List all user assignments for an event.
Filters
filter[id]- Exact match by IDfilter[user_id]- Exact match by user IDfilter[event_role_id]- Exact match by role IDfilter[active]- Filter by active status (true/false)
Sorts
id,user_id,event_role_id,active
Includes
user- Include user detailsevent- Include event detailsrole- Include role detailsrole.permissions- Include role permissions
Response
{
"data": [
{
"id": 1,
"user_id": 5,
"event_id": 1,
"active": true
}
]
}
With User and Role
GET /api/v2/event/1/users?include=user,role
{
"data": [
{
"id": 1,
"user_id": 5,
"event_id": 1,
"active": true,
"user": {
"id": 5,
"name": "John Doe",
"email": "john@example.com"
},
"role": {
"id": 1,
"title": "Event Manager"
}
}
]
}
/api/v2/event/{eventId}/users/{eventUserId}
Requires: users.read
Description
Get a specific event user assignment.