Checks

Create reports

POST
/api/v1/reports

Scope: reports:create

Creates up to 500 reports in one request, and launches each unless draft is true. Send the reports array even for a single report.

This is the execution boundary: there is no provider endpoint. Selecting CRB_STANDARD here is how you call Metropol.

Consent. Choose how consent is obtained with consent.mode — Verifisha asks the subject (VERIFISHA_HOSTED), or you attest that you already have it (CUSTOMER_ATTESTED). See the consent guide.

Payment. paymentMode decides who pays: your workspace (SELF), the subject through a payment link (CANDIDATE), or a nominated payer (THIRD_PARTY).

Retries. For a single-report request, send Idempotency-Key so a network failure cannot create a second billable report.

Before you call this. Every check must accept the subject's subjectType, and the subject must carry each check's required inputs. Both are listed on each check definition.

Authorization

AuthorizationBearer <token>

Use Authorization: Bearer vrf_live_... or vrf_test_....

In: header

Header Parameters

Idempotency-Key?string

Optional idempotency key for single-report requests.

Lengthlength <= 120

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

curl -X POST "https://example.com/api/v1/reports" \  -H "Idempotency-Key: customer-case-1042" \  -H "Content-Type: application/json" \  -d '{    "reports": [      {        "subject": {          "subjectType": "INDIVIDUAL",          "fullName": "Jane Wanjiku Doe",          "idNumber": "36901234",          "email": "jane@example.com",          "phone": "+254712345678",          "country": "KE"        },        "checksRequested": [          "KRA_PIN",          "CRB_STANDARD",          "CREDITINFO_SCORE"        ],        "purpose": "Employment screening",        "consent": {          "mode": "CUSTOMER_ATTESTED",          "obtained": true,          "obtainedAt": "2026-09-09T10:30:00Z",          "method": "CUSTOMER_WEB_FORM",          "policyVersion": "employment-screening-v3",          "evidenceReference": "consent-1042"        },        "paymentMode": "SELF"      }    ]  }'
{  "reports": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "status": "DRAFT",      "paymentState": {        "status": "NOT_REQUIRED",        "amount": {          "amount": 0.1,          "currency": "KES"        },        "paidAt": "2019-08-24T14:15:22Z"      },      "consentState": {        "status": "NOT_REQUIRED",        "consentUrl": "http://example.com",        "expiresAt": "2019-08-24T14:15:22Z"      }    }  ],  "count": 0}