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/account, POST /v1/billing/top-up, PATCH /v1/billing/auto-reload, GET /v1/billing/ledger, GET /v1/billing/usage, POST /v1/billing/portalLire le plan actif, démarrer Stripe Checkout pour les top-ups PAYG Evidence Credits/Enterprise 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.

APIs de provenance (Attesto 3)

La provenance lane est en production sur https://verify.attesto.eu. Un stream de classe provenance reçoit des envelopes commitment-only d'un Local Vault en provenance mode : commitments randomisés, matériel de preuve et métadonnées publiques autorisées. Le contenu brut, les prompts, les noms de fichiers et la sortie des providers n'atteignent jamais la plateforme, et il n'existe aucune API pour récupérer une capsule parce qu'Attesto n'en détient pas. Les routes répondent 404 sur un déploiement dont la provenance lane est désactivée; les erreurs portent un détail {"code", "message"}.

RouteObjetCredential
PUT /v2/tenant/witness/policies/{policy_id}Déclarez la witness quorum policy avant de créer un stream sous ce policyId. La production exige une policy explicite, la création de stream refuse donc d'en inventer une (409 explicit witness quorum policy required); mode: "managed-shadow" avec witnessKeys vide sélectionne le managed witness.Session tenant owner/admin.
POST /v2/provenance/streamsCrée un provenance stream à partir de useCase et policyId; le body n'a pas de metadata. Idempotent : les mêmes entrées renvoient le même stream avec created: false. POST /v2/streams continue de créer des legacy streams; tant que la provenance lane de la plateforme est active, chaque legacy stream nouvellement créé porte un compatibilityWarning visible, et une fois la création legacy désactivée, la route refuse avec 403 legacy_stream_creation_disabled.System API key.
POST /v2/local-vault/installations/{installation_id}/provenance-eventsRelaie une envelope ATTESTO-PROVENANCE-001 depuis le vault; le stream est lu dans l'envelope et l'objet installation annonce le chemin comme provenanceEndpointPath. Renvoie le receipt Proofstream plus provenanceAck (accepted, replayed, installationId, sourceRef, envelopeHash).La signature Ed25519 de l'installation sur l'envelope; pas de bearer token.
POST /v2/streams/{stream_id}/provenance-eventsLe même ingest, adressé par stream. Un legacy stream répond 409 provenance_stream_class_required; une envelope L1/L2 que la plateforme ne peut pas étayer répond 422 provenance_assurance_not_substantiated.System API key plus la signature de l'envelope.
POST /v2/local-vault/installations/{installation_id}/attestations, GET .../attestations/{attestation_ref}Enregistre et lit un record ATTESTO-VAULT-ATTESTATION-001 : pkcs11-key-custody étaye L1, tpm2-quote étaye L2. La plateforme vérifie le record et renvoie attestationRef, assuranceCapability, verified et expiresAt.Record signé par la clé de l'installation; la lecture est publique.
GET /v2/local-vault/installations/{installation_id}/key-statusLe key lifecycle de l'installation pour les contrôles de révocation hors ligne : keyId, publicKeyHex, status, revokedAt, revocationReason, replacedByInstallationId, revocationInstantReconstructed. Répond aussi pour les installations révoquées, ne porte ni résumé d'activité ni verdict; le vérificateur compare avec son propre receipt time.Aucune (publique à dessein).
GET /v2/streams/{stream_id}/provenance-events/{source_ref}/bundle-inclusion?from_checkpoint_id=&to_checkpoint_id=L'inclusion object qui prouve une capsule root sous la provenance_root d'un verifier bundle, adressé par la plage de checkpoints à partir de laquelle le bundle a été construit. Remettez-le avec le bundle à verify_bundle_provenance d'un SDK.System API key.
GET/PUT /v2/tenant/provenance/provider-policy, GET /v2/local-vault/installations/{installation_id}/provider-policyQuels providers une installation peut exécuter, avec une raison révisable par provider autorisé; le vault lit la policy de son tenant via la route d'installation.Session tenant; lecture liée à l'installation.
POST /v2/local-vault/installations/{installation_id}/migration-status, GET /v2/tenant/local-vault/migration-statusLe rapport signé de phase de migration du vault (observe, parity, cutover-ready, cutover, legacy-retained) et la vue tenant correspondante, avec reportedAt.Signé par la clé de l'installation; session tenant pour la liste.

Créer un provenance stream :

curl -X POST https://verify.attesto.eu/v2/provenance/streams \
  -H "Authorization: Bearer $ATTESTO_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<JSON
{
  "useCase": "ai-image-provenance",
  "policyId": "policy-2026-01"
}
JSON

État du déploiement : la phase A du rollout contrôlé a été exécutée en production le 2026-08-23 avec un tenant first-party, et le rollback par lane a été répété contre la production; les phases B à D n'ont pas commencé. Les vérificateurs hors ligne pour les disclosures, la bundle provenance, la key revocation et l'effective assurance sont documentés dans le guide SDK; le côté vault dans le guide Local Vault.

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.