Fournisseur de listes PPE et de sanctions

Les listes de sanctions et de PPE, prêtes à intégrer par API

Authenica fournit des données de conformité : les listes de sanctions internationales et nationales et les listes de personnes politiquement exposées de l'UEMOA, consolidées, rechargées régulièrement et servies par une API sécurisée. Chaque résultat porte la liste et la version de la liste d'où il vient.

Adresse : https://api.authenica.tech Format : JSON Accès : clé d'API

Comment ça marche

Ce que vous obtenez

Authenica fournit des données de conformité prêtes à l'emploi : le criblage de vos clients contre des listes publiques et officielles de sanctions et de personnes politiquement exposées (PPE), consolidées, rechargées régulièrement et servies par une API sécurisée, pour que vos équipes n'aient ni à collecter ni à normaliser ces listes elles-mêmes.

Listes publiques et officiellesSanctions des Nations unies, des États-Unis (OFAC), de l'Union européenne, du Royaume-Uni, de la Suisse et du Canada, gel national de la CENTIF-CI, et listes de PPE de l'UEMOA. La couverture s'élargit source après source.
Une preuve par versionChaque résultat porte la liste et la version de la liste d'où il vient. Vous démontrez, après coup, ce que disait la liste le jour du criblage.
Refus par défautUne indisponibilité répond toujours par une erreur, jamais par une réponse vide : votre processus ne laisse rien passer faute de réponse.
Lecture et contrôle des pièces d'identitéCarte d'identité, passeport, permis, titre de séjour : les champs lus, le modèle reconnu et les contrôles d'authenticité, à partir d'une photo. Rien n'est conservé.
On recherche, on ne stocke pasAuthenica interroge ses listes et vous répond : le nom que vous cherchez n'est conservé nulle part, ni dans la trace de l'appel ni ailleurs. Chaque appel reçoit un identifiant à garder pour prouver que le criblage a eu lieu.

Les listes interrogées

Le criblage porte sur des listes publiques et officielles, publiées par leurs émetteurs et rechargées régulièrement. De nouvelles sources s'ajoutent au fil du temps ; la liste à jour est toujours disponible par l'API (voir « Lister les sources »).

CodeListeÉmetteurType
UN_CONSOLIDATEDListe consolidée du Conseil de sécuritéNations uniesSanctions
OFAC_SDNListe des ressortissants spécialement désignés (SDN)Département du Trésor des États-Unis (OFAC)Sanctions
OFAC_CONSOLIDATEDListe consolidée hors SDNDépartement du Trésor des États-Unis (OFAC)Sanctions
EU_FSFListe consolidée des sanctions financièresCommission européenneSanctions
UK_SANCTIONS_LISTListe des sanctions du Royaume-UniForeign, Commonwealth and Development OfficeSanctions
SECO_SWISS_SANCTIONSListe suisse des sanctionsSecrétariat d'État à l'économie (SECO)Sanctions
CANADA_SEMAListe canadienne des sanctions (SEMA)Affaires mondiales CanadaSanctions
CENTIF_CI_1373Liste nationale, résolution 1373CENTIF de Côte d'IvoireSanctions
CI_GOVERNMENTComposition du gouvernement de Côte d'IvoirePrimature de Côte d'IvoirePPE
UEMOA_PPEPersonnes politiquement exposées de l'UEMOAAuthenica, à partir de sources publiquesPPE
Sanctions ou PPE. Une fiche de type SANCTIONS est bloquante : une personne l'examine avant toute décision. Une fiche de type PPE appelle une vigilance renforcée, selon votre politique.

Démarrer en deux minutes

  1. Obtenez une cléÉcrivez-nous : nous créons votre accès et vous remettons la clé.
  2. Appelez l'APIUn appel POST avec le nom cherché et votre clé.
  3. Lisez le résultatUne liste de fiches, chacune avec sa liste et sa version.
