curl --request PATCH \
--url https://api.1club.ai/v1/platform/area-types/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"sports": [
"<string>"
],
"isBookable": true,
"defaultPricePerHour": 1,
"defaultMaxPlayers": 500,
"maxConcurrentBookings": 1
}
'import requests
url = "https://api.1club.ai/v1/platform/area-types/{id}"
payload = {
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"sports": ["<string>"],
"isBookable": True,
"defaultPricePerHour": 1,
"defaultMaxPlayers": 500,
"maxConcurrentBookings": 1
}
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({
name: '<string>',
slug: '<string>',
description: '<string>',
revenueAccountId: 123,
sports: ['<string>'],
isBookable: true,
defaultPricePerHour: 1,
defaultMaxPlayers: 500,
maxConcurrentBookings: 1
})
};
fetch('https://api.1club.ai/v1/platform/area-types/{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/area-types/{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([
'name' => '<string>',
'slug' => '<string>',
'description' => '<string>',
'revenueAccountId' => 123,
'sports' => [
'<string>'
],
'isBookable' => true,
'defaultPricePerHour' => 1,
'defaultMaxPlayers' => 500,
'maxConcurrentBookings' => 1
]),
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/area-types/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\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/area-types/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/area-types/{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 \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"areaCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"sports": [
"<string>"
],
"isBookable": true,
"defaultPricePerHour": 123,
"defaultMaxPlayers": 123,
"maxConcurrentBookings": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Update an area type
Changes an area type. Send only what changes; an omitted field is left alone, null clears a nullable one, and at least one field is required.
This is a wide edit. Every area of the type inherits sports, defaultPricePerHour, defaultMaxPlayers and isBookable, so changing one of those reprices or re-sports every court on it at once - and each affected area emits an availability change, which partners consuming the reconciliation feed will pull. sports replaces the whole list rather than adding to it. A rename leaves slug alone.
curl --request PATCH \
--url https://api.1club.ai/v1/platform/area-types/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"sports": [
"<string>"
],
"isBookable": true,
"defaultPricePerHour": 1,
"defaultMaxPlayers": 500,
"maxConcurrentBookings": 1
}
'import requests
url = "https://api.1club.ai/v1/platform/area-types/{id}"
payload = {
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"sports": ["<string>"],
"isBookable": True,
"defaultPricePerHour": 1,
"defaultMaxPlayers": 500,
"maxConcurrentBookings": 1
}
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({
name: '<string>',
slug: '<string>',
description: '<string>',
revenueAccountId: 123,
sports: ['<string>'],
isBookable: true,
defaultPricePerHour: 1,
defaultMaxPlayers: 500,
maxConcurrentBookings: 1
})
};
fetch('https://api.1club.ai/v1/platform/area-types/{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/area-types/{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([
'name' => '<string>',
'slug' => '<string>',
'description' => '<string>',
'revenueAccountId' => 123,
'sports' => [
'<string>'
],
'isBookable' => true,
'defaultPricePerHour' => 1,
'defaultMaxPlayers' => 500,
'maxConcurrentBookings' => 1
]),
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/area-types/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\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/area-types/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/area-types/{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 \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"revenueAccountId\": 123,\n \"sports\": [\n \"<string>\"\n ],\n \"isBookable\": true,\n \"defaultPricePerHour\": 1,\n \"defaultMaxPlayers\": 500,\n \"maxConcurrentBookings\": 1\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"revenueAccountId": 123,
"areaCount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"sports": [
"<string>"
],
"isBookable": true,
"defaultPricePerHour": 123,
"defaultMaxPlayers": 123,
"maxConcurrentBookings": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Organization-scoped bearer credential: a customer API key (1club_sk_live_...) or an MCP OAuth access token.
Path Parameters
Body
Fields accepted when updating an area type. Send only what changes; null clears a nullable field, an omitted field is left alone, and at least one is required. A rename does not move slug. Every area of the type inherits sports, defaultPricePerHour, defaultMaxPlayers and isBookable, so changing one of those reprices or re-sports every area at once and emits an availability change for each. sports replaces the whole list.
255Stable key. Derived from the name when omitted; send one only when something outside 1club already refers to it. An explicit slug that clashes is a 409, and a rename never moves it.
120^[a-z0-9]+(-[a-z0-9]+)*$2000Where a booking on this kind of area posts, from GET /v1/platform/revenue-accounts. Leave it unset and the sale posts to whichever account the organization has marked default, resolved at the time of the sale.
Canonical sport ids an area of this type can be booked for, e.g. ["padel"]. This is what makes the areas bookable for a sport at all; an unrecognised value is rejected rather than stored.
20False for a kind of space that is not booked at all (a storeroom, a corridor).
Hourly price an area of this type starts from. An area may override it.
x >= 0How many people a slot on this type normally takes.
1 <= x <= 1000How many bookings may hold an area of this type at once. 1 for an ordinary court.
1 <= x <= 100Response
The updated area type
A kind of area, and the defaults every area of that kind inherits. One shape for the list, get-by-id, create and update.
Stable key, derived from the name when a create does not send one. A rename never moves it.
Where a booking on this kind of area posts. Null falls back to the organization's default account.
Areas currently of this type, whatever their status.
Sports an area of this type can be booked for.
False for a type that is not booked at all (a storeroom, a corridor). Do not build bookable inventory on one.
Hourly price an area of this type starts from; an area may override it.
How many people a slot on this type normally takes.
How many bookings may hold an area of this type at once. 1 for an ordinary court.
Was this page helpful?