curl --request PATCH \
--url https://api.1club.ai/v1/platform/clubs/{slug} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": {
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
}
'import requests
url = "https://api.1club.ai/v1/platform/clubs/{slug}"
payload = {
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": { "en": { "privateTrainingLabel": "Personal coaching" } }
}
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({
privateTrainingLabel: '<string>',
groupActivitiesLabel: '<string>',
areasLabel: '<string>',
translations: {en: {privateTrainingLabel: 'Personal coaching'}}
})
};
fetch('https://api.1club.ai/v1/platform/clubs/{slug}', 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/clubs/{slug}",
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([
'privateTrainingLabel' => '<string>',
'groupActivitiesLabel' => '<string>',
'areasLabel' => '<string>',
'translations' => [
'en' => [
'privateTrainingLabel' => 'Personal coaching'
]
]
]),
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/clubs/{slug}"
payload := strings.NewReader("{\n \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\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/clubs/{slug}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/clubs/{slug}")
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 \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"status": "active",
"city": "<string>",
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": {
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
}{
"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 a club's booking-card labels
Changes the club’s own words for the booking cards members choose from under “What would you like to book?”: the private training, group activities and areas cards. Send only what changes; an omitted field is left alone. Live immediately on the website, the member portal, the mobile app and 1club.me - the same setting as Settings > Clubs > the club > Booking labels in the 1club admin portal.
A label is a title only. The line under each card stays the platform’s (a count such as “4 available”, or the club’s class type names under group activities), and a card for a named area type always shows that type’s name. Translations merge into what the club has, so a request touches only the locales and label fields it names. Nothing else about the club can be changed here.
curl --request PATCH \
--url https://api.1club.ai/v1/platform/clubs/{slug} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": {
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
}
'import requests
url = "https://api.1club.ai/v1/platform/clubs/{slug}"
payload = {
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": { "en": { "privateTrainingLabel": "Personal coaching" } }
}
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({
privateTrainingLabel: '<string>',
groupActivitiesLabel: '<string>',
areasLabel: '<string>',
translations: {en: {privateTrainingLabel: 'Personal coaching'}}
})
};
fetch('https://api.1club.ai/v1/platform/clubs/{slug}', 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/clubs/{slug}",
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([
'privateTrainingLabel' => '<string>',
'groupActivitiesLabel' => '<string>',
'areasLabel' => '<string>',
'translations' => [
'en' => [
'privateTrainingLabel' => 'Personal coaching'
]
]
]),
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/clubs/{slug}"
payload := strings.NewReader("{\n \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\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/clubs/{slug}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/clubs/{slug}")
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 \"privateTrainingLabel\": \"<string>\",\n \"groupActivitiesLabel\": \"<string>\",\n \"areasLabel\": \"<string>\",\n \"translations\": {\n \"en\": {\n \"privateTrainingLabel\": \"Personal coaching\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"status": "active",
"city": "<string>",
"privateTrainingLabel": "<string>",
"groupActivitiesLabel": "<string>",
"areasLabel": "<string>",
"translations": {
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
}{
"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
Club slug, from GET /v1/platform/clubs
Body
The booking-card labels to change. Send only what changes; an omitted field is left alone, and at least one is required. The change is live as soon as it is saved, on every surface members book from: the website, the member portal, the mobile app and 1club.me. Only the card titles are the club's to word: the line under each card is always the platform's, a count ("4 available") or, under the group activities card, the club's class type names.
The title of the card that sells an hour with a coach. Defaults to the platform's "Private training". Up to 30 characters, on one line. An empty string or null clears it, and members read the platform wording again (already translated into every language 1club ships). Clearing a label also removes its translations.
30The title of the card that lists the club's classes. Defaults to the platform's "Group activities". Up to 30 characters, on one line. An empty string or null clears it, and members read the platform wording again (already translated into every language 1club ships). Clearing a label also removes its translations.
30The title of the card for areas that have no area-type name of their own - untyped areas, and the card that gathers every area. A card for a named area type always shows that type's name instead, so a club whose types are all named never sees this one. Defaults to the platform's "Areas". Up to 30 characters, on one line. An empty string or null clears it, and members read the platform wording again (already translated into every language 1club ships). Clearing a label also removes its translations.
30Per-language renderings of the labels, keyed by locale ("en", "pt-BR"), then by label field. Merged into what the club already has: only the locales and fields you send change. A string sets that translation, an empty string or null removes it. A translation needs a label under it - one for a label the club does not set (after this request) is refused, since the card then shows the platform wording, which is translated already. Only the three label fields are accepted here; the club's other translations are never touched.
Show child attributes
Show child attributes
{
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
Response
The club with its labels as saved
One of the organization's clubs, as the club list returns it and as a booking-label update answers: who it is, and its own words for the booking cards members choose from under "What would you like to book?".
What every other club endpoint takes in its path.
Only an active club is open for booking; the labels of any club can be set ahead of time.
active, inactive, pending, closed The title of the card that sells an hour with a coach. Defaults to the platform's "Private training". Up to 30 characters, on one line. Null when the club uses the platform wording.
30The title of the card that lists the club's classes. Defaults to the platform's "Group activities". Up to 30 characters, on one line. Null when the club uses the platform wording.
30The title of the card for areas that have no area-type name of their own - untyped areas, and the card that gathers every area. A card for a named area type always shows that type's name instead, so a club whose types are all named never sees this one. Defaults to the platform's "Areas". Up to 30 characters, on one line. Null when the club uses the platform wording.
30Per-language renderings of the labels, keyed by locale, then by label field. Only the booking-card labels; a member reading in a locale with no entry here sees the label itself.
Show child attributes
Show child attributes
{
"en": {
"privateTrainingLabel": "Personal coaching"
}
}
Was this page helpful?