curl --request GET \
--url https://app.base44.com/api/v1/monitoring/analytics/{workspace_id} \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/v1/monitoring/analytics/{workspace_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://app.base44.com/api/v1/monitoring/analytics/{workspace_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 => [
"api_key: <api-key>"
],
]);
$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://app.base44.com/api/v1/monitoring/analytics/{workspace_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"summary": {
"total_applications": 127,
"total_superagents": 7,
"avg_apps_per_user": 3.2,
"avg_superagents_per_user": 0.4,
"total_registered_users": 42,
"total_workspace_members": 36,
"total_guest_users": 6,
"active_users_last_30d": 38,
"published_apps": 89
},
"user_distribution": {
"total_users": 42
},
"app_distribution": {
"apps_per_user_ranges": [
{
"range": "1-2",
"count": 25
}
],
"median_apps_per_user": 2.5,
"total_users": 42
},
"credit_pool": {
"period_start": "2025-10-01T00:00:00Z",
"period_end": "2025-11-01T00:00:00Z",
"tier": "enterprise",
"tier_display_name": "Enterprise",
"messages": {
"limit": 20000,
"used": 12450,
"remaining": 7550
},
"integration": {
"limit": 20000,
"used": 12450,
"remaining": 7550
},
"daily_message_limit": 123,
"daily_message_used": 320,
"bonus_message_credits": 500,
"bonus_integration_credits": 0,
"rollover_message_credits": 1,
"rollover_integration_credits": 1,
"gift_card_credits_remaining": 0,
"is_over_limit": false,
"is_past_due": false
},
"member_allocations": {
"members_with_limit": 18,
"members_over_limit": 2,
"default_member_limit": 1000,
"capability_enabled": true
},
"credits": {
"message_credits": 12450,
"integration_credits": 3280,
"total_credits": 15730,
"message_credits_distribution": [
{
"range": "11-50",
"count": 18
}
],
"integration_credits_distribution": [
{
"range": "11-50",
"count": 18
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get analytics
Returns workspace-level analytics including summary KPIs, app distribution per user, the workspace credit pool, per-member credit-limit aggregates, and credit consumption.
Data is real-time from the database.
curl --request GET \
--url https://app.base44.com/api/v1/monitoring/analytics/{workspace_id} \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/v1/monitoring/analytics/{workspace_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://app.base44.com/api/v1/monitoring/analytics/{workspace_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 => [
"api_key: <api-key>"
],
]);
$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://app.base44.com/api/v1/monitoring/analytics/{workspace_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/v1/monitoring/analytics/{workspace_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"summary": {
"total_applications": 127,
"total_superagents": 7,
"avg_apps_per_user": 3.2,
"avg_superagents_per_user": 0.4,
"total_registered_users": 42,
"total_workspace_members": 36,
"total_guest_users": 6,
"active_users_last_30d": 38,
"published_apps": 89
},
"user_distribution": {
"total_users": 42
},
"app_distribution": {
"apps_per_user_ranges": [
{
"range": "1-2",
"count": 25
}
],
"median_apps_per_user": 2.5,
"total_users": 42
},
"credit_pool": {
"period_start": "2025-10-01T00:00:00Z",
"period_end": "2025-11-01T00:00:00Z",
"tier": "enterprise",
"tier_display_name": "Enterprise",
"messages": {
"limit": 20000,
"used": 12450,
"remaining": 7550
},
"integration": {
"limit": 20000,
"used": 12450,
"remaining": 7550
},
"daily_message_limit": 123,
"daily_message_used": 320,
"bonus_message_credits": 500,
"bonus_integration_credits": 0,
"rollover_message_credits": 1,
"rollover_integration_credits": 1,
"gift_card_credits_remaining": 0,
"is_over_limit": false,
"is_past_due": false
},
"member_allocations": {
"members_with_limit": 18,
"members_over_limit": 2,
"default_member_limit": 1000,
"capability_enabled": true
},
"credits": {
"message_credits": 12450,
"integration_credits": 3280,
"total_credits": 15730,
"message_credits_distribution": [
{
"range": "11-50",
"count": 18
}
],
"integration_credits_distribution": [
{
"range": "11-50",
"count": 18
}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API key for authentication. See the Authentication page for your API for details on how to get your key.
Path Parameters
Query Parameters
Start date in YYYY-MM-DD format. Defaults to billing period start.
End date in YYYY-MM-DD format. Defaults to current date. Max 1 year range.
Response
Successful Response
Workspace analytics data.
High-level workspace summary.
Show child attributes
Show child attributes
User distribution breakdown.
Show child attributes
Show child attributes
App distribution statistics.
Show child attributes
Show child attributes
Workspace credit pool state for the current credit reset period.
Show child attributes
Show child attributes
Aggregate view of per-member credit limits drawn from the shared pool.
Show child attributes
Show child attributes
Credits consumption summary.
Show child attributes
Show child attributes
Was this page helpful?