List the credit ledger
https://api.norreach.app/v1/credits/ledgerEvery grant and charge, newest first: what was charged, how much (charges are negative), how many units (minutes, segments, actions) and what it was for when that is something the API knows (a call, a message, an ad launch …). Filter by kind, action and a day range (from / to, UTC, at most 366 days). Owners and admins.
curl -X GET "https://api.norreach.app/v1/credits/ledger" \
-H "Authorization: Bearer $NORREACH_API_KEY"{
"object": "list",
"data": [
{
"id": "9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"object": "credit_ledger_entry",
"kind": "debit",
"action": "call.minute",
"label": "AI call minutes",
"amount": {
"credits": -30,
"exact": "-30"
},
"units": 2.5,
"ref": {
"object": "call",
"id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e"
},
"created_at": "2026-11-04T10:12:00.000Z"
}
],
"has_more": true,
"next_cursor": "eyJ2IjoiMjAyNi0xMS0wNFQxMDoxMjowMC4wMDBaIiwiaSI6IjljOGI3YTZkIn0"
}Authorizations
Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope billing:read. API keys and scopes
Query parameters
Page size (1–200, default 50).
The next_cursor of the previous page.
grantdebitadjustrefundOnly this action (email.send, call.minute …).
First day (YYYY-MM-DD, UTC; default 29 days before to).
Last day (YYYY-MM-DD, UTC; default today).
Response
200application/json— List the credit ledger
Show child attributesHide child attributes
An id (UUID).
grant, debit (a charge), adjust or refund.
grantdebitadjustrefundWhat was charged (email.send, call.minute …).
Signed: charges are negative.
Show child attributesHide child attributes
Whole credits (rounded half away from zero).
The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.
How many units were charged (minutes, segments, actions).
What the charge was for, when it points at something the API knows.
RFC 3339 UTC timestamp with milliseconds.
Errors
Errors are application/problem+json with a stable code.
| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The request couldn't be read. |
| 400 | unknown_field | The request has a field this operation doesn't know. |
| 400 | invalid_cursor | That cursor doesn't belong to this list. |
| 401 | unauthorized | A valid API key is required. |
| 403 | insufficient_scope | This API key doesn't have the scope this operation needs. |
| 403 | feature_not_enabled | The API isn't switched on for this workspace. |
| 403 | role_forbidden | The key's creator's role can't do this. |
| 422 | validation_failed | The request has invalid fields. |
| 429 | rate_limited | Too many requests. Slow down and try again. |
| 500 | server_error | Something went wrong on our side. |
| 503 | unavailable | The API isn't available right now. Try again shortly. |