Get the plan
The team's plan and how it is paid: the card subscription (status, period, whether it cancels at the period's end), the wallet's state (renewal date,…
https://app.usenotix.dev/api/v1/billing/subscriptionFull access and read only keys can call this. Sending access keys cannot. Key permissions lists the extra rules some calls have.
The team's plan and how it is paid: the card subscription (status, period, whether it cancels at the period's end), the wallet's state (renewal date, grace, whether units are blocked), the Pro price in the wallet's currency (a fixed local price for NGN and KES) and the Pro month the team is on, owes or is paying, with its status and whether it is cancelled at the period's end. freeProMonth is the free month of Pro a team gets for migrating to Notix (status, dates, days left, and whether proven sending history or 500+ contacts earned it); null for a team that never had one. Read only: change the plan in the dashboard.
Who can call it
A full access or read only key made by someone who is a team admin today (the team owner always is), as the billing page is for admins. A key made by a member answers 403 FORBIDDEN, and so does a key made before Notix recorded who made each key. Send-only and live AI keys answer 403 SCOPE_DENIED; a key limited to one domain answers 403 DOMAIN_PINNED. Every read is recorded in the key's audit log (GET /v1/audit-log).
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 or live AI key. `DOMAIN_PINNED`: a key limited to one domain. `FORBIDDEN`: the key was made by a member who is not a team admin, or before Notix recorded who made each key.
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/subscription" \
-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.subscription();
console.log(data?.planPayment.live?.periodEnd);
{
"plan": "BASIC",
"planName": "Pro",
"includedUnits": 50000,
"renewalPlan": "string",
"isActive": true,
"billingMethod": "STRIPE",
"stripe": {
"status": "string",
"currentPeriodStart": "2026-10-01T10:00:00.000Z",
"currentPeriodEnd": "2026-10-01T10:00:00.000Z",
"cancelAtPeriodEnd": true,
"cancelAt": "2026-10-01T10:00:00.000Z"
},
"wallet": {
"state": "ACTIVE",
"proRenewsAt": "2026-10-01T10:00:00.000Z",
"graceStartedAt": "2026-10-01T10:00:00.000Z",
"graceEndsAt": "2026-10-01T10:00:00.000Z",
"unitsBlocked": true
},
"planPayment": {
"currency": "NGN",
"priceMinor": 1,
"priceFormatted": "string",
"priceConfigured": true,
"fixedPrice": true,
"walletPaysPlan": true,
"live": {
"status": "DUE",
"paidVia": "WALLET",
"periodStart": "2026-10-01T10:00:00.000Z",
"periodEnd": "2026-10-01T10:00:00.000Z",
"amountMinor": 1,
"amountFormatted": "string",
"cancelAtPeriodEnd": true,
"graceEndsAt": "2026-10-01T10:00:00.000Z",
"invoiceNumber": "string",
"receiptReference": "string",
"plan": "SCALE"
}
},
"freeProMonth": {
"status": "PENDING_REVIEW",
"source": "RESEND",
"qualifiedBy": "EVIDENCE",
"startsAt": "2026-10-01T10:00:00.000Z",
"endsAt": "2026-10-01T10:00:00.000Z",
"daysLeft": 1
}
}