EN DIRECT · AUDIT CHAÎNÉ · ÉDR UE
SYSTÈME · 99,99% DISPONIBILITÉ
v 1.0 ↗ FAIT EN UE

API Evidence

Une ligne Evidence correspond à un artefact capturé pendant une session — une capture, un tableau blanc, un clip vidéo, un enregistrement ou un document téléversé. Chaque ligne porte un sha256 + byte_size + mime afin que la chaîne de vérification d'intégrité puisse prouver que les octets n'ont pas été altérés entre la capture et l'audit.

L'objet Evidence

{
  "id": "ev-7f3a...",
  "session": "0c8f4d2e-1a3b-4c5d-9e7f-1234567890ab",
  "kind": "snapshot",
  "status": "ready",
  "mime": "image/jpeg",
  "byte_size": 184523,
  "sha256": "f9cc12fda76c30dcc9bee627baed6c9e8fe11b813313de70b1463f9f73e5e418",
  "captured_at": "2026-05-23T10:14:02.481Z",
  "created_at": "2026-05-23T10:14:02.917Z",
  "completed_at": "2026-05-23T10:14:03.211Z"
}

Types

TypeCapturé parNotes
snapshotOpérateur ou côté terrainImage fixe unique (JPEG). Le type le plus courant.
whiteboardOpérateurExport Excalidraw — PNG + JSON canonique. Voir Tableaux blancs.
clipOpérateurCourt MP4 découpé dans la session en direct — sert à capturer un mouvement que l'utilisateur terrain démontre.
recordingSystèmeEnregistrement complet de la session. Post-traité en libx264 medium / crf20 après la fin de la session.
documentOpérateurPièce jointe issue du chat en session (PDF, photos, etc.). Fondation pour le PDF à signer.

Statut

StatutSignification
pendingLigne créée ; octets pas encore dans le stockage objet.
uploadingTéléversement multipart en cours.
readyLes octets sont persistés ; sha256 + byte_size sont finalisés. Seules les lignes ready sont téléchargeables.
failedCapture ou téléversement interrompu. completed_at est null.

Lister les preuves d'une session

GET /api/v1/public/sessions/{session_id}/evidence — Portée evidence:read

curl "https://app.nexbasira.com/api/v1/public/sessions/0c8f.../evidence?kind=snapshot&limit=50" \
  -H "Authorization: Bearer nb_sec_..."

Paramètres de requête

ParamètreTypeNotes
kindstringFiltre — l'un de snapshot, whiteboard, clip, recording, document.
limitintMax 100. Par défaut 25.
cursoropaqueRepris de la réponse précédente : next_cursor.

Obtenir une URL de téléchargement signée

GET /api/v1/public/evidence/{evidence_id}/download — Portée evidence:read

Renvoie une URL présignée à courte durée de vie depuis laquelle le client récupère les octets bruts. L'URL pointe directement vers le backend de stockage objet, de sorte que les téléchargements contournent nos serveurs applicatifs — aucun frais d'egress de bande passante de votre côté de l'API publique.

curl "https://app.nexbasira.com/api/v1/public/evidence/ev-7f3a.../download" \
  -H "Authorization: Bearer nb_sec_..."
{
  "url": "https://s3.eu-central-1.amazonaws.com/nb-prod-evidence/orgs/.../snapshot.jpg?X-Amz-Algorithm=...",
  "expires_in_seconds": 900,
  "sha256": "f9cc12fda76c30dcc9bee627baed6c9e8fe11b813313de70b1463f9f73e5e418",
  "byte_size": 184523,
  "mime": "image/jpeg",
  "kind": "snapshot"
}

Rappelez lorsque l'URL expire — aucune pénalité de limite de débit pour des émissions répétées. Après téléchargement, hachez les octets avec SHA-256 et comparez au sha256 renvoyé pour vérifier que le fichier est intact de bout en bout.

# integrity check — Python
import hashlib, requests
r = requests.get(presigned["url"]); r.raise_for_status()
assert hashlib.sha256(r.content).hexdigest() == presigned["sha256"]

Erreurs courantes

StatutCodeQuand
403permission_deniedL'identifiant ne dispose pas du scope evidence:read.
404not_foundLa ligne de preuve n'existe pas dans l'organisation de l'identifiant.
409evidence_not_readyTéléchargement demandé sur une ligne dont le status n'est pas ready.
410retention_expiredLa politique de rétention de l'organisation a dépassé le seuil d'âge de la ligne ; les octets ont été purgés du stockage objet.

Notes

  • Pas de POST/PATCH/DELETE. Les preuves sont capturées côté client (SPA opérateur + terrain) pendant la session. L'API publique est en lecture seule sur cette ressource.
  • Rétention. Chaque organisation configure une fenêtre de rétention (7 ans par défaut pour les déploiements conformes eIDAS). Passé la fenêtre, les règles de cycle de vie du stockage objet purgent les octets ; la ligne demeure pour ne pas casser la chaîne d'audit, mais /download renvoie 410.
  • Ancrée dans la chaîne d'audit. Chaque ligne ready contribue son sha256 à la chaîne de hachage par session, laquelle est ancrée à la TSA à la fin de la session. La tête de chaîne + le reçu TSA sont accessibles via l'endpoint de vérification d'audit côté SPA.