Muzeek Events and Tours API

REST APIs for reading and managing shows and tours in your Muzeek account from any server-side application.

Events, event catalogs, event items, tour catalogs, and tours are the REST resources on this page. Additional REST APIs 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.

Base URL

All endpoints are served from:

https://muzeek.ai/api

Requests 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. Pass it as Authorization: Bearer or as the X-API-Key HTTP header.

curl https://muzeek.ai/api/events \
  -H "Authorization: Bearer mzk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Equivalent header:

curl https://muzeek.ai/api/events \
  -H "X-API-Key: mzk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Generating a key. Open Settings → API & MCP, create an API client, and generate a key. Grant each key the minimum scopes it needs. A key is for scripts and apps. To connect an assistant, use Connect.

One-time display. Your key is shown only once at the moment it is created. Copy it to your secret manager straight away — it cannot be displayed or recovered 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 a header. Keys sent as query-string parameters can leak through server logs, browser history, caches, and Referer headers, so the API rejects them.

Connect

Sign in when an assistant should work in an Account. Create a key when a script or app sends the key itself.

An assistant

  1. Paste https://muzeek.ai/mcp in the assistant.
  2. Sign in.
  3. Pick the Account.
  4. Come back to the assistant.

Use MCP for agents that don't have a direct Muzeek AI plugin or connection available in our Integrations page. Some agents such as Claude, ChatGPT, Gemini, and Copilot can connect directly from Integrations.

That connection works on the Account you picked. It can look up and change events, schedule items on those events, and tours there.

A script or app

Create a client and key under Settings → API & MCP. Poly and other programs that send a key use this path. API keys shows how to send the key.

MCP

Assistants and scripts call Muzeek over Streamable HTTP. Tool results are JSON. The public URL is:

https://muzeek.ai/mcp

An assistant signs in with the steps in Connect. A script or app sends an API key with Authorization: Bearer or X-API-Key.

API key example for a script or app:

{
  "mcpServers": {
    "muzeek": {
      "url": "https://muzeek.ai/mcp",
      "headers": {
        "Authorization": "Bearer mzk_live_your_api_key_here"
      }
    }
  }
}

GET /api/me returns the same account and connection as whoami. A signed-in session or an API key can call it. An API key does not need a scope. GET /api/users/me is the signed-in person and stays session-only.

{
  "account": { "id": "<account uuid>", "name": "Account name" },
  "connection": { "type": "api_key", "name": "Key name", "id": "<client uuid>" },
  "permissions": ["read:events"]
}

connection.id is the API client id, and only when the caller is an API key. A session uses type: "session" and an empty permissions list. OAuth whoami uses type: "oauth" and ["*"].

MCP requests share the standard API-key hourly window (1,000 requests) and the same X-RateLimit-* headers as the REST API.

MCP tools

The allowlist matches API key scopes, plus whoami. Resource identifiers are UUIDs.

whoamiaccount

Return the authenticated account and this connection's permissions.

searchEventsevents

Search events. Requires read:events on an API key.

getEventevents

Retrieve one event by UUID, including schedule items on that event. Requires read:events.

createEventevents

Create a show. Set the title, dates, status, labels, published state, event type, place, venue, and tour. Accepts the same fields, including status, isPublished, and labelKeys. labelKeys sets the labels on the show. Sending the list replaces the set. An empty list clears them. tourId attaches the show to a tour. Requires write:events on an API key.

updateEventevents

Change a show's title, dates, status, labels, published state, event type, place, venue, or tour. Accepts the same fields, including status, isPublished, and labelKeys. labelKeys sets the labels on the show. Sending the list replaces the set. An empty list clears them. Pass the show id. tourId attaches the show to a tour. A null tourId takes the show off. Requires write:events.

deleteEventevents

Permanently delete a show. Requires write:events. No confirm flag.

listEventStatusesevents

List event statuses this Account can pick for new shows. Requires read:events.

createEventStatusevents

Add a custom event status (for example TBC). Omitting publishesEvent still publishes shows, matching Settings. publishesEvent and showOnEventList (including that default) need an Account admin. Requires write:events.

updateEventStatusevents

