ΖΩΝΤΑΝΑ · ΑΛΥΣΙΔΑ ΕΛΕΓΧΟΥ · ΕΕ
ΣΥΣΤΗΜΑ · 99,99% ΔΙΑΘΕΣΙΜΟΤΗΤΑ
v 1.0 ↗ ΦΤΙΑΓΜΕΝΟ ΣΤΗΝ ΕΕ

Evidence API

Μια εγγραφή Evidence είναι ένα τεκμήριο που καταγράφηκε κατά τη διάρκεια μιας συνεδρίας — ένα στιγμιότυπο, ένας πίνακας ζωγραφικής, ένα βίντεο κλιπ, μια εγγραφή ή ένα μεταφορτωμένο έγγραφο. Κάθε εγγραφή φέρει ένα sha256 + byte_size + mime ώστε η αλυσίδα επαλήθευσης ακεραιότητας να μπορεί να αποδείξει ότι τα bytes δεν παραποιήθηκαν μεταξύ της καταγραφής και του ελέγχου.

Το αντικείμενο 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"
}

Είδη

ΕίδοςΚαταγράφηκε απόΣημειώσεις
snapshotΧειριστής ή πλευρά πεδίουΜεμονωμένο ακίνητο καρέ (JPEG). Το πιο συνηθισμένο είδος.
whiteboardΧειριστήςΕξαγωγή Excalidraw — PNG + κανονικοποιημένο JSON. Δείτε Πίνακες ζωγραφικής.
clipΧειριστήςΣύντομο MP4 κομμένο από τη ζωντανή συνεδρία — χρησιμοποιείται για την καταγραφή κίνησης που επιδεικνύει ο χρήστης πεδίου.
recordingΣύστημαΠλήρης εγγραφή συνεδρίας. Μετεπεξεργασία σε libx264 medium / crf20 μετά τον τερματισμό της συνεδρίας.
documentΧειριστήςΣυνημμένο αρχείο από τη συνομιλία εντός συνεδρίας (PDF, φωτογραφίες κ.λπ.). Θεμέλιο για PDF προς υπογραφή.

Κατάσταση

ΚατάστασηΣημασία
pendingΗ εγγραφή δημιουργήθηκε· τα bytes δεν είναι ακόμη στο object storage.
uploadingΜεταφόρτωση multipart σε εξέλιξη.
readyΤα bytes είναι μόνιμα αποθηκευμένα· τα sha256 + byte_size οριστικοποιήθηκαν. Μόνο οι εγγραφές ready είναι διαθέσιμες για λήψη.
failedΗ καταγραφή ή η μεταφόρτωση ματαιώθηκε. completed_at είναι null.

Λίστα τεκμηρίων συνεδρίας

GET /api/v1/public/sessions/{session_id}/evidence — εύρος evidence:read

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

Παράμετροι query

ΠαράμετροςΤύποςΣημειώσεις
kindstringΦίλτρο — ένα από τα snapshot, whiteboard, clip, recording, document.
limitintΜέγιστο 100. Προεπιλογή 25.
cursoropaqueΑπό το πεδίο της προηγούμενης απόκρισης next_cursor.

Λήψη υπογεγραμμένου URL λήψης

GET /api/v1/public/evidence/{evidence_id}/download — εύρος evidence:read

Επιστρέφει ένα βραχύβιο presigned URL από το οποίο ο πελάτης ανακτά τα ακατέργαστα bytes. Το URL δείχνει απευθείας στο backend object-storage ώστε οι λήψεις να παρακάμπτουν τους app servers μας — καμία χρέωση bandwidth-egress από τη δική σας πλευρά του δημόσιου API.

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"
}

Καλέστε ξανά όταν λήξει το URL — καμία ποινή περιορισμού ρυθμού για επαναλαμβανόμενες εκδόσεις. Μετά τη λήψη, κατακερματίστε τα bytes με SHA-256 και συγκρίνετε με το επιστρεφόμενο sha256 για να επαληθεύσετε ότι το αρχείο είναι ακέραιο από άκρο σε άκρο.

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

Συνήθη σφάλματα

ΚατάστασηΚωδικόςΠότε
403permission_deniedΤο διαπιστευτήριο δεν διαθέτει evidence:read.
404not_foundΗ εγγραφή Evidence δεν υπάρχει στον οργανισμό του διαπιστευτηρίου.
409evidence_not_readyΖητήθηκε λήψη σε εγγραφή της οποίας το status δεν είναι ready.
410retention_expiredΗ πολιτική διατήρησης του οργανισμού έχει ξεπεράσει το όριο ηλικίας της εγγραφής· τα bytes έχουν εκκαθαριστεί από το object storage.

Σημειώσεις

  • Χωρίς POST/PATCH/DELETE. Τα τεκμήρια καταγράφονται στην πλευρά του πελάτη (χειριστής + SPA πεδίου) κατά τη διάρκεια της συνεδρίας. Το δημόσιο API είναι μόνο για ανάγνωση σε αυτόν τον πόρο.
  • Διατήρηση. Κάθε οργανισμός διαμορφώνει ένα παράθυρο διατήρησης (προεπιλογή 7 έτη για αναπτύξεις συμβατές με eIDAS). Μετά το παράθυρο, οι κανόνες κύκλου ζωής του object-storage εκκαθαρίζουν τα bytes· η εγγραφή παραμένει ώστε να μη σπάει η αλυσίδα ελέγχου, αλλά το /download επιστρέφει 410.
  • Αγκυρωμένο στην αλυσίδα ελέγχου. Κάθε εγγραφή ready συνεισφέρει το sha256 της στην αλυσίδα κατακερματισμού ανά συνεδρία, η οποία αγκυρώνεται στην TSA κατά τον τερματισμό της συνεδρίας. Η κεφαλή αλυσίδας + η απόδειξη TSA είναι προσβάσιμες μέσω του endpoint audit-verify στην πλευρά SPA.