curl --request GET \
--url https://service.abundly.ai/workspaceapi/credits \
--header 'Authorization: Bearer <token>'import requests
url = "https://service.abundly.ai/workspaceapi/credits"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://service.abundly.ai/workspaceapi/credits', 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://service.abundly.ai/workspaceapi/credits",
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://service.abundly.ai/workspaceapi/credits"
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://service.abundly.ai/workspaceapi/credits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.abundly.ai/workspaceapi/credits")
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{
"totalBalance": 123,
"totalBalanceNoNegative": 123,
"topupBalance": 123,
"subscriptionBalance": 123,
"isSandboxBlockedByProductionReserve": true,
"agentUsage": {},
"groupUsage": {},
"lastUpdated": "<string>",
"defaultDailyCreditLimitPerAgent": 123,
"productionCreditReserve": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Get credit balances and current usage
A live snapshot: workspace balances, credits used today per agent (all agents, including disabled and private ones), and credits used this month per team. Accepts no date filters and keeps no history — snapshot the response yourself if you need a time series.
curl --request GET \
--url https://service.abundly.ai/workspaceapi/credits \
--header 'Authorization: Bearer <token>'import requests
url = "https://service.abundly.ai/workspaceapi/credits"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://service.abundly.ai/workspaceapi/credits', 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://service.abundly.ai/workspaceapi/credits",
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://service.abundly.ai/workspaceapi/credits"
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://service.abundly.ai/workspaceapi/credits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.abundly.ai/workspaceapi/credits")
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{
"totalBalance": 123,
"totalBalanceNoNegative": 123,
"topupBalance": 123,
"subscriptionBalance": 123,
"isSandboxBlockedByProductionReserve": true,
"agentUsage": {},
"groupUsage": {},
"lastUpdated": "<string>",
"defaultDailyCreditLimitPerAgent": 123,
"productionCreditReserve": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Workspace API key (wk_). GET endpoints require the Workspace read API scope, POST endpoints the Workspace write API scope.
Response
Success. Empty result sets are also 200.
Live snapshot — today per agent, current month per team.
totalBalance floored at zero.
True while the balance has fallen to the reserve, which stops every sandbox agent regardless of its own limit.
Keyed by agent id. Covers every agent, including disabled and private ones.
Show child attributes
Show child attributes
Keyed by team id.
Show child attributes
Show child attributes
ISO 8601 timestamp.
Credits held back for production agents. Absent when lifecycle phases are off or no reserve is set.

