Skip to main content

AfriRoute AI Identity Verification

Enterprise-Grade Identity Verification for Africa

Verify customer identities instantly using AI-powered document scanning, facial recognition, liveness detection, and risk scoring.

🎯 What is AI Identity Verification?​

AfriRoute AI Identity provides comprehensive identity verification services:

  • ID Document Scanning - Passport, national ID, driver's license verification
  • Face Matching - Compare selfie to ID photo (98%+ accuracy)
  • Liveness Detection - Active and passive liveness checks
  • Phone Verification - SIM ownership verification with risk scoring
  • Risk Scoring - AI-powered fraud detection and risk analysis
  • Biometric Matching - Fingerprint and voice biometrics (coming soon)

πŸ” Use Cases​

Banking & Fintech​

  • Account Opening - Remote KYC/eKYC
  • Loan Applications - Identity verification before approval
  • Mobile Banking - Secure login with face recognition
  • Money Transfer - Verify recipient identity

E-commerce​

  • Age Verification - Confirm customer age for restricted products
  • Account Recovery - Verify identity before account reset
  • Fraud Prevention - Detect fake accounts and stolen identities

Healthcare​

  • Patient Onboarding - Verify identity for telemedicine
  • Insurance Claims - Confirm identity before processing
  • Prescription Verification - Ensure correct patient

Travel & Hospitality​

  • Hotel Check-in - Contactless ID verification
  • Car Rental - Verify driver's license authenticity
  • Airport Security - Fast-track identity checks

πŸš€ Quick Start​

1. Verify ID Document​

Node.js - Verify National ID
const axios = require('axios');
const fs = require('fs');

// Read images as base64
const idFront = fs.readFileSync('national-id-front.jpg', 'base64');
const selfie = fs.readFileSync('customer-selfie.jpg', 'base64');

