Attesto

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.

SurfaceUse cuandoPrimary routesCredential
v1 SDK EventsNecesita stable event logging, receipts, anchoring y exports./v1/sdk/events, /v1/sdk/events/batch, /v1/events/{id}/proof, /v1/exports/{id}/truth-package/verifyTenant system key o tenant auth, según la route.
v2 ProofstreamNecesita 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 APIRecibe evidence y debe revisarla antes de depender de ella./v2/verify, /v1/public/verifySin tenant cookie para public proof objects.
Audit packsNecesita un portable evidence bundle para un workflow auditor o regulador./v2/audit/packs, /v2/tenant/audit/packsTenant auth/system policy.
ConnectorsUn source system externo emite evidence hacia Attesto./v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/eventsConnector-specific signed envelope.
MarketplaceNecesita 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 settingsUn usuario tenant inicia sesión, acepta una invitación o configura enterprise SSO./v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providersTenant browser session y CSRF para settings; login state de corta duración para SSO.
Public statusNecesita component health, latency, uptime bars e incident state customer-safe./api/status, /v1/statusPublic, secret-free status payload.

Origins

OriginPropósito
https://verify.attesto.euPublic API, health, signing public key, v1 proof verification, v2 Proofstream verification.
https://dashboard.attesto.euTenant dashboard, system registration, key reveal-once, exports, webhooks, connectors, billing.
https://audit.attesto.euPortal auditor-facing para invited external auditors.
https://status.attesto.euCustomer-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.

RoutePropósitoSecurity notes
POST /v1/auth/discoverAcepta 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/providersDevuelve safe provider labels para enabled login paths.Sin client secrets ni private metadata.
POST /v1/auth/external/startCrea 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/signupPassword 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-inviteAcepta 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/meSession 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.

FieldMeaningRequirement
occurred_atSource-system event time.Requerido para Proofstream events y debe incluir timezone o UTC offset.
source_timezoneIANA timezone del source system registrado.Default desde tenant timezone; use valores como Europe/Amsterdam o Europe/Berlin.
Connector received timeCuándo Attesto o Local Vault recibió el source event.Lo establece el receiving service, no untrusted frontend code.
Normalized UTC timeCanonical 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.

CaseResult
Same key, same requestOriginal response se reproduce.
Same key, changed payload409 Conflict.
No key on write pathRequest 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.

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 familyPropósitoCredential
GET /v1/dashboardDevuelve 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-keyRegistrar 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}/proofInspeccionar tenant events y proof material.Tenant session.
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/statusIniciar 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/verifyCrear, 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}/deliveriesGestionar 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-inviteInvitar tenant users, reenviar invites, actualizar roles/status y revocar access.Tenant session; owner/admin role para mutations.
GET/POST/PATCH/DELETE /v1/partiesMantener 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/portalLeer 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}/revokeConceder, 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.

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 familyPropósitoCredential
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/eventsLista 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/epochsLee proof health, fork evidence y Proof of Evolution epochs.Tenant session.
GET /v2/tenant/streams/{stream_id}/windows, /checkpointsInspecciona closed windows y checkpoints de un stream.Tenant session.
POST /v2/tenant/audit/packsCrea 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.

RoutePropósito
GET /v1/settingsDevuelve el tenant settings snapshot, incluyendo safe identity-provider metadata.
PATCH /v1/settings/tenantActualiza tenant display settings, locale y timezone policy.
GET /v1/settings/identity-providersLista tenant SSO providers y public setup values.
POST /v1/settings/identity-providersAñ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 familyPropósitoCredential
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}/commitCrea, 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}/eventsIngesta un signed webhook event desde un source system externo.Connector signed envelope.
POST /v2/connectors/repository-webhooks/{connector_id}/eventsIngesta 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-tokensCrea un enrollment token corto y single-use; después de la creación solo se almacena el hash.Tenant session.
POST /v2/local-vault/enrollIntercambia un enrollment token válido por una installation credential y public installation metadata.Single-use enrollment token.
POST /v2/local-vault/installations/{installation_id}/eventsRelay de encrypted-spool events desde el customer edge hacia Proofstream.Local Vault installation credential.
POST /v2/local-vault/installations/{installation_id}/witness/checkpointsEnví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 familyPropósitoCredential
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/meCrea 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/installsLista connector entitlements e installs del tenant.Tenant session.
POST /v1/marketplace/items/{slug}/acquire, /install, /install/update, /revokeAcquire, install, update o revoke tenant access a un connector asset.Tenant session y CSRF.
GET /v1/marketplace/items/{slug}/artifactDescarga 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/profileCrea, lee y actualiza publisher profile metadata.Marketplace developer session y CSRF para writes.
GET /v1/marketplace/publisher/billing-state, POST /publisher/upgrade, /publisher/billing-portalInspecciona 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/statusInicia Stripe Connect payout onboarding y refresca payout readiness para paid connector publishing.Marketplace developer session y CSRF.
POST /v1/marketplace/publisher/assetsEnví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.

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

StatusMeaningAcción del integrador
400Malformed request o unsupported verifier object.Corrija request shape y reintente con nueva idempotency key si cambia el body.
401Missing o invalid system key.Rote o reconfigure la credential server-side.
403Authenticated key sin acceso al tenant, system o stream.Revise tenant/system assignment.
404Object no visible para el caller o no existente.Confirme IDs y tenant scope.
409Idempotency conflict, sequence conflict o append conflict.No reintente changed bodies a ciegas; inspeccione conflict details.
422Request syntactically valid pero viola el route contract.Corrija field values, policy references u object kind.
429Rate limit.Back off con jitter y mantenga idempotency keys estables.
5xxService-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.