curl --request GET \
--url https://api.1club.ai/v1/platform/plans/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/plans/{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/plans/{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/plans/{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/plans/{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/plans/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/plans/{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{
"planId": 123,
"name": "<string>",
"description": "<string>",
"clubId": 123,
"seasonId": 123,
"planCategoryId": 123,
"revenueAccountId": 123,
"price": 123,
"signupFee": 123,
"billingFrequency": "<string>",
"isActive": true,
"maxUses": 123,
"sessionUnit": "<string>",
"validityPeriod": 123,
"autoRenews": true,
"renewalDaysInAdvance": 123,
"requirePaymentUpfront": true,
"customPeriod": 123,
"customPeriodUnit": "<string>",
"features": [
"<string>"
],
"visibility": "Private",
"validFor": {},
"sports": [
"<string>"
]
}{
"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 membership plan
Returns a single plan, including what a membership on it costs and what it grants. Retired plans resolve here too - hiding them is the list’s job, and a caller that just retired a plan still needs to read it back or undo it.
curl --request GET \
--url https://api.1club.ai/v1/platform/plans/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/plans/{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/plans/{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/plans/{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/plans/{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/plans/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/plans/{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{
"planId": 123,
"name": "<string>",
"description": "<string>",
"clubId": 123,
"seasonId": 123,
"planCategoryId": 123,
"revenueAccountId": 123,
"price": 123,
"signupFee": 123,
"billingFrequency": "<string>",
"isActive": true,
"maxUses": 123,
"sessionUnit": "<string>",
"validityPeriod": 123,
"autoRenews": true,
"renewalDaysInAdvance": 123,
"requirePaymentUpfront": true,
"customPeriod": 123,
"customPeriodUnit": "<string>",
"features": [
"<string>"
],
"visibility": "Private",
"validFor": {},
"sports": [
"<string>"
]
}{
"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
Response
The plan
A membership plan. It carries its own price, joining fee, billing frequency and session allowance, so creating a membership only has to name the plan and the customer.
Club the plan is limited to; null when organization-wide.
Set when the plan sells a season, and the marker that it is not for sale through this API: a season pass costs the sum of the slots the buyer picks, so the plan's own price is 0 and a membership created against it would put a member on a large contract for nothing. GET /v1/platform/plans excludes these; get-by-id resolves one so a membership already sold against it can be explained. Check it before treating any plan as sellable.
Category the plan is grouped under on price lists; null when ungrouped.
Ledger account a sale posts to; null means the organization's default account is used at the time of the sale.
Charged each billing period.
Charged once when the membership starts, on top of the price.
False for a retired plan that is no longer sold.
Session allowance a membership gets; null when unlimited.
What a use is counted in - a booking or an hour.
Days the membership stays valid, when time-limited.
Whether a membership on this plan renews by default.
Private, Member_only, Public Booking resource scopes and optional type filters covered by the plan.
Was this page helpful?