curl -X POST https://api.authenica.tech/api/v1/screenings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Zorbek Nandrawell","scoreThreshold":0.85}'
À retenir. Une réponse vide veut dire : aucune fiche trouvée dans les listes publiées. Un service momentanément indisponible répond 503, jamais une réponse vide.
TermeEn clair
CriblageChercher une personne ou une société dans les listes officielles de sanctions et de personnes politiquement exposées.
PPEPersonne politiquement exposée : une personne qui exerce ou a exercé une fonction publique importante.
Clé d'APIUn mot de passe long, propre à votre organisation, qui prouve que l'appel vient de vous.
QuotaLe nombre d'appels autorisés par minute pour votre accès.

Obtenir votre clé

  1. Écrivez à it@authenica.tech avec le nom de votre organisation et l'usage prévu.
  2. Nous créons votre accès et vous remettons la clé une seule fois. Elle n'est pas conservée en clair : nous ne pouvons pas vous la redonner, seulement en créer une nouvelle.
  3. Nous convenons avec vous d'un quota par minute.

Pour changer ou révoquer une clé, écrivez à la même adresse. La révocation est immédiate.

Authentification

Chaque appel porte votre clé dans l'en-tête X-Api-Key. L'adresse de base est https://api.authenica.tech, en HTTPS seulement : un appel en HTTP est redirigé.

Gardez la clé secrète. Utilisez-la depuis vos serveurs, jamais depuis un navigateur ni une application mobile. Ne la mettez ni dans un dépôt de code ni dans un journal.

Sans clé, avec une clé inconnue ou révoquée : réponse 401. Connaître l'adresse ne donne aucun accès.

Interroger les listes

POST /api/v1/screenings

Ce que vous envoyez

ChampDescriptionEn clair
fullName OBLIGATOIRENom complet cherché, 300 caractères au plusLes prénoms puis le nom, comme sur la pièce d'identité.
scoreThreshold OBLIGATOIRENombre de 0 à 1Seuil de ressemblance au-dessus duquel une fiche est rendue. C'est votre politique de conformité qui le fixe, pas Authenica.
corroboratedThresholdNombre de 0 à 1, plus bas que le précédentSecond seuil, valable seulement si la date de naissance concorde : une variante d'écriture note moins bien mais désigne la même personne.
entityTypeNATURAL_PERSON ou LEGAL_ENTITYChercher seulement des personnes physiques, ou seulement des sociétés. Absent : tous.
listTypesTableau de SANCTIONS, PPE, LOCALChercher seulement dans ces types de listes. Absent ou vide : tous.
dateOfBirthDate AAAA-MM-JJSert à confirmer ou à contredire une fiche.
nationalityCode pays à deux lettres (CI, SN, ML...)Idem.
placeOfBirthTexte libreIdem.
documentNumberNuméro de pièce d'identitéRéservé. Accepté seulement si votre accès y est autorisé ; sinon il est ignoré et la réponse le dit dans ignoredFields.
referenceTexteVotre identifiant de demande, sans nom de personne.
Sur les seuils. Les exemples de cette page utilisent 0.85 pour illustrer. Ce n'est pas une recommandation : le bon seuil dépend de votre politique de conformité.

Lire la réponse

Réponse 200 :

