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β
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"
}
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())
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 Type | Countries | Fields Extracted |
|---|---|---|
| National ID | All African countries | Name, DOB, ID Number, Gender, Address |
| Passport | International | Name, DOB, Passport Number, Nationality, Expiry |
| Driver's License | 20+ African countries | Name, DOB, License Number, Class, Expiry |
| Voter ID | 15+ African countries | Name, DOB, Voter Number |
3. Face Matchingβ
Compare a selfie to the photo on an ID document:
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:
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:
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"
}
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:
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:
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:
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 Type | Price | Details |
|---|---|---|
| ID Document Only | $0.50 | OCR + authenticity check |
| ID + Face Match | $0.75 | Document + face comparison |
| Full KYC | $1.00 | Document + Face + Liveness + Risk Score |
| Phone Verification | $0.05 | OTP + carrier lookup |
| Risk Scoring | $0.10 | Comprehensive fraud check |
Volume Discounts:
- 1,000-10,000/month: 10% discount
- 10,000-100,000/month: 20% discount
- 100,000+/month: Custom pricing
π Coverageβ
Supported Countries (ID Verification):
| Region | Countries |
|---|---|
| East Africa | Ethiopia, Kenya, Tanzania, Uganda, Rwanda, Burundi |
| West Africa | Nigeria, Ghana, Senegal, CΓ΄te d'Ivoire, Mali, Burkina Faso |
| Southern Africa | South Africa, Botswana, Zambia, Zimbabwe, Namibia |
| North Africa | Egypt, Morocco, Tunisia, Algeria |
54 African countries supported
π Integration Guideβ
Step 1: Setup Webhookβ
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β
// 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β
- ID Verification Guide - Complete documentation
- Face Matching - Face recognition details
- Liveness Detection - Anti-spoofing guide
- Risk Scoring - Fraud prevention
- API Reference - All endpoints
- Tutorial - Step-by-step integration
π Need Help?β
- Documentation: You're reading it!
- Support: [email protected]
- Sales: [email protected]
- Compliance Questions: [email protected]
Ready to verify identities? Get API keys β