Skip to content

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 ​

PlatformRepositoryPublic API
Nodeyeboverify-nodeYeboVerify, YeboVerifyApiError
Reactyeboverify-reactYeboVerifyWidget, YeboVerifyHosted
React Nativeyeboverify-react-nativeYeboVerifyClient, YeboVerifyScreen
Flutteryeboverify-flutterYeboVerify, YeboVerifyWidget
Swiftyeboverify-swiftYeboVerify, YeboVerifyView
Kotlinyeboverify-kotlincom.yeboverify.YeboVerify

Server: Node ​

sh
npm install github:omegathesecond/yeboverify-node#1.1.0

Git installation builds the package with prepare. Node 18 or newer is required. Both CommonJS and ES modules are supported.

javascript
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 ​

javascript
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_review

For 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 ​

javascript
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 ​

javascript
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 ​

sh
npm install github:omegathesecond/yeboverify-react#1.1.0

Create the session or company verification on your server, then return its exact URL:

tsx
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 ​

yaml
dependencies:
  yeboverify:
    git:
      url: https://github.com/omegathesecond/yeboverify-flutter.git
      ref: 1.1.0

Import package:yeboverify/yeboverify.dart. The package is named yeboverify. The capture component is YeboVerifyWidget.

React Native ​

sh
npm install github:omegathesecond/yeboverify-react-native#1.1.0
npx expo install expo-camera expo-image-picker

Import 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:

swift
.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.

Identity Verification API for Africa