const verification = await axios.post('https://api.afriroute.ai/api/v1/identity/verify-id', {
document_type: 'national_id',
country: 'ET',
image_front: idFront,
image_back: null, // Optional for IDs with back side
image_selfie: selfie,
customer_info: {
full_name: 'Abebe Kebede',
date_of_birth: '1990-05-15',
id_number: 'ET123456789'
},
callback_url: 'https://yourapp.com/identity/callback'
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

console.log(verification.data);

Response:

{
"verification_id": "ver_abc123xyz",
"status": "verified",
"confidence": 98.2,
"risk_score": 3,
"document": {
"type": "national_id",
"country": "ET",
"number": "ET123456789",
"full_name": "ABEBE KEBEDE",
"date_of_birth": "1990-05-15",
"gender": "M",
"issue_date": "2020-01-10",
"expiry_date": "2030-01-10",
"authentic": true,
"expired": false,
"extracted_data": {
"name_confidence": 99.1,
"dob_confidence": 98.7,
"id_number_confidence": 99.5
}
},
"face_match": {
"match": true,
"confidence": 97.8,
"selfie_quality": "high"
},
"liveness": {
"passed": true,
"method": "passive",
"confidence": 96.5
},
"risk_assessment": {
"risk_level": "low",
"risk_score": 3,
"flags": [],
"recommendations": ["proceed"]
},
"verification_time": "2025-12-10T14:30:00Z"
}
Python - Verify ID
import requests
import base64

# Read and encode images
with open('national-id-front.jpg', 'rb') as f:
id_front = base64.b64encode(f.read()).decode('utf-8')

with open('customer-selfie.jpg', 'rb') as f:
selfie = base64.b64encode(f.read()).decode('utf-8')

response = requests.post('https://api.afriroute.ai/api/v1/identity/verify-id',
json={
'document_type': 'national_id',
'country': 'ET',
'image_front': id_front,
'image_selfie': selfie,
'customer_info': {
'full_name': 'Abebe Kebede',
'date_of_birth': '1990-05-15',
'id_number': 'ET123456789'
},
'callback_url': 'https://yourapp.com/identity/callback'
},
headers={'Authorization': 'Bearer $AFRIROUTE_API_KEY'}
)

print(response.json())
C# - Verify ID
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer $AFRIROUTE_API_KEY");

var idFront = Convert.ToBase64String(File.ReadAllBytes("national-id-front.jpg"));
var selfie = Convert.ToBase64String(File.ReadAllBytes("customer-selfie.jpg"));

var payload = new
{
document_type = "national_id",
country = "ET",
image_front = idFront,
image_selfie = selfie,
customer_info = new
{
full_name = "Abebe Kebede",
date_of_birth = "1990-05-15",
id_number = "ET123456789"
},
callback_url = "https://yourapp.com/identity/callback"
};

var content = new StringContent(
JsonSerializer.Serialize(payload),
Encoding.UTF8,
"application/json"
);

var response = await client.PostAsync(
"https://api.afriroute.ai/api/v1/identity/verify-id",
content
);

var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);

2. Supported Document Types​

Document TypeCountriesFields Extracted
National IDAll African countriesName, DOB, ID Number, Gender, Address
PassportInternationalName, DOB, Passport Number, Nationality, Expiry
Driver's License20+ African countriesName, DOB, License Number, Class, Expiry
Voter ID15+ African countriesName, DOB, Voter Number

3. Face Matching​

Compare a selfie to the photo on an ID document:

Face Match Only
const faceMatch = await axios.post('https://api.afriroute.ai/api/v1/identity/face-match', {
image_1: idPhotoBase64,
image_2: selfieBase64,
liveness_check: true
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

// Response
{
"match": true,
"confidence": 97.8,
"similarity_score": 0.978,
"liveness": {
"passed": true,
"confidence": 96.5
},
"face_quality": {
"image_1_quality": "high",
"image_2_quality": "high",
"blur_detected": false,
"low_light": false
}
}

Face Match Accuracy:

  • 98%+ accuracy on high-quality images
  • Works with glasses, makeup, beard changes
  • Handles age progression (Β±10 years)
  • Multi-angle face detection

4. Liveness Detection​

Prevent spoofing attacks using photo/video replays:

Liveness Check
const liveness = await axios.post('https://api.afriroute.ai/api/v1/identity/liveness', {
image: selfieBase64,
method: 'passive', // 'active' or 'passive'
challenge_response: null // Required for 'active' method
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

// Response
{
"liveness_passed": true,
"confidence": 96.5,
"method": "passive",
"checks": {
"real_person": true,
"screen_detection": false,
"photo_detection": false,
"mask_detection": false,
"depth_analysis": "passed"
},
"quality_score": 94.2
}

Liveness Methods:

Passive Liveness (No user action required):

  • AI analyzes single selfie
  • Detects photo/video replay
  • Checks for 3D depth
  • Identifies masks
  • Fast and user-friendly

Active Liveness (User performs actions):

  • Blink detection
  • Head movement (left/right/up/down)
  • Smile detection
  • Voice challenge
  • Higher security, slight friction

5. Phone Verification​

Verify phone number ownership and risk:

Send Phone Verification OTP
const otp = await axios.post('https://api.afriroute.ai/api/v1/identity/phone/send-otp', {
phone_number: '+251911234567',
method: 'sms' // 'sms', 'voice', or 'whatsapp'
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

// Response
{
"otp_id": "otp_xyz789",
"phone_number": "+251911234567",
"method": "sms",
"sent_at": "2025-12-10T14:30:00Z",
"expires_at": "2025-12-10T14:35:00Z"
}
Verify OTP Code
const verify = await axios.post('https://api.afriroute.ai/api/v1/identity/phone/verify-otp', {
otp_id: 'otp_xyz789',
code: '123456'
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

// Response
{
"verified": true,
"phone_number": "+251911234567",
"carrier": "Ethio Telecom",
"country": "ET",
"line_type": "mobile",
"risk_assessment": {
"risk_score": 5,
"risk_level": "low",
"voip_detected": false,
"temporary_number": false,
"known_fraud": false
}
}

6. Risk Scoring​

Get comprehensive risk assessment:

Risk Score API
const risk = await axios.post('https://api.afriroute.ai/api/v1/identity/risk-score', {
phone_number: '+251911234567',
email: '[email protected]',
ip_address: '196.190.1.100',
device_fingerprint: 'fp_abc123',
customer_info: {
full_name: 'Abebe Kebede',
date_of_birth: '1990-05-15'
}
}, {
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
});

// Response
{
"risk_score": 12,
"risk_level": "low",
"recommendation": "proceed",
"factors": [
{
"factor": "phone_risk",
"score": 5,
"details": "Real mobile number, known carrier"
},
{
"factor": "email_risk",
"score": 3,
"details": "Valid email, domain age 5 years"
},
{
"factor": "geo_risk",
"score": 2,
"details": "IP matches declared country"
},
{
"factor": "device_risk",
"score": 2,
"details": "Known device, no suspicious activity"
}
],
"checks": {
"phone_verified": true,
"email_valid": true,
"ip_blacklisted": false,
"device_known": true,
"velocity_check": "passed",
"name_match": "high_confidence"
}
}

Risk Score Ranges:

  • 0-20: Low risk βœ… Proceed
  • 21-50: Medium risk ⚠️ Review recommended
  • 51-75: High risk 🚨 Manual review required
  • 76-100: Very high risk ❌ Likely fraud

🧠 AI Capabilities​

Document Authenticity Detection​

Our AI detects:

  • βœ… Photo manipulation/editing
  • βœ… Fake/forged documents
  • βœ… Expired documents
  • βœ… Photocopies
  • βœ… Screen captures
  • βœ… Template-generated fakes

Detection Accuracy: 99.1%

Face Recognition Technology​

  • Deep Learning Model - Trained on 10M+ African faces
  • Multi-ethnic Support - Optimized for African skin tones
  • Age Invariance - Handles Β±10 year age difference
  • Occlusion Handling - Works with glasses, hijab, masks
  • Low-light Enhancement - AI enhances poor lighting

Liveness Anti-Spoofing​

Detects:

  • πŸ“Έ Photo attacks
  • πŸŽ₯ Video replay attacks
  • 🎭 3D masks
  • πŸ“± Screen presentation
  • πŸ–ΌοΈ Deepfakes

πŸ“Š Verification Dashboard​

Monitor all verifications in real-time:

Get Verification Status
const status = await axios.get(
'https://api.afriroute.ai/api/v1/identity/verification/ver_abc123xyz',
{
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
}
);

// Response
{
"verification_id": "ver_abc123xyz",
"status": "verified",
"customer": {
"full_name": "Abebe Kebede",
"date_of_birth": "1990-05-15",
"id_number": "ET123456789",
"nationality": "Ethiopian"
},
"checks_performed": [
"document_verification",
"face_match",
"liveness_detection",
"phone_verification",
"risk_scoring"
],
"results": {
"document_authentic": true,
"face_match": true,
"liveness_passed": true,
"phone_verified": true,
"overall_risk": "low"
},
"created_at": "2025-12-10T14:30:00Z",
"completed_at": "2025-12-10T14:30:45Z",
"verification_time": "45 seconds"
}

πŸ” Security & Compliance​

Data Protection​

  • Encryption: All biometric data encrypted at rest and in transit (AES-256)
  • Secure Storage: Images stored in encrypted S3 buckets
  • Data Retention: Configurable (7 days to forever)
  • Right to Deletion: GDPR-compliant data deletion

Compliance Certifications​

  • βœ… ISO 27001 - Information Security
  • βœ… SOC 2 Type II - Security Controls
  • βœ… GDPR - EU Data Protection
  • βœ… NDPR - Nigeria Data Protection
  • βœ… POPIA - South Africa Data Protection

Audit Logs​

Every verification creates an audit trail:

Get Audit Log
const audit = await axios.get(
'https://api.afriroute.ai/api/v1/identity/audit/ver_abc123xyz',
{
headers: { 'Authorization': 'Bearer $AFRIROUTE_API_KEY' }
}
);

// Response
{
"verification_id": "ver_abc123xyz",
"events": [
{
"timestamp": "2025-12-10T14:30:00Z",
"event": "verification_started",
"ip_address": "196.190.1.100",
"user_agent": "Mozilla/5.0..."
},
{
"timestamp": "2025-12-10T14:30:15Z",
"event": "document_uploaded",
"document_type": "national_id"
},
{
"timestamp": "2025-12-10T14:30:30Z",
"event": "face_match_completed",
"result": "passed"
},
{
"timestamp": "2025-12-10T14:30:45Z",
"event": "verification_completed",
"final_status": "verified"
}
]
}

πŸ’° Pricing​

Verification TypePriceDetails
ID Document Only$0.50OCR + authenticity check
ID + Face Match$0.75Document + face comparison
Full KYC$1.00Document + Face + Liveness + Risk Score
Phone Verification$0.05OTP + carrier lookup
Risk Scoring$0.10Comprehensive fraud check

Volume Discounts:

  • 1,000-10,000/month: 10% discount
  • 10,000-100,000/month: 20% discount
  • 100,000+/month: Custom pricing

View full pricing β†’

🌍 Coverage​

Supported Countries (ID Verification):

RegionCountries
East AfricaEthiopia, Kenya, Tanzania, Uganda, Rwanda, Burundi
West AfricaNigeria, Ghana, Senegal, CΓ΄te d'Ivoire, Mali, Burkina Faso
Southern AfricaSouth Africa, Botswana, Zambia, Zimbabwe, Namibia
North AfricaEgypt, Morocco, Tunisia, Algeria

54 African countries supported

πŸš€ Integration Guide​

Step 1: Setup Webhook​

Webhook Handler
app.post('/identity/callback', (req, res) => {
const { event, data } = req.body;

if (event === 'verification.completed') {
if (data.status === 'verified') {
// Approve account/loan/transaction
approveCustomer(data.customer);
} else {
// Request manual review
flagForReview(data.customer, data.failure_reasons);
}
}

res.status(200).send('OK');
});

Step 2: Handle Verification Flow​

Complete Verification Flow
// 1. Send OTP for phone verification
await axios.post('/v1/identity/phone/send-otp', {...});

// 2. Verify OTP
await axios.post('/v1/identity/phone/verify-otp', {...});

// 3. Upload ID and selfie
const verification = await axios.post('/v1/identity/verify-id', {...});

// 4. Check risk score
const risk = await axios.post('/v1/identity/risk-score', {...});

// 5. Make decision
if (risk.data.risk_score < 20 && verification.data.status === 'verified') {
// Approve customer
approveKYC(customerId);
} else {
// Manual review
requestManualReview(customerId);
}

πŸ“š Resources​

πŸ†˜ Need Help?​


Ready to verify identities? Get API keys β†’