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.
| Surface | Usa quando | Primary routes | Credential |
|---|---|---|---|
| v1 SDK Events | Ti servono stable event logging, receipts, anchoring ed exports. | /v1/sdk/events, /v1/sdk/events/batch, /v1/events/{id}/proof, /v1/exports/{id}/truth-package/verify | Tenant system key o tenant auth, a seconda della route. |
| v2 Proofstream | Ti 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 API | Ricevi evidence e devi controllarla prima di usarla. | /v2/verify, /v1/public/verify | Nessun tenant cookie per public proof objects. |
| Audit packs | Ti serve un portable evidence bundle per un workflow auditor o regulator. | /v2/audit/packs, /v2/tenant/audit/packs | Tenant auth/system policy. |
| Connectors | Un source system esterno emette evidence in Attesto. | /v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/events | Connector-specific signed envelope. |
| Marketplace | Ti 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 settings | Un tenant user accede, accetta un invite o configura enterprise SSO. | /v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providers | Tenant browser session e CSRF per settings; login state breve per SSO. |
| Public status | Vuoi component health, latency, uptime bars e incident state customer-safe. | /api/status, /v1/status | Public, secret-free status payload. |
Origins
| Origin | Scopo |
|---|---|
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 per invited external auditors. |
https://status.attesto.eu | Customer-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.
| Route | Scopo | Security notes |
|---|---|---|
POST /v1/auth/discover | Accetta 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/providers | Restituisce safe provider labels per enabled login paths. | Nessun client secrets o private metadata. |
POST /v1/auth/external/start | Crea 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/signup | Password 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-invite | Accetta 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/me | Session 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.
| Field | Meaning | Requirement |
|---|---|---|
occurred_at | Source-system event time. | Richiesto per Proofstream events e deve includere timezone o UTC offset. |
source_timezone | IANA timezone per il source system registrato. | Default dalla tenant timezone; usa valori come Europe/Amsterdam o Europe/Berlin. |
| Connector received time | Quando Attesto o Local Vault ha ricevuto il source event. | Impostato dal receiving service, non da untrusted frontend code. |
| Normalized UTC time | Canonical 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.
| Case | Result |
|---|---|
| Same key, same request | Original response viene replayed. |
| Same key, changed payload | 409 Conflict. |
| No key on write path | Request 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.
POST /v1/sdk/eventslogga un event.POST /v1/sdk/events/batchlogga fino a 1000 events.GET /v1/events/{eventId}/proofrestituisce anchored proof material per un event.POST /v1/public/verifyverifica un v1 proof object.POST /v1/exports/{exportId}/truth-package/verifyregistra un event backend-validatedtruth_package.verifieddopo che un verifier report prova che il package esportato è stato controllato crittograficamente.
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 family | Scopo | Credential |
|---|---|---|
GET /v1/dashboard | Restituisce 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-key | Registra 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}/proof | Ispeziona tenant events e proof material. | Tenant session. |
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/status | Avvia 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/verify | Crea, 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}/deliveries | Gestisce 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-invite | Invita tenant users, reinvia invites, aggiorna roles/status e revoca access. | Tenant session; owner/admin role per mutations. |
GET/POST/PATCH/DELETE /v1/parties | Mantiene 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/portal | Legge 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}/revoke | Concede, 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.
POST /v2/streamscrea uno stream.POST /v2/streams/{streamId}/eventsaggiunge un event e restituisce un signed receipt.POST /v2/streams/{streamId}/events/batchaggiunge più events con receipt results.GET /v2/streams/{streamId}/headrestituisce lo stream head append-only corrente.GET /v2/receipts/{eventId}restituisce il receipt archiviato.POST /v2/verify/receiptverifica direttamente un receipt object.GET /v2/windows/{windowId}restituisce window evidence e inclusion material.GET /v2/checkpoints/{checkpointId}restituisce checkpoint evidence.GET /v2/checkpoints/{checkpointId}/consistency?from=...restituisce consistency evidence.GET /v2/witness/policies/{policyId}restituisce la witness policy usata per quorum checks.GET /v2/anchors/{anchorEpochId}restituisce anchor epoch evidence.GET /v2/ivc/epochs/{ivcEpochId}restituisce Proof of Evolution epoch evidence.POST /v2/audit/packscrea un offline verifier bundle quando la range ha la witness e anchor evidence richiesta.POST /v2/verifyverifica receipt, stream, checkpoint, consistency, anchor, IVC o bundle objects.
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 family | Scopo | Credential |
|---|---|---|
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/events | Lista 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/epochs | Legge proof health, fork evidence e Proof of Evolution epochs. | Tenant session. |
GET /v2/tenant/streams/{stream_id}/windows, /checkpoints | Ispeziona closed windows e checkpoints per uno stream. | Tenant session. |
POST /v2/tenant/audit/packs | Crea 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.
| Route | Scopo |
|---|---|
GET /v1/settings | Restituisce il tenant settings snapshot, inclusi safe identity-provider metadata. |
PATCH /v1/settings/tenant | Aggiorna tenant display settings, locale e timezone policy. |
GET /v1/settings/identity-providers | Lista tenant SSO providers e public setup values. |
POST /v1/settings/identity-providers | Aggiunge 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 family | Scopo | Credential |
|---|---|---|
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}/commit | Crea, 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}/events | Ingests un signed webhook event da un source system esterno. | Connector signed envelope. |
POST /v2/connectors/repository-webhooks/{connector_id}/events | Ingests 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-tokens | Crea un enrollment token breve e single-use; dopo la creazione viene salvato solo l'hash del token. | Tenant session. |
POST /v2/local-vault/enroll | Scambia un enrollment token valido con una installation credential e public installation metadata. | Single-use enrollment token. |
POST /v2/local-vault/installations/{installation_id}/events | Relay di encrypted-spool events dal customer edge verso Proofstream. | Local Vault installation credential. |
POST /v2/local-vault/installations/{installation_id}/witness/checkpoints | Invia 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 family | Scopo | Credential |
|---|---|---|
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/me | Crea e usa marketplace-only developer accounts. Questi account non possono accedere al 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 e CSRF. |
GET /v1/marketplace/items/{slug}/artifact | Scarica 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/profile | Crea, legge e aggiorna publisher profile metadata. | Marketplace developer session e CSRF per writes. |
GET /v1/marketplace/publisher/billing-state, POST /publisher/upgrade, /publisher/billing-portal | Ispeziona 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/status | Avvia Stripe Connect payout onboarding e aggiorna payout readiness per paid connector publishing. | Marketplace developer session e CSRF. |
POST /v1/marketplace/publisher/assets | Invia 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.
GET https://status.attesto.eu/healthrestituisce status-service health.GET https://status.attesto.eu/api/statusrestituisce il public status payload usato dalla pagina.GET https://status.attesto.eu/v1/statusè il versioned status payload alias.
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
| Status | Meaning | Azione integratore |
|---|---|---|
400 | Malformed request o unsupported verifier object. | Correggi request shape e retry con una nuova idempotency key se il body cambia. |
401 | Missing o invalid system key. | Ruota o riconfigura la credential server-side. |
403 | Authenticated key senza accesso a tenant, system o stream. | Controlla tenant/system assignment. |
404 | Object non visibile al caller o inesistente. | Conferma IDs e tenant scope. |
409 | Idempotency conflict, sequence conflict o append conflict. | Non retry changed bodies alla cieca; ispeziona conflict details. |
422 | Request syntactically valid ma viola il route contract. | Correggi field values, policy references o object kind. |
429 | Rate limit. | Back off con jitter e mantieni stabili le idempotency keys. |
5xx | Service-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.
