Référence API
Preuve de personne vivante
Toutes les routes exigent le rôle holder : l’identité provient toujours du jeton. Aucune image ni donnée biométrique n’est acceptée, uniquement des scores et condensats.
Sur l’appareil, jamais d’image
Les schémas de ces routes n’acceptent que des scores normalisés (0 à 1), des durées, des condensats et des signatures. La capture et le calcul se font sur l’appareil.
Enrôler un appareil
Lie une clé publique d’appareil à l’identité, avec une attestation plateforme vérifiée côté serveur.
POST
/liveness/device/enrollrôle : holder| Champ | Type | Description |
|---|---|---|
platformrequis | ANDROID | IOS | WEB | Plateforme de l’appareil. |
publicKeyrequis | 0x + 40 hex | Clé publique de l’appareil (adresse EVM). |
attestation.typerequis | PLAY_INTEGRITY | KEY_ATTESTATION | APP_ATTEST | MOCK | Type d’attestation d’intégrité présentée. |
attestation.tokenrequis | string (8–16384) | Jeton d’attestation plateforme. |
Créer une session
Ouvre une session de défi (nonce + script à jouer, TTL court).
POST
/liveness/sessionrôle : holder| Champ | Type | Description |
|---|---|---|
requestedLevel | L1 | L2 | L3 | Niveau de PoLP demandé. Défaut : L2. |
1curl -X POST https://api.ayiid.example/liveness/session \2 -H "authorization: Bearer $HOLDER_TOKEN" \3 -H "content-type: application/json" \4 -d '{ "requestedLevel": "L2" }'
Vérifier la session
Soumet les preuves agrégées ; le moteur exécute le pipeline complet et émet l’attestation de vivacité signée.
POST
/liveness/verifyrôle : holder| Champ | Type | Description |
|---|---|---|
sessionIdrequis | string | Identifiant de session. |
devicePublicKeyrequis | 0x + 40 hex | Clé publique de l’appareil enrôlé. |
attestationrequis | { type, token } | Attestation d’intégrité de l’appareil. |
merkleRootrequis | 0x + 64 hex | Racine de Merkle des trames (keccak256). |
frameTimestampsrequis | number[] | Horodatages des trames (1 à 10 000). |
deviceSignaturerequis | 0x + 130 hex | Signature de l’appareil sur la session. |
evidencerequis | objet | Preuves PAD : challenge (hueScore, latencyMs), sensor (parallaxScore, imuCorrelation), camera (physicalSensorId, virtualSourceSuspected), timing (frameJitterMs, sessionDurationMs, frameCount). |
1{2 "challenge": { "hueScore": 0.94, "latencyMs": 320 },3 "sensor": { "parallaxScore": 0.88, "imuCorrelation": 0.91 },4 "camera": { "physicalSensorId": "cam-0", "virtualSourceSuspected": false },5 "timing": { "frameJitterMs": 12, "sessionDurationMs": 4200, "frameCount": 128 }6}
Réponse : { "status": "VERIFIED", "attestation": { ... } }
Mes attestations de vivacité
GET
/liveness/attestations/merôle : holderRenvoie les attestations de vivacité actives du porteur ({ "items": [...] }).