SDKs & Libraries
The six SDKs support individual KYC and company KYB through the same REST API. Their repositories are private: ask us to grant your GitHub account access before installing. They are not published to npm, pub.dev, Maven Central, or the Swift Package Index. The SDK repositories have a 1.1.0 tag; React also has 1.1.0 with hosted dev-preview support.
Available SDKs
| Platform | Repository | Public API |
|---|---|---|
| Node | yeboverify-node | YeboVerify, YeboVerifyApiError |
| React | yeboverify-react | YeboVerifyWidget, YeboVerifyHosted |
| React Native | yeboverify-react-native | YeboVerifyClient, YeboVerifyScreen |
| Flutter | yeboverify-flutter | YeboVerify, YeboVerifyWidget |
| Swift | yeboverify-swift | YeboVerify, YeboVerifyView |
| Kotlin | yeboverify-kotlin | com.yeboverify.YeboVerify |
Server: Node
npm install github:omegathesecond/yeboverify-node#1.1.0Git installation builds the package with prepare. Node 18 or newer is required. Both CommonJS and ES modules are supported.
import { YeboVerify, YeboVerifyApiError } from '@yeboverify/node';
const client = new YeboVerify({ apiKey: process.env.YEBOVERIFY_API_KEY });
const session = await client.createSession({
userId: 'user_123',
callback: 'https://yourapp.com/verify-complete',
theme: { companyName: 'Your Company' },
});
// Return session.verifyUrl to your frontend. YeboVerify does not send it to your user.
const company = await client.createCompanyVerification({
country: 'SZ',
registeredName: 'Acme Trading (Pty) Ltd',
externalRef: 'company_123',
requireSignatory: true,
idempotencyKey: 'stable-company-attempt-id',
});
// Return company.verifyUrl to collect documents and the signatory's identity.createSession returns { session, verifyUrl, expiresIn }. The raw HTTP route is flat ({ success, session, verifyUrl, expiresIn }), unlike the company endpoints' { success, data } envelope. The SDK handles these two contracts explicitly.
Direct KYC
const submitted = await client.verify({
idFront: './id-front.jpg',
selfie: './selfie.jpg',
livenessFrame1: './neutral.jpg',
livenessFrame2: './blink.jpg',
challenge: 'blink',
externalRef: 'user_123',
idempotencyKey: 'stable-identity-attempt-id',
});
const result = await client.pollVerification(submitted.verificationId);
// result.status: completed | failed | needs_review
// result.decision: approved | rejected | needs_reviewFor production, prefer webhooks to polling. getVerification, listVerifications, reviewVerification, and resendWebhook are also available. Node and React Native normalize API status and decision enums to lowercase before returning them; polling continues through both pending and processing states.
Company documents and review
await client.addCompanyDocument(company.verificationId, {
docType: 'form_j',
file: './form-j.pdf',
directors: [{ name: 'Director Name', nationality: 'SZ' }],
});
const record = await client.getCompanyVerification(company.verificationId);
await client.reviewCompanyVerification(company.verificationId, {
documentReviews: record.documents.map(document => ({
documentId: document.id,
status: 'accepted', // use the reviewer's actual finding
})),
});Use document types returned in company.requiredDocuments; invented values are rejected. Form J requires its director roster. Company creation also returns requireSignatory, resumeToken, and step (kyb, kyc, or done). Store the exact verifyUrl to resume. done describes collection progress, not approval: read the decision or handle the webhook. Company documents need review, and a required signatory must pass KYC before company approval. See KYB for supported countries and the complete lifecycle.
Errors and webhooks
try {
await client.getVerification('vrf_example');
} catch (error) {
if (error instanceof YeboVerifyApiError) {
console.error(error.statusCode, error.code, error.message);
}
throw error;
}
const event = client.parseWebhook({
rawBody,
signatureV2,
timestamp,
webhookSecret: process.env.YEBOVERIFY_WEBHOOK_SECRET,
});
if (event.event === 'verification.completed') {
if (event.type === 'company') {
console.log(event.verificationId, event.company, event.decision);
} else {
console.log(event.verificationId, event.decision);
}
}Use the raw HTTP request body for signature verification. Result events expose eventId for deduplication. WebhookEvent also includes verification.submitted and verification.deleted. See Webhooks.
React: hosted KYC or KYB
npm install github:omegathesecond/yeboverify-react#1.1.0Create the session or company verification on your server, then return its exact URL:
import { YeboVerifyHosted } from '@yeboverify/react';
<YeboVerifyHosted verifyUrl={verifyUrl}>Continue verification</YeboVerifyHosted>YeboVerifyHosted takes verifyUrl, optional children, and optional className. The existing YeboVerifyWidget supports direct KYC capture with apiKey, externalRef, onSubmit, onResult, onError, requireIdBack, and liveness. onSubmit means the request was accepted; onResult fires after a terminal result is polled. Request failures appear in the widget and invoke onError. Keep API keys on your server for public applications and use hosted links. See Widgets.
Mobile SDK installation
All four mobile clients expose verify, getVerification, pollVerification, createCompanyVerification, addCompanyDocument, getCompanyVerification, listCompanyVerifications, reviewCompanyVerification, and resendCompanyWebhook. Arguments and models follow each language's conventions; examples are in the repository READMEs.
Flutter
dependencies:
yeboverify:
git:
url: https://github.com/omegathesecond/yeboverify-flutter.git
ref: 1.1.0Import package:yeboverify/yeboverify.dart. The package is named yeboverify. The capture component is YeboVerifyWidget.
React Native
npm install github:omegathesecond/yeboverify-react-native#1.1.0
npx expo install expo-camera expo-image-pickerImport YeboVerifyClient or YeboVerifyScreen from @yeboverify/react-native. Git installation builds dist with prepare.
Swift
With GitHub access configured, add the repository to Swift Package Manager:
.package(url: "https://github.com/omegathesecond/yeboverify-swift", from: "1.1.0")Import YeboVerify. YeboVerifyView supplies the SwiftUI capture flow.
Kotlin
Clone the private repository and include its yeboverify Android library module in your Gradle build. The source and 1.1.0 tag are available to authorized GitHub accounts; no public Maven or JitPack artifact has been verified. Import com.yeboverify.YeboVerify.
See Mobile Integration for the hosted flow that works across all platforms.
Authentication and sandbox
yv_live_ keys call real providers and meter live work. yv_test_ keys simulate KYC outcomes without provider calls or billing, with data isolated from live KYC. Both use https://api.yeboverify.com; https://dev-api.yeboverify.com is the API's separate pre-production deployment.
For sandbox KYC, verify({ ..., simulate: 'needs_review' }) and createSession({ userId, simulate: 'approved' }) are supported by the Node SDK. Valid outcomes are approved, rejected, needs_review, liveness_spoofed, and expired_document. Live keys reject simulate. All direct capture clients reject an incomplete liveness frame pair; submit both frames and the captured challenge.
KYB currently requires a live key. Test keys receive KYB_SANDBOX_UNAVAILABLE rather than reading or changing live company cases. Keep keys and webhook secrets on your server.
Customer verification policy
See Verification policies for country restrictions, approval/review thresholds, identity rules, KYB requirements, SDK methods, and per-case policy history.