Get account usage by month, today's counters, and plan limits

GET /v1/usage

Counts for the whole account, so test and live keys read the same numbers. Months and days are UTC; the current month comes first and is month-to-date. Scope: billing.

Send your API key as a bearer token: Authorization: Bearer ssms_sk_.... Test keys run this endpoint against the sandbox; see Authentication for key modes and scopes.

Query parameters

NameTypeRequiredDescription
monthsintegerNoHow many months to return, counting back from the current one Default 3. Maximum 6. Minimum 1.

Responses

StatusMeaningBody
200UsageUsage
400Invalid monthsError
401Missing, malformed, or revoked API keyError
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or chargedError
429Rate limit or quota exceededError

200: Usage fields

FieldTypeDescription
objectusage
monthsarray of UsageCountersNewest first; a month with no traffic is listed with zeros
todayUsageCountersThe current UTC day so far
limitsobjectCaps applied to live traffic on your plan; null means no cap
limits.messages_per_dayintegerExample: 10000.
limits.messages_per_monthintegerNullable.
limits.lookups_per_dayinteger0 when live lookups are not available on your plan Example: 5000.
limits.verifications_per_dayintegerExample: 2000.
limits.verifications_per_monthintegerNullable.

Errors

StatusWhen
400Invalid months
401Missing, malformed, or revoked API key
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged
429Rate limit or quota exceeded

Every error has the same JSON shape, and request_id matches the X-Request-Id response header. Errors lists every code and what to do about it.

json
{
  "error": {
    "code": "invalid_request",
    "message": "What went wrong, in plain words.",
    "param": "the_field",
    "request_id": "req_a1B2c3D4e5F6g7H8"
  }
}

Examples

curl

bash
curl -X GET "https://api.joinsimplesms.com/v1/usage" \
  -H "Authorization: Bearer $SIMPLESMS_API_KEY"

Node.js

The Node.js SDK does not wrap this endpoint yet; call it with fetch.

javascript
const res = await fetch('https://api.joinsimplesms.com/v1/usage', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLESMS_API_KEY}`,
  },
});

if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();

Python

The Python SDK does not wrap this endpoint yet; call it over HTTP.

python
import json, os, urllib.request

req = urllib.request.Request(
    "https://api.joinsimplesms.com/v1/usage",
    method="GET",
    headers={
        "Authorization": f"Bearer {os.environ['SIMPLESMS_API_KEY']}",
    },
)
with urllib.request.urlopen(req) as res:
    data = json.load(res)