curl --request GET \
--url https://api.1club.ai/v1/platform/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/transactions"
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/transactions', 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/transactions",
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/transactions"
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/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/transactions")
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[
{
"id": 123,
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"transactionType": "<string>",
"bookingId": 123,
"membershipId": 123,
"contactId": 123,
"clubId": 123,
"createdAt": "2023-11-07T05:31:56Z",
"date": "2023-11-07T05:31:56Z",
"paymentStatus": "pending",
"amount": "<string>",
"taxAmount": "<string>",
"totalAmount": "<string>"
}
]{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}{
"error": "<string>",
"code": "<string>",
"details": {}
}List transactions for the organization
Returns transactions for the organization associated with the API token, filtered by transaction creation time and ordered by createdAt descending, then by id. Each bound is an ISO date-time, or a bare YYYY-MM-DD read as midnight UTC. startDate is inclusive and endDate is exclusive. When both are omitted, the window defaults to the last 24 hours (endDate = now, startDate = now - 24h); when only one is given, the other is derived from that same 24-hour span.
A single request may span at most 93 days. Cover a longer range in consecutive windows, passing the previous window’s endDate as the next one’s startDate - because the upper bound is exclusive, that chains without counting a boundary transaction twice.
Filtering by contactId, bookingId or membershipId lists that record’s transactions. With one of those and no startDate/endDate, there is no window at all: every transaction of the contact, booking or membership comes back, newest first. Send a bound to window it as usual.
Note that this endpoint returns a bare array with no total - a full page (limit rows) means there are probably more, so keep advancing offset until a short page comes back.
Ordering is total (createdAt descending, then id), so offset paging is well defined for a fixed set of rows. It is not stable against concurrent writes: rows are ordered newest first, so a transaction created part-way through a walk lands on the first page and shifts every later row down by one, which can push an unread row past an offset already passed. Pass an explicit endDate in the past rather than relying on the now default - anything written after it falls outside the window and cannot shift the pages underneath you.
curl --request GET \
--url https://api.1club.ai/v1/platform/transactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.1club.ai/v1/platform/transactions"
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/transactions', 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/transactions",
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/transactions"
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/transactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.1club.ai/v1/platform/transactions")
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[
{
"id": 123,
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"transactionType": "<string>",
"bookingId": 123,
"membershipId": 123,
"contactId": 123,
"clubId": 123,
"createdAt": "2023-11-07T05:31:56Z",
"date": "2023-11-07T05:31:56Z",
"paymentStatus": "pending",
"amount": "<string>",
"taxAmount": "<string>",
"totalAmount": "<string>"
}
]{
"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
Inclusive lower bound on transaction createdAt, as an ISO date-time or YYYY-MM-DD. Defaults to endDate - 24h, or to no bound when filtering by contact, booking or membership.
Exclusive upper bound on transaction createdAt, as an ISO date-time or YYYY-MM-DD. Defaults to now, or to no bound when filtering by contact, booking or membership.
Filter by payment status. When omitted, all statuses are returned.
pending, paid, void, failed, settled, overdue, partially_paid, refunded, cancelled Only transactions charged to this contact (the payer). Lifts the default window when no date bound is sent.
Only this booking's transactions - its charge, and any cancellation credit against it. Lifts the default window when no date bound is sent.
Only this membership's transactions - its sale, renewals, signup fee and adjustments. Lifts the default window when no date bound is sent.
Only transactions of this kind.
booking_creation, booking_cancellation, membership_creation, membership_recurrence, membership_signup_fee, membership_price_adjustment, membership_cancellation, product_sale, external_program_entry, checkin_creation, settlement Maximum number of transactions to return.
1 <= x <= 100Number of transactions to skip.
x >= 0Response
List of transactions
Stable unguessable identifier. Prefer this over id when storing a reference.
TransactionType enum value (e.g. booking_creation, membership_creation, product_sale, membership_recurrence, etc.). A settlement recorded with POST /v1/platform/transactions is settlement.
The customer charged, when there is one.
Set on a settlement only; other transactions take their club from their booking or membership.
pending, paid, void, failed, settled, overdue, partially_paid, refunded, cancelled Pre-tax amount as a decimal string (e.g. "25.00"). Serialized as a string to preserve precision.
Tax portion as a decimal string.
Total billed amount as a decimal string (amount + taxAmount).
Was this page helpful?