/usageGET /usage
The plan's state, including a running trial, the reason for a lapse and the sending review, the monthly send pool, the contact cap, the domain, workspace and team-member caps and the rate ceilings, as the gates enforce them, plus the organization's place in the day's sending.
Request
curl -X GET 'https://api.sendheron.com/api/v1/usage' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-H 'Content-Type: application/json'Required scopes
The key must carry these:
- analytics:read
Example response
An organization in its trial of Growth. The trial ceilings apply whichever plan was picked, so it reports the trial's 1,000 contacts and 5,000 sends and one sending domain rather than Growth's own allowance until the trial converts. Workspaces and team members already follow Growth. The day's sending position, described below, is left out of this example.
{
"plan": {
"status": "ACTIVE",
"name": "growth",
"trialEndsAt": "2026-09-30T14:05:00.000Z",
"lapsedReason": null,
"sendingReview": "APPROVED"
},
"monthlySends": {
"used": 412,
"pool": 5000,
"marketingRemaining": 4588,
"transactionalCeiling": 5500,
"transactionalRemaining": 5088,
"resetsAt": "2026-10-01T00:00:00.000Z"
},
"contacts": {
"subscribed": 230,
"cap": 1000,
"remaining": 770
},
"domains": {
"used": 1,
"cap": 1,
"remaining": 0
},
"workspaces": {
"used": 2,
"cap": 15,
"remaining": 13
},
"teamMembers": {
"used": 3,
"cap": 10,
"remaining": 7
},
"rateLimits": {
"perKeyPerMinute": 100,
"organizationPerMinute": {
"READ": 1200,
"WRITE": 400,
"SEND": 200
}
}
}Responses
Returns 200 on success.
- 400
- The payload failed validation, or the request is not valid for the current state. The body's
descriptionnames the field and says what was wrong with it in words, e.g. "domain: domain must be a bare hostname such as acme.com, with no scheme, path, or port". Theerrorcode is stable and safe to branch on;descriptionis for the human reading the log. - 401
- Missing or invalid API key.
- 403
- Valid key, but it does not carry the required scope. The
errorcode isapiKeys.insufficientScopesand thedescriptionnames both halves of the problem: "Missing required scope(s): X. This key holds: Y." Neither is a secret, since the required scopes are on this page and the held ones are your own credential, and a bare "Forbidden" costs a debugging pass to work out which of the two it was. - 404
- No such record in this workspace. An id belonging to a different workspace returns this too, never a 403, because the API will not confirm that a record exists outside the workspace your key was issued in. Read it as "not yours or not there" rather than as "definitely gone".
- 409
- A duplicate, or an idempotency key reused with a different payload.
- 429
- Either rate-limit ceiling was exceeded.
Rate limits
100/min per key, counted against the organization's READ ceiling (1200/min). Both windows are one minute.