Aller au contenu
AyiID

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
ChampTypeDescription
platformrequisANDROID | IOS | WEBPlateforme de l’appareil.
publicKeyrequis0x + 40 hexClé publique de l’appareil (adresse EVM).
attestation.typerequisPLAY_INTEGRITY | KEY_ATTESTATION | APP_ATTEST | MOCKType d’attestation d’intégrité présentée.
attestation.tokenrequisstring (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
ChampTypeDescription
requestedLevelL1 | L2 | L3Niveau 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
ChampTypeDescription
sessionIdrequisstringIdentifiant de session.
devicePublicKeyrequis0x + 40 hexClé publique de l’appareil enrôlé.
attestationrequis{ type, token }Attestation d’intégrité de l’appareil.
merkleRootrequis0x + 64 hexRacine de Merkle des trames (keccak256).
frameTimestampsrequisnumber[]Horodatages des trames (1 à 10 000).
deviceSignaturerequis0x + 130 hexSignature de l’appareil sur la session.
evidencerequisobjetPreuves 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 : holder

Renvoie les attestations de vivacité actives du porteur ({ "items": [...] }).