Skip to main content
POST
Create an event

Authorizations

Authorization
string
header
required

Organization-scoped bearer credential: a customer API key (1club_sk_live_...) or an MCP OAuth access token.

Headers

Idempotency-Key
string

Retry-safe key; a repeat of the same request replays the first response

Maximum string length: 255

Body

application/json

Fields accepted when creating an event. It is always created as a draft. Unknown fields are refused.

title
string
required

Changing it changes the slug, and with it the public URL.

Required string length: 1 - 200
startTime
string
required

Start. With an offset or Z it is an exact instant; without one (2026-06-01T18:00:00) it is the wall clock at the event's club, in the club's timezone - or the organization's when the event names no club.

Example:

"2026-06-01T18:00:00"

endTime
string
required

End, after the start. With an offset or Z it is an exact instant; without one (2026-06-01T18:00:00) it is the wall clock at the event's club, in the club's timezone - or the organization's when the event names no club.

Example:

"2026-06-01T18:00:00"

summary
string | null

Plain-text teaser shown on cards and in notifications.

Maximum string length: 500
description

Plain text (a blank line starts a new paragraph) or an Editor.js document. null clears it.

Maximum string length: 20000
coverImage
string<uri> | null

Image URL, e.g. from the media library.

location
string | null

Free text; the event may take place away from any club.

Maximum string length: 300
clubId
integer | null

The club it belongs to; null for an organization-wide or off-site event. Decides the timezone wall-clock times are read in, and on create must still be taking events.

visibility
enum<string>

Who sees it once live: anyone, signed-in members only, or nobody (reachable by staff only). Defaults to Public.

Available options:
Public,
Member_only,
Private

Promote it on the website and portal.

bookable
boolean

Whether places can be booked. An event with tickets always is, and a bookable event must have at least one ticket.

paymentCollection
enum<string>

How paid tickets are paid: online at booking, at the desk on arrival, or the buyer chooses. Free tickets never charge.

Available options:
online,
on_arrival,
member_choice
sports
string[]

Sport ids, e.g. padel, tennis.

translations
object | null

Per-locale wording, as { "es": { "title": "...", "summary": "..." } }. Replaces the whole map when sent; null clears it.

instructorIds
integer[]

Coaches running it. Each must belong to the organization. Replaces the whole list when sent.

areaIds
integer[]

Areas (courts, rooms) it occupies for its whole window while live. Each must belong to the organization. Replaces the whole list when sent.

tickets
object[]

Every ticket the event should sell. Replaces the set: resend each ticket you keep with its id; one without an id is new; one left out is retired (deactivated if it has bookings, deleted if not).

Maximum array length: 50
notifyStaff
boolean

Email admins and managers when a booking for this event is confirmed.

Response

Event created as a draft

A one-off occasion a club puts on, sold through tickets. Counts only: who booked is not part of an event.

id
integer
slug
string

The last part of the public URL; follows the title.

title
string
summary
string | null
description
object | null

An Editor.js document: { blocks: [{ type, data }] }.

descriptionText
string | null

description as plain text.

coverImage
string | null
location
string | null
clubId
integer | null
club
object | null
startTime
string<date-time>
endTime
string<date-time>
status
enum<string>

draft: members see nothing. live: published. cancelled: called off, its bookings cancelled.

Available options:
draft,
live,
cancelled
visibility
enum<string>
Available options:
Public,
Member_only,
Private
bookable
boolean
paymentCollection
enum<string>
Available options:
online,
on_arrival,
member_choice
sports
string[]
notifyStaff
boolean
translations
object | null

Per-locale wording, as { "es": { "title": "..." } }. Replaces the whole map when sent.

publishedAt
string<date-time> | null

When it was first published.

publicUrl
string | null

The member-facing page. null unless the event is live, or when the organization publishes neither a website nor a member portal.

instructors
object[]
areas
object[]
tickets
object[]

Active tickets, in display order.

bookedCount
integer

Active bookings (confirmed, pending, checked in) across all tickets.

createdAt
string<date-time>
updatedAt
string<date-time>