curl --request GET \
--url https://api.1club.ai/v1/platform/bookings/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/bookings/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.1club.ai/v1/platform/bookings/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.1club.ai/v1/platform/bookings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.1club.ai/v1/platform/bookings/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.1club.ai/v1/platform/bookings/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/bookings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"bookingId": 123,
"bookingUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"areaId": 123,
"classId": 123,
"eventId": 123,
"maxPlayers": 123,
"instructorId": 123,
"contactId": 123,
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"customer": {
"id": 123,
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"phone": "<string>",
"type": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
},
"money": {
"billed": 123,
"billedExTax": 123,
"paid": 123,
"outstanding": 123,
"paymentState": "<string>",
"paymentStatus": "<string>",
"charges": [
{
"transactionId": 123,
"transactionType": "<string>",
"payerContactId": 123,
"date": "2023-11-07T05:31:56Z",
"paymentStatus": "<string>",
"amount": 123,
"paidAmount": 123,
"refundedAmount": 123,
"outstandingAmount": 123,
"invoiceIds": [
123
],
"orderId": 123
}
],
"credits": [
{
"transactionId": 123,
"chargeTransactionId": 123,
"amount": 123,
"paymentStatus": "<string>",
"date": "2023-11-07T05:31:56Z"
}
],
"payments": [
{
"paymentId": 123,
"amount": 123,
"status": "<string>",
"method": "<string>",
"source": "<string>",
"reference": "<string>",
"paidAt": "2023-11-07T05:31:56Z",
"transactionIds": [
123
]
}
],
"refunds": [
{
"refundId": 123,
"transactionId": 123,
"paymentId": 123,
"amount": 123,
"destination": "stripe",
"reason": "<string>",
"refundedAt": "2023-11-07T05:31:56Z"
}
]
},
"cancellation": {
"terms": {
"acceptedAt": "2023-11-07T05:31:56Z",
"rules": [
{
"hoursInAdvance": 123,
"refundPercentage": 123,
"description": "<string>"
}
],
"deadlines": [
{
"until": "2023-11-07T05:31:56Z",
"refundPercentage": 123
}
],
"freeCancellationUntil": "2023-11-07T05:31:56Z",
"fullyCovered": true,
"collectsFromWallet": true,
"waiver": {
"at": "2023-11-07T05:31:56Z",
"byUserId": 123,
"reason": "<string>"
}
},
"cancelled": {
"at": "2023-11-07T05:31:56Z",
"by": {
"userId": 123,
"name": "<string>"
},
"reason": "<string>",
"noticeHours": 123,
"refundPercentage": 123,
"refundAmount": 123,
"policyWaived": true,
"notes": "<string>"
}
},
"payment": {
"status": "paid",
"amount": 123,
"paidAmount": 123,
"refundedAmount": 123,
"reference": "<string>",
"fee": 123
},
"clubId": 123,
"source": "<string>",
"notes": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}Get a booking
Returns the current state of a booking (including payment status) by its 1club id - any of the organization’s bookings, whichever channel created it. Nothing here is absent from the list endpoint, which has always returned every source.
curl --request GET \
--url https://api.1club.ai/v1/platform/bookings/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/bookings/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.1club.ai/v1/platform/bookings/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.1club.ai/v1/platform/bookings/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.1club.ai/v1/platform/bookings/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.1club.ai/v1/platform/bookings/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/bookings/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"bookingId": 123,
"bookingUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"areaId": 123,
"classId": 123,
"eventId": 123,
"maxPlayers": 123,
"instructorId": 123,
"contactId": 123,
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"customer": {
"id": 123,
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"phone": "<string>",
"type": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
},
"money": {
"billed": 123,
"billedExTax": 123,
"paid": 123,
"outstanding": 123,
"paymentState": "<string>",
"paymentStatus": "<string>",
"charges": [
{
"transactionId": 123,
"transactionType": "<string>",
"payerContactId": 123,
"date": "2023-11-07T05:31:56Z",
"paymentStatus": "<string>",
"amount": 123,
"paidAmount": 123,
"refundedAmount": 123,
"outstandingAmount": 123,
"invoiceIds": [
123
],
"orderId": 123
}
],
"credits": [
{
"transactionId": 123,
"chargeTransactionId": 123,
"amount": 123,
"paymentStatus": "<string>",
"date": "2023-11-07T05:31:56Z"
}
],
"payments": [
{
"paymentId": 123,
"amount": 123,
"status": "<string>",
"method": "<string>",
"source": "<string>",
"reference": "<string>",
"paidAt": "2023-11-07T05:31:56Z",
"transactionIds": [
123
]
}
],
"refunds": [
{
"refundId": 123,
"transactionId": 123,
"paymentId": 123,
"amount": 123,
"destination": "stripe",
"reason": "<string>",
"refundedAt": "2023-11-07T05:31:56Z"
}
]
},
"cancellation": {
"terms": {
"acceptedAt": "2023-11-07T05:31:56Z",
"rules": [
{
"hoursInAdvance": 123,
"refundPercentage": 123,
"description": "<string>"
}
],
"deadlines": [
{
"until": "2023-11-07T05:31:56Z",
"refundPercentage": 123
}
],
"freeCancellationUntil": "2023-11-07T05:31:56Z",
"fullyCovered": true,
"collectsFromWallet": true,
"waiver": {
"at": "2023-11-07T05:31:56Z",
"byUserId": 123,
"reason": "<string>"
}
},
"cancelled": {
"at": "2023-11-07T05:31:56Z",
"by": {
"userId": 123,
"name": "<string>"
},
"reason": "<string>",
"noticeHours": 123,
"refundPercentage": 123,
"refundAmount": 123,
"policyWaived": true,
"notes": "<string>"
}
},
"payment": {
"status": "paid",
"amount": 123,
"paidAmount": 123,
"refundedAmount": 123,
"reference": "<string>",
"fee": 123
},
"clubId": 123,
"source": "<string>",
"notes": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}Authorizations
Organization-scoped bearer credential: a customer API key (1club_sk_live_...) or an MCP OAuth access token.
Path Parameters
1club booking id
Query Parameters
Comma-separated expansions to embed on the booking. customer is the booking's customer, identical to what GET /v1/platform/contacts/{id} returns, and needs contacts:read. money is what the booking billed, what was paid and what is still outstanding, with the charges, cancellation credits, payments and refunds behind those figures, and needs transactions:read. cancellation is the cancellation terms stamped on the booking when it was accepted (with the deadlines they give, and until when it cancels for free) and, once cancelled, who cancelled it, when, why, with how much notice and at what refund. An expansion whose scope the key lacks is refused with 403 rather than left out.
^(customer|money|cancellation)(,(customer|money|cancellation))*$"customer,money,cancellation"
Response
Booking state
A booking created through the platform API. Recorded with a booking transaction so it counts for revenue, marked paid (settled against a payment method named after the caller's API key, so the club can reconcile what each partner collected) or unpaid (outstanding) per the caller. Collection stays with the caller; what it collected and what it gave back on cancellation are reported in payment.
1club booking id
Stable unguessable identifier. Prefer this over bookingId when storing a reference.
Booking status (e.g. confirmed, cancelled)
Area id
The class occurrence this booking attends, when it is a class booking. Every attendee holds their own booking row against the same classId, and classes rows are per-occurrence - so this is what tells two classes running in the same hour apart. Join it against GET /v1/platform/classes, or read the roster with GET /v1/platform/classes/{id}/bookings.
The event this booking attends, when it is an event booking
How many players the booking takes, the organizer included, when it differs from the area type's defaultMaxPlayers: 2 on a court booked for singles (area types with allowsSingles). null means the area type's own limit. Adding a player past it is refused.
Instructor leading the session, when one is attached
Contact the booking is for
The booking's customer, identical to what GET /v1/platform/contacts/{id} returns. Present only when the request passes include=customer, which additionally requires the contacts:read scope; null when the booking has no contact. Use it to import a window of bookings without a contact lookup per row.
Show child attributes
Show child attributes
What the booking costs and how it was paid. Present only with include=money, which additionally requires the transactions:read scope. billed is always paid + outstanding, on the same basis as the admin's Booking audit: tax-inclusive, net of refunds, so a cancelled booking bills only the Cancellation Charge it kept.
Show child attributes
Show child attributes
The cancellation terms stamped on the booking and how it was cancelled. Present only with include=cancellation.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Channel that created the booking (api, admin, portal, app, kiosk, network, website, integration).
Was this page helpful?