Docs
Credits

Get the credit balance

GEThttps://api.norreach.app/v1/credits

The workspace's credit balance (the exact sum of every grant and charge), its plan and the credits the plan includes per month, and what was spent and granted over from–to (YYYY-MM-DD, UTC; default the last 30 days, at most 366), per action. Credits are whole numbers; exact keeps the fraction a per-minute charge can leave. Owners and admins.

billing:readRole must allow: billing.viewOperation id: get_credits
GET/credits
curl -X GET "https://api.norreach.app/v1/credits" \
  -H "Authorization: Bearer $NORREACH_API_KEY"
Get the credit balance
{
  "object": "credits",
  "balance": {
    "credits": 18431,
    "exact": "18430.5"
  },
  "plan": "pro",
  "monthly_allowance": {
    "credits": 25000,
    "confirmed": true
  },
  "usage": {
    "from": "2026-10-07",
    "to": "2026-11-05",
    "spent": {
      "credits": 6569,
      "exact": "6569"
    },
    "granted": {
      "credits": 25000,
      "exact": "25000"
    },
    "by_action": [
      {
        "action": "call.minute",
        "label": "AI call minutes",
        "spent": {
          "credits": 4104,
          "exact": "4104"
        },
        "count": 120
      },
      {
        "action": "email.send",
        "label": "Emails sent",
        "spent": {
          "credits": 1830,
          "exact": "1830"
        },
        "count": 1830
      }
    ],
    "truncated": false
  }
}

Authorizations

Authorizationstringheaderrequired

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

fromstring (date)query

First day (YYYY-MM-DD, UTC; default 29 days before to).

tostring (date)query

Last day (YYYY-MM-DD, UTC; default today).

Response

200application/json— Get the credit balance

object"credits"required
balanceobjectrequired

What the workspace has now: the sum of every grant and charge.

Show child attributes
balance.creditsintegerrequired

Whole credits (rounded half away from zero).

balance.exactstringrequired

The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.

planstring | nullrequired

The workspace's plan (free, pro, enterprise), or null.

monthly_allowanceobject | nullrequired

Credits the plan includes per month.

usageobjectrequired

Spent and granted in the period.

Show child attributes
usage.fromstringrequired

First day (YYYY-MM-DD, UTC).

usage.tostringrequired

Last day (YYYY-MM-DD, UTC).

usage.spentobjectrequired

An amount of credits.

Show child attributes
usage.spent.creditsintegerrequired

Whole credits (rounded half away from zero).

usage.spent.exactstringrequired

The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.

usage.grantedobjectrequired

An amount of credits.

Show child attributes
usage.granted.creditsintegerrequired

Whole credits (rounded half away from zero).

usage.granted.exactstringrequired

The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.

usage.by_actionobject[]required
Show child attributes
usage.by_action[].actionstringrequired

What was charged (email.send, call.minute …).

usage.by_action[].labelstringrequired
usage.by_action[].spentobjectrequired

An amount of credits.

Show child attributes
usage.by_action[].spent.creditsintegerrequired

Whole credits (rounded half away from zero).

usage.by_action[].spent.exactstringrequired

The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.

usage.by_action[].countintegerrequired

How many charges.

usage.truncatedbooleanrequired

true when the period held more charges than were summed (20 000).

Errors

Errors are application/problem+json with a stable code.

StatusCodeMeaning
400bad_requestThe request couldn't be read.
400unknown_fieldThe request has a field this operation doesn't know.
401unauthorizedA valid API key is required.
403insufficient_scopeThis API key doesn't have the scope this operation needs.
403feature_not_enabledThe API isn't switched on for this workspace.
403role_forbiddenThe key's creator's role can't do this.
422validation_failedThe request has invalid fields.
429rate_limitedToo many requests. Slow down and try again.
500server_errorSomething went wrong on our side.
503unavailableThe API isn't available right now. Try again shortly.