API
API publique
L'origin API de production pour les SDKs et la vérification publique
est https://verify.attesto.eu. Les workflows navigateur
tenant vivent sur https://dashboard.attesto.eu.
Choisir la bonne famille d'API
Attesto possède plusieurs surfaces publiques parce que le travail d'evidence se produit à différents endroits. Utilisez le SDK/API depuis votre serveur pour créer de l'evidence, les webhooks pour recevoir les lifecycle notifications, les connectors pour capturer les source-system observations, et les verifier endpoints lorsqu'un autre système doit vérifier l'evidence avant de lui faire confiance.
| Surface | À utiliser lorsque | Primary routes | Credential |
|---|---|---|---|
| v1 SDK Events | Vous avez besoin de stable event logging, receipts, anchoring et exports. | /v1/sdk/events, /v1/sdk/events/batch, /v1/events/{id}/proof, /v1/exports/{id}/truth-package/verify | Tenant system key ou tenant auth selon la route. |
| v2 Proofstream | Vous avez besoin de ordered streams, receipts, windows, checkpoints, witnesses, anchors et bundles. | /v2/streams, /v2/streams/{id}/events, /v2/checkpoints/{id} | Tenant system key pour ingest serveur; tenant session pour les vues dashboard. |
| Verifier API | Vous recevez de l'evidence et devez la vérifier avant de vous y fier. | /v2/verify, /v1/public/verify | Pas de tenant cookie pour les public proof objects. |
| Audit packs | Vous avez besoin d'un portable evidence bundle pour un workflow auditeur ou régulateur. | /v2/audit/packs, /v2/tenant/audit/packs | Tenant auth/system policy. |
| Connectors | Un source system externe émet de l'evidence vers Attesto. | /v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/events | Connector-specific signed envelope. |
| Marketplace | Vous avez besoin du public connector catalog, des tenant installs, des developer accounts, du publisher billing ou de l'asset submission. | /v1/marketplace/items, /v1/marketplace/auth/*, /v1/marketplace/publisher/* | Public read-only, tenant session ou marketplace developer session selon la route. |
| Identity et settings | Un utilisateur tenant se connecte, accepte une invite ou configure enterprise SSO. | /v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providers | Tenant browser session et CSRF pour settings; login state court pour SSO. |
| Public status | Vous voulez component health, latency, uptime bars et incident state customer-safe. | /api/status, /v1/status | Public, secret-free status payload. |
Origins
| Origin | Objectif |
|---|---|
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 | Portail auditor-facing pour invited external auditors. |
https://status.attesto.eu | Customer-safe service status API et status page. Le private admin control panel est volontairement exclu. |
Authentication
L'event ingest server-side utilise une tenant system key dans le header
Authorization: Bearer. Les public verification routes
valident les proof objects fournis et ne nécessitent pas de tenant
cookies.
Les tenant dashboard routes utilisent la secure browser session
existante plus CSRF recovery pour les mutating requests. Ne placez pas
system keys ou SSO client secrets dans les 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
Les main tenant users se connectent via email discovery sur
dashboard.attesto.eu. Attesto retourne un seul next step
recommandé au lieu d'afficher tous les providers à la fois. Les
marketplace developer accounts, admin staff auth et auditor auth
restent des surfaces séparées.
| Route | Objectif | Security notes |
|---|---|---|
POST /v1/auth/discover | Accepte un email et un invite token optionnel, puis retourne password, OAuth/OIDC, SAML, organization SSO ou signup/trial comme next step. | N'expose pas de provider wall ni de secret provider config. |
GET /v1/auth/providers | Retourne les labels provider sûrs pour les enabled login paths. | Pas de client secrets ni private metadata. |
POST /v1/auth/external/start | Crée OAuth/OIDC state, nonce et PKCE data, puis retourne la redirect URL pour le discovered provider. | State est court et single-use. |
GET /v1/auth/external/callback/{provider_id} | Vérifie le provider callback et émet les tenant session cookies existants. | Issuer, audience, nonce, JWKS et verified email sont contrôlés. |
GET /v1/auth/saml/metadata/{provider_id} | Retourne les tenant-specific SAML SP metadata pour l'enterprise setup. | Partageable avec le tenant identity provider. |
POST /v1/auth/saml/acs/{provider_id} | Consomme des signed SAML assertions. | Rejette les assertions unsigned, replayed, expired, wrong-audience et wrong-recipient. |
POST /v1/auth/login, POST /v1/auth/signup | Password fallback et création signup/trial propre après que discovery recommande ce chemin. | Password fallback reste limité aux tenant dashboard users; les marketplace developer accounts sont séparés. |
GET /v1/auth/invite/{token} | Retourne le invite context pour le email-first acceptance flow. | Invite token validé avant tout identity linking. |
POST /v1/auth/accept-invite | Accepte une invite avec password setup ou provider-based activation. | External linking exige verified email et tenant match. |
POST /v1/auth/refresh, POST /v1/auth/logout, GET /v1/auth/csrf, GET /v1/auth/me | Session refresh, logout, CSRF recovery et current user identity. | Utilisez browser credentials; ne loggez jamais les session cookies. |
Voir Tenant SSO pour le guide de setup Entra ID, generic OIDC et SAML.
Source time et timezone policy
Attesto enregistre le moment où le source system dit qu'un event s'est
produit et le moment où Attesto l'a reçu. Les Event APIs exigent des
timezone-aware timestamps comme
2026-06-07T12:00:00+02:00 ou
2026-06-07T10:00:00Z. Tenant timezone est configurable;
les systems héritent par défaut de la tenant timezone et peuvent
définir leur propre source_timezone lorsque la source
connectée fonctionne dans une autre juridiction.
| Field | Meaning | Requirement |
|---|---|---|
occurred_at | Source-system event time. | Requis pour Proofstream events et doit inclure timezone ou UTC offset. |
source_timezone | IANA timezone pour le source system enregistré. | Par défaut depuis tenant timezone; utilisez des valeurs comme Europe/Amsterdam ou Europe/Berlin. |
| Connector received time | Moment où Attesto ou Local Vault reçoit le source event. | Défini par le receiving service, pas par du untrusted frontend code. |
| Normalized UTC time | Canonical comparison time pour verification et ordering. | Dérivé server-side tout en conservant le source context. |
Idempotency et replay behavior
Les write routes acceptent Idempotency-Key. Répéter la
même key avec la même canonical request retourne le résultat original.
Répéter la même key avec une request différente échoue en conflict.
Cela protège les connector retries et server-side job retries contre
la création d'evidence dupliquée.
| Case | Result |
|---|---|
| Same key, same request | Original response est replayed. |
| Same key, changed payload | 409 Conflict. |
| No key on write path | Request rejetée lorsque la route exige dedupe. |
v1 event ingest
Utilisez v1 lorsque vous avez besoin du stable event audit trail et du anchoring path. Les SDKs définissent des defaults pour event type, status, retries et idempotency.
POST /v1/sdk/eventslog un event.POST /v1/sdk/events/batchlog jusqu'à 1000 events.GET /v1/events/{eventId}/proofretourne anchored proof material pour un event.POST /v1/public/verifyvérifie un v1 proof object.POST /v1/exports/{exportId}/truth-package/verifyenregistre un event backend-validatedtruth_package.verifiedaprès qu'un verifier report prouve que le package exporté a été vérifié cryptographiquement.
Tenant dashboard v1 APIs
Ces browser APIs alimentent dashboard.attesto.eu. Les
appels mutating utilisent les tenant session cookies et CSRF recovery.
Utilisez les system keys et SDK routes pour le server-side ingest;
utilisez ces routes pour les tenant operators qui gèrent leur workspace.
| Route family | But | Credential |
|---|---|---|
GET /v1/dashboard | Retourne le tenant dashboard summary utilisé par l'operator UI. | Tenant session. |
GET/POST /v1/systems, PATCH/DELETE /v1/systems/{system_id}, POST /v1/systems/{system_id}/rotate-key | Enregistrer des source systems, préserver la source timezone policy et révéler ou faire tourner les system keys une seule fois. | Tenant session; writer role pour les mutations. |
GET /v1/events, GET /v1/events/{event_id}, GET /v1/events/{event_id}/proof | Inspecter tenant events et proof material. | Tenant session. |
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/status | Démarrer et suivre archive retrieval pour archived event evidence. | Tenant session; writer role pour démarrer 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 | Créer, télécharger, supprimer et enregistrer la vérification de Truth Package exports. | Tenant session; writer role pour création, suppression et verification record submission. |
GET/POST/PATCH/DELETE /v1/webhooks, POST /v1/webhooks/{webhook_id}/rotate-secret, GET /v1/webhooks/{webhook_id}/deliveries | Gérer les signed tenant webhooks, faire tourner le one-shot delivery secret et inspecter les delivery attempts. | Tenant session; admin role pour les webhook mutations. |
GET/POST/PATCH/DELETE /v1/users, POST /v1/users/{user_id}/resend-invite | Inviter tenant users, renvoyer les invites, modifier roles/status et révoquer access. | Tenant session; owner/admin role pour les mutations. |
GET/POST/PATCH/DELETE /v1/parties | Maintenir les external party records utilisés dans les tenant evidence workflows. | Tenant session; admin role pour les mutations. |
GET /v1/packs, POST /v1/packs/{vertical_id}/install, DELETE /v1/packs/{vertical_id} | Lister, installer et supprimer les tenant evidence packs sans créer de données seed synthétiques. | Tenant session; admin role pour install/remove. |
GET /v1/billing/plan, POST /v1/billing/checkout, POST /v1/billing/portal | Lire le plan actif, démarrer Stripe Checkout pour les subscriptions Starter/Growth/Realtime avec trial de 30 jours, ou ouvrir le Stripe billing portal. | Tenant session; admin role pour checkout et portal sessions. |
GET/POST /v1/auditor-invites, POST /v1/auditor-invites/{access_id}/revoke | Accorder, lister et révoquer external auditor access vers le read-only audit portal. | Tenant session; admin role pour grant/revoke. |
Event body minimal:
{
"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 ajoute append-only streams, signed receipts, windows, checkpoints, witness evidence, anchors, bundles et offline verification.
POST /v2/streamscrée un stream.POST /v2/streams/{streamId}/eventsajoute un event et retourne un signed receipt.POST /v2/streams/{streamId}/events/batchajoute plusieurs events avec receipt results.GET /v2/streams/{streamId}/headretourne le stream head append-only actuel.GET /v2/receipts/{eventId}retourne le receipt stocké.POST /v2/verify/receiptvérifie directement un receipt object.GET /v2/windows/{windowId}retourne window evidence et inclusion material.GET /v2/checkpoints/{checkpointId}retourne checkpoint evidence.GET /v2/checkpoints/{checkpointId}/consistency?from=...retourne consistency evidence.GET /v2/witness/policies/{policyId}retourne la witness policy utilisée pour les quorum checks.GET /v2/anchors/{anchorEpochId}retourne anchor epoch evidence.GET /v2/ivc/epochs/{ivcEpochId}retourne Proof of Evolution epoch evidence.POST /v2/audit/packscrée un offline verifier bundle lorsque la range possède les witness et anchor evidence requis.POST /v2/verifyvérifie receipt, stream, checkpoint, consistency, anchor, IVC ou bundle objects.
Créer 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
Ajouter 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 et dashboard APIs
Les Tenant browser APIs exposent le même evidence model dans le dashboard sans donner au frontend accès aux server-side system keys. Les mutating dashboard calls utilisent browser cookies et CSRF recovery.
| Route family | Objectif | Credential |
|---|---|---|
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/events | Lister les streams et inspecter les stream events visibles au tenant. | Tenant session. |
GET /v2/tenant/receipts/{stream_event_id} | Inspecter le stored receipt d'un tenant-visible stream event. | Tenant session. |
GET /v2/tenant/streams/{stream_id}/proof-state, /forks, /ivc/epochs | Lire proof health, fork evidence et Proof of Evolution epochs. | Tenant session. |
GET /v2/tenant/streams/{stream_id}/windows, /checkpoints | Inspecter les closed windows et checkpoints d'un stream. | Tenant session. |
POST /v2/tenant/audit/packs | Créer un tenant-authorized offline bundle pour auditor review. | Tenant session plus tenant policy. |
PUT /v2/tenant/witness/policies/{policy_id} | Mettre à jour une tenant witness policy avec les quorum rules configurées. | Tenant session plus tenant policy permission. |
Tenant settings et SSO APIs
Tenant settings est disponible seulement pour les authenticated tenant users avec le rôle requis. Les provider secrets sont chiffrés server-side et ne sont jamais renvoyés au browser après sauvegarde.
| Route | Objectif |
|---|---|
GET /v1/settings | Retourne le tenant settings snapshot, y compris les safe identity-provider metadata. |
PATCH /v1/settings/tenant | Met à jour tenant display settings, locale et timezone policy. |
GET /v1/settings/identity-providers | Liste tenant SSO providers et public setup values. |
POST /v1/settings/identity-providers | Ajoute Entra ID, generic OIDC ou SAML provider configuration. |
PATCH /v1/settings/identity-providers/{provider_id} | Met à jour enabled state, domains, issuer metadata ou rotated secrets. |
DELETE /v1/settings/identity-providers/{provider_id} | Désactive et supprime un tenant identity provider. |
Connector et Local Vault APIs
Les connectors sont des production evidence sources. Les tenant users configurent les connector records dans le dashboard, tandis que les source systems postent des events via provider-specific signed envelopes ou Local Vault relay. Chaque connector event doit inclure source system, source object, source event type, source timestamp avec timezone, idempotency reference et normalized payload commitment.
| Route family | Objectif | Credential |
|---|---|---|
GET/POST /v2/tenant/connectors/signed-webhooks, DELETE /v2/tenant/connectors/signed-webhooks/{connector_id} | Créer, lister et révoquer generic signed webhook connectors. Les connector secrets sont retournés une seule fois à la création quand applicable, puis jamais à nouveau. | 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 | Créer, lister, révoquer et commit les S3/R2 object evidence connectors. La route commit enregistre metadata et integrity sans proxyfier le contenu objet. | Tenant session. |
GET/POST /v2/tenant/connectors/repository-webhooks, DELETE /v2/tenant/connectors/repository-webhooks/{connector_id} | Créer, lister et révoquer GitHub/GitLab repository webhook connectors. | Tenant session. |
POST /v2/connectors/signed-webhooks/{connector_id}/events | Ingest un signed webhook event depuis un source system externe. | Connector signed envelope. |
POST /v2/connectors/repository-webhooks/{connector_id}/events | Ingest repository change evidence. | Provider webhook/signature contract. |
GET/POST /v2/tenant/local-vault/installations, DELETE /v2/tenant/local-vault/installations/{installation_id} | Gérer les Local Vault edge installations et révoquer les edge credentials fail-closed. | Tenant session. |
POST /v2/tenant/local-vault/enrollment-tokens | Créer un enrollment token court, single-use; seul son hash est stocké après création. | Tenant session. |
POST /v2/local-vault/enroll | Échanger un enrollment token valide contre une installation credential et metadata publique d'installation. | Single-use enrollment token. |
POST /v2/local-vault/installations/{installation_id}/events | Relayer les encrypted-spool events du customer edge vers Proofstream. | Local Vault installation credential. |
POST /v2/local-vault/installations/{installation_id}/witness/checkpoints | Soumettre les customer-side witness checkpoint statements lorsque witness mode est enabled par policy. | Local Vault witness credential. |
Marketplace APIs
Les Marketplace APIs alimentent marketplace.attesto.eu. Le
public catalog est read-only. Tenant acquisition, installation,
artifact download et revocation nécessitent une authenticated tenant
session plus CSRF. Publisher signup, profile management, developer
checkout, payout onboarding et asset submission utilisent un compte
marketplace-only developer séparé. Les docs publiques omettent
volontairement les endpoints privés Attesto review et publication.
| Route family | Objectif | Credential |
|---|---|---|
GET /v1/marketplace/categories, /developer-tiers, /items, /items/{slug} | Browse public connector categories, developer tiers et assets publics validés. | Public, read-only. |
POST /v1/marketplace/auth/signup, /auth/login, /auth/logout, GET /auth/csrf, /auth/me | Créer et utiliser des comptes marketplace-only developer. Ces comptes ne peuvent pas se connecter au tenant dashboard. | Marketplace developer credentials/session. |
GET /v1/marketplace/me/entitlements, /me/installs | Lister les connector entitlements et installs du tenant. | Tenant session. |
POST /v1/marketplace/items/{slug}/acquire, /install, /install/update, /revoke | Acquire, install, update ou revoke l'accès tenant à un connector asset. | Tenant session et CSRF. |
GET /v1/marketplace/items/{slug}/artifact | Télécharger le connector manifest artifact après activation de l'entitlement. | Tenant session avec active entitlement. |
GET /v1/marketplace/evidence/{receipt_id} | Récupérer marketplace evidence receipt metadata pour tenant-visible marketplace actions. | Tenant ou marketplace session scoped au evidence tenant. |
GET/POST/PATCH /v1/marketplace/publisher/profile | Créer, lire et mettre à jour publisher profile metadata. | Marketplace developer session et CSRF pour writes. |
GET /v1/marketplace/publisher/billing-state, POST /publisher/upgrade, /publisher/billing-portal | Inspecter developer tier state, démarrer Stripe Checkout pour paid developer tiers ou ouvrir le billing portal. | Marketplace developer session et CSRF pour writes. |
POST /v1/marketplace/publisher/payout/onboarding, /publisher/payout/status | Démarrer Stripe Connect payout onboarding et rafraîchir payout readiness pour paid connector publishing. | Marketplace developer session et CSRF. |
POST /v1/marketplace/publisher/assets | Soumettre un connector manifest dans private Attesto review. Public listing n'est jamais automatique. | Marketplace developer session, CSRF et eligible developer tier pour paid assets. |
Public status API
status.attesto.eu expose une health customer-safe pour les
services publics. Elle inclut component status, latency, uptime bars,
incident summaries, generated time et timezone metadata. Elle n'expose
pas private admin status, tenant identifiers, logs, secrets, provider
payloads ni raw database details.
GET https://status.attesto.eu/healthretourne status-service health.GET https://status.attesto.eu/api/statusretourne le public status payload utilisé par la page.GET https://status.attesto.eu/v1/statusest l'alias versioned status payload.
Voir Public status page pour le public visibility model et la component list.
Comportement de vérification
La vérification fail-closed sur malformed objects, changed payloads, changed sequence numbers, removed ou inserted events, stale checkpoints, wrong witness signatures, wrong anchors et ambiguous fork evidence.
Les téléchargements Truth Package et la vérification sont des lifecycle
events séparés. Un téléchargement enregistre
truth_package.accessed, prouvant que le package a été
servi. Un verifier report réussi soumis à
/v1/exports/{exportId}/truth-package/verify enregistre
truth_package.verified, prouvant qu'un verifier a contrôlé
le package hash, le manifest hash et les artifacts inclus. Le hash ZIP
final est enregistré après finalisation des bytes ZIP et n'est pas
réintégré dans le même ZIP; cela évite une circular self-reference tout
en gardant les bytes téléchargeables hashables indépendamment.
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 | Action intégrateur |
|---|---|---|
400 | Malformed request ou unsupported verifier object. | Corriger la request shape et retry avec une nouvelle idempotency key si le body change. |
401 | Missing ou invalid system key. | Rotater ou reconfigurer la credential server-side. |
403 | Authenticated key sans accès au tenant, system ou stream. | Vérifier tenant/system assignment. |
404 | Object non visible par le caller ou inexistant. | Confirmer IDs et tenant scope. |
409 | Idempotency conflict, sequence conflict ou append conflict. | Ne pas retry aveuglément les changed bodies; inspecter les conflict details. |
422 | Request syntactically valid mais violant le route contract. | Corriger field values, policy references ou object kind. |
429 | Rate limit. | Backoff avec jitter et garder les idempotency keys stables. |
5xx | Service-side failure. | Retry avec la même idempotency key et préserver le body original. |
Les API keys restent server-side
Les Attesto system keys sont des bearer credentials. Utilisez-les uniquement depuis des trusted server-side processes, connector edges ou secret-managed job runners.
