API
API pública
El production API origin para SDKs y verificación pública es
https://verify.attesto.eu. Los tenant browser workflows
viven en https://dashboard.attesto.eu.
Elija la familia API correcta
Attesto tiene varias surfaces públicas porque el trabajo de evidence ocurre en lugares diferentes. Use el SDK/API desde su servidor para crear evidence, webhooks para recibir lifecycle notifications, connectors para capturar source-system observations y verifier endpoints cuando otro sistema necesite revisar evidence antes de confiar en ella.
| Surface | Use cuando | Primary routes | Credential |
|---|---|---|---|
| v1 SDK Events | Necesita stable event logging, receipts, anchoring y exports. | /v1/sdk/events, /v1/sdk/events/batch, /v1/events/{id}/proof, /v1/exports/{id}/truth-package/verify | Tenant system key o tenant auth, según la route. |
| v2 Proofstream | Necesita ordered streams, receipts, windows, checkpoints, witnesses, anchors y bundles. | /v2/streams, /v2/streams/{id}/events, /v2/checkpoints/{id} | Tenant system key para server ingest; tenant session para vistas de dashboard. |
| Verifier API | Recibe evidence y debe revisarla antes de depender de ella. | /v2/verify, /v1/public/verify | Sin tenant cookie para public proof objects. |
| Audit packs | Necesita un portable evidence bundle para un workflow auditor o regulador. | /v2/audit/packs, /v2/tenant/audit/packs | Tenant auth/system policy. |
| Connectors | Un source system externo emite evidence hacia Attesto. | /v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/events | Connector-specific signed envelope. |
| Marketplace | Necesita el public connector catalog, tenant installs, developer accounts, publisher billing o asset submission. | /v1/marketplace/items, /v1/marketplace/auth/*, /v1/marketplace/publisher/* | Public read-only, tenant session o marketplace developer session según la route. |
| Identity y settings | Un usuario tenant inicia sesión, acepta una invitación o configura enterprise SSO. | /v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providers | Tenant browser session y CSRF para settings; login state de corta duración para SSO. |
| Public status | Necesita component health, latency, uptime bars e incident state customer-safe. | /api/status, /v1/status | Public, secret-free status payload. |
Origins
| Origin | Propósito |
|---|---|
https://verify.attesto.eu | Public API, health, signing public key, v1 proof verification, v2 Proofstream verification. |
https://dashboard.attesto.eu | Tenant dashboard, system registration, key reveal-once, exports, webhooks, connectors, billing. |
https://audit.attesto.eu | Portal auditor-facing para invited external auditors. |
https://status.attesto.eu | Customer-safe service status API y status page. El private admin control panel se excluye deliberadamente. |
Authentication
Server-side event ingest usa una tenant system key en el header
Authorization: Bearer. Public verification routes validan
los proof objects enviados y no requieren tenant cookies.
Las tenant dashboard routes usan la secure browser session existente
más CSRF recovery para mutating requests. No coloque system keys ni
SSO client secrets en frontend bundles.
curl -X POST https://verify.attesto.eu/v1/sdk/events \
-H "Authorization: Bearer $ATTESTO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $ATTESTO_IDEMPOTENCY_KEY" \
--data-binary @event.json
Email-first authentication routes
Los main tenant users inician sesión mediante email discovery en
dashboard.attesto.eu. Attesto devuelve un único next step
recomendado en lugar de mostrar todos los providers a la vez. Las
marketplace developer accounts, admin staff auth y auditor auth siguen
siendo superficies separadas.
| Route | Propósito | Security notes |
|---|---|---|
POST /v1/auth/discover | Acepta un email y un invite token opcional, y devuelve password, OAuth/OIDC, SAML, organization SSO o signup/trial como next step. | No expone provider wall ni secret provider config. |
GET /v1/auth/providers | Devuelve safe provider labels para enabled login paths. | Sin client secrets ni private metadata. |
POST /v1/auth/external/start | Crea OAuth/OIDC state, nonce y PKCE data, y devuelve la redirect URL del discovered provider. | State de corta duración y single-use. |
GET /v1/auth/external/callback/{provider_id} | Verifica el provider callback y emite las tenant session cookies existentes. | Issuer, audience, nonce, JWKS y verified email se comprueban. |
GET /v1/auth/saml/metadata/{provider_id} | Devuelve tenant-specific SAML SP metadata para enterprise setup. | Seguro para compartir con el tenant identity provider. |
POST /v1/auth/saml/acs/{provider_id} | Consume signed SAML assertions. | Rechaza assertions unsigned, replayed, expired, wrong-audience y wrong-recipient. |
POST /v1/auth/login, POST /v1/auth/signup | Password fallback y creación limpia de signup/trial después de que discovery recomiende ese camino. | Password fallback sigue limitado a tenant dashboard users; las marketplace developer accounts están separadas. |
GET /v1/auth/invite/{token} | Devuelve invite context para el email-first acceptance flow. | Invite token validado antes de cualquier identity linking. |
POST /v1/auth/accept-invite | Acepta una invite con password setup o provider-based activation. | External linking requiere verified email y tenant match. |
POST /v1/auth/refresh, POST /v1/auth/logout, GET /v1/auth/csrf, GET /v1/auth/me | Session refresh, logout, CSRF recovery y current user identity. | Use browser credentials; nunca registre session cookies. |
Consulte Tenant SSO para la guía de setup de Entra ID, generic OIDC y SAML.
Source time y timezone policy
Attesto registra cuándo el source system dice que ocurrió un event y
cuándo Attesto lo recibió. Las Event APIs requieren timezone-aware
timestamps como 2026-06-07T12:00:00+02:00 o
2026-06-07T10:00:00Z. Tenant timezone es configurable;
los systems heredan por defecto la tenant timezone y pueden establecer
su propio source_timezone cuando la fuente conectada
opera en otra jurisdicción.
| Field | Meaning | Requirement |
|---|---|---|
occurred_at | Source-system event time. | Requerido para Proofstream events y debe incluir timezone o UTC offset. |
source_timezone | IANA timezone del source system registrado. | Default desde tenant timezone; use valores como Europe/Amsterdam o Europe/Berlin. |
| Connector received time | Cuándo Attesto o Local Vault recibió el source event. | Lo establece el receiving service, no untrusted frontend code. |
| Normalized UTC time | Canonical comparison time para verification y ordering. | Derivado server-side conservando source context. |
Idempotency y replay behavior
Las write routes aceptan Idempotency-Key. Repetir la
misma key con la misma canonical request devuelve el resultado
original. Repetir la misma key con una request diferente falla como
conflicto. Esto protege connector retries y server-side job retries de
crear evidence duplicada.
| Case | Result |
|---|---|
| Same key, same request | Original response se reproduce. |
| Same key, changed payload | 409 Conflict. |
| No key on write path | Request rechazada cuando la route requiere dedupe. |
v1 event ingest
Use v1 cuando necesite el stable event audit trail y anchoring path. Los SDKs configuran defaults para event type, status, retries e idempotency.
POST /v1/sdk/eventsregistra un event.POST /v1/sdk/events/batchregistra hasta 1000 events.GET /v1/events/{eventId}/proofdevuelve anchored proof material para un event.POST /v1/public/verifyverifica un v1 proof object.POST /v1/exports/{exportId}/truth-package/verifyregistra un event backend-validatedtruth_package.verifieddespués de que un verifier report prueba que el package exportado fue revisado criptográficamente.
Tenant dashboard v1 APIs
Estas browser APIs impulsan dashboard.attesto.eu. Las
llamadas mutating usan tenant session cookies y CSRF recovery. Usa
system keys y SDK routes para server-side ingest; usa estas routes
para tenant operators que gestionan su workspace.
| Route family | Propósito | Credential |
|---|---|---|
GET /v1/dashboard | Devuelve el tenant dashboard summary usado por la operator UI. | Tenant session. |
GET/POST /v1/systems, PATCH/DELETE /v1/systems/{system_id}, POST /v1/systems/{system_id}/rotate-key | Registrar source systems, preservar source timezone policy y revelar o rotar system keys una sola vez. | Tenant session; writer role para mutations. |
GET /v1/events, GET /v1/events/{event_id}, GET /v1/events/{event_id}/proof | Inspeccionar tenant events y proof material. | Tenant session. |
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/status | Iniciar y monitorizar archive retrieval para archived event evidence. | Tenant session; writer role para iniciar retrieval. |
GET/POST/DELETE /v1/exports, POST /v1/exports/{export_id}/download/prepare, GET /v1/exports/{export_id}/download?ticket=..., POST /v1/exports/{export_id}/truth-package/verify | Crear, descargar, eliminar y registrar verificación de Truth Package exports. | Tenant session; writer role para creación, eliminación y verification record submission. |
GET/POST/PATCH/DELETE /v1/webhooks, POST /v1/webhooks/{webhook_id}/rotate-secret, GET /v1/webhooks/{webhook_id}/deliveries | Gestionar signed tenant webhooks, rotar el one-shot delivery secret e inspeccionar delivery attempts. | Tenant session; admin role para webhook mutations. |
GET/POST/PATCH/DELETE /v1/users, POST /v1/users/{user_id}/resend-invite | Invitar tenant users, reenviar invites, actualizar roles/status y revocar access. | Tenant session; owner/admin role para mutations. |
GET/POST/PATCH/DELETE /v1/parties | Mantener external party records usados en tenant evidence workflows. | Tenant session; admin role para mutations. |
GET /v1/packs, POST /v1/packs/{vertical_id}/install, DELETE /v1/packs/{vertical_id} | Listar, instalar y quitar tenant evidence packs sin crear datos seed sintéticos. | Tenant session; admin role para install/remove. |
GET /v1/billing/plan, POST /v1/billing/checkout, POST /v1/billing/portal | Leer el plan activo, iniciar Stripe Checkout para subscriptions Starter/Growth/Realtime con trial de 30 días, o abrir el Stripe billing portal. | Tenant session; admin role para checkout y portal sessions. |
GET/POST /v1/auditor-invites, POST /v1/auditor-invites/{access_id}/revoke | Conceder, listar y revocar external auditor access al read-only audit portal. | Tenant session; admin role para grant/revoke. |
Event body mínimo:
{
"type": "ai.decision",
"status": "verified",
"occurred_at": "2026-06-07T12:00:00Z",
"source_ref": "case-2026-0001",
"payload": {
"model": "risk-classifier-v4",
"decision": "manual_review",
"policy_id": "policy-2026-01"
}
}
v2 Proofstream
Proofstream añade append-only streams, signed receipts, windows, checkpoints, witness evidence, anchors, bundles y offline verification.
POST /v2/streamscrea un stream.POST /v2/streams/{streamId}/eventsañade un event y devuelve un signed receipt.POST /v2/streams/{streamId}/events/batchañade varios events con receipt results.GET /v2/streams/{streamId}/headdevuelve el stream head append-only actual.GET /v2/receipts/{eventId}devuelve el receipt almacenado.POST /v2/verify/receiptverifica directamente un receipt object.GET /v2/windows/{windowId}devuelve window evidence e inclusion material.GET /v2/checkpoints/{checkpointId}devuelve checkpoint evidence.GET /v2/checkpoints/{checkpointId}/consistency?from=...devuelve consistency evidence.GET /v2/witness/policies/{policyId}devuelve la witness policy usada para quorum checks.GET /v2/anchors/{anchorEpochId}devuelve anchor epoch evidence.GET /v2/ivc/epochs/{ivcEpochId}devuelve Proof of Evolution epoch evidence.POST /v2/audit/packscrea un offline verifier bundle cuando la range tiene la witness y anchor evidence requerida.POST /v2/verifyverifica receipt, stream, checkpoint, consistency, anchor, IVC o bundle objects.
Crear un stream:
curl -X POST https://verify.attesto.eu/v2/streams \
-H "Authorization: Bearer $ATTESTO_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"system_id": "sys_...",
"use_case": "ai-decision-history",
"policy_id": "policy-2026-01",
"metadata": {
"owner": "risk-platform",
"environment": "production"
}
}
JSON
Añadir un event:
curl -X POST https://verify.attesto.eu/v2/streams/$STREAM_ID/events \
-H "Authorization: Bearer $ATTESTO_API_KEY" \
-H "Idempotency-Key: $ATTESTO_IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"source_ref": "case-2026-0001:decision-1",
"event_type": "ai.decision",
"occurred_at": "2026-06-07T12:00:00+02:00",
"payload": {
"decision": "manual_review",
"score": 91,
"policy_id": "policy-2026-01"
}
}
JSON
Receipt response shape:
{
"stream_event_id": "sev_...",
"stream_id": "str_...",
"seq_no": 1,
"event_hash": "sha256-hex",
"stream_head_hash": "sha256-hex",
"receipt": {
"protocol": "ATTESTO-PROOFSTREAM-001",
"alg": "Ed25519",
"kid": "proofstream-receipt-key",
"signature": "hex-encoded-signature"
}
}
Tenant Proofstream y dashboard APIs
Las Tenant browser APIs exponen el mismo evidence model dentro del dashboard sin dar al frontend acceso a server-side system keys. Las mutating dashboard calls usan browser cookies y CSRF recovery.
| Route family | Propósito | Credential |
|---|---|---|
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/events | Lista streams e inspecciona stream events visibles para el tenant. | Tenant session. |
GET /v2/tenant/receipts/{stream_event_id} | Inspecciona el stored receipt de un tenant-visible stream event. | Tenant session. |
GET /v2/tenant/streams/{stream_id}/proof-state, /forks, /ivc/epochs | Lee proof health, fork evidence y Proof of Evolution epochs. | Tenant session. |
GET /v2/tenant/streams/{stream_id}/windows, /checkpoints | Inspecciona closed windows y checkpoints de un stream. | Tenant session. |
POST /v2/tenant/audit/packs | Crea un tenant-authorized offline bundle para auditor review. | Tenant session plus tenant policy. |
PUT /v2/tenant/witness/policies/{policy_id} | Actualiza una tenant witness policy con las quorum rules configuradas. | Tenant session plus tenant policy permission. |
Tenant settings y SSO APIs
Tenant settings solo está disponible para authenticated tenant users con el rol requerido. Los provider secrets se cifran server-side y nunca se devuelven al browser después de guardar.
| Route | Propósito |
|---|---|
GET /v1/settings | Devuelve el tenant settings snapshot, incluyendo safe identity-provider metadata. |
PATCH /v1/settings/tenant | Actualiza tenant display settings, locale y timezone policy. |
GET /v1/settings/identity-providers | Lista tenant SSO providers y public setup values. |
POST /v1/settings/identity-providers | Añade Entra ID, generic OIDC o SAML provider configuration. |
PATCH /v1/settings/identity-providers/{provider_id} | Actualiza enabled state, domains, issuer metadata o rotated secrets. |
DELETE /v1/settings/identity-providers/{provider_id} | Deshabilita y elimina un tenant identity provider. |
Connector y Local Vault APIs
Connectors son production evidence sources. Los tenant users configuran connector records en el dashboard, mientras los source systems publican events mediante provider-specific signed envelopes o Local Vault relay. Cada connector event debe incluir source system, source object, source event type, source timestamp con timezone, idempotency reference y normalized payload commitment.
| Route family | Propósito | Credential |
|---|---|---|
GET/POST /v2/tenant/connectors/signed-webhooks, DELETE /v2/tenant/connectors/signed-webhooks/{connector_id} | Crea, lista y revoca generic signed webhook connectors. Los connector secrets se devuelven una sola vez al crear cuando aplica, y nunca de nuevo. | Tenant session. |
GET/POST /v2/tenant/connectors/s3-objects, DELETE /v2/tenant/connectors/s3-objects/{connector_id}, POST /v2/tenant/connectors/s3-objects/{connector_id}/commit | Crea, lista, revoca y commit S3/R2 object evidence connectors. La ruta commit registra metadata e integrity sin proxyear object content. | Tenant session. |
GET/POST /v2/tenant/connectors/repository-webhooks, DELETE /v2/tenant/connectors/repository-webhooks/{connector_id} | Crea, lista y revoca GitHub/GitLab repository webhook connectors. | Tenant session. |
POST /v2/connectors/signed-webhooks/{connector_id}/events | Ingesta un signed webhook event desde un source system externo. | Connector signed envelope. |
POST /v2/connectors/repository-webhooks/{connector_id}/events | Ingesta repository change evidence. | Provider webhook/signature contract. |
GET/POST /v2/tenant/local-vault/installations, DELETE /v2/tenant/local-vault/installations/{installation_id} | Gestiona Local Vault edge installations y revoca edge credentials fail-closed. | Tenant session. |
POST /v2/tenant/local-vault/enrollment-tokens | Crea un enrollment token corto y single-use; después de la creación solo se almacena el hash. | Tenant session. |
POST /v2/local-vault/enroll | Intercambia un enrollment token válido por una installation credential y public installation metadata. | Single-use enrollment token. |
POST /v2/local-vault/installations/{installation_id}/events | Relay de encrypted-spool events desde el customer edge hacia Proofstream. | Local Vault installation credential. |
POST /v2/local-vault/installations/{installation_id}/witness/checkpoints | Envía customer-side witness checkpoint statements cuando witness mode está enabled por policy. | Local Vault witness credential. |
Marketplace APIs
Las Marketplace APIs impulsan marketplace.attesto.eu. El
public catalog es read-only. Tenant acquisition, installation,
artifact download y revocation requieren una authenticated tenant
session más CSRF. Publisher signup, profile management, developer
checkout, payout onboarding y asset submission usan una cuenta separada
marketplace-only developer. La documentación pública omite
intencionalmente los endpoints privados de Attesto review y publication.
| Route family | Propósito | Credential |
|---|---|---|
GET /v1/marketplace/categories, /developer-tiers, /items, /items/{slug} | Explora public connector categories, developer tiers y validated public assets. | Public, read-only. |
POST /v1/marketplace/auth/signup, /auth/login, /auth/logout, GET /auth/csrf, /auth/me | Crea y usa marketplace-only developer accounts. Estas cuentas no pueden iniciar sesión en el tenant dashboard. | Marketplace developer credentials/session. |
GET /v1/marketplace/me/entitlements, /me/installs | Lista connector entitlements e installs del tenant. | Tenant session. |
POST /v1/marketplace/items/{slug}/acquire, /install, /install/update, /revoke | Acquire, install, update o revoke tenant access a un connector asset. | Tenant session y CSRF. |
GET /v1/marketplace/items/{slug}/artifact | Descarga el connector manifest artifact después de que entitlement esté active. | Tenant session con active entitlement. |
GET /v1/marketplace/evidence/{receipt_id} | Obtiene marketplace evidence receipt metadata para tenant-visible marketplace actions. | Tenant o marketplace session scoped al evidence tenant. |
GET/POST/PATCH /v1/marketplace/publisher/profile | Crea, lee y actualiza publisher profile metadata. | Marketplace developer session y CSRF para writes. |
GET /v1/marketplace/publisher/billing-state, POST /publisher/upgrade, /publisher/billing-portal | Inspecciona developer tier state, inicia Stripe Checkout para paid developer tiers o abre el billing portal. | Marketplace developer session y CSRF para writes. |
POST /v1/marketplace/publisher/payout/onboarding, /publisher/payout/status | Inicia Stripe Connect payout onboarding y refresca payout readiness para paid connector publishing. | Marketplace developer session y CSRF. |
POST /v1/marketplace/publisher/assets | Envía un connector manifest a private Attesto review. Public listing nunca es automático. | Marketplace developer session, CSRF y eligible developer tier para paid assets. |
Public status API
status.attesto.eu expone health customer-safe para
servicios públicos. Incluye component status, latency, uptime bars,
incident summaries, generated time y timezone metadata. No expone
private admin status, tenant identifiers, logs, secrets, provider
payloads ni raw database details.
GET https://status.attesto.eu/healthdevuelve status-service health.GET https://status.attesto.eu/api/statusdevuelve el public status payload usado por la página.GET https://status.attesto.eu/v1/statuses el versioned status payload alias.
Consulte Public status page para el public visibility model y la component list.
Comportamiento de verificación
Verification falla cerrado ante malformed objects, changed payloads, changed sequence numbers, removed o inserted events, stale checkpoints, wrong witness signatures, wrong anchors y ambiguous fork evidence.
Truth Package downloads y verification son lifecycle events separados.
Una descarga registra truth_package.accessed, probando que
el package fue servido. Un verifier report exitoso enviado a
/v1/exports/{exportId}/truth-package/verify registra
truth_package.verified, probando que un verifier revisó el
package hash, manifest hash y artifacts incluidos. El ZIP hash final
se registra después de finalizar los ZIP bytes y no se inserta de
vuelta en el mismo ZIP; eso evita circular self-reference mientras
mantiene los bytes descargables independientemente hasheables.
curl -X POST https://dashboard.attesto.eu/v1/exports/$EXPORT_ID/truth-package/verify \
-H "Authorization: Bearer $ATTESTO_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @truth-package-verification-report.json
curl -X POST https://verify.attesto.eu/v2/verify \
-H "Content-Type: application/json" \
--data-binary @attesto-bundle.json
Error semantics
| Status | Meaning | Acción del integrador |
|---|---|---|
400 | Malformed request o unsupported verifier object. | Corrija request shape y reintente con nueva idempotency key si cambia el body. |
401 | Missing o invalid system key. | Rote o reconfigure la credential server-side. |
403 | Authenticated key sin acceso al tenant, system o stream. | Revise tenant/system assignment. |
404 | Object no visible para el caller o no existente. | Confirme IDs y tenant scope. |
409 | Idempotency conflict, sequence conflict o append conflict. | No reintente changed bodies a ciegas; inspeccione conflict details. |
422 | Request syntactically valid pero viola el route contract. | Corrija field values, policy references u object kind. |
429 | Rate limit. | Back off con jitter y mantenga idempotency keys estables. |
5xx | Service-side failure. | Reintente con la misma idempotency key y preserve el body original. |
API keys permanecen server-side
Attesto system keys son bearer credentials. Úselas solo desde trusted server-side processes, connector edges o secret-managed job runners.