{
  "requestId": "63f766c4-9c1c-4adb-ac8e-4e66674b4be0",
  "matches": [
    {
      "listType": "SANCTIONS",
      "listName": "AUTHENICA_TEST_SANCTIONS",
      "listVersion": "a0a0a0a0-0000-4000-8000-000000000001",
      "targetLabel": "Zorbek NANDRAWELL",
      "score": 1.0,
      "confidence": "UNCORROBORATED",
      "evidence": [
        {
          "field": "DOCUMENT_NUMBER",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": null
        },
        {
          "field": "DATE_OF_BIRTH",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": "15 Jun 1975"
        },
        {
          "field": "NATIONALITY",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": "Mali"
        },
        {
          "field": "PLACE_OF_BIRTH",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": "Bamako"
        }
      ],
      "details": {
        "entityType": "NATURAL_PERSON",
        "list": {
          "label": "Liste d'essai fictive : sanctions",
          "publisher": "Authenica"
        },
        "sanctionPrograms": [
          "TEST-FICTIF"
        ],
        "title": "Personne fictive de la liste d'essai",
        "description": "Fiche fictive pour tester l'intégration. Aucune personne réelle.",
        "nationalities": [
          "Mali"
        ],
        "datesOfBirth": [
          "15 Jun 1975"
        ],
        "placesOfBirth": [
          "Bamako"
        ]
      }
    }
  ],
  "ignoredFields": []
}
ChampEn clair
requestIdL'identifiant de votre appel. Conservez-le et citez-le à notre support pour retrouver l'appel. Il est aussi dans l'en-tête X-Request-Id.
matchesLes fiches trouvées, de la plus ressemblante à la moins ressemblante. Vide : aucune fiche ne dépasse votre seuil.
listTypeSANCTIONS : liste de sanctions, bloquante. PPE : personnes politiquement exposées. LOCAL : liste locale.
listNameLe code de la liste d'origine, par exemple OFAC_SDN, UN_CONSOLIDATED, EU_FSF, UEMOA_PPE. La liste complète est dans « Lister les sources ».
listVersionLe lot de la liste qui a produit la fiche. Gardez-le : il prouve dans quelle version de la liste la personne figurait.
targetLabelLe nom de la fiche trouvée.
scoreLa ressemblance entre le nom cherché et la fiche, de 0 à 1.
confidenceÀ quel point les autres éléments confirment la correspondance (voir ci-dessous).
evidenceLe détail de la comparaison, élément par élément, pour une personne. Pour une société, il est vide : seul le nom est comparé.
detailsCe que dit la fiche trouvée, pour comprendre sans ouvrir la liste (voir « Le détail de la fiche »).
ignoredFieldsLes champs envoyés que votre accès n'est pas autorisé à utiliser. Jamais ignorés en silence.

La confiance, en clair

Elle n'écarte jamais une fiche : un homonyme probable reste une alerte à faire examiner par une personne.

ValeurCe que ça veut dire
CORROBORATEDAu moins un élément concorde (date de naissance, nationalité...) et aucun ne contredit fortement.
MIXEDDes éléments concordent et d'autres contredisent : un jugement humain est indispensable.
UNCORROBORATEDRien ne permet de confirmer ni d'infirmer, parce que des données manquent d'un côté ou de l'autre.
LIKELY_HOMONYMAucun élément ne concorde et un élément fort contredit : probablement une autre personne.

Le détail de la fiche

Le bloc details reprend ce que l'émetteur de la liste publie sur la fiche. Il aide à distinguer deux homonymes, par exemple deux personnes qui portent le même nom mais n'ont pas la même fonction.

ChampEn clair
entityTypeNATURAL_PERSON : une personne physique. LEGAL_ENTITY : une société.
listLe nom lisible de la liste (label) et son émetteur (publisher).
sanctionProgramsLes types de sanctions : les régimes de sanctions de la fiche, tels que l'émetteur les publie (par exemple SDGT pour un terroriste désigné au niveau mondial dans la liste américaine). Vide pour une personne politiquement exposée.
titleLa fonction publiée, par exemple « Président de la République » ou « Maire de Niéllé ». C'est elle qui distingue deux homonymes.
descriptionLe texte que la liste publie sur la fiche, tronqué à 600 caractères. Absent quand la fonction en tient lieu.
nationalities, datesOfBirth, placesOfBirthCe que la liste publie. Toujours vides pour une société.

Le détail de la comparaison

Chaque ligne de evidence a field (DATE_OF_BIRTH, NATIONALITY, PLACE_OF_BIRTH ou DOCUMENT_NUMBER), customerValue (ce que vous avez envoyé), listValue (ce que dit la fiche) et status :

  • MATCH : les deux concordent.
  • CONFLICT : les deux se contredisent.
  • UNKNOWN : l'un des deux côtés ne renseigne pas l'élément, donc ni confirmation ni contradiction.

Essayez avec des cas de test

Authenica tient une liste d'essai fictive pour tester votre intégration de bout en bout, avec des résultats reproductibles. Elle ne contient aucune personne ni société réelle : les noms ci-dessous n'existent pas. Vous pouvez rejouer chaque requête avec votre clé et obtenir la même réponse.

Un nom présent dans la liste de sanctions d'essai, avec sa date de naissance et sa nationalité.

Requête

