List one-time codes
The team's one-time codes, newest first, as the One-time codes page lists them: who each went to, by which channel, its status, when it was made and…
https://app.usenotix.dev/api/v1/verifyFull access and read only keys can call this. Sending access keys cannot. Key permissions lists the extra rules some calls have.
The team's one-time codes, newest first, as the One-time codes page lists them: who each went to, by which channel, its status, when it was made and expires, wrong guesses left, SMS delivery and the risk score. Filter by status (a pending code past its expiry is expired), channel and risk level; pass nextCursor back as cursor for the next page, limit 1 to 100 (50 by default). A cursor from another list answers 400. A code is never returned: not the code, not anything derived from it, and not the email it was sent in. Phone numbers are masked to their last four digits, as the dashboard shows them. Every read of the list is recorded in the key's audit log.
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
Only codes in this state. A pending code past its expiry is expired.
One of pending, verified, expired, failed, refused.
One of email, sms.
Only codes risk scoring put at this level.
One of LOW, MEDIUM, HIGH.
nextCursor from the previous page.
Minimum 1. Maximum 100. Default 50.
Headers
Bearer followed by your API key.
Errors
A query value is not valid, or the cursor is not from this list.
`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" \
-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.list({ status: "expired", channel: "sms", limit: 20 });
const next = data?.nextCursor; // pass back as cursor for the next page
{
"data": [
{
"id": "ver_abc123",
"to": "+234*******5678",
"channel": "email",
"status": "pending",
"createdAt": "2026-10-05T10:00:00.000Z",
"expiresAt": "2026-10-05T10:00:00.000Z",
"attemptsRemaining": 1,
"deliveryStatus": "queued",
"deliveryReason": "string"
}
],
"nextCursor": "string"
}