Back to catalog
identity

eKYC

Remote identity verification combining document check, face match and liveness / anti-spoofing detection, natively correlated with SIFIP telecom signals (SIM swap, line tenure). A successful biometric on a recently compromised line is flagged rather than approved. Three flows: onboarding (document → selfie), re-authentication (selfie → reference) and session scoring (correlated unified score). Includes consented reference-image management (GDPR / Law 2014-038).

Simulate an API call
Parameters
NameTypeRequiredDescription
typeenumrequiredonboarding | reauth
document.typeenumoptionalnational_id | passport | cni | driver_license (onboarding)
document.countryISO 3166optionalEx. MG, TN (onboarding)
document.front_imagebase64/URLoptionalRecto du document (onboarding)
selfie.imagebase64/URLrequiredVisage live
selfie.liveness_modeenumoptionalpassive | active | passive_plus_injection
reference.idstringoptionalRéférence enregistrée (reauth)
trust_signals.enabledbooloptionalActive la corrélation télécom SIFIP
trust_signals.phone_numberE.164optionalNuméro à corréler
callback_urlURLoptionalWebhook de fin de traitement
Sample response
{
  "id": "vrf_a1b2c3d4",
  "status": "completed",
  "type": "onboarding",
  "decision": "REVIEW",
  "score": 64,
  "document": {
    "type": "national_id",
    "country": "MG",
    "authenticity": "passed",
    "extracted_data": {
      "full_name": "RAKOTO Jean",
      "document_number": "101231234567",
      "date_of_birth": "1990-05-12",
      "expiry_date": "2030-05-11",
      "sex": "M"
    },
    "data_confidence": 0.97
  },
  "face_match": {
    "match": true,
    "similarity": 0.91,
    "threshold": 0.8
  },
  "liveness": {
    "passed": true,
    "mode": "passive",
    "pad_score": 0.95,
    "attack_detected": null
  },
  "trust_signals": {
    "phone_number_hash": "sha256:9f2b...",
    "sim_swap": {
      "is_swapped": true,
      "last_swap_at": "2026-06-26T08:10:00Z"
    },
    "line_tenure_days": 412,
    "correlation_flag": "biometric_ok_but_recent_sim_swap"
  },
  "reasons": [
    {
      "code": "FACE_MATCH_OK",
      "severity": "info"
    },
    {
      "code": "LIVENESS_OK",
      "severity": "info"
    },
    {
      "code": "DOC_AUTHENTIC",
      "severity": "info"
    },
    {
      "code": "RECENT_SIM_SWAP",
      "severity": "warning",
      "detail": "SIM swap détecté il y a ~2h ; risque de prise de contrôle malgré un eKYC valide."
    }
  ]
}