curl -X POST https://api.authenica.tech/api/v1/screenings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Zorbek Nandrawell","dateOfBirth":"1975-06-15","nationality":"ML","scoreThreshold":0.85}'

Réponse réelle de l'API

{
  "requestId": "b0fa0a4d-8236-44bc-9979-2a0a41fc95f2",
  "matches": [
    {
      "listType": "SANCTIONS",
      "listName": "AUTHENICA_TEST_SANCTIONS",
      "listVersion": "a0a0a0a0-0000-4000-8000-000000000001",
      "targetLabel": "Zorbek NANDRAWELL",
      "score": 1.0,
      "confidence": "CORROBORATED",
      "evidence": [
        {
          "field": "DOCUMENT_NUMBER",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": null
        },
        {
          "field": "DATE_OF_BIRTH",
          "status": "MATCH",
          "customerValue": "1975-06-15",
          "listValue": "15 Jun 1975"
        },
        {
          "field": "NATIONALITY",
          "status": "MATCH",
          "customerValue": "ML",
          "listValue": "Mali"
        },
        {
          "field": "PLACE_OF_BIRTH",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": "Bamako"
        }
      ],
      "details": {
        "entityType": "NATURAL_PERSON",
        "list": {
          "label": "Liste d'essai fictive : sanctions",
          "publisher": "Authenica"
        },
        "sanctionPrograms": [
          "TEST-FICTIF"
        ],
        "title": "Personne fictive de la liste d'essai",
        "description": "Fiche fictive pour tester l'intégration. Aucune personne réelle.",
        "nationalities": [
          "Mali"
        ],
        "datesOfBirth": [
          "15 Jun 1975"
        ],
        "placesOfBirth": [
          "Bamako"
        ]
      }
    }
  ],
  "ignoredFields": []
}

Comment la lire

  • Une correspondance sur la liste AUTHENICA_TEST_SANCTIONS, de type SANCTIONS : un type bloquant.
  • CORROBORATED : la date de naissance et la nationalité que vous avez envoyées concordent avec la fiche (voir evidence).
  • listVersion : le lot de la liste qui a produit la fiche. Conservez-le avec votre décision.
  • Une correspondance sur une liste de sanctions doit être examinée par une personne avant toute décision.

Un nom présent dans la liste de PPE d'essai, avec sa date de naissance et sa nationalité.

Requête

curl -X POST https://api.authenica.tech/api/v1/screenings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Kassim Dromvale","dateOfBirth":"1968-03-02","nationality":"CI","scoreThreshold":0.85}'

Réponse réelle de l'API

{
  "requestId": "5ce9f675-92cf-4f19-9bd3-3098496f12e9",
  "matches": [
    {
      "listType": "PPE",
      "listName": "AUTHENICA_TEST_PPE",
      "listVersion": "a0a0a0a0-0000-4000-8000-000000000002",
      "targetLabel": "Kassim DROMVALE",
      "score": 1.0,
      "confidence": "CORROBORATED",
      "evidence": [
        {
          "field": "DOCUMENT_NUMBER",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": null
        },
        {
          "field": "DATE_OF_BIRTH",
          "status": "MATCH",
          "customerValue": "1968-03-02",
          "listValue": "02 Mar 1968"
        },
        {
          "field": "NATIONALITY",
          "status": "MATCH",
          "customerValue": "CI",
          "listValue": "Côte d'Ivoire"
        },
        {
          "field": "PLACE_OF_BIRTH",
          "status": "UNKNOWN",
          "customerValue": null,
          "listValue": "Abidjan"
        }
      ],
      "details": {
        "entityType": "NATURAL_PERSON",
        "list": {
          "label": "Liste d'essai fictive : personnes politiquement exposées",
          "publisher": "Authenica"
        },
        "sanctionPrograms": [],
        "title": "Ministre (fonction fictive)",
        "description": "Fiche fictive pour tester l'intégration. Aucune personne réelle.",
        "nationalities": [
          "Côte d'Ivoire"
        ],
        "datesOfBirth": [
          "02 Mar 1968"
        ],
        "placesOfBirth": [
          "Abidjan"
        ]
      }
    }
  ],
  "ignoredFields": []
}

