📚 Overview
L'API BloKYC permet aux développeurs d'intégrer la vérification d'identité biométrique dans leurs applications via une API REST simple et sécurisée.
Version actuelle
v1
URL de base
https://blokyc.me/api/v1
Format des données
JSON
🚀 Démarrage rapide
Suivez ces étapes pour intégrer BloKYC en quelques minutes :
Obtenez une clé API
Connectez-vous à votre compte BloKYC, allez dans Paramètres > API, puis cliquez sur "Nouvelle clé". La clé sera affichée une seule fois — conservez-la précieusement.
Format des clés API :
bky_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Soumettez les documents
Envoyez les documents d'identité et les données personnelles via l'endpoint POST /kyc/sessions.
Alternative : Hosted KYC (recommandé)
Au lieu d'envoyer un payload complet (données + fichiers), vous pouvez demander une session hosted. BloKYC vous retourne une URL sécurisée à ouvrir côté utilisateur final, qui complète la vérification directement sur BloKYC.me (formulaire, upload, liveness).
Exemple (cURL)
curl -X POST https://blokyc.me/api/v1/kyc/sessions \
-H "X-API-Key: bky_abc123def456..." \
-H "Content-Type: application/json" \
-d '{
"mode": "hosted",
"redirect_url": "https://client.com/return",
"callback_url": "https://client.com/webhook/kyc",
"country_iso3": "BEN",
"document_type": "passport",
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU"
}'
Réponse : le champ hosted_url est retourné dans data.
Démarrez la vérification biométrique
Créez une session liveness et récupérez l'URL du challenge à afficher à votre utilisateur.
Recevez les résultats
Poll le statut ou configurez des webhooks pour recevoir les notifications en temps réel.
✨ Hosted KYC
Le mode hosted permet de générer une URL BloKYC.me sécurisée au lieu d'envoyer un payload complet (données + fichiers). L'utilisateur final complète la vérification directement sur BloKYC.me (formulaire, upload, liveness).
1) Créer une session hosted
curl -X POST https://blokyc.me/api/v1/kyc/sessions \
-H "X-API-Key: bky_abc123def456..." \
-H "Content-Type: application/json" \
-d '{
"mode": "hosted",
"redirect_url": "https://client.com/return",
"callback_url": "https://client.com/webhook/kyc",
"country_iso3": "BEN",
"document_type": "passport",
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU"
}'
Le champ hosted_url est retourné dans la réponse.
2) Rediriger l'utilisateur final
Ouvrez hosted_url dans un navigateur (webview ou navigateur système).
Une fois terminé, vous recevez les résultats via webhooks et/ou callback_url,
et l'utilisateur peut être renvoyé vers redirect_url.
Le traitement (OCR, liveness, décisions) reste identique au mode standard.
🔑 Authentification
Toutes les requêtes API (sauf health check) doivent inclure votre clé API dans le header HTTP X-API-Key.
curl -H "X-API-Key: bky_abc123def456..." \
-H "X-Client-ID: 550e8400-e29b-41d4-a716-446655440000" \
https://blokyc.me/api/v1/kyc/sessions
Header optionnel X-Client-ID
Incluez le client_uuid de votre application dans le header X-Client-ID pour un suivi précis des requêtes par appareil/application. Ce UUID est généré automatiquement lors de votre inscription et est disponible dans votre profil.
Gardez votre clé API confidentielle
Ne la communiquez jamais publiquement et ne la stockez jamais dans votre code frontend. Utilisez toujours votre serveur backend.
🔌 Endpoints
Retourne le statut de santé du service.
Response (200 OK)
{
"status": "healthy",
"version": "1.0.0",
"checks": {
"database": "ok",
"kyc_service": "ok"
},
"timestamp": "2026-05-20T17:00:00Z"
}
Créer une nouvelle session KYC.
Mode Hosted (sans fichiers)
Envoyez mode=hosted (JSON) pour recevoir une URL BloKYC.me sécurisée à partager à votre utilisateur.
Le reste du pipeline (OCR, liveness, webhooks/callback) reste identique.
Payload (application/json)
{
"mode": "hosted",
"callback_url": "https://client.com/webhook/kyc",
"redirect_url": "https://client.com/return",
"country_iso3": "BEN",
"document_type": "passport",
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU",
"date_of_birth": "1984-07-19",
"document_number": "B0778827",
"document_expiry": "2027-01-19"
}
Response (201 Created)
{
"data": {
"id": "115",
"reference": "KYC-2026-000115",
"status": "pending",
"hosted_url": "https://blokyc.me/verify/hky_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"hosted_expires_at": "2026-05-20T17:00:00Z"
}
}
Payload (multipart/form-data)
| Champ | Type | Description | Requis |
|---|---|---|---|
| document_type | string | passport, id_card, drivers_license | ✓ |
| document_front | file | Image recto (jpg, jpeg, png, pdf, max 5 Mo) | ✓ |
| document_back | file | Image verso (requis si id_card/drivers_license) | — |
| first_name | string | Prénom(s) en MAJUSCULES | ✓ |
| last_name | string | Nom en MAJUSCULES | ✓ |
| date_of_birth | string | YYYY-MM-DD | ✓ |
| document_number | string | Numéro du document en MAJUSCULES | ✓ |
| document_expiry | string | YYYY-MM-DD | ✓ |
| country_iso3 | string | Code pays ISO3 (ex: BEN, FRA, USA) | ✓ |
| callback_url | string | URL de callback personnalisée | — |
Exemple de payload
{
"document_type": "passport",
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU",
"date_of_birth": "1984-07-19",
"document_number": "B0778827",
"document_expiry": "2027-01-19",
"country_iso3": "BEN",
"callback_url": "https://client.com/webhook/kyc"
}
// + file : document_front (binary)
// + file : document_back (optionnel)
Response (201 Created)
{
"data": {
"id": "115",
"reference": "KYC-2026-000115",
"status": "pending",
"document_type": "passport",
"document_number": "B0778827",
"country": "BEN",
"personal": {
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU",
"date_of_birth": "1984-07-19",
"document_number": "B0778827",
"document_expiry": "2027-01-19",
"country_iso3": "BEN"
},
"created_at": "2026-05-20T16:10:00Z",
"updated_at": "2026-05-20T16:10:00Z"
}
}
Lister toutes les sessions du tenant (pagination incluse).
Response (200 OK)
{
"data": [
{
"id": "115",
"reference": "KYC-2026-000115",
"status": "approved",
"document_type": "passport",
"confidence_score": 85.5,
"created_at": "2026-05-20T16:10:00Z"
}
],
"meta": {
"current_page": 1,
"last_page": 5,
"per_page": 20,
"total": 85
}
}
Récupérer les détails d'une session spécifique.
Response (200 OK)
{
"data": {
"id": "115",
"reference": "KYC-2026-000115",
"status": "approved",
"document_type": "passport",
"document_number": "B0778827",
"country": "BEN",
"confidence_score": 85.5,
"personal": {
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU",
"date_of_birth": "1984-07-19"
},
"ocr_result": {
"decision": "VERIFIED",
"cross_check": [
{
"field": "first_name",
"status": "MATCH",
"form_value": "DOHETO JAMAL DEEN",
"doc_value": "DOHETO JAMAL DEEN"
}
],
"flags": []
},
"liveness": {
"passed": true,
"face_match_score": 85.5,
"face_match_decision": "APPROVED"
},
"created_at": "2026-05-20T16:10:00Z",
"updated_at": "2026-05-20T16:15:00Z",
"verified_at": "2026-05-20T16:15:00Z"
}
}
Télécharger un document (front, back, selfie). Retourne l'image binaire.
Response (200 OK)
Content-Type: image/jpeg
Content-Disposition: attachment; filename="front_115.jpg"
Vérification Biométrique (Liveness)
Créer une session liveness pour une session KYC existante.
Payload (JSON)
{
"callback_url": "https://client.com/webhook/liveness"
}
Response (201 Created)
{
"data": {
"token": "abc123def456...",
"liveness_url": "https://blokyc.me/liveness/abc123def456...",
"status": "pending",
"expires_at": "2026-05-20T17:00:00Z"
}
}
Polling du statut d'une session liveness.
Response (200 OK)
{
"data": {
"token": "abc123def456...",
"liveness_url": "https://blokyc.me/liveness/abc123def456...",
"status": "completed",
"liveness_passed": true,
"face_match_score": 85.5,
"face_match_decision": "APPROVED",
"expires_at": "2026-05-20T17:00:00Z",
"completed_at": "2026-05-20T16:55:00Z"
},
"done": true,
"message": "Vérification biométrique réussie."
}
Gestion API
Lister toutes vos clés API.
Créer une nouvelle clé API.
Payload (JSON)
{
"name": "Production App",
"callback_url": "https://myapp.com/api/kyc/callback",
"scopes": ["kyc:read", "kyc:write", "liveness:read", "liveness:write"],
"rate_limit": 60
}
Modifier une clé API (nom, callback_url, scopes, rate_limit).
Payload (JSON)
{
"callback_url": "https://new-url.com/callback",
"name": "Updated Name"
}
Révoquer une clé API.
Enregistrer une URL de webhook pour recevoir les notifications.
Payload (JSON)
{
"url": "https://client.com/webhook/kyc",
"events": [
"kyc.session.approved",
"kyc.session.rejected",
"kyc.liveness.completed"
]
}
Response (201 Created)
{
"data": {
"id": "1",
"url": "https://client.com/webhook/kyc",
"events": ["kyc.session.approved", "kyc.session.rejected"],
"secret": "whsec_abc123def456...",
"created_at": "2026-05-20T16:00:00Z"
}
}
🔔 Webhooks & Callbacks
BloKYC offre deux methodes pour recevoir les resultats en temps reel : le callback URL (simple) et les webhooks (avance).
URL de Callback (recommande)
Chaque cle API peut avoir une URL de callback. BloKYC envoie automatiquement les evenements KYC a cette URL.
Les payloads incluent desormais toujours le bloc personal (si disponible) afin de permettre a l'integrateur de mettre a jour les informations utilisateur (nom, prenom, pays, etc.).
Comment configurer :
Payload envoye (POST JSON) :
{
"event": "kyc.session.approved",
"session_id": "115",
"reference": "KYC-2026-000115",
"status": "approved",
"personal": {
"first_name": "DOHETO JAMAL DEEN",
"last_name": "FASSINOU",
"date_of_birth": "1984-07-19",
"document_number": "B0778827",
"document_expiry": "2027-01-19",
"country_iso3": "BEN",
"document_type": "passport"
},
"confidence_score": 85.5,
"verified_at": "2026-05-20T16:15:00Z",
"timestamp": "2026-05-20T16:15:00Z"
}
Ou via l'API :
curl -X POST https://blokyc.me/api/v1/keys \
-H "X-API-Key: bky_abc123..." \
-H "Content-Type: application/json" \
-d '{"name": "Production", "callback_url": "https://myapp.com/api/kyc/callback"}'
Webhooks (avance)
Les webhooks permettent de choisir precisement quels evenements recevoir et de verifier l'authenticite avec une signature HMAC-SHA256.
Informations personnelles dans les payloads
Tous les evenements KYC envoyés via webhooks incluent un champ personal (si disponible),
contenant les informations saisies par l'utilisateur et/ou collectees pendant la verification.
Evenements disponibles
kyc.session.created
— Nouvelle session créée
kyc.ocr.completed
— Analyse document terminée
kyc.liveness.completed
— Vérification biométrique terminée
kyc.session.approved
— Vérification approuvée
kyc.session.rejected
— Vérification rejetée
Signature de sécurité
Chaque webhook est signé avec HMAC-SHA256 via le header X-BloKYC-Signature. Utilisez votre webhook secret pour vérifier l'intégrité du payload.
$signature = hash_hmac('sha256', $payloadJson, $webhookSecret);
if ($signature === $receivedSignature) {
// Payload authentique
}
💻 Exemples de code
Créer une session KYC :
curl -X POST https://blokyc.me/api/v1/kyc/sessions \
-H "X-API-Key: bky_abc123def456..." \
-H "X-Client-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: multipart/form-data" \
-F "document_type=passport" \
-F "first_name=DOHETO JAMAL DEEN" \
-F "last_name=FASSINOU" \
-F "date_of_birth=1984-07-19" \
-F "document_number=B0778827" \
-F "document_expiry=2027-01-19" \
-F "country_iso3=BEN" \
-F "document_front=@front.jpg"
⚠️ Gestion des erreurs
Header X-API-Key absent.
Clé API invalide ou révoquée.
Erreurs de validation dans les données soumises.
Trop de requêtes. Limite de 60 req/min par clé API.
Prêt à intégrer BloKYC ?
Obtenez votre clé API et commencez en moins de 5 minutes.
Créer un compte gratuit