curl --request POST \
--url https://api.1club.ai/v1/platform/programs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123
}
'import requests
url = "https://api.1club.ai/v1/platform/programs"
payload = {
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
slug: '<string>',
description: '<string>',
imageUrl: '<string>',
color: '<string>',
sortOrder: 123,
minAge: 60,
maxAge: 60,
progressionTrackId: 123
})
};
fetch('https://api.1club.ai/v1/platform/programs', 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/programs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'slug' => '<string>',
'description' => '<string>',
'imageUrl' => '<string>',
'color' => '<string>',
'sortOrder' => 123,
'minAge' => 60,
'maxAge' => 60,
'progressionTrackId' => 123
]),
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/programs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.1club.ai/v1/platform/programs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/programs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123,
"classTypeCount": 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": {}
}Create a program
Adds a program. List the existing ones first - a club rarely wants two programs meaning the same thing. Then put class types in it by setting their programId. slug is optional and derived from the name when omitted, suffixed if that is taken; an explicit slug that clashes is a 409. Supports the Idempotency-Key header.
curl --request POST \
--url https://api.1club.ai/v1/platform/programs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123
}
'import requests
url = "https://api.1club.ai/v1/platform/programs"
payload = {
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
slug: '<string>',
description: '<string>',
imageUrl: '<string>',
color: '<string>',
sortOrder: 123,
minAge: 60,
maxAge: 60,
progressionTrackId: 123
})
};
fetch('https://api.1club.ai/v1/platform/programs', 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/programs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'slug' => '<string>',
'description' => '<string>',
'imageUrl' => '<string>',
'color' => '<string>',
'sortOrder' => 123,
'minAge' => 60,
'maxAge' => 60,
'progressionTrackId' => 123
]),
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/programs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.1club.ai/v1/platform/programs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/programs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"slug\": \"<string>\",\n \"description\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"color\": \"<string>\",\n \"sortOrder\": 123,\n \"minAge\": 60,\n \"maxAge\": 60,\n \"progressionTrackId\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"imageUrl": "<string>",
"color": "<string>",
"sortOrder": 123,
"minAge": 60,
"maxAge": 60,
"progressionTrackId": 123,
"classTypeCount": 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": {}
}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
255Body
Fields accepted when creating a program. Only name is required; slug is derived from it when omitted, and suffixed if that is taken. The defaults shown are what an omitted field becomes, and unknown fields are rejected.
255100Cover image shown where the program is listed, e.g. the website.
Hex colour the program is shown in, e.g. "#2563eb".
Where the program is listed, lowest first.
Youngest age the program is for, in years. Display only: it does not gate booking.
0 <= x <= 120Oldest age the program is for, in years. Display only.
0 <= x <= 120The progression track the sessions of its class types count toward, from GET /v1/platform/progression-tracks. Once any program points at a track, only sessions of those programs count toward its ranks. Must be a track the organization uses.
Response
Program created
What a student joins, e.g. "Kids BJJ (7-12)": a group of class types whose sessions count toward one progression track, and what the club website lists. Reference the id as programId on a class type. 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.
Cover image shown where the program is listed, e.g. the website.
Hex colour the program is shown in, e.g. "#2563eb".
Where the program is listed, lowest first.
Youngest age the program is for, in years. Display only: it does not gate booking.
0 <= x <= 120Oldest age the program is for, in years. Display only.
0 <= x <= 120The progression track the sessions of its class types count toward, from GET /v1/platform/progression-tracks. Once any program points at a track, only sessions of those programs count toward its ranks. Must be a track the organization uses.
Class types in the program.
Was this page helpful?