Comment la lire

  • Une correspondance sur la liste AUTHENICA_TEST_PPE, de type PPE.
  • Une PPE n'est pas une sanction : elle appelle une vigilance renforcée, selon votre politique, après examen par une personne.
  • CORROBORATED : la date de naissance et la nationalité que vous avez envoyées concordent avec la fiche.

Un client ordinaire, absent de toutes les listes.

Requête

curl -X POST https://api.authenica.tech/api/v1/screenings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Aminata Kone Diabate","dateOfBirth":"1990-04-12","nationality":"CI","scoreThreshold":0.85}'

Réponse réelle de l'API

{
  "requestId": "3b3a92ce-018f-452e-a63b-24d9129179a6",
  "matches": [],
  "ignoredFields": []
}

Comment la lire

  • matches est vide : aucune fiche ne dépasse votre seuil dans les listes publiées.
  • Ce n'est pas un accord : votre processus décide. Conservez le requestId pour prouver que le criblage a eu lieu.
  • Une panne ne ressemble jamais à ce résultat : un service indisponible répond 503.

Une société de la liste d'essai, cherchée avec le filtre entityType.

Requête

curl -X POST https://api.authenica.tech/api/v1/screenings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Nandrawell Holding SARL","entityType":"LEGAL_ENTITY","scoreThreshold":0.85}'

Réponse réelle de l'API

{
  "requestId": "bf7e6348-5909-49a4-a997-ed600d1e7494",
  "matches": [
    {
      "listType": "SANCTIONS",
      "listName": "AUTHENICA_TEST_SANCTIONS",
      "listVersion": "a0a0a0a0-0000-4000-8000-000000000001",
      "targetLabel": "NANDRAWELL HOLDING SARL",
      "score": 1.0,
      "confidence": "UNCORROBORATED",
      "evidence": [],
      "details": {
        "entityType": "LEGAL_ENTITY",
        "list": {
          "label": "Liste d'essai fictive : sanctions",
          "publisher": "Authenica"
        },
        "sanctionPrograms": [
          "TEST-FICTIF"
        ],
        "title": "Société fictive de la liste d'essai",
        "description": "Fiche fictive pour tester l'intégration. Aucune société réelle.",
        "nationalities": [],
        "datesOfBirth": [],
        "placesOfBirth": []
      }
    }
  ],
  "ignoredFields": []
}

Comment la lire

  • entityType à LEGAL_ENTITY : seules les sociétés sont cherchées.
  • evidence est vide : une société n'a ni date ni lieu de naissance ni nationalité à comparer, seul son nom est comparé.
À ne pas faire. Ces fiches servent à tester, jamais à décider. Un nom de la liste d'essai porte dans listName la mention AUTHENICA_TEST_SANCTIONS ou AUTHENICA_TEST_PPE : vous pouvez les écarter de vos décisions en filtrant sur ce nom.

Filtrer la recherche

Deux filtres, qui se combinent. Un filtre absent ne filtre rien.

# Seulement les personnes politiquement exposées
-d '{"fullName":"Kassim Dromvale","scoreThreshold":0.85,"listTypes":["PPE"]}'

# Seulement les sociétés, dans les listes de sanctions
-d '{"fullName":"Société Exemple SARL","scoreThreshold":0.85,"entityType":"LEGAL_ENTITY","listTypes":["SANCTIONS"]}'

# Avec la date de naissance et la nationalité, pour corroborer
-d '{"fullName":"Zorbek Nandrawell","scoreThreshold":0.85,"corroboratedThreshold":0.70,"dateOfBirth":"1975-06-15","nationality":"ML"}'

Un type inconnu (par exemple "entityType":"NAVIRE") est refusé avec une erreur 400.

Lister les sources

GET /api/v1/lists/sources

