Skip to main content
POST
Create an instructor

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 instructor. Only contactId is required. Unknown fields are rejected, and sendInvitation, organizationUserId, role, color and isBookable are refused by name - this API creates a bookable coach and never a staff-portal user.

contactId
integer
required

The person, who must already be a contact in this organization. Not editable afterwards.

clubId
integer | null

Club the instructor works at; null means every club in the organization.

instructorTypeId
integer | null

The kind of coach, from GET /v1/platform/instructor-types. null leaves them unfiled, which is legal but loses the grouping every roster view reads from and the default revenue account their sessions would post to.

sports
string[]
Maximum array length: 50
displayName
string | null

Public-facing name. Defaults to " ." from the contact.

Maximum string length: 120
hourlyRate
number | null

What a member pays for an hour of one-to-one time with them. Not what the club pays the coach - that is a pay rate policy. Added to the area price unless priceIncludesArea is true.

Required range: x >= 0
bookability
enum<string>

Who may book one-to-one sessions with them. Never outruns visibility: narrowing one pulls the other down with it, and deactivating the instructor retires this to Admin_only. The read-only isBookable is derived from this and cannot be written.

Available options:
Admin_only,
Member_only,
Public
priceIncludesArea
boolean

When true, hourlyRate already covers the booked area, which is then not charged on top.

maxConcurrentBookings
integer
Required range: x >= 1
operatingHours
object

Per-day-of-week availability schedule

visibility
enum<string>
Available options:
Private,
Member_only,
Public
isActive
boolean

False retires the instructor: they leave the listings and stop being bookable, and their history is kept. There is no delete.

Response

Instructor created

An instructor (coach) in the organization, as returned by the instructors resource. Reference the id as instructorId when creating a booking. Leaner than the PlatformInstructor profile embedded in class payloads: this carries only what is needed to pick and price a coach.

id
integer
name
string

Public display name when set, otherwise the linked contact name.

clubId
integer | null

Club the instructor belongs to; null when org-wide.

instructorTypeId
integer | null

The kind of coach, from GET /v1/platform/instructor-types; null for one nobody has filed.

sports
string[]
hourlyRate
number | null

Added to the area price when pricing a booking with this instructor, unless priceIncludesArea is true.

priceIncludesArea
boolean

When true, hourlyRate is an all-in price that already covers the booked area - the area's price is not added on top of it.

bookability
enum<string>

Who may book one-to-one sessions with this instructor. Admin_only means the club reserves those bookings to its own staff, so a customer-initiated booking is rejected; an API key acts for the organization and may still create one.

Available options:
Admin_only,
Member_only,
Public
isBookable
boolean
deprecated

Derived from bookability: true unless it is Admin_only. Prefer bookability, which distinguishes members from the public.

maxConcurrentBookings
integer
operatingHours
object

Per-day-of-week availability schedule

visibility
enum<string>

Who may see the instructor on member-facing surfaces. bookability never outruns it.

Available options:
Private,
Member_only,
Public
isActive
boolean

False for a retired instructor: hidden from the list by default, not bookable, history kept.