EN VIVO · CON AUDITORÍA · UE
SISTEMA · 99,99% UPTIME
v 1.0 ↗ HECHO EN UE

API de pruebas

Una fila de prueba es un artefacto capturado durante una sesión: una instantánea, una pizarra, un clip de vídeo, una grabación o un documento cargado. Cada fila lleva un sha256 + byte_size + mime para que la cadena de verificación de integridad pueda probar que los bytes no fueron manipulados entre la captura y la auditoría.

El objeto de prueba

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

Tipos

TipoCapturado porNotas
snapshotOperador o lado de campoFotograma fijo único (JPEG). El tipo más común.
whiteboardOperadorExportación de Excalidraw: PNG + JSON canónico. Consulte Pizarras.
clipOperadorCorte MP4 corto de la sesión en vivo: se usa para capturar el movimiento que el usuario de campo demuestra.
recordingSistemaGrabación completa de la sesión. Postprocesada a libx264 medium / crf20 tras finalizar la sesión.
documentOperadorAdjunto de archivo del chat en sesión (PDFs, fotos, etc.). Base para el PDF-para-firma.

Estado

EstadoSignificado
pendingFila creada; los bytes aún no están en el almacenamiento de objetos.
uploadingCarga multiparte en curso.
readyLos bytes están persistidos; sha256 + byte_size están finalizados. Solo las filas ready son descargables.
failedCaptura o carga abortada. completed_at es nulo.

Listar las pruebas de la sesión

GET /api/v1/public/sessions/{session_id}/evidence — alcance evidence:read

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

Parámetros de consulta

ParámetroTipoNotas
kindstringFiltro: uno de snapshot, whiteboard, clip, recording, document.
limitintMáximo 100. Predeterminado 25.
cursoropaqueDe la respuesta anterior next_cursor.

Obtener una URL de descarga firmada

GET /api/v1/public/evidence/{evidence_id}/download — alcance evidence:read

Devuelve una URL prefirmada de corta duración desde la que el cliente obtiene los bytes en bruto. La URL apunta directamente al backend de almacenamiento de objetos, de modo que las descargas evitan nuestros servidores de aplicación: sin cargos por egress de ancho de banda desde su extremo de la API pública.

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

Vuelva a llamar cuando la URL caduque: sin penalización de límite de tasa por emisiones repetidas. Tras descargar, calcule el hash de los bytes con SHA-256 y compárelo con el sha256 devuelto para verificar que el archivo está intacto de extremo a extremo.

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

Errores comunes

EstadoCódigoCuándo
403permission_deniedLa credencial carece de evidence:read.
404not_foundLa fila de prueba no existe en la organización de la credencial.
409evidence_not_readyDescarga solicitada en una fila cuyo status no es ready.
410retention_expiredLa política de retención de la organización ha superado el corte de edad de la fila; los bytes se han purgado del almacenamiento de objetos.

Notas

  • Sin POST/PATCH/DELETE. Las pruebas se capturan del lado del cliente (SPA de operador + campo) durante la sesión. La API pública es de solo lectura en este recurso.
  • Retención. Cada organización configura una ventana de retención (predeterminada de 7 años para despliegues conformes con eIDAS). Tras la ventana, las reglas de ciclo de vida del almacenamiento de objetos purgan los bytes; la fila permanece para que la cadena de auditoría no se rompa, pero /download devuelve 410.
  • Anclado en la cadena de auditoría. Cada fila ready aporta su sha256 a la cadena de hash por sesión, que se ancla en el TSA al finalizar la sesión. La cabeza de la cadena + el recibo del TSA son accesibles a través del endpoint de verificación de auditoría del lado de la SPA.