Une entrée par liste : code (celui que vous retrouvez dans listName), label (son nom lisible), publisher (l'émetteur), listType, lastBatchId (le dernier lot chargé, celui que vous retrouvez dans listVersion), lastLoadedAt (la date du chargement), status et entityCount (le nombre de fiches). Aucune donnée personnelle.

curl https://api.authenica.tech/api/v1/lists/sources -H "X-Api-Key: $AUTHENICA_CLE_API"

Lire et contrôler une pièce d'identité

Au-delà des listes, Authenica lit une pièce d'identité à partir de sa photo : carte d'identité, passeport, permis de conduire, titre de séjour. Le service rend les champs lus, le modèle de pièce reconnu et les contrôles menés (validité, authenticité, qualité de l'image, cohérence de la zone lisible par machine). Vous préremplissez ainsi votre formulaire d'entrée en relation et vous savez si la pièce mérite confiance.

Le service ne conserve rien. Il reçoit les images, les lit, rend le résultat et oublie. Aucune image et aucune valeur lue ne sont gardées. Ce que vous conservez, c'est vous qui le décidez.

Ce que vous envoyez

POST /api/v1/document-readings, en multipart/form-data, avec votre clé dans X-Api-Key comme pour les listes.

ChampPiècesEn clair
front et backCarte d'identité, permis, titre de séjourLe recto et le verso, en deux images. Le recto seul est accepté ; un verso seul est refusé.
singlePagePasseport ou pièce à page uniqueUne seule image. Ne se combine pas avec front et back.

Images JPEG ou PNG, 5 Mo au plus chacune. Le contenu est vérifié : un fichier renommé en .jpg qui n'est pas une image est refusé.

curl -X POST https://api.authenica.tech/api/v1/document-readings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -F "front=@recto.jpg;type=image/jpeg" \
  -F "back=@verso.jpg;type=image/jpeg"

Ce que vous recevez

ChampEn clair
documentNameLe modèle de pièce reconnu, par exemple « Côte d'Ivoire, carte d'identité 2020 ». Vide si le modèle n'est pas reconnu.
fieldsLes champs d'identité lus : nom, prénoms, date et lieu de naissance, sexe, nationalité, pays émetteur, numéro de pièce, dates de délivrance et d'expiration, numéro personnel, profession, taille. Chacun porte sa value, sa confidence de 0 à 100, sa source (zone lisible par machine ou lecture visuelle) et sa validity.
otherFieldsTout autre champ publié par la pièce : rien de ce qu'elle dit n'est perdu.
authenticityLes contrôles : overall, documentType, security, expiry, imageQuality, mrz, chacun OK, ERROR ou NOT_PERFORMED. securityChecks donne le nombre de contrôles de sécurité réussis, échoués et non menés.
expiredtrue si la pièce est expirée, false sinon.
warningsLes points d'attention, expliqués ci-dessous.
Nationalité et pays. Ils sont rendus tels que la pièce les porte, souvent en trois lettres (CIV). À vous de les ramener au code à deux lettres de votre propre formulaire.

Les signalements

CodeEn clair
DOCUMENT_EXPIREDLa pièce est expirée.
DOCUMENT_TYPE_NOT_RECOGNISEDLe modèle de la pièce n'est pas reconnu : les contrôles d'authenticité n'ont pas pu être faits.
AUTHENTICITY_FAILEDUn contrôle d'authenticité a échoué : examinez la pièce avec attention.
AUTHENTICITY_PARTIALCertains contrôles n'ont pas pu être menés avec cette prise de vue (par exemple ceux qui demandent une lumière particulière), mais aucun n'a échoué. Ce n'est pas une alerte.
AUTHENTICITY_NOT_PERFORMEDLes contrôles d'authenticité n'ont pas pu être faits sur cette pièce.
LOW_IMAGE_QUALITYL'image est de mauvaise qualité : refaire la prise de vue peut améliorer la lecture.
MRZ_CHECK_FAILEDLa zone lisible par machine est incohérente : vérifiez le numéro de pièce et les dates.
SOURCES_DISAGREEDeux zones de la pièce donnent des valeurs différentes pour au moins un champ.
MISSING_FIELDSDes champs d'identité n'ont pas pu être lus : à saisir à la main.

Un essai réel sur une pièce fictive

Voici la réponse réelle de l'API pour une image de passeport générée pour l'essai : elle n'est pas authentique et ne porte que des données inventées. Le service lit les champs, mais signale que le modèle n'est pas reconnu et que les contrôles d'authenticité n'ont pas pu être menés, exactement ce qu'il doit faire. Pour une pièce authentique d'un modèle connu, le modèle est nommé et les contrôles de sécurité sont menés et comptés dans securityChecks.

Requête

curl -X POST https://api.authenica.tech/api/v1/document-readings \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -F "singlePage=@passeport-fictif.png;type=image/png"

Réponse réelle de l'API (abrégée)

{
  "requestId": "c6f82bd1-898a-45de-bcbf-95925b156d48",
  "documentName": null,
  "fields": {
    "LAST_NAME": {
      "value": "KONE",
      "confidence": 78,
      "source": "MRZ",
      "validity": "NOT_PERFORMED",
      "consistent": true
    },
    "GIVEN_NAMES": {
      "value": "AMINATA",
      "confidence": 82,
      "source": "MRZ",
      "validity": "NOT_PERFORMED",
      "consistent": true
    },
    "DATE_OF_BIRTH": {
      "value": "1990-04-12",
      "confidence": 34,
      "source": "MRZ",
      "validity": "ERROR",
      "consistent": true
    },
    "NATIONALITY": {
      "value": "CIV",
      "confidence": 97,
      "source": "MRZ",
      "validity": "OK",
      "consistent": true
    },
    "DOCUMENT_NUMBER": {
      "value": "XXI2345G7",
      "confidence": 34,
      "source": "MRZ",
      "validity": "ERROR",
      "consistent": true
    },
    "EXPIRY_DATE": {
      "value": "2031-01-01",
      "confidence": 29,
      "source": "MRZ",
      "validity": "OK",
      "consistent": true
    }
  },
  "otherFields": {
    "MRZ Type": {
      "value": "ID-3",
      "confidence": 100,
      "source": "MRZ",
      "validity": "NOT_PERFORMED",
      "consistent": true
    },
    "Issuing State Name": {
      "value": "Cote d'Ivoire",
      "confidence": 0,
      "source": "MRZ",
      "validity": "OK",
      "consistent": true
    }
  },
  "authenticity": {
    "overall": "ERROR",
    "documentType": "ERROR",
    "security": "NOT_PERFORMED",
    "expiry": "OK",
    "imageQuality": "ERROR",
    "mrz": "ERROR",
    "securityChecks": null
  },
  "expired": false,
  "warnings": [
    "DOCUMENT_TYPE_NOT_RECOGNISED",
    "AUTHENTICITY_NOT_PERFORMED",
    "LOW_IMAGE_QUALITY",
    "MRZ_CHECK_FAILED"
  ]
}

Les erreurs

CodeQuandQue faire
400 INVALID_IMAGESImage absente, type non accepté, contenu qui ne correspond pas au type, ou singlePage combiné avec front ou back.Corrigez l'envoi.
401Clé absente, inconnue, révoquée ou expirée.Vérifiez la clé.
413Image trop lourde.Réduisez-la sous 5 Mo.
422 DOCUMENT_UNREADABLEAucune pièce n'a pu être trouvée dans l'image.Refaites la prise de vue : pièce entière, bien éclairée, à plat.
429Trop d'appels dans la minute.Attendez le délai de l'en-tête Retry-After.
503 DOCUMENT_READER_UNAVAILABLELe service de lecture est momentanément indisponible.Réessayez, ou laissez saisir à la main. Le service n'invente jamais une lecture.
Une clé de durée limitée. Votre clé peut avoir une date d'expiration : passée cette date, elle est refusée comme une clé inconnue. Demandez-en le renouvellement avant l'échéance.

Les erreurs

Toute erreur a la même forme : {"code": "...", "message": "...", "requestId": "..."}. Le message ne reprend jamais ce que vous avez envoyé.

HTTPCodeEn clairQue faire
400INVALID_REQUESTLa demande est incorrecte : nom vide, seuil hors de 0 à 1, type inconnu, corps illisible.Corriger la demande.
401API_KEY_REFUSEDClé absente, inconnue ou révoquée.Vérifier la clé, ou nous écrire si elle a été révoquée.
429RATE_LIMITEDVous avez dépassé votre quota par minute. L'en-tête Retry-After dit combien de secondes attendre.Attendre puis réessayer ; lisser vos appels.
503REFERENTIEL_UNAVAILABLE ou GATEWAY_UNAVAILABLELe service est momentanément indisponible.Réessayer. Ne jamais traiter un 503 comme « aucune correspondance ».
500INTERNAL_ERRORErreur inattendue de notre côté.Réessayer ; citer le requestId à notre support.
La règle d'or : le refus par défaut. Si l'appel échoue ou dépasse le délai, votre processus doit suspendre l'opération (ouverture de compte, virement...) et non la laisser passer. Prévoyez un délai d'attente de quelques secondes et un nombre limité de nouvelles tentatives.

Exemples de code

Dans chaque exemple, la clé vient d'une variable d'environnement et l'échec suspend l'opération.

import os, requests

reponse = requests.post(
    "https://api.authenica.tech/api/v1/screenings",
    headers={"X-Api-Key": os.environ["AUTHENICA_CLE_API"]},
    json={"fullName": "Zorbek Nandrawell", "scoreThreshold": 0.85, "listTypes": ["SANCTIONS"]},
    timeout=10,
)
if reponse.status_code != 200:
    raise RuntimeError(f"Criblage impossible ({reponse.status_code}) : suspendre l'opération")
for fiche in reponse.json()["matches"]:
    print(fiche["listName"], fiche["listVersion"], fiche["score"], fiche["confidence"])
// Node.js 18 ou plus
const reponse = await fetch("https://api.authenica.tech/api/v1/screenings", {
  method: "POST",
  headers: { "X-Api-Key": process.env.AUTHENICA_CLE_API, "Content-Type": "application/json" },
  body: JSON.stringify({ fullName: "Zorbek Nandrawell", scoreThreshold: 0.85 }),
  signal: AbortSignal.timeout(10_000),
});
if (!reponse.ok) throw new Error(`Criblage impossible (${reponse.status}) : suspendre l'opération`);
const { matches, requestId } = await reponse.json();
// Java 11 ou plus
HttpRequest requete = HttpRequest.newBuilder(URI.create("https://api.authenica.tech/api/v1/screenings"))
    .timeout(Duration.ofSeconds(10))
    .header("X-Api-Key", System.getenv("AUTHENICA_CLE_API"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("{\"fullName\":\"Zorbek Nandrawell\",\"scoreThreshold\":0.85}"))
    .build();
HttpResponse<String> reponse = HttpClient.newHttpClient().send(requete, HttpResponse.BodyHandlers.ofString());
if (reponse.statusCode() != 200) throw new IllegalStateException("Criblage impossible : suspendre l'opération");
curl -X POST https://api.authenica.tech/api/v1/screenings \
  --max-time 10 --fail-with-body \
  -H "X-Api-Key: $AUTHENICA_CLE_API" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Zorbek Nandrawell","scoreThreshold":0.85}'

Contrat OpenAPI

Le contrat de l'API est publié sur https://api.authenica.tech/v3/api-docs. Vous pouvez l'importer dans Postman ou Insomnia, ou générer un client avec un outil comme OpenAPI Generator.

Bonnes pratiques

  • Conservez le requestId et la listVersion avec votre décision : c'est votre preuve en cas d'inspection.
  • Ne journalisez pas les noms cherchés ni la clé. Authenica ne les garde pas non plus : elle recherche, elle ne stocke pas.
  • Un résultat n'est pas une décision : une personne examine chaque correspondance.
  • Les listes sont rechargées automatiquement. La date du dernier chargement de chaque liste est dans la liste des sources.
  • Fixez un délai d'attente à chaque appel et décidez à l'avance ce que fait votre processus si le service ne répond pas : il suspend.

Forfaits

Bientôt disponibles

Nous préparons des forfaits d'accès adaptés au volume d'appels de chaque institution. Ils seront publiés prochainement sur cette page.

En attendant, écrivez-nous pour obtenir un accès d'évaluation et être informé de leur ouverture.

Être informé de l'ouverture

Nous contacter

Une clé à demander, à changer ou à révoquer, une question d'intégration, un incident : it@authenica.tech. Indiquez le requestId de l'appel concerné quand vous en avez un.