Get usage
The figures the Usage and billing pages show: this billing period's emails against the monthly and daily limits (the daily limit is the one enforced…
https://app.usenotix.dev/api/v1/billing/usageFull access and read only keys can call this. Sending access keys cannot. Key permissions lists the extra rules some calls have.
The figures the Usage and billing pages show: this billing period's emails against the monthly and daily limits (the daily limit is the one enforced today), the plan's units and an estimate of any overage, the team's domains, contact books, members and webhooks against the plan, the API rate limit, and this calendar month's emails, texts and one-time codes. payAsYouGo says whether sending carries on past the plan's units, the units used and included, the units above the allowance so far this period (counted only on days pay-as-you-go was on) and what they cost. It is read only: pay-as-you-go is switched on or off in the dashboard by a team admin, never through the API. thisMonth.textSpendFormatted (what the texts cost the wallet) is only given to a key made by a team admin that is not limited to one domain; it is null otherwise.
Who can call it
Full access, read only and live AI keys, including a key limited to one domain: they help a caller stay within the team's limits. Send-only keys answer 403 SCOPE_DENIED.
The team can make 60 billing reads a minute through the API (20 for invoices, which are read from Stripe, within a limit shared by every team); when Notix cannot count them the answer is 503 SERVICE_UNAVAILABLE (try again shortly), never a 429.
Headers
Bearer followed by your API key.
Errors
`SCOPE_DENIED`: a send-only key.
The read took longer than 10 seconds.
The team read billing 60 times in the last minute.
The rate counters cannot be read just now; try again shortly.
Every error has the same shape. See all error codes.
curl -X GET "https://app.usenotix.dev/api/v1/billing/usage" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.billing.usage();
const daily = data?.sending.daily; // used, limit, percentUsed
{
"period": {
"startDay": "2026-10-01",
"endDay": "string",
"label": "string"
},
"plan": {
"key": "BASIC",
"effectiveKey": "string",
"displayName": "Acme",
"monthlyUsd": 1,
"status": "string",
"isEntitled": true
},
"emails": {
"marketingThisMonth": 1,
"transactionalThisMonth": 1,
"totalThisMonth": 1,
"totalToday": 1
},
"sending": {
"monthly": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
},
"daily": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
}
},
"units": {
"included": 1,
"used": 1,
"overage": 1,
"overageUsd": 1,
"overageMinor": 1,
"overageFormatted": "string",
"unitPriceFormatted": "string",
"note": "string"
},
"billing": {
"method": "STRIPE",
"currency": "NGN",
"unitPriceMicro": 1
},
"resources": {
"domains": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
},
"contactBooks": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
},
"teamMembers": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
},
"webhooks": {
"used": 1,
"limit": 1,
"unlimited": true,
"percentUsed": 1
}
},
"payAsYouGo": {
"on": true,
"eligible": true,
"includedUnits": 50000,
"usedUnits": 1,
"overageUnitsThisPeriod": 1,
"overageCost": {
"minor": 1,
"formatted": "$2.00",
"currency": "NGN"
},
"blocked": "reconfirm"
},
"apiRateLimit": 1,
"thisMonth": {
"emails": {
"used": 1,
"limit": 1,
"unlimited": true,
"percent": 1
},
"texts": 1,
"codes": 1,
"forwarded": 1,
"textSpendFormatted": "Thanks for your order."
}
}