Get Credits
curl --request GET \
--url https://api.signa.so/v1/organization/credits \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/organization/credits"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/organization/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://api.signa.so/v1/organization/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://api.signa.so/v1/organization/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://api.signa.so/v1/organization/credits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/organization/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{
"object": "credit_balance",
"balance": 8500,
"grants": {
"plan": 8000,
"addon": 500,
"promo": 0
},
"reserved": 0,
"pending": 0,
"expiry_schedule": [
{
"grant_id": "grant_01HXYZPLAN",
"type": "plan",
"amount": 10000,
"revoked": 0,
"remaining": 8000,
"pending": 0,
"effective_at": "2026-04-01T00:00:00.000Z",
"expires_at": "2026-05-01T00:00:00.000Z"
},
{
"grant_id": "grant_01HXYZADDON",
"type": "addon",
"amount": 500,
"revoked": 0,
"remaining": 500,
"pending": 0,
"effective_at": "2026-04-10T00:00:00.000Z",
"expires_at": "2027-04-10T00:00:00.000Z"
}
],
"request_id": "req_abc123"
}
Usage & Credits
Get Credits
Pooled credit balance, grant breakdown, and expiry schedule
GET
/
v1
/
organization
/
credits
Get Credits
curl --request GET \
--url https://api.signa.so/v1/organization/credits \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/organization/credits"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/organization/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://api.signa.so/v1/organization/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://api.signa.so/v1/organization/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://api.signa.so/v1/organization/credits")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/organization/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{
"object": "credit_balance",
"balance": 8500,
"grants": {
"plan": 8000,
"addon": 500,
"promo": 0
},
"reserved": 0,
"pending": 0,
"expiry_schedule": [
{
"grant_id": "grant_01HXYZPLAN",
"type": "plan",
"amount": 10000,
"revoked": 0,
"remaining": 8000,
"pending": 0,
"effective_at": "2026-04-01T00:00:00.000Z",
"expires_at": "2026-05-01T00:00:00.000Z"
},
{
"grant_id": "grant_01HXYZADDON",
"type": "addon",
"amount": 500,
"revoked": 0,
"remaining": 500,
"pending": 0,
"effective_at": "2026-04-10T00:00:00.000Z",
"expires_at": "2027-04-10T00:00:00.000Z"
}
],
"request_id": "req_abc123"
}
Credits: 0.
Beta. Credits are the single billing currency across the Signa API. This endpoint’s schema is new and may evolve before general availability.
Overview
Returns the authenticated organization’s pooled credit balance: the spendable balance across all active grants, a breakdown of remaining credits by grant type (plan vs addon vs promo), and the per-grant expiry schedule in consumption
order (plan first, then oldest-expiry-first).
Requires the billing:read scope. Querying credits does not consume any credits.
Response
string
Always
"credit_balance".integer
Authoritative spendable pooled balance. Reconciles exactly:
balance = (plan + addon + promo) - reserved - pending. May be negative under the debt floor.object
integer
Credits held by open reservations (reserved but not yet settled or refunded).
integer
Billable spend not yet attributed to specific grants by the hourly applier.
object[]
Show Active grant
Show Active grant
string
Grant ID (
grant_...).string
One of
plan, addon, promo.integer
Credits originally granted.
integer
Credits taken back from this grant after a refund or dispute (0 when none). They were not spent: the organization used
amount minus revoked minus remaining.integer
Credits still usable on this grant (may be negative under debt).
integer
This grant’s share of the top-level
pending: billable spend the hourly applier has not attributed yet that it will charge to this grant (0 when none). Spend charged to grants that have since ended, or made while no grant was active, is the only part of pending not in any entry. Credits still usable on this grant in real time are remaining minus pending.string
ISO timestamp for when the grant became usable.
string
ISO timestamp for when the grant expires (exclusive).
string
Request ID for debugging.
{
"object": "credit_balance",
"balance": 8500,
"grants": {
"plan": 8000,
"addon": 500,
"promo": 0
},
"reserved": 0,
"pending": 0,
"expiry_schedule": [
{
"grant_id": "grant_01HXYZPLAN",
"type": "plan",
"amount": 10000,
"revoked": 0,
"remaining": 8000,
"pending": 0,
"effective_at": "2026-04-01T00:00:00.000Z",
"expires_at": "2026-05-01T00:00:00.000Z"
},
{
"grant_id": "grant_01HXYZADDON",
"type": "addon",
"amount": 500,
"revoked": 0,
"remaining": 500,
"pending": 0,
"effective_at": "2026-04-10T00:00:00.000Z",
"expires_at": "2027-04-10T00:00:00.000Z"
}
],
"request_id": "req_abc123"
}
Code Examples
curl "https://api.signa.so/v1/organization/credits" \
-H "Authorization: Bearer sig_xxxxxxxxxxxx"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: "sig_xxxxxxxxxxxx" });
const credits = await signa.organization.credits();
console.log(credits.balance, credits.grants.plan, credits.grants.addon);
import requests
resp = requests.get(
"https://api.signa.so/v1/organization/credits",
headers={"Authorization": "Bearer sig_xxxxxxxxxxxx"},
)
credits = resp.json()
Related Endpoints
- Get Usage Summary — daily usage breakdown in credit terms
- Get Usage — current billing period totals by endpoint type