curl --request GET \
--url https://api.1club.ai/v1/platform/reports/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/reports/activity"
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/reports/activity', 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/reports/activity",
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/reports/activity"
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/reports/activity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/reports/activity")
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{
"period": {
"from": "2023-12-25",
"to": "2023-12-25",
"days": 123
},
"timezone": "<string>",
"totals": {
"bookings": 123,
"confirmedBookings": 123,
"pendingBookings": 123,
"cancelledBookings": 123,
"checkins": 123,
"visitors": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
},
"comparison": {
"kind": "previous_period",
"period": {
"from": "2023-12-25",
"to": "2023-12-25"
},
"totals": {
"bookings": 123,
"confirmedBookings": 123,
"pendingBookings": 123,
"cancelledBookings": 123,
"checkins": 123,
"visitors": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
},
"change": {
"bookings": {
"amount": 123,
"percent": 123
},
"cancelledBookings": {
"amount": 123,
"percent": 123
},
"checkins": {
"amount": 123,
"percent": 123
},
"visitors": {
"amount": 123,
"percent": 123
}
}
},
"trend": {
"granularity": "day",
"points": [
{
"start": "2023-12-25",
"bookings": 123,
"checkins": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
}
]
},
"byWeekday": [
{
"weekday": "Mon",
"averageBookings": 123,
"averageCheckins": 123
}
]
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}Activity report for a period
How busy the organization was over a period - bookings, check-ins, the people behind them and how full its classes, courts and coaches were - in one request rather than a count of the bookings and check-ins lists.
These are the figures of the admin’s Historical dashboard for the same days. bookings are the bookings starting in the period and not cancelled (class seats, courts and rooms, sessions with a coach; the holds the platform places for a class’s court and coach are no one’s booking and are left out), checkins the check-ins on the day of the visit, and visitors the distinct contacts with either. Utilization is what was booked over what there was to fill across the whole period: class seats taken of the seats offered, and court, room and coach hours booked of the hours open. A cancelled class offers no seats.
The period is compared with the same number of days just before it (compare=previous_period, the default) or the same dates a year earlier (previous_year). trend buckets it by day, week (starting Monday) or month - by default a month or less by day, up to six months by week, anything longer by month - and byWeekday gives the average day of each weekday.
Days are the club’s own calendar days, on the organization’s clock. A period may span at most 366 days. Reports have their own limit of 20 requests a minute, on top of the platform’s.
curl --request GET \
--url https://api.1club.ai/v1/platform/reports/activity \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/reports/activity"
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/reports/activity', 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/reports/activity",
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/reports/activity"
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/reports/activity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/reports/activity")
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{
"period": {
"from": "2023-12-25",
"to": "2023-12-25",
"days": 123
},
"timezone": "<string>",
"totals": {
"bookings": 123,
"confirmedBookings": 123,
"pendingBookings": 123,
"cancelledBookings": 123,
"checkins": 123,
"visitors": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
},
"comparison": {
"kind": "previous_period",
"period": {
"from": "2023-12-25",
"to": "2023-12-25"
},
"totals": {
"bookings": 123,
"confirmedBookings": 123,
"pendingBookings": 123,
"cancelledBookings": 123,
"checkins": 123,
"visitors": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
},
"change": {
"bookings": {
"amount": 123,
"percent": 123
},
"cancelledBookings": {
"amount": 123,
"percent": 123
},
"checkins": {
"amount": 123,
"percent": 123
},
"visitors": {
"amount": 123,
"percent": 123
}
}
},
"trend": {
"granularity": "day",
"points": [
{
"start": "2023-12-25",
"bookings": 123,
"checkins": 123,
"utilization": {
"class": 123,
"area": 123,
"instructor": 123
}
}
]
},
"byWeekday": [
{
"weekday": "Mon",
"averageBookings": 123,
"averageCheckins": 123
}
]
}{
"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.
Query Parameters
First day of the period (YYYY-MM-DD), on the organization's own clock.
Last day of the period, inclusive.
Only this club's bookings, check-ins and capacity.
What to compare the period with.
previous_period, previous_year, none How trend buckets the period. Chosen from the period's length when omitted.
day, week, month Response
The report
Show child attributes
Show child attributes
The clock the days are read on: the organization's timezone, as on the admin analytics dashboards.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The average day of each weekday in the period, Sunday first.
Show child attributes
Show child attributes
Was this page helpful?