Cirvex API
Pricing Log in Get started
API Reference

One REST API for KYC, AML & age.

Create verifications, run AML screenings, and read your billing — over a single, versioned REST API. All requests are authenticated with an API key; all responses are JSON.

Authentication

Authenticate every request with your secret API key in the Authorization header as a Bearer token. Create and manage keys in the dashboard under Settings → API keys.

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx

Test vs live. test keys run against a sandbox and never touch real data or billing; live keys run real checks and consume your allowance/overage. On the Free plan only test keys are available. Keys are shown once at creation — store them securely and never expose a secret key in client-side code.

Base URL

https://app.gocirvex.com/api/v1

All endpoints below are relative to this base. Requests and responses use JSON; send Content-Type: application/json on requests with a body. Money and credit amounts are returned as decimal strings, not floats.

Verifications

POST/v1/verifications

Start a verification. Returns a hosted flow URL (on paid plans) you can redirect the user to, and reserves the credits the check will consume.

FieldTypeDescription
typestringCheck type — KYC (identity). Required.
modestringauto (automated) or hybrid (specialist review). Defaults to auto.
amlbooleanAlso run AML screening (sanctions / PEP / adverse-media). Requires the Comply plan or above.
clientNamestringOptional label for the subject.
countrystringOptional subject country.
curl https://app.gocirvex.com/api/v1/verifications \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "type": "KYC", "mode": "auto", "aml": true, "clientName": "Jane Doe", "country": "DE" }'

201 Created

{
  "id": "clx...",
  "reference": "vf_a1b2c3",
  "status": "PENDING",
  "credits_reserved": 1.25,
  "hostedUrl": "https://alchemy.veriff.com/v/..."
}

Redirect the user to hostedUrl to complete the flow. The final decision arrives on your webhook (see below). If the operation isn't on your plan you get 403 operation_requires_plan; if the period's platform fee is unpaid, 402 period_unpaid.

GET/v1/verifications

List your most recent verifications.

{
  "data": [
    { "id": "clx...", "reference": "vf_a1b2c3", "type": "KYC",
      "status": "PASS", "clientName": "Jane Doe", "country": "DE", "createdAt": "2026-07-06T..." }
  ]
}

AML screenings Enterprise

POST/v1/screenings

Re-screen an existing profile against sanctions, PEP and adverse-media lists. Available on Enterprise plans; other plans receive 403 operation_requires_plan.

FieldTypeDescription
profilestringYour reference for the profile being re-screened. Required.
idempotencyKeystringOptional — dedupes retries of the same screening.
curl https://app.gocirvex.com/api/v1/screenings \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "profile": "user_8842" }'

201 Created

{ "id": "…", "profile": "user_8842", "status": "clear", "credits_debited": 0.30, "is_overage": false }

Billing

GET/v1/billing/balance

Current period balance for your organisation.

{
  "period_start": "2026-07-01T00:00:00.000Z",
  "period_end":   "2026-08-01T00:00:00.000Z",
  "granted":      "2000.00",
  "used":         "1250.00",
  "reserved":     "1.25",
  "available":    "748.75",
  "overage_used": "0.00",
  "overage_price":"1.00"
}

GET/v1/billing/transactions

Paginated ledger. Query params: from, to (ISO dates), cursor, limit (1–200).

{
  "data": [
    { "id": "…", "amount": "-1.25", "type": "debit",
      "operation_type": null, "reference_type": "verification",
      "reference_id": "clx...", "is_overage": false, "created_at": "2026-07-06T..." }
  ],
  "next_cursor": "clx..."
}

Pass next_cursor back as cursor to page. When next_cursor is null, you've reached the end.

Webhooks

Add endpoints in the dashboard. When a verification reaches a decision we POST a JSON event to each active endpoint. Each delivery is signed with your endpoint's secret (HMAC-SHA256) — verify the signature before trusting the payload.

POST https://your-app.com/webhooks/cirvex
{
  "type": "verification.updated",
  "data": { "id": "clx...", "reference": "vf_a1b2c3", "type": "KYC", "status": "PASS" }
}

Respond 2xx to acknowledge. Deliveries are retried on failure; treat events as idempotent by reference.

Verification statuses

StatusMeaning
PENDINGCreated; awaiting the subject / a decision.
PASSThe check passed (cleared / verified).
REVIEWBorderline — needs a human decision.
FAILDid not pass (e.g. a sanctions hit or document mismatch).

Errors & rate limits

Errors return a JSON body with an error message and, where relevant, a machine-readable code.

StatusCodeMeaning
401Invalid or missing API key.
402period_unpaid / payment_past_dueThe platform fee for this period is unpaid (past the grace window).
403operation_requires_planThe operation needs a higher plan; the response includes minimumPlan.
403Account suspended or closed.
400Invalid request body.
429Rate limit exceeded — back off and retry.

Verifications are never blocked when you run over your included allowance — extra checks continue and are billed as overage. The only hard block is non-payment.

Need something not covered here? dev@gocirvex.com or open a ticket in the Help Center.