curl --request PATCH \
--url https://api.1club.ai/v1/platform/events/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"summary": "<string>",
"description": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"startTime": "2026-06-01T18:00:00",
"endTime": "2026-06-01T18:00:00",
"featured": true,
"bookable": true,
"sports": [
"<string>"
],
"translations": {},
"instructorIds": [
123
],
"areaIds": [
123
],
"tickets": [
{
"name": "<string>",
"id": 123,
"description": "<string>",
"price": 1,
"capacity": 2,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {}
}
],
"notifyStaff": true
}
'import requests
url = "https://api.1club.ai/v1/platform/events/{id}"
payload = {
"title": "<string>",
"summary": "<string>",
"description": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"startTime": "2026-06-01T18:00:00",
"endTime": "2026-06-01T18:00:00",
"featured": True,
"bookable": True,
"sports": ["<string>"],
"translations": {},
"instructorIds": [123],
"areaIds": [123],
"tickets": [
{
"name": "<string>",
"id": 123,
"description": "<string>",
"price": 1,
"capacity": 2,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {}
}
],
"notifyStaff": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
summary: '<string>',
description: '<string>',
coverImage: '<string>',
location: '<string>',
clubId: 123,
startTime: '2026-06-01T18:00:00',
endTime: '2026-06-01T18:00:00',
featured: true,
bookable: true,
sports: ['<string>'],
translations: {},
instructorIds: [123],
areaIds: [123],
tickets: [
{
name: '<string>',
id: 123,
description: '<string>',
price: 1,
capacity: 2,
revenueAccountId: 123,
sortOrder: 123,
translations: {}
}
],
notifyStaff: true
})
};
fetch('https://api.1club.ai/v1/platform/events/{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/events/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'summary' => '<string>',
'description' => '<string>',
'coverImage' => '<string>',
'location' => '<string>',
'clubId' => 123,
'startTime' => '2026-06-01T18:00:00',
'endTime' => '2026-06-01T18:00:00',
'featured' => true,
'bookable' => true,
'sports' => [
'<string>'
],
'translations' => [
],
'instructorIds' => [
123
],
'areaIds' => [
123
],
'tickets' => [
[
'name' => '<string>',
'id' => 123,
'description' => '<string>',
'price' => 1,
'capacity' => 2,
'revenueAccountId' => 123,
'sortOrder' => 123,
'translations' => [
]
]
],
'notifyStaff' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.1club.ai/v1/platform/events/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.1club.ai/v1/platform/events/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/events/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"slug": "<string>",
"title": "<string>",
"summary": "<string>",
"description": {
"blocks": [
{
"type": "paragraph",
"data": {},
"id": "<string>",
"tunes": {}
}
],
"time": 123,
"version": "<string>"
},
"descriptionText": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"club": {
"id": 123,
"name": "<string>"
},
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"status": "draft",
"visibility": "Public",
"featured": true,
"bookable": true,
"paymentCollection": "online",
"sports": [
"<string>"
],
"notifyStaff": true,
"translations": {},
"publishedAt": "2023-11-07T05:31:56Z",
"publicUrl": "<string>",
"instructors": [
{
"id": 123,
"name": "<string>"
}
],
"areas": [
{
"id": 123,
"name": "<string>"
}
],
"tickets": [
{
"id": 123,
"name": "<string>",
"description": "<string>",
"price": 123,
"capacity": 123,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {},
"soldCount": 123
}
],
"bookedCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "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": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}Update an event
Edits an event in any state. Send only what changes; an empty body is refused. Wall-clock times are read in the timezone of the club the event will belong to after the edit. A live event’s change of time or areas takes effect on the schedule at once.
tickets, instructorIds and areaIds each replace the whole set when sent, so read the event first. Resend every ticket you keep with its id; a ticket without one is new, and an id the event does not have is refused (EVENT_TICKET_NOT_ON_EVENT). A ticket left out is retired: deactivated when it has bookings, so they keep it, deleted when it has none. Changing the title changes the slug, and with it publicUrl.
curl --request PATCH \
--url https://api.1club.ai/v1/platform/events/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"summary": "<string>",
"description": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"startTime": "2026-06-01T18:00:00",
"endTime": "2026-06-01T18:00:00",
"featured": true,
"bookable": true,
"sports": [
"<string>"
],
"translations": {},
"instructorIds": [
123
],
"areaIds": [
123
],
"tickets": [
{
"name": "<string>",
"id": 123,
"description": "<string>",
"price": 1,
"capacity": 2,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {}
}
],
"notifyStaff": true
}
'import requests
url = "https://api.1club.ai/v1/platform/events/{id}"
payload = {
"title": "<string>",
"summary": "<string>",
"description": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"startTime": "2026-06-01T18:00:00",
"endTime": "2026-06-01T18:00:00",
"featured": True,
"bookable": True,
"sports": ["<string>"],
"translations": {},
"instructorIds": [123],
"areaIds": [123],
"tickets": [
{
"name": "<string>",
"id": 123,
"description": "<string>",
"price": 1,
"capacity": 2,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {}
}
],
"notifyStaff": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
summary: '<string>',
description: '<string>',
coverImage: '<string>',
location: '<string>',
clubId: 123,
startTime: '2026-06-01T18:00:00',
endTime: '2026-06-01T18:00:00',
featured: true,
bookable: true,
sports: ['<string>'],
translations: {},
instructorIds: [123],
areaIds: [123],
tickets: [
{
name: '<string>',
id: 123,
description: '<string>',
price: 1,
capacity: 2,
revenueAccountId: 123,
sortOrder: 123,
translations: {}
}
],
notifyStaff: true
})
};
fetch('https://api.1club.ai/v1/platform/events/{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/events/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'summary' => '<string>',
'description' => '<string>',
'coverImage' => '<string>',
'location' => '<string>',
'clubId' => 123,
'startTime' => '2026-06-01T18:00:00',
'endTime' => '2026-06-01T18:00:00',
'featured' => true,
'bookable' => true,
'sports' => [
'<string>'
],
'translations' => [
],
'instructorIds' => [
123
],
'areaIds' => [
123
],
'tickets' => [
[
'name' => '<string>',
'id' => 123,
'description' => '<string>',
'price' => 1,
'capacity' => 2,
'revenueAccountId' => 123,
'sortOrder' => 123,
'translations' => [
]
]
],
'notifyStaff' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.1club.ai/v1/platform/events/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.1club.ai/v1/platform/events/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/events/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"summary\": \"<string>\",\n \"description\": \"<string>\",\n \"coverImage\": \"<string>\",\n \"location\": \"<string>\",\n \"clubId\": 123,\n \"startTime\": \"2026-06-01T18:00:00\",\n \"endTime\": \"2026-06-01T18:00:00\",\n \"featured\": true,\n \"bookable\": true,\n \"sports\": [\n \"<string>\"\n ],\n \"translations\": {},\n \"instructorIds\": [\n 123\n ],\n \"areaIds\": [\n 123\n ],\n \"tickets\": [\n {\n \"name\": \"<string>\",\n \"id\": 123,\n \"description\": \"<string>\",\n \"price\": 1,\n \"capacity\": 2,\n \"revenueAccountId\": 123,\n \"sortOrder\": 123,\n \"translations\": {}\n }\n ],\n \"notifyStaff\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"slug": "<string>",
"title": "<string>",
"summary": "<string>",
"description": {
"blocks": [
{
"type": "paragraph",
"data": {},
"id": "<string>",
"tunes": {}
}
],
"time": 123,
"version": "<string>"
},
"descriptionText": "<string>",
"coverImage": "<string>",
"location": "<string>",
"clubId": 123,
"club": {
"id": 123,
"name": "<string>"
},
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"status": "draft",
"visibility": "Public",
"featured": true,
"bookable": true,
"paymentCollection": "online",
"sports": [
"<string>"
],
"notifyStaff": true,
"translations": {},
"publishedAt": "2023-11-07T05:31:56Z",
"publicUrl": "<string>",
"instructors": [
{
"id": 123,
"name": "<string>"
}
],
"areas": [
{
"id": 123,
"name": "<string>"
}
],
"tickets": [
{
"id": 123,
"name": "<string>",
"description": "<string>",
"price": 123,
"capacity": 123,
"revenueAccountId": 123,
"sortOrder": 123,
"translations": {},
"soldCount": 123
}
],
"bookedCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "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": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}Authorizations
Organization-scoped bearer credential: a customer API key (1club_sk_live_...) or an MCP OAuth access token.
Headers
Retry-safe key; a repeat of the same request replays the first response
255Path Parameters
1club event id
Body
Fields accepted when updating an event. Send only what changes. Unknown fields are refused.
Changing it changes the slug, and with it the public URL.
1 - 200Plain-text teaser shown on cards and in notifications.
500Plain text (a blank line starts a new paragraph) or an Editor.js document. null clears it.
20000Image URL, e.g. from the media library.
Free text; the event may take place away from any club.
300The 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.
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.
"2026-06-01T18:00:00"
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.
"2026-06-01T18:00:00"
Who sees it once live: anyone, signed-in members only, or nobody (reachable by staff only). Defaults to Public.
Public, Member_only, Private Promote it on the website and portal.
Whether places can be booked. An event with tickets always is, and a bookable event must have at least one ticket.
How paid tickets are paid: online at booking, at the desk on arrival, or the buyer chooses. Free tickets never charge.
online, on_arrival, member_choice Sport ids, e.g. padel, tennis.
Per-locale wording, as { "es": { "title": "...", "summary": "..." } }. Replaces the whole map when sent; null clears it.
Show child attributes
Show child attributes
Coaches running it. Each must belong to the organization. Replaces the whole list when sent.
Areas (courts, rooms) it occupies for its whole window while live. Each must belong to the organization. Replaces the whole list when sent.
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).
50Show child attributes
Show child attributes
Email admins and managers when a booking for this event is confirmed.
Response
The updated event
A one-off occasion a club puts on, sold through tickets. Counts only: who booked is not part of an event.
The last part of the public URL; follows the title.
An Editor.js document: { blocks: [{ type, data }] }.
Show child attributes
Show child attributes
description as plain text.
Show child attributes
Show child attributes
draft: members see nothing. live: published. cancelled: called off, its bookings cancelled.
draft, live, cancelled Public, Member_only, Private online, on_arrival, member_choice Per-locale wording, as { "es": { "title": "..." } }. Replaces the whole map when sent.
Show child attributes
Show child attributes
When it was first published.
The member-facing page. null unless the event is live, or when the organization publishes neither a website nor a member portal.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Active tickets, in display order.
Show child attributes
Show child attributes
Active bookings (confirmed, pending, checked in) across all tickets.
Was this page helpful?