Rename or recolor an event status. Pass id from listEventStatuses. Requires write:events.

deleteEventStatusevents

Remove an event status from new picks. Existing shows keep the key. Requires write:events.

listEventLabelsevents

List event labels this Account can put on shows. These are not tour types. Requires read:events.

createEventLabelevents

Add a custom event label (for example headline, support, festival, instore). Requires write:events.

updateEventLabelevents

Rename or recolor an event label. Requires write:events.

deleteEventLabelevents

Remove an event label from new picks. Requires write:events.

listEventTypesevents

List macro event types for shows. Schedule-item types are listEventItemTypes. Requires read:events.

createEventTypeevents

Add a custom macro event type. Requires write:events.

updateEventTypeevents

Rename or restyle a macro event type. Requires write:events.

deleteEventTypeevents

Remove a macro event type from new picks. Requires write:events.

searchEventItemsevents

List schedule items. Pass eventId to nest under a show. Requires read:events.

getEventItemevents

Retrieve one schedule item by UUID. Requires read:events.

listEventItemTypesevents

List the schedule-item types this Account can pick, including field definitions for typeSpecificData and id for catalog writes. Accounts can rename or delete system-provided types. Requires read:events.

createEventItemTypeevents

Add a custom schedule-item type. Requires write:events.

updateEventItemTypeevents

Rename or restyle a schedule-item type. Pass id from listEventItemTypes. Requires write:events.

deleteEventItemTypeevents

Remove a schedule-item type from new picks. Requires write:events.

createEventItemevents

Create a schedule item on an existing event. itemType must be a typeKey from listEventItemTypes. Times use ISO startDate and endDate. Set typeSpecificData using that list's field keys. Requires write:events.

updateEventItemevents

Change a schedule item. Same fields as create. Pass the item id. Requires write:events.

deleteEventItemevents

Permanently delete a schedule item. Requires write:events.

completeEventItemTaskevents

Mark a schedule-item task complete or incomplete. Requires write:events.

searchTourstours

Search tours. Requires read:tours on an API key.

getTourtours

Retrieve one tour by UUID. Requires read:tours.

createTourtours

Create a tour. Requires name, startDate, and endDate. Type, status, and labels are optional and fall back to the account defaults. Requires write:tours.

updateTourtours

Update a tour, including its type, status, and labels. Requires write:tours.

deleteTourtours

Delete a tour. Requires write:tours. No separate delete scope.

listTourTypestours

List tour types this Account can pick. These are not event labels. Requires read:tours.

createTourTypetours

Add a custom tour type. Tours add-on required. Requires write:tours.

updateTourTypetours

Rename or recolor a tour type. Requires write:tours.

deleteTourTypetours

Remove a tour type from new picks. Requires write:tours.

listTourStatusestours

List tour statuses this Account can pick. Requires read:tours.

createTourStatustours

Add a custom tour status. Tours add-on required. Requires write:tours.

updateTourStatustours

Rename or recolor a tour status. Requires write:tours.

deleteTourStatustours

Remove a tour status from new picks. Requires write:tours.

listTourLabelstours

List tour labels this Account can pick. These are not event labels. Requires read:tours.

createTourLabeltours

Add a custom tour label. Tours add-on required. Requires write:tours.

updateTourLabeltours

Rename or recolor a tour label. Requires write:tours.

deleteTourLabeltours

Remove a tour label from new picks. Requires write:tours.

Permission scopes

Each API key is granted one or more scopes:

read:eventsscope

Required for GET /api/events, GET /api/events/:id, GET /api/event-statuses, GET /api/event-labels, GET /api/event-types, GET /api/event-item-types, GET /api/event-items, and GET /api/event-items/:id.

write:eventsscope

Required for POST, PUT and DELETE against /api/events, event catalogs, /api/event-item-types, and /api/event-items, including POST /api/event-items/:id/complete. Publish and Event list flags on a status need an Account admin. Covers delete. There is no separate delete:events scope.

read:toursscope

Required for GET /api/tours, GET /api/tours/:id, GET /api/tour-types, GET /api/tour-statuses, and GET /api/tour-labels.

