Evidence API
En Evidence-rad er én artefakt fanget under en økt — et øyeblikksbilde, en tavle, et videoklipp, et opptak eller et opplastet dokument. Hver rad bærer et sha256 + byte_size + mime slik at integritetsverifiseringskjeden kan bevise at bytene ikke ble manipulert mellom fangst og revisjon.
Evidence-objektet
{
"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"
} Typer
| Type | Fanget av | Merknader |
|---|---|---|
snapshot | Operatør eller feltside | Enkelt stillbilde (JPEG). Den vanligste typen. |
whiteboard | Operatør | Excalidraw-eksport — PNG + kanonisk JSON. Se Tavler. |
clip | Operatør | Kort MP4-utsnitt fra live-økten — brukes til å fange bevegelse som feltbrukeren demonstrerer. |
recording | System | Fullt øktopptak. Etterbehandlet til libx264 medium / crf20 etter at økten avsluttes. |
document | Operatør | Filvedlegg fra chatten i økten (PDF-er, bilder osv.). Grunnlag for PDF-for-signering. |
Status
| Status | Betydning |
|---|---|
pending | Rad opprettet; byte ikke ennå i objektlagring. |
uploading | Flerdels-opplasting pågår. |
ready | Byte er lagret; sha256 + byte_size er ferdigstilt. Kun ready -rader er nedlastbare. |
failed | Fangst eller opplasting avbrutt. completed_at er null. |
List øktbevis
GET /api/v1/public/sessions/{session_id}/evidence — scope evidence:read
curl "https://app.nexbasira.com/api/v1/public/sessions/0c8f.../evidence?kind=snapshot&limit=50" \
-H "Authorization: Bearer nb_sec_..." Query-parametere
| Param | Type | Merknader |
|---|---|---|
kind | string | Filter — en av snapshot, whiteboard, clip, recording, document. |
limit | int | Maks 100. Standard er 25. |
cursor | opaque | Fra forrige svars next_cursor. |
Hent en signert nedlastings-URL
GET /api/v1/public/evidence/{evidence_id}/download — scope evidence:read
Returnerer en kortlivet forhåndssignert URL som kunden henter de rå bytene fra. URL-en peker direkte på objektlagrings-backenden slik at nedlastinger omgår appserverne våre — ingen båndbredde-egress-kostnader fra din ende av det offentlige API-et.
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"
} Kall på nytt når URL-en utløper — ingen hastighetsgrensestraff for gjentatte genereringer. Etter nedlasting, hash bytene med SHA-256 og sammenlign med den returnerte sha256 for å verifisere at filen er intakt fra ende til ende.
# integrity check — Python
import hashlib, requests
r = requests.get(presigned["url"]); r.raise_for_status()
assert hashlib.sha256(r.content).hexdigest() == presigned["sha256"] Vanlige feil
| Status | Code | Når |
|---|---|---|
| 403 | permission_denied | Legitimasjonen mangler evidence:read. |
| 404 | not_found | Evidence-raden finnes ikke i legitimasjonens organisasjon. |
| 409 | evidence_not_ready | Nedlasting forespurt på en rad hvis status ikke er ready. |
| 410 | retention_expired | Organisasjonens lagringsregel har passert radens aldersgrense; byte er slettet fra objektlagringen. |
Merknader
- Ingen POST/PATCH/DELETE. Bevis fanges klientsiden (operatør + felt-SPA) under økten. Det offentlige API-et er skrivebeskyttet på denne ressursen.
- Lagring. Hver organisasjon konfigurerer et lagringsvindu (standard 7 år for eIDAS-kompatible deployer). Etter vinduet sletter objektlagringens livssyklusregler byte; raden består slik at audit-kjeden ikke brytes, men
/downloadreturnerer 410. - Forankret i audit-kjeden. Hver
ready-rad bidrar med sin sha256 til den per-økt hash-kjeden, som forankres ved tidsstemplingsmyndigheten ved øktslutt. Kjedehodet + TSA-kvitteringen er tilgjengelige via SPA-sidens audit-verify-endepunkt.