Get one-time code figures
What became of the codes made over range (24h, 7d, 30d or 90d; 7d by default), optionally for one channel: sent, verified, expired (including pending…
https://app.usenotix.dev/api/v1/verify/statsFull access and read only keys can call this. Sending access keys cannot. Key permissions lists the extra rules some calls have.
What became of the codes made over range (24h, 7d, 30d or 90d; 7d by default), optionally for one channel: sent, verified, expired (including pending codes past their expiry), failed (locked after too many wrong guesses), refused by risk scoring, and still pending, with each as a share of sent.
Who can call it
Full access and read only keys. Send-only and live AI keys answer 403 SCOPE_DENIED; a key limited to one domain answers 403 DOMAIN_PINNED, as on every SMS and one-time code route.
The team can make 60 of these reads a minute; when Notix cannot count them the answer is 503 SERVICE_UNAVAILABLE (try again shortly), never a 429. Each read holds the database at most 10 seconds and answers 422 past that.
Query parameters
How far back to count: 24h, 7d, 30d or 90d. Default 7d.
One of 24h, 7d, 30d, 90d. Default "7d".
One of email, sms.
Headers
Bearer followed by your API key.
Errors
`range` or `channel` is not valid, or the query has a parameter it does not know.
`SCOPE_DENIED`: a send-only or live AI key. `DOMAIN_PINNED`: a key limited to one domain.
The read took longer than 10 seconds.
The team made 60 SMS and code reads in the last minute.
The rate counters or the database cannot be used just now; try again shortly.
Every error has the same shape. See all error codes.
curl -X GET "https://app.usenotix.dev/api/v1/verify/stats" \
-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.verify.stats({ range: "7d" });
console.log(data?.verifiedPercent);
{
"range": "24h",
"channel": "email",
"from": "2026-10-05T10:00:00.000Z",
"to": "2026-10-05T10:00:00.000Z",
"sent": 1,
"verified": 1,
"expired": 1,
"failed": 1,
"refused": 1,
"pending": 1,
"verifiedPercent": 1,
"expiredPercent": 1,
"failedPercent": 1,
"refusedPercent": 1
}