Usage and limits
Get Usage
What your organization used, by day or by month, in total and for each workspace. Days are UTC, counted on the day a job was created. The last two days are refreshed when you read.
Scope: usage:read.
GET
/
usage
Get Usage
curl --request GET \
--url https://api.clustr-ai.com/api/org/v1/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.clustr-ai.com/api/org/v1/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.clustr-ai.com/api/org/v1/usage', 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.clustr-ai.com/api/org/v1/usage",
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.clustr-ai.com/api/org/v1/usage"
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.clustr-ai.com/api/org/v1/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clustr-ai.com/api/org/v1/usage")
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{
"success": true,
"data": {
"organizationId": "5d8e2b1a-0c3f-4e7d-9a6b-1f2e3d4c5b6a",
"from": "2026-10-01",
"to": "2026-10-13",
"by": "month",
"total": {
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
},
"periods": [
{
"period": "2026-10",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200,
"tenants": [
{
"tenantId": "3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9e1f42",
"externalId": "client-1234",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
}
]
}
],
"tenants": [
{
"tenantId": "3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9e1f42",
"externalId": "client-1234",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
}
]
}
}{
"success": false,
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request body.",
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or revoked API key"
}
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "This key lacks the tenants:write scope"
}
}{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests"
}
}{
"success": false,
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The organization service is unavailable"
}
}Authorizations
Organization API key (clo_...). The X-API-Key header is also accepted in place of Authorization: Bearer.
Query Parameters
First day. Default 29 days before today (UTC), so 30 days in all.
Last day, included. Default today (UTC). At most 800 days after from.
Group by day or by month.
Available options:
day, month Only this workspace, by id or externalId.
⌘I
Get Usage
curl --request GET \
--url https://api.clustr-ai.com/api/org/v1/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.clustr-ai.com/api/org/v1/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.clustr-ai.com/api/org/v1/usage', 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.clustr-ai.com/api/org/v1/usage",
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.clustr-ai.com/api/org/v1/usage"
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.clustr-ai.com/api/org/v1/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clustr-ai.com/api/org/v1/usage")
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{
"success": true,
"data": {
"organizationId": "5d8e2b1a-0c3f-4e7d-9a6b-1f2e3d4c5b6a",
"from": "2026-10-01",
"to": "2026-10-13",
"by": "month",
"total": {
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
},
"periods": [
{
"period": "2026-10",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200,
"tenants": [
{
"tenantId": "3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9e1f42",
"externalId": "client-1234",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
}
]
}
],
"tenants": [
{
"tenantId": "3f6c1d2e-8a4b-4c1f-9e2d-7b5a0c9e1f42",
"externalId": "client-1234",
"connectorsProcessed": 1840,
"profilesFresh": 620,
"profilesCached": 1220,
"exportRows": 15200
}
]
}
}{
"success": false,
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request body.",
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or revoked API key"
}
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "This key lacks the tenants:write scope"
}
}{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests"
}
}{
"success": false,
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The organization service is unavailable"
}
}