write:toursscope

Required for POST, PUT and DELETE against /api/tours, /api/tour-types, /api/tour-statuses, and /api/tour-labels. Tours add-on required for catalog writes. Covers delete. There is no separate delete:tours scope.

A key with the wildcard * scope has full access to every endpoint. We recommend issuing narrowly-scoped keys per integration.

On an API key, every MCP tool except whoami uses the same scope as the matching route. Event tools use read:events and write:events, including schedule items. Tour tools use read:tours and write:tours. OAuth connections run with *.

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.

venueinclude

Basic venue information (id, name).

venue.fullinclude

Full venue details including address, city, state, country.

tourinclude

Basic tour information (id, name).

tour.fullinclude

Full tour details including type and status.

accountinclude

Basic account information (id, name).

account.fullinclude

Full account details (id, name, slug, imageUrl).

eventItemsinclude

Schedule items on the event (every item type, custom types, tasks, and custom fields).

Combine values with commas, e.g. ?include=venue.full,tour,account. P&L, ticket reports, and lineup are not returned for API keys.

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 type show.
  • If you omit status, the event is created with status private (the initial lifecycle state before public on-sale messaging).

Setting status values

Use a lowercase string. Allowed status values are:

  • private
  • off_sale
  • announced
  • pre_sale
  • on_sale
  • sold_out
  • allocation_full
  • event_ended
  • cancelled

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:

  • show
  • travel
  • day_off

Custom event types: create, rename, and remove macro types with POST /api/event-types, PUT /api/event-types/:id, and DELETE /api/event-types/:id (MCP createEventType / updateEventType / deleteEventType). List them with GET /api/event-types. Schedule-item types use /api/event-item-types.

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_KEY401

The X-API-Key header was not present.

INVALID_API_KEY401

The supplied key was unknown, expired, or revoked.

FORBIDDEN403

The key is valid but does not have the scope required for this endpoint.

VALIDATION_ERROR400

Request body or query parameters failed schema validation.

NOT_FOUND404

The requested resource does not exist in your account.

RATE_LIMIT_EXCEEDED429

You 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-Limitinteger

The maximum number of requests allowed in the current window.

X-RateLimit-Remaininginteger

The number of requests remaining in the current window.

X-RateLimit-Resetunix timestamp

The 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.

GET
/api/events
read:events
List events in the authenticated account.

Query parameters

pageinteger

Page number. Defaults to 1.

limitinteger

Items per page. Defaults to 10, max 100.

sortBystring

One of startDate, title, createdAt. Defaults to startDate.

sortOrderstring

asc or desc. Defaults to desc.

searchstring

Free-text search across event title.

typesstring[]

Filter by event type (repeatable). Example: ?types=show&types=travel.

tourIduuid

Limit the list to shows on this tour.

statusesstring[]

Filter by status (repeatable). Example: ?statuses=private&statuses=announced.

startDateISO 8601

Only return events whose startDate is on or after this value.

endDateISO 8601

Only return events whose startDate is on or before this value.

includestring

Comma-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"
GET
/api/events/:id
read:events
Retrieve a single event by its UUID.

Path parameters

iduuid
required

The event UUID.

Query parameters

includestring

Comma-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.

POST
/api/events
write:events
Create a new event in the authenticated account.

Request body

titlestring
required

Event title.

startDateISO 8601
required

Event start in UTC.

endDateISO 8601
required

Event end in UTC.

timezoneIANA timezone
required

E.g. "Europe/London", "America/Los_Angeles".

isAllDayboolean
required

Whether this is an all-day event.

eventTypestring

Event type. Defaults to show. See Event type and status.

venueIduuid

Venue UUID. Mutually exclusive with venueContactId.

tourIduuid

Tour UUID.

capacityinteger

Positive integer capacity.

imageUrlhttps url

Hero image. Pass null or empty string to clear.

isPublishedboolean

Whether the event is publicly visible.

statusstring

Event lifecycle status. Defaults to private. See Event type and status.

labelKeysstring[]

Labels on the show. Sending the list replaces the set. An empty list clears them.

forAccountIduuid

Optional. 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.

PUT
/api/events/:id
write:events
Partial update. Only the fields you send are changed. status, isPublished, and labelKeys work the same way as on create. tourId attaches the show to a tour. Place fields correct the venue text.

Request body

isPublishedboolean

Whether the show is published. Omit to leave it unchanged.

statusstring

Event lifecycle status. Omit to leave it unchanged.

labelKeysstring[]

Labels on the show. Sending the list replaces the set. An empty list clears them. Omit to leave the labels unchanged.

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"
  }'
DELETE
/api/events/:id
write:events
Permanently remove an event from the account.

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.

Event catalogs API

Status, labels, and macro types are lists on this Account. Create a row, then apply its key on a show. Status and published are separate: omit status on create and the show starts private and unpublished, then existing reconciliation still runs. Settings /api/account-* URLs stay session-only.

GET
/api/event-statuses
read:events
List event statuses this Account can pick for new shows. Hidden and removed rows are omitted. MCP listEventStatuses returns the same JSON.
POST
/api/event-statuses
write:events
Add a custom event status (for example TBC). Omitting publishesEvent still publishes shows, matching Settings. publishesEvent and showOnEventList (including that default) need an Account admin.
PUT
/api/event-statuses/:id
write:events
Rename or recolor an event status. Use the UUID when GET returns one; otherwise pass statusKey in the path. MCP updateEventStatus.
DELETE
/api/event-statuses/:id
write:events
Remove an event status from new picks. Existing shows keep the key. Use the UUID when GET returns one; otherwise pass statusKey in the path. MCP deleteEventStatus.
GET
/api/event-labels
read:events
List event labels this Account can put on shows. These are not tour types. MCP listEventLabels returns the same JSON.
POST
/api/event-labels
write:events
Add a custom event label (for example headline, support, festival, instore).
PUT
/api/event-labels/:id
write:events
Rename or recolor an event label. Use the UUID when GET returns one; otherwise pass labelKey in the path. MCP updateEventLabel.
DELETE
/api/event-labels/:id
write:events
Remove an event label from new picks. Existing shows keep the key. Use the UUID when GET returns one; otherwise pass labelKey in the path. MCP deleteEventLabel.
GET
/api/event-types
read:events
List macro event types for shows. Schedule-item types are GET /api/event-item-types. MCP listEventTypes returns the same JSON.
POST
/api/event-types
write:events
Add a custom macro event type.
PUT
/api/event-types/:id
write:events
Rename or restyle a macro event type. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP updateEventType.
DELETE
/api/event-types/:id
write:events
Remove a macro event type from new picks. Existing shows keep the key. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP deleteEventType.

Event items API

Event items are rows on an event — soundcheck, load-in, flights, lobby call, todos, and any types this Account still has. They are not extra events. Call GET /api/event-item-types (MCP listEventItemTypes) for the typeKey values and field definitions this Account currently has. Accounts can rename or delete types; do not assume a key exists.

GET
/api/event-item-types
read:events
List the schedule-item types this Account can pick. Each type includes field definitions for typeSpecificData and id for catalog writes. Accounts can rename or delete system-provided types; call this instead of assuming a key exists. MCP listEventItemTypes returns the same JSON.
POST
/api/event-item-types
write:events
Add a custom schedule-item type. Then pass its typeKey as itemType on createEventItem.
PUT
/api/event-item-types/:id
write:events
Rename or restyle a schedule-item type. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP updateEventItemType.
DELETE
/api/event-item-types/:id
write:events
Remove a schedule-item type from new picks. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP deleteEventItemType.
GET
/api/event-items
read:events
List schedule items. Pass eventId to nest under a show.

Query parameters

eventIduuid

Parent event UUID.

itemTypestring

typeKey from GET /api/event-item-types for this Account.

pageinteger

Page number. Defaults to 1.

limitinteger

Items per page. Defaults to 50, max 500.

GET
/api/event-items/:id
read:events
Retrieve one schedule item by its UUID.
POST
/api/event-items
write:events
Create a schedule item on an existing event. Times use ISO startDate and endDate.

Request body

eventIduuid
required

Parent event UUID.

itemTypestring
required

typeKey from GET /api/event-item-types for this Account. Accounts can rename or delete system-provided types.

startDateISO 8601

Optional clock start. Null for unscheduled.

endDateISO 8601

Optional clock end.

timingModestring

clock or relative.

isTaskboolean

True for a checklist or todo row.

typeSpecificDataobject

Values for the type's field keys from GET /api/event-item-types. Dot paths nest objects. Clock times stay on startDate and endDate. Extra per-item fields: custom[key] plus _ui.customFields.

PUT
/api/event-items/:id
write:events
Partial update of a schedule item.
DELETE
/api/event-items/:id
write:events
Permanently remove a schedule item.
POST
/api/event-items/:id/complete
write:events
Mark a schedule-item task complete or incomplete.
isCompletedboolean
required

True to complete, false to reopen.

Tours API

Shows belong to a tour through the event's tourId, not through a separate membership call. Tour type, status, and label lists are public catalogs: list them, then apply keys on createTour and updateTour. Writes need the Tours add-on. Settings /api/account-tour-* stays session-only.

Tour catalogs

GET
/api/tour-types
read:tours
List tour types this Account can pick. These are not event labels. MCP listTourTypes returns the same JSON.
POST
/api/tour-types
write:tours
Add a custom tour type. Tours add-on required.
PUT
/api/tour-types/:id
write:tours
Rename or recolor a tour type. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP updateTourType.
DELETE
/api/tour-types/:id
write:tours
Remove a tour type from new picks. Use the UUID when GET returns one; otherwise pass typeKey in the path. MCP deleteTourType.
GET
/api/tour-statuses
read:tours
List tour statuses this Account can pick. MCP listTourStatuses returns the same JSON.
POST
/api/tour-statuses
write:tours
Add a custom tour status. Tours add-on required.
PUT
/api/tour-statuses/:id
write:tours
Rename or recolor a tour status. Use the UUID when GET returns one; otherwise pass statusKey in the path. MCP updateTourStatus.
DELETE
/api/tour-statuses/:id
write:tours
Remove a tour status from new picks. Use the UUID when GET returns one; otherwise pass statusKey in the path. MCP deleteTourStatus.
GET
/api/tour-labels
read:tours
List tour labels this Account can pick. These are not event labels. MCP listTourLabels returns the same JSON.
POST
/api/tour-labels
write:tours
Add a custom tour label. Tours add-on required.
PUT
/api/tour-labels/:id
write:tours
Rename or recolor a tour label. Use the UUID when GET returns one; otherwise pass labelKey in the path. MCP updateTourLabel.
DELETE
/api/tour-labels/:id
write:tours
Remove a tour label from new picks. Use the UUID when GET returns one; otherwise pass labelKey in the path. MCP deleteTourLabel.
GET
/api/tours
read:tours
List tours in the authenticated account.

Query parameters follow the events list: page, limit, sortBy, sortOrder, search, type, category, status, and include.

GET
/api/tours/:id
read:tours
Return one tour by UUID.
POST
/api/tours
write:tours
Create a tour. Attach shows afterwards with PUT /api/events/:id and tourId.

Required fields

namestring
required

Tour name.

startDatedatetime
required

ISO datetime.

endDatedatetime
required

ISO datetime. Must be after startDate.

typestring

Tour type key from the account catalog. Omit to use the default for new tours.

statusstring

Tour status key from the account catalog. Omit to use the default for new tours.

labelKeysstring[]

Tour label keys. Omit to use the defaults for new tours. Sending the list replaces the set.

categorystring

domestic or international.

Maintain type, status, and label lists with the tour catalog routes (or MCP listTourTypes / createTourType and the matching status and label tools), then apply keys here.

PUT
/api/tours/:id
write:tours
Partial update. You can change the type, status, and labels. When both dates are sent, endDate must be after startDate.
DELETE
/api/tours/:id
write:tours
Delete a tour.

DELETE is covered by write:tours. There is no separate delete:tours scope.

Building something with Muzeek?
We love hearing what developers are building on top of Muzeek, and we prioritise new endpoints based on real customer demand. Contact us and tell us what you have in mind.