Skip to main content
This guide walks you through integrating Yativo KYC (individual) and KYB (business) verification into your application. You can choose a hosted approach for quick integration or a fully custom API integration for maximum control.

Integration approaches


The simplest integration. You create a customer, then redirect them to Yativo’s hosted verification flow at https://kyc.yativo.com.

Step 1: Keep your API key on your backend

Every call to Yativo is made with your API key (X-Api-Key and X-Api-Secret). Make those calls from your backend only. Your web or mobile app talks to your backend, and your backend talks to Yativo.
Never put your API key or secret in browser or mobile code. Anyone could read it and act on your account. The code samples below that read process.env run on your server.

Step 2: Create a customer

Step 3: Redirect to hosted KYC

Embedding in an iframe

If you prefer to embed verification within your application instead of a full redirect:
The allow="camera; microphone" attribute is required for document capture and selfie steps to work correctly in the iframe.

Step 4: Wait for the endorsement result

Verification results arrive only through the customer’s endorsements. Each endorsement covers one service, such as base or sepa, and has its own status. Listen for the endorsement.updated webhook on your backend, then tell your frontend. See Handle endorsement updates. While you wait, show the customer that verification is in progress. Don’t show an approval until the endorsement for the service they need is approved.

Option B: Custom API integration

Build your own multi-step form that collects customer data and submits it directly to the KYC API.

Step 1: Collect personal information

When nationality is "NG", both bvn and nin (each exactly 11 digits) are required by the API. Show these fields conditionally based on the selected nationality.

Step 2: Upload files via Yativo storage

Before submitting the KYC form, upload document images using Yativo’s storage endpoint. This keeps payloads small and avoids base64 encoding large files.
You can also pass files as base64-encoded strings inline, but the hosted URL approach is recommended for files over ~500 KB.

Step 3: Collect residential address

Step 4: Collect ID document

Step 5: Collect financial information

The values sent to the API are snake_case identifiers, not display labels. Use the exact values below — the API will reject any other values.

Step 6: Submit to the KYC API

The KYC submission endpoint is at https://kyc.yativo.com, not the main API. Send the same API key headers you use for every other request.

Handle endorsement updates

Register your webhook once with POST /business/webhook (see Webhooks). Yativo sends endorsement.updated with the customer’s full list of endorsements each time one changes:
To refresh your stored copy, for example after downtime, read the endorsement list from GET /customer/{customer_id} on your backend. There, service is title-cased ("Faster payments"), and each entry also has hosted_kyc_url, errors and requirements_due to show the customer what to fix. See Track verification with endorsements.

UI/UX best practices

Progress indicators Show a clear multi-step progress bar so customers know where they are in the verification process. For individual KYC: Personal Info → Address & Documents → ID Document → Financial Info → Review & Submit. Clear error messages Display field-level validation errors immediately, not just on submit. Translate API error codes into user-friendly language. The API returns a data object with field-specific error arrays on 422 responses. Document upload previews Always show a preview of uploaded documents before submission. This helps customers catch blurry or incorrectly oriented images before they fail review.
Mobile camera support Use capture="environment" on file inputs to open the rear camera directly on mobile:
Selfie guidance For the selfie step, display on-screen guidelines (oval face outline, lighting tips) before the customer takes their photo to reduce re-submission rates. Retry on rejection When a customer’s KYC is rejected, use the kyc_link from the status response to send them back to the hosted flow for corrections.