Attesto

API

Public API

La production API origin per SDKs e public verification è https://verify.attesto.eu. I tenant browser workflows vivono su https://dashboard.attesto.eu.

Scegliere la API family corretta

Attesto ha più public surfaces perché l'evidence work avviene in luoghi diversi. Usa SDK/API dal tuo server per creare evidence, webhooks per ricevere lifecycle notifications, connectors per catturare source-system observations e verifier endpoints quando un altro sistema deve controllare evidence prima di fidarsi.

SurfaceUsa quandoPrimary routesCredential
v1 SDK EventsTi servono stable event logging, receipts, anchoring ed exports./v1/sdk/events, /v1/sdk/events/batch, /v1/events/{id}/proof, /v1/exports/{id}/truth-package/verifyTenant system key o tenant auth, a seconda della route.
v2 ProofstreamTi servono ordered streams, receipts, windows, checkpoints, witnesses, anchors e bundles./v2/streams, /v2/streams/{id}/events, /v2/checkpoints/{id}Tenant system key per server ingest; tenant session per dashboard views.
Verifier APIRicevi evidence e devi controllarla prima di usarla./v2/verify, /v1/public/verifyNessun tenant cookie per public proof objects.
Audit packsTi serve un portable evidence bundle per un workflow auditor o regulator./v2/audit/packs, /v2/tenant/audit/packsTenant auth/system policy.
ConnectorsUn source system esterno emette evidence in Attesto./v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/eventsConnector-specific signed envelope.
MarketplaceTi servono 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 a seconda della route.
Identity e settingsUn tenant user accede, accetta un invite o configura enterprise SSO./v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providersTenant browser session e CSRF per settings; login state breve per SSO.
Public statusVuoi component health, latency, uptime bars e incident state customer-safe./api/status, /v1/statusPublic, secret-free status payload.

Origins

OriginScopo
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 per invited external auditors.
https://status.attesto.euCustomer-safe service status API e status page. Il private admin control panel è deliberatamente escluso.

Authentication

Server-side event ingest usa una tenant system key nell'header Authorization: Bearer. Public verification routes valida i proof objects forniti e non richiede tenant cookies. Le tenant dashboard routes usano la secure browser session esistente più CSRF recovery per mutating requests. Non inserire system keys o SSO client secrets nei 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

I main tenant users accedono tramite email discovery su dashboard.attesto.eu. Attesto restituisce un solo next step raccomandato invece di mostrare tutti i providers insieme. Marketplace developer accounts, admin staff auth e auditor auth restano surfaces separate.

RouteScopoSecurity notes
POST /v1/auth/discoverAccetta email e invite token opzionale, poi restituisce password, OAuth/OIDC, SAML, organization SSO o signup/trial come next step.Non espone provider wall o secret provider config.
GET /v1/auth/providersRestituisce safe provider labels per enabled login paths.Nessun client secrets o private metadata.
POST /v1/auth/external/startCrea OAuth/OIDC state, nonce e PKCE data, poi restituisce la redirect URL per il discovered provider.State breve e single-use.
GET /v1/auth/external/callback/{provider_id}Verifica il provider callback ed emette le tenant session cookies esistenti.Issuer, audience, nonce, JWKS e verified email sono controllati.
GET /v1/auth/saml/metadata/{provider_id}Restituisce tenant-specific SAML SP metadata per enterprise setup.Sicuro da condividere con il tenant identity provider.
POST /v1/auth/saml/acs/{provider_id}Consuma signed SAML assertions.Rifiuta assertions unsigned, replayed, expired, wrong-audience e wrong-recipient.
POST /v1/auth/login, POST /v1/auth/signupPassword fallback e creazione pulita signup/trial dopo che discovery raccomanda quel percorso.Password fallback resta scoped ai tenant dashboard users; i marketplace developer accounts sono separati.
GET /v1/auth/invite/{token}Restituisce invite context per email-first acceptance flow.Invite token validato prima di qualsiasi identity linking.
POST /v1/auth/accept-inviteAccetta un invite con password setup o provider-based activation.External linking richiede verified email e tenant match.
POST /v1/auth/refresh, POST /v1/auth/logout, GET /v1/auth/csrf, GET /v1/auth/meSession refresh, logout, CSRF recovery e current user identity.Usa browser credentials; non loggare mai session cookies.

Vedi Tenant SSO per la guida setup di Entra ID, generic OIDC e SAML.

Source time e timezone policy

Attesto registra quando il source system dichiara che un event è avvenuto e quando Attesto lo ha ricevuto. Le Event APIs richiedono timezone-aware timestamps come 2026-06-07T12:00:00+02:00 o 2026-06-07T10:00:00Z. Tenant timezone è configurabile; systems eredita di default la tenant timezone e può impostare il proprio source_timezone quando la fonte collegata opera in un'altra giurisdizione.

FieldMeaningRequirement
occurred_atSource-system event time.Richiesto per Proofstream events e deve includere timezone o UTC offset.
source_timezoneIANA timezone per il source system registrato.Default dalla tenant timezone; usa valori come Europe/Amsterdam o Europe/Berlin.
Connector received timeQuando Attesto o Local Vault ha ricevuto il source event.Impostato dal receiving service, non da untrusted frontend code.
Normalized UTC timeCanonical comparison time per verification e ordering.Derivato server-side preservando source context.

Idempotency e replay behavior

Write routes accetta Idempotency-Key. Ripetere la stessa key con la stessa canonical request restituisce il result originale. Ripetere la stessa key con una request diversa fallisce come conflict. Questo protegge connector retries e server-side job retries dalla creazione di evidence duplicata.

CaseResult
Same key, same requestOriginal response viene replayed.
Same key, changed payload409 Conflict.
No key on write pathRequest rifiutata quando la route richiede dedupe.

v1 event ingest

Usa v1 quando ti serve lo stable event audit trail e anchoring path. Gli SDKs impostano defaults per event type, status, retries e idempotency.

Tenant dashboard v1 APIs

Queste browser APIs alimentano dashboard.attesto.eu. Le mutating calls usano tenant session cookies e CSRF recovery. Usa system keys e SDK routes per server-side ingest; usa queste routes per tenant operators che gestiscono il workspace.

Route familyScopoCredential
GET /v1/dashboardRestituisce il tenant dashboard summary usato dalla operator UI.Tenant session.
GET/POST /v1/systems, PATCH/DELETE /v1/systems/{system_id}, POST /v1/systems/{system_id}/rotate-keyRegistra source systems, conserva source timezone policy e rivela o ruota system keys una sola volta.Tenant session; writer role per mutations.
GET /v1/events, GET /v1/events/{event_id}, GET /v1/events/{event_id}/proofIspeziona tenant events e proof material.Tenant session.
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/statusAvvia e monitora archive retrieval per archived event evidence.Tenant session; writer role per avviare 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/verifyCrea, scarica, elimina e registra la verifica di Truth Package exports.Tenant session; writer role per creazione, eliminazione e verification record submission.
GET/POST/PATCH/DELETE /v1/webhooks, POST /v1/webhooks/{webhook_id}/rotate-secret, GET /v1/webhooks/{webhook_id}/deliveriesGestisce signed tenant webhooks, ruota il one-shot delivery secret e ispeziona delivery attempts.Tenant session; admin role per webhook mutations.
GET/POST/PATCH/DELETE /v1/users, POST /v1/users/{user_id}/resend-inviteInvita tenant users, reinvia invites, aggiorna roles/status e revoca access.Tenant session; owner/admin role per mutations.
GET/POST/PATCH/DELETE /v1/partiesMantiene external party records usati nei tenant evidence workflows.Tenant session; admin role per mutations.
GET /v1/packs, POST /v1/packs/{vertical_id}/install, DELETE /v1/packs/{vertical_id}Lista, installa e rimuove tenant evidence packs senza creare dati seed sintetici.Tenant session; admin role per install/remove.
GET /v1/billing/plan, POST /v1/billing/checkout, POST /v1/billing/portalLegge il piano attivo, avvia Stripe Checkout per subscriptions Starter/Growth/Realtime con trial di 30 giorni, o apre lo Stripe billing portal.Tenant session; admin role per checkout e portal sessions.
GET/POST /v1/auditor-invites, POST /v1/auditor-invites/{access_id}/revokeConcede, lista e revoca external auditor access al read-only audit portal.Tenant session; admin role per grant/revoke.

Minimal event body:

{
  "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 aggiunge append-only streams, signed receipts, windows, checkpoints, witness evidence, anchors, bundles e offline verification.

Crea uno 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

Aggiungi 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 e dashboard APIs

Le Tenant browser APIs espongono lo stesso evidence model nel dashboard senza dare al frontend accesso ai server-side system keys. Le mutating dashboard calls usano browser cookies e CSRF recovery.

Route familyScopoCredential
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/eventsLista streams e ispeziona stream events visibili al tenant.Tenant session.
GET /v2/tenant/receipts/{stream_event_id}Ispeziona lo stored receipt per un tenant-visible stream event.Tenant session.
GET /v2/tenant/streams/{stream_id}/proof-state, /forks, /ivc/epochsLegge proof health, fork evidence e Proof of Evolution epochs.Tenant session.
GET /v2/tenant/streams/{stream_id}/windows, /checkpointsIspeziona closed windows e checkpoints per uno stream.Tenant session.
POST /v2/tenant/audit/packsCrea un tenant-authorized offline bundle per auditor review.Tenant session plus tenant policy.
PUT /v2/tenant/witness/policies/{policy_id}Aggiorna una tenant witness policy con le quorum rules configurate.Tenant session plus tenant policy permission.

Tenant settings e SSO APIs

Tenant settings è disponibile solo per authenticated tenant users con il ruolo richiesto. I provider secrets sono cifrati server-side e non vengono mai restituiti al browser dopo il salvataggio.

RouteScopo
GET /v1/settingsRestituisce il tenant settings snapshot, inclusi safe identity-provider metadata.
PATCH /v1/settings/tenantAggiorna tenant display settings, locale e timezone policy.
GET /v1/settings/identity-providersLista tenant SSO providers e public setup values.
POST /v1/settings/identity-providersAggiunge Entra ID, generic OIDC o SAML provider configuration.
PATCH /v1/settings/identity-providers/{provider_id}Aggiorna enabled state, domains, issuer metadata o rotated secrets.
DELETE /v1/settings/identity-providers/{provider_id}Disabilita e rimuove un tenant identity provider.

Connector e Local Vault APIs

Connectors sono production evidence sources. Tenant users configurano connector records nel dashboard, mentre source systems inviano events tramite provider-specific signed envelopes o Local Vault relay. Ogni connector event deve includere source system, source object, source event type, source timestamp con timezone, idempotency reference e normalized payload commitment.

Route familyScopoCredential
GET/POST /v2/tenant/connectors/signed-webhooks, DELETE /v2/tenant/connectors/signed-webhooks/{connector_id}Crea, lista e revoca generic signed webhook connectors. I connector secrets vengono restituiti una sola volta alla creazione quando applicabile, e mai di nuovo.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 e commit S3/R2 object evidence connectors. La route commit registra metadata e integrity senza proxy object content.Tenant session.
GET/POST /v2/tenant/connectors/repository-webhooks, DELETE /v2/tenant/connectors/repository-webhooks/{connector_id}Crea, lista e revoca GitHub/GitLab repository webhook connectors.Tenant session.
POST /v2/connectors/signed-webhooks/{connector_id}/eventsIngests un signed webhook event da un source system esterno.Connector signed envelope.
POST /v2/connectors/repository-webhooks/{connector_id}/eventsIngests repository change evidence.Provider webhook/signature contract.
GET/POST /v2/tenant/local-vault/installations, DELETE /v2/tenant/local-vault/installations/{installation_id}Gestisce Local Vault edge installations e revoca edge credentials fail-closed.Tenant session.
POST /v2/tenant/local-vault/enrollment-tokensCrea un enrollment token breve e single-use; dopo la creazione viene salvato solo l'hash del token.Tenant session.
POST /v2/local-vault/enrollScambia un enrollment token valido con una installation credential e public installation metadata.Single-use enrollment token.
POST /v2/local-vault/installations/{installation_id}/eventsRelay di encrypted-spool events dal customer edge verso Proofstream.Local Vault installation credential.
POST /v2/local-vault/installations/{installation_id}/witness/checkpointsInvia customer-side witness checkpoint statements quando witness mode è enabled dalla policy.Local Vault witness credential.

Marketplace APIs

Le Marketplace APIs alimentano marketplace.attesto.eu. Il public catalog è read-only. Tenant acquisition, installation, artifact download e revocation richiedono una authenticated tenant session più CSRF. Publisher signup, profile management, developer checkout, payout onboarding e asset submission usano un account separato marketplace-only developer. La documentazione pubblica omette intenzionalmente gli endpoint privati di Attesto review e publication.

Route familyScopoCredential
GET /v1/marketplace/categories, /developer-tiers, /items, /items/{slug}Browse public connector categories, developer tiers e validated public assets.Public, read-only.
POST /v1/marketplace/auth/signup, /auth/login, /auth/logout, GET /auth/csrf, /auth/meCrea e usa marketplace-only developer accounts. Questi account non possono accedere al 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 e CSRF.
GET /v1/marketplace/items/{slug}/artifactScarica il connector manifest artifact dopo che entitlement è active.Tenant session con active entitlement.
GET /v1/marketplace/evidence/{receipt_id}Recupera marketplace evidence receipt metadata per tenant-visible marketplace actions.Tenant o marketplace session scoped all'evidence tenant.
GET/POST/PATCH /v1/marketplace/publisher/profileCrea, legge e aggiorna publisher profile metadata.Marketplace developer session e CSRF per writes.
GET /v1/marketplace/publisher/billing-state, POST /publisher/upgrade, /publisher/billing-portalIspeziona developer tier state, avvia Stripe Checkout per paid developer tiers o apre il billing portal.Marketplace developer session e CSRF per writes.
POST /v1/marketplace/publisher/payout/onboarding, /publisher/payout/statusAvvia Stripe Connect payout onboarding e aggiorna payout readiness per paid connector publishing.Marketplace developer session e CSRF.
POST /v1/marketplace/publisher/assetsInvia un connector manifest a private Attesto review. Public listing non è mai automatico.Marketplace developer session, CSRF ed eligible developer tier per paid assets.

Public status API

status.attesto.eu espone health customer-safe per i servizi pubblici. Include component status, latency, uptime bars, incident summaries, generated time e timezone metadata. Non espone private admin status, tenant identifiers, logs, secrets, provider payloads o raw database details.

Vedi Public status page per il public visibility model e la component list.

Verification behavior

Verification fail-closed su malformed objects, changed payloads, changed sequence numbers, removed o inserted events, stale checkpoints, wrong witness signatures, wrong anchors e ambiguous fork evidence.

Truth Package downloads e verification sono lifecycle events separati. Un download registra truth_package.accessed, provando che il package è stato servito. Un verifier report riuscito inviato a /v1/exports/{exportId}/truth-package/verify registra truth_package.verified, provando che un verifier ha controllato package hash, manifest hash e included artifacts. Il final ZIP hash viene registrato dopo la finalizzazione dei ZIP bytes e non viene reinserito nello stesso ZIP; questo evita circular self-reference mantenendo i bytes scaricabili indipendentemente hashabili.

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

StatusMeaningAzione integratore
400Malformed request o unsupported verifier object.Correggi request shape e retry con una nuova idempotency key se il body cambia.
401Missing o invalid system key.Ruota o riconfigura la credential server-side.
403Authenticated key senza accesso a tenant, system o stream.Controlla tenant/system assignment.
404Object non visibile al caller o inesistente.Conferma IDs e tenant scope.
409Idempotency conflict, sequence conflict o append conflict.Non retry changed bodies alla cieca; ispeziona conflict details.
422Request syntactically valid ma viola il route contract.Correggi field values, policy references o object kind.
429Rate limit.Back off con jitter e mantieni stabili le idempotency keys.
5xxService-side failure.Retry con la stessa idempotency key e preserva il body originale.

API keys restano server-side

Attesto system keys sono bearer credentials. Usale solo da trusted server-side processes, connector edges o secret-managed job runners.