Create 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.
Use Authorization: Bearer vrf_live_... or vrf_test_....
In: header
Header Parameters
Optional idempotency key for single-report requests.
length <= 120Request 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}