Attesto

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 lorsquePrimary routesCredential
v1 SDK EventsVous 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/verifyTenant system key ou tenant auth selon la route.
v2 ProofstreamVous 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 APIVous recevez de l'evidence et devez la vérifier avant de vous y fier./v2/verify, /v1/public/verifyPas de tenant cookie pour les public proof objects.
Audit packsVous avez besoin d'un portable evidence bundle pour un workflow auditeur ou régulateur./v2/audit/packs, /v2/tenant/audit/packsTenant auth/system policy.
ConnectorsUn source system externe émet de l'evidence vers Attesto./v2/connectors/signed-webhooks/{id}/events, /v2/connectors/repository-webhooks/{id}/eventsConnector-specific signed envelope.
MarketplaceVous 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 settingsUn utilisateur tenant se connecte, accepte une invite ou configure enterprise SSO./v1/auth/discover, /v1/auth/external/start, /v1/settings/identity-providersTenant browser session et CSRF pour settings; login state court pour SSO.
Public statusVous voulez component health, latency, uptime bars et incident state customer-safe./api/status, /v1/statusPublic, secret-free status payload.

Origins

OriginObjectif
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.euPortail auditor-facing pour invited external auditors.
https://status.attesto.euCustomer-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.

RouteObjectifSecurity notes
POST /v1/auth/discoverAccepte 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/providersRetourne les labels provider sûrs pour les enabled login paths.Pas de client secrets ni private metadata.
POST /v1/auth/external/startCré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/signupPassword 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-inviteAccepte 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/meSession 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.

FieldMeaningRequirement
occurred_atSource-system event time.Requis pour Proofstream events et doit inclure timezone ou UTC offset.
source_timezoneIANA timezone pour le source system enregistré.Par défaut depuis tenant timezone; utilisez des valeurs comme Europe/Amsterdam ou Europe/Berlin.
Connector received timeMoment où Attesto ou Local Vault reçoit le source event.Défini par le receiving service, pas par du untrusted frontend code.
Normalized UTC timeCanonical 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.

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

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 familyButCredential
GET /v1/dashboardRetourne 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-keyEnregistrer 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}/proofInspecter tenant events et proof material.Tenant session.
POST /v1/events/{event_id}/retrieve, GET /v1/events/{event_id}/retrieve/statusDé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/verifyCré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}/deliveriesGé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-inviteInviter 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/partiesMaintenir 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/portalLire 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}/revokeAccorder, 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.

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 familyObjectifCredential
GET /v2/tenant/streams, GET /v2/tenant/streams/{stream_id}/eventsLister 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/epochsLire proof health, fork evidence et Proof of Evolution epochs.Tenant session.
GET /v2/tenant/streams/{stream_id}/windows, /checkpointsInspecter les closed windows et checkpoints d'un stream.Tenant session.
POST /v2/tenant/audit/packsCré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.

RouteObjectif
GET /v1/settingsRetourne le tenant settings snapshot, y compris les safe identity-provider metadata.
PATCH /v1/settings/tenantMet à jour tenant display settings, locale et timezone policy.
GET /v1/settings/identity-providersListe tenant SSO providers et public setup values.
POST /v1/settings/identity-providersAjoute 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 familyObjectifCredential
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}/commitCré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}/eventsIngest un signed webhook event depuis un source system externe.Connector signed envelope.
POST /v2/connectors/repository-webhooks/{connector_id}/eventsIngest 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-tokensCré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}/eventsRelayer les encrypted-spool events du customer edge vers Proofstream.Local Vault installation credential.
POST /v2/local-vault/installations/{installation_id}/witness/checkpointsSoumettre 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 familyObjectifCredential
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/meCré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/installsLister les connector entitlements et installs du tenant.Tenant session.
POST /v1/marketplace/items/{slug}/acquire, /install, /install/update, /revokeAcquire, install, update ou revoke l'accès tenant à un connector asset.Tenant session et CSRF.
GET /v1/marketplace/items/{slug}/artifactTé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/profileCré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-portalInspecter 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/statusDémarrer Stripe Connect payout onboarding et rafraîchir payout readiness pour paid connector publishing.Marketplace developer session et CSRF.
POST /v1/marketplace/publisher/assetsSoumettre 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.

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

StatusMeaningAction intégrateur
400Malformed request ou unsupported verifier object.Corriger la request shape et retry avec une nouvelle idempotency key si le body change.
401Missing ou invalid system key.Rotater ou reconfigurer la credential server-side.
403Authenticated key sans accès au tenant, system ou stream.Vérifier tenant/system assignment.
404Object non visible par le caller ou inexistant.Confirmer IDs et tenant scope.
409Idempotency conflict, sequence conflict ou append conflict.Ne pas retry aveuglément les changed bodies; inspecter les conflict details.
422Request syntactically valid mais violant le route contract.Corriger field values, policy references ou object kind.
429Rate limit.Backoff avec jitter et garder les idempotency keys stables.
5xxService-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.