Muzeek Events API
A REST API for reading and managing events in your Muzeek account from any server-side application.
The Events API is the first of several resource APIs available to developers. Additional APIs for bookings, venues, tours and settlements will be published here as they become available. If you have a use case that isn't covered yet, we'd love to hear from you at.
Base URL
All endpoints are served from:
https://muzeek.ai/apiRequests and responses are JSON. All timestamps are ISO 8601 in UTC. All resource identifiers exposed through the external API are UUIDs.
Authentication
Every request to the Muzeek API is authenticated with an API key, passed as the X-API-Key HTTP header.
curl https://muzeek.ai/api/events \
-H "X-API-Key: mzk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Generating a key. In your Muzeek workspace, open Settings → API, create an API client, and generate a key. We recommend granting each key the minimum set of scopes it needs.
One-time display. Your key is shown only once at the moment it is created. Copy it to your secret manager straight away — for your security, Muzeek cannot display or recover it again.
Rotation & revocation. You can rotate or revoke keys at any time from the same screen. Revoked keys stop working immediately.
Never send keys in the URL. Always pass keys in the X-API-Key header. Keys sent as query-string parameters can leak through server logs, browser history, caches, and Referer headers, so the API rejects them.
Permission scopes
Each API key is granted one or more scopes. Events endpoints require one of:
read:eventsscopeRequired for GET /api/events and GET /api/events/:id.
write:eventsscopeRequired for POST, PUT and DELETE against /api/events. Covers delete — there is no separate delete:events scope.
A key with the wildcard * scope has full access to every endpoint. We recommend issuing narrowly-scoped keys per integration.
Pagination
List endpoints accept page and limit query parameters. The default page size is 10; the maximum is 100. Responses return both the requested slice and pagination metadata:
{
"data": [ /* array of events */ ],
"pagination": {
"page": 1,
"limit": 10,
"total": 247,
"totalPages": 25
}
}Including related data
By default, event responses contain only the event record itself. Use the include query parameter to embed related resources in the response.
venueincludeBasic venue information (id, name).
venue.fullincludeFull venue details including address, city, state, country.
tourincludeBasic tour information (id, name).
tour.fullincludeFull tour details including type and status.
accountincludeBasic account information (id, name).
account.fullincludeFull account details (id, name, slug, imageUrl).
Combine values with commas, e.g. ?include=venue.full,tour,account.
Event type and status
Create and update payloads use the JSON fields eventType and status.
Defaults on create
- If you omit
eventType, the event is created as typeshow. - If you omit
status, the event is created with statusprivate(the initial lifecycle state before public on-sale messaging).
Setting status values
Use a lowercase string. Allowed status values are:
privateoff_saleannouncedpre_saleon_salesold_outallocation_fullevent_endedcancelled
Set status on create or update when you need a lifecycle state other than the default (for example announced or on_sale).
Setting eventType values
Use a lowercase string. Allowed type values are:
showtravelday_off
Custom event types: You can configure custom event type keys. Currently creating or editing custom event types for your account is only available in the Muzeek web application (Settings), not through the API.
Errors
All errors use a consistent JSON envelope and the HTTP status code reflects the error class.
{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or expired API key"
}
}MISSING_API_KEY401The X-API-Key header was not present.
INVALID_API_KEY401The supplied key was unknown, expired, or revoked.
FORBIDDEN403The key is valid but does not have the scope required for this endpoint.
VALIDATION_ERROR400Request body or query parameters failed schema validation.
NOT_FOUND404The requested resource does not exist in your account.
RATE_LIMIT_EXCEEDED429You have sent too many requests in a short period. Respect the X-RateLimit-Reset header.
Rate limits
Every API key is rate limited on a rolling hourly window:
- 1,000 requests per hour across read endpoints (
GET) - 200 requests per hour across write endpoints (
POST,PUT,DELETE)
These are our current limits. If you have a use case that needs more headroom, get in touch.
Every response includes the following headers so your client can pace itself:
X-RateLimit-LimitintegerThe maximum number of requests allowed in the current window.
X-RateLimit-RemainingintegerThe number of requests remaining in the current window.
X-RateLimit-Resetunix timestampThe time at which the current window resets.
Events API
Events are the core unit of the Muzeek data model — a scheduled occurrence (show, travel day, day off, etc.) that optionally lives on a tour and at a venue. The Events API lets you list, retrieve, create, update and delete events.
If your account manages other accounts via a roster (for example, an agent or manager with an artist roster), you can also create events for a roster member by passing their account UUID as forAccountId on create. See Create an event.
Query parameters
pageintegerPage number. Defaults to 1.
limitintegerItems per page. Defaults to 10, max 100.
sortBystringOne of startDate, title, createdAt. Defaults to startDate.
sortOrderstringasc or desc. Defaults to desc.
searchstringFree-text search across event title.
typesstring[]Filter by event type (repeatable). Example: ?types=show&types=travel.
statusesstring[]Filter by status (repeatable). Example: ?statuses=private&statuses=announced.
startDateISO 8601Only return events whose startDate is on or after this value.
endDateISO 8601Only return events whose startDate is on or before this value.
includestringComma-separated list. See the Includes section above.
Example
curl "https://muzeek.ai/api/events?limit=5&include=venue,tour" \
-H "X-API-Key: $MUZEEK_API_KEY"Path parameters
iduuidThe event UUID.
Query parameters
includestringComma-separated list. See Includes.
Example request
curl "https://muzeek.ai/api/events/123e4567-e89b-12d3-a456-426614174000?include=venue,tour" \
-H "X-API-Key: $MUZEEK_API_KEY"Example response
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"title": "Summer Showcase",
"description": null,
"eventType": "show",
"startDate": "2026-08-15T20:00:00.000Z",
"endDate": "2026-08-15T23:00:00.000Z",
"timezone": "Europe/London",
"isAllDay": false,
"isPublished": true,
"status": "announced",
"capacity": 500,
"imageUrl": null,
"venueId": "6a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
"tourId": null,
"createdAt": "2026-04-01T10:15:30.000Z",
"updatedAt": "2026-04-02T09:00:00.000Z",
"venue": {
"id": "6a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9",
"name": "The Lexington"
},
"tour": null
}Fields omitted above that you may also see: description, capacity, imageUrl, status, currencyCode, and location fields (locationName, locationAddress, …). Fields that are unset come back as null; optional objects like venue and tour are only present when requested via include.
Request body
titlestringEvent title.
startDateISO 8601Event start in UTC.
endDateISO 8601Event end in UTC.
timezoneIANA timezoneE.g. "Europe/London", "America/Los_Angeles".
isAllDaybooleanWhether this is an all-day event.
eventTypestringEvent type. Defaults to show. See Event type and status.
venueIduuidVenue UUID. Mutually exclusive with venueContactId.
tourIduuidTour UUID.
capacityintegerPositive integer capacity.
imageUrlhttps urlHero image. Pass null or empty string to clear.
isPublishedbooleanWhether the event is publicly visible.
statusstringEvent lifecycle status. Defaults to private. See Event type and status.
forAccountIduuidOptional. Beneficiary roster account — create the event for a member of your roster. The caller must be an active roster owner of this account, otherwise the request returns 403 FORBIDDEN. Omit or pass your own account UUID to create on your own account.
Example
curl -X POST https://muzeek.ai/api/events \
-H "X-API-Key: $MUZEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Summer Showcase",
"eventType": "show",
"startDate": "2026-08-15T20:00:00Z",
"endDate": "2026-08-15T23:00:00Z",
"timezone": "Europe/London",
"isAllDay": false,
"venueId": "123e4567-e89b-12d3-a456-426614174000"
}'Creating for a roster member
If your account manages other accounts via a roster (e.g. an agent or manager with an artist roster), pass the member's account UUID as forAccountId. The event is created on the member's account and attributed to you as the creator. The scope required is still write:events; the roster relationship itself is the authorisation boundary.
curl -X POST https://muzeek.ai/api/events \
-H "X-API-Key: $MUZEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Roster Member Show",
"eventType": "show",
"startDate": "2026-08-15T20:00:00Z",
"endDate": "2026-08-15T23:00:00Z",
"timezone": "Europe/London",
"isAllDay": false,
"forAccountId": "9f8e7d6c-5b4a-3210-fedc-ba9876543210"
}'Note:the member's account UUID is not currently listable via the API — retrieve it from the Muzeek app and pass it through your integration as configuration.
Example
curl -X PUT https://muzeek.ai/api/events/123e4567-e89b-12d3-a456-426614174000 \
-H "X-API-Key: $MUZEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Summer Showcase (rescheduled)",
"startDate": "2026-08-16T20:00:00Z",
"endDate": "2026-08-16T23:00:00Z"
}'Example
curl -X DELETE https://muzeek.ai/api/events/123e4567-e89b-12d3-a456-426614174000 \
-H "X-API-Key: $MUZEEK_API_KEY"DELETE is covered by the write:events scope. There is no separate delete:events scope.