Usage
| Endpoint | What it does |
|---|---|
GET /usage | What the account has used, against its plan’s allowances. |
GET /activity | The account’s recent events. See Accounts. |
Calling GET /usage spends none of the allowances it reports. Nothing about a message is in it. The same numbers are on the API screen in the app, on the Usage tab, with the event log under them.
{ "plan": { "id": "plan_scale", "name": "Scale" }, "addresses": { "used": 12, "limit": 1000, "remaining": 988, "assigned": 4 }, "messagesReceived": { "used": 3140, "limit": 750000, "windowEndsAt": "2026-10-03T00:00:00.000Z" }, "messagesSent": { "hour": { "used": 2, "limit": 60, "windowEndsAt": "2026-09-19T11:00:00.000Z" }, "day": { "used": 9, "limit": 250, "windowEndsAt": "2026-09-20T00:00:00.000Z" } }, "objectReads": { "used": 220, "limit": 4167, "windowEndsAt": "2026-09-19T11:00:00.000Z" }, "devices": { "used": 3, "limit": null }, "paired": { "used": 4, "limit": null }, "agents": { "used": 1, "allowed": true }, "apiKeys": { "used": 2, "limit": 20, "allowed": true }, "webhooks": { "used": 1, "limit": 10, "allowed": true }, "domains": { "used": 1, "limit": 10 }, "messagesStored": 418}| Field | What it counts |
|---|---|
addresses | Addresses held, against the account’s address allowance. Every address counts, assigned or not. |
messagesReceived | Mail taken in during the current 30-day window, by SMTP and through POST /messages. The window is fixed, not rolling, and starts again at windowEndsAt. While the account is paused after a missed payment, the limit shown is the lapsed plan’s, which is what held mail counts against. |
messagesSent.hour | Mail sent this clock hour, against the account’s hourly limit: 60, or more on Fleet and Enterprise (see Rate limits). |
messagesSent.day | Mail sent today, against the plan’s daily limit. It starts again at 00:00 UTC. |
objectReads | Message bodies and attachments fetched this hour, charged per object rather than per request. |
devices | Paired devices, not counting agents, against the plan’s limit. null means unlimited. |
paired | Devices and agents together, which is what the device limit counts when pairing. |
agents, apiKeys, webhooks | How many are held, and in allowed whether the plan includes them at all. apiKeys and webhooks also give the account’s limit. |
domains | Your own domains held, against the plan’s limit, which is 0 below Scale. |
messagesStored | Messages the account is holding now, across every address and folder. |
windowEndsAt is when that counter starts again.
A limit reached returns 429 with Retry-After, or 402 allocation_exhausted for addresses. See Rate limits.
Events
Section titled “Events”GET /activity returns the account’s events, newest first, with limit (default 20, at most 200). The response has activity and nextCursor; pass nextCursor back as cursor to read the page before it. It is null on the last page. Events are kept for 90 days. Each carries an id (act_…), an operatorId, a kind, a createdAt and, where they apply, an inboxId and a workerId. The kinds are worker.paired, worker.removed, inbox.created, inbox.deleted, inbox.assigned, inbox.removed and subscription.updated, as webhooks name them, plus message.received (delivered through POST /messages), mail.received (arrived by SMTP) and mail.sent.
Events are a record of what happened, not of what was in it: there is nothing in them about senders, subjects or bodies, because the server never had them.
© Northlab Studios Ltd, trading as Mailcycle. Registered in England and Wales, company no. 17462734. Registered office: 167-169 Great Portland Street, London W1W 5PF.