Attesto

SDKs

Python-, TypeScript-, CLI- und Go-SDKs

Attesto stellt vier first-class Developer Surfaces bereit: Python, TypeScript, Go und die Attesto CLI. Sie teilen dasselbe Proofstream Protocol, dieselben Golden Vectors, die Verifier Matrix, den Production Origin und die Regeln für Secret Handling.

Package Registries

Die offiziellen Package Identifiers sind attesto für Python und @attesto/sdk für TypeScript. Aktuelle öffentliche Releases sind attesto==0.4.0 und @attesto/sdk==0.4.0. Go SDK und CLI melden dieselbe 0.2.0 Release Version. Installieren Sie nur aus den offiziellen PyPI- und npm-Registries; installieren Sie keine SDKs aus Mirrors, zufälligen Tarballs oder Source Snapshots.

Das Release Gate trennt Packages von Surfaces: Registry Readiness erwartet drei Package/Module Distributions (attesto, @attesto/sdk und das Go Module) und vier Production Developer Surfaces, weil die attesto CLI eine first-class Go-backed Verifier Surface ist. Das Gate muss surfacesExpected=4, surfacesReady=4, cliReady=true und cliVersionMatches=true melden.

Package Artifacts sind bewusst minimal. npm Artifacts enthalten nur Runtime JavaScript, Declaration Files, README.md und Package Metadata. PyPI Production Releases sind wheel-only. Sourcemaps, Raw TypeScript Source, Tests, Caches, Source Archives, Frontend Bundles, API Keys, Private Keys und secret-like Material sind verboten.

Authentication Model

System-key Clients werden für Event Ingest, Stream Heads, Receipts, öffentliche Proof Objects, Bundles und Remote Verification genutzt. Tenant/operator Clients verwenden ein Dashboard Bearer Token für Tenant Stream Lists, Connector Installation, Local Vault Installation, Fork Evidence Inspection, Proof-state Views und Tenant Audit-pack Creation. Legen Sie keine dieser Credentials in Frontend Code ab.

Article 13 Support und Article 12 Evidence mit einer Integrationszeile

Für high-risk AI-Systeme geht es bei Article 12 um technische Logging-Fähigkeit und Traceability, während Article 13 Transparenz und nutzbare Informationen für Deployer und Nutzer betrifft. In Attesto-Begriffen lautet die exakte Integrationszeile export OPENAI_BASE_URL=http://localhost:8765/v1: damit werden OpenAI-compatible Calls an das Attesto Gateway gerichtet und automatische Evidence Capture kann starten. Der deterministische Article 12 Report erklärt, was aufgezeichnet und unabhängig verifizierbar ist, und derselbe receipt-backed Trail kann Article-13-Dokumentation unterstützen. Das ist Nachweisunterstützung, keine rechtliche Konformitätserklärung.

Die konkrete One-line Gateway-Integration, die das ermöglicht, ist:

export OPENAI_BASE_URL=http://localhost:8765/v1

Ersetzen Sie localhost in Produktion durch den bereitgestellten Gateway Host und speichern Sie sowohl Provider Key als auch Attesto System Key in serverseitiger Secret Storage.

Nutzen Sie dieses Muster, wenn Sie eine Python-Funktionsgrenze kontrollieren. Der Decorator erfasst Commitments über Argumente, Rückgabewert, Timing, Source Reference und Failures; der Report fasst Coverage ohne LLM zusammen.

from attesto import AttestoV2Client, attest, article12
import os

with AttestoV2Client(api_key=os.environ["ATTESTO_API_KEY"]) as capture:
    @attest(capture, stream_id="str_...")
    def score_case(case: dict) -> dict:
        return {"decision": "manual_review", "policy_id": "policy-2026-01"}

    score_case({"case_id": "case-2026-0001"})
with AttestoV2Client.with_bearer_token(os.environ["ATTESTO_TENANT_TOKEN"]) as operator:
    print(article12(operator, "str_..."))

Der Capture Path nutzt einen System API Key; der Report Path liest Tenant Stream Events und benötigt daher einen Tenant/operator Bearer Token.

attesto --token-env ATTESTO_TENANT_TOKEN \
  report article12 --stream str_... --output report.md

Was die SDK übernimmt

Die SDKs sind bewusst schlanke server-side Clients. Sie verbergen das Evidence Model nicht, sondern entfernen repetitive Transportarbeit, damit Ihre Anwendung sich auf die richtige Event Shape und die Verifikation der zurückgegebenen Evidence konzentrieren kann.

ThemaSDK-VerhaltenDeveloper Responsibility
Base URLStandard ist https://verify.attesto.eu.Nur für private/staging Deployments überschreiben.
AuthenticationUnterstützt System API-key Mode und Tenant Bearer-token Mode.Verwenden Sie die engste Credential, die für die Aufgabe nötig ist.
IdempotencyErzeugt Idempotency Keys für Writes, wenn keine geliefert werden.Verwenden Sie denselben Key erneut, wenn Ihr Job System denselben Body retryt.
RetriesRetryt transiente 429, 5xx und Transport Errors mit Backoff.Payloads zwischen Retries nicht verändern.
Proofstream HelpersBietet Stream-, Receipt-, Checkpoint-, Anchor-, IVC-, Bundle- und Verify Helpers.Stream Granularity und Policy IDs bewusst wählen.
ErrorsWirft typed Auth-, Validation-, Rate-limit- und Server Errors.Sichere Error Categories loggen, keine API Keys oder Raw Secret-bearing Payloads.

Capability Matrix

CapabilityPythonTypeScriptGoCLI
Streams/events/receiptsJaJaJaJa
Windows/checkpoints/consistencyJaJaJaJa
Remote verifier APIJaJaJaJa
Offline receipt verificationVerifier helper/APIVerifier helper/APIJaJa
Witness policy and fork evidenceJaJaJaJa
Anchors and IVC epochsJaJaJaJa
ConnectorsJaJaJaJa
Local Vault relay/witnessJaJaJaJa
Release readiness evidenceVia scriptsVia scriptsVia CLI/module testsJa

Python

pip install attesto
import os
from datetime import UTC, datetime
from attesto import AttestoClient

attesto = AttestoClient(api_key=os.environ["ATTESTO_API_KEY"])
ack = attesto.log_event(
    type="inference",
    status="verified",
    ts=datetime.now(UTC),
    payload={
        "model": "risk-service-v4",
        "score": 0.91,
        "policy_id": "policy-2026-01",
    },
)
print(ack.id)

Python async

import os
from datetime import UTC, datetime
from attesto import AsyncAttestoClient

async with AsyncAttestoClient(api_key=os.environ["ATTESTO_API_KEY"]) as attesto:
    ack = await attesto.log_event(
        type="ai.decision",
        status="verified",
        ts=datetime.now(UTC),
        payload={"decision": "manual_review", "score": 91},
    )
    print(ack.id)

TypeScript

npm install @attesto/sdk
import { AttestoClient } from "@attesto/sdk";

const attesto = new AttestoClient({
  apiKey: process.env.ATTESTO_API_KEY!,
});

const ack = await attesto.logEvent({
  type: "inference",
  status: "verified",
  ts: new Date(),
  payload: {
    model: "risk-service-v4",
    score: 0.91,
    policy_id: "policy-2026-01",
  },
});
console.log(ack.id);

TypeScript attestedFetch

Nutzen Sie attestedFetch, wenn ein OpenAI-compatible SDK oder Framework eine custom fetch implementation akzeptiert. Es zeichnet nur Commitments auf, niemals raw prompts oder completions. strict: true schlägt geschlossen fehl, wenn Evidence nicht gesendet werden kann; Fail-open Mode muss überwacht werden.

import { AttestoV2Client, attestedFetch } from "@attesto/sdk";

const client = new AttestoV2Client({ apiKey: process.env.ATTESTO_API_KEY! });
const fetchWithEvidence = attestedFetch(client, {
  streamId: "str_...",
  capture: "commitments",
  strict: true,
});

Proofstream v2 Client

Verwenden Sie AttestoV2Client, wenn Sie stream-level Receipts, Checkpoint Consistency, Witness Policy Visibility, Verifier Bundles und Offline Verification Helpers benötigen.

from attesto import AttestoV2Client
from datetime import UTC, datetime
import os

with AttestoV2Client(api_key=os.environ["ATTESTO_API_KEY"]) as attesto:
    stream = attesto.create_stream(
        use_case="ai-decision-history",
        policy_id="policy-2026-01",
    )
    receipt = attesto.log_event(
        stream_id=stream.stream_id,
        source_ref="source-event-001",
        event_type="decision",
        occurred_at=datetime.now(UTC),
        payload={"decision": "review", "score": 91},
    )
    stored = attesto.get_receipt(receipt.stream_event_id)
    report = attesto.verify_receipt(
        receipt=stored.receipt,
        public_key_hex=os.environ["ATTESTO_RECEIPT_SIGNER_PUBLIC_KEY_HEX"],
        stream_event_id=receipt.stream_event_id,
    )
    assert report.ok

TypeScript Proofstream:

import { AttestoV2Client } from "@attesto/sdk";

const attesto = new AttestoV2Client({
  apiKey: process.env.ATTESTO_API_KEY!,
});

const stream = await attesto.createStream({
  useCase: "ai-decision-history",
  policyId: "policy-2026-01",
});

const receipt = await attesto.logEvent(stream.streamId, {
  sourceRef: "case-2026-0001:decision-1",
  eventType: "ai.decision",
  occurredAt: new Date(),
  payload: { decision: "manual_review", score: 91 },
});

const report = await attesto.verifyReceipt({
  receipt: receipt.receipt,
  streamEventId: receipt.streamEventId,
  publicKeyHex: process.env.ATTESTO_RECEIPT_SIGNER_PUBLIC_KEY_HEX!,
});
if (!report.ok) throw new Error(report.problems.join("; "));

Go

Verwenden Sie Go für Infrastructure Automation, Security Tooling, Cloud Workers und Verifier Services. Die Go SDK nutzt derzeit nur die Go Standard Library und wird über den öffentlichen go.attesto.eu/sdk Module Path aufgelöst.

go get go.attesto.eu/sdk
package main

import (
  "context"
  "fmt"
  "log"
  "os"

  attesto "go.attesto.eu/sdk"
)

func main() {
  client, err := attesto.NewClient(os.Getenv("ATTESTO_API_KEY"))
  if err != nil {
    log.Fatal(err)
  }

  stream, err := client.CreateStream(context.Background(), attesto.StreamCreateInput{
    UseCase: "ai-decision-history",
    PolicyID: "policy-2026-01",
  })
  if err != nil {
    log.Fatal(err)
  }

  receipt, err := client.LogEvent(context.Background(), stream.StreamID, attesto.EventInput{
    SourceRef: "case-2026-0001:decision-1",
    EventType: "ai.decision",
    Payload: attesto.M{"decision": "manual_review", "score": 91},
  })
  if err != nil {
    log.Fatal(err)
  }

  fmt.Println(receipt.StreamEventID, receipt.EventHash)
}

CLI

Die Attesto CLI ist die Operator- und Verifier Surface für scripted Workflows. Sie unterstützt JSON Output, Local Config, Stream/Event Actions, Receipt Verification, Bundle Verification, Fork Evidence, Quorum Evidence, Connectors, Local Vault und Release-readiness Evidence Checks. Sie gibt niemals gespeicherte API Keys, Tenant Tokens oder Connector Secrets aus.

CLI command reference

Command groupSubcommandsNutzung
version, config, login, logoutconfig get, config setVersion prüfen und lokale redacted configuration verwalten.
streamscreate, get, headStreams erstellen, tenant-visible stream metadata prüfen und den append-only head abrufen.
eventslog, batchEin Event oder einen JSON event batch mit source timestamps und payload files senden.
receiptsget, verifyEin gespeichertes Receipt abrufen und lokal oder über /v2/verify/receipt verifizieren.
windows, checkpoints, anchors, ivcget, verify, checkpoints consistency, ivc epochs get/verifyProofstream windows, checkpoint roots, consistency proofs, anchor epochs und IVC epochs abrufen und verifizieren.
witnesses, quorum, fork-evidencepolicies, status, receipts, inspect, verifyWitness policy, proof state, quorum material und fork evidence prüfen.
bundles, verifybuild, get, verify, offline-verify, verify file, verify truth-packageVerifier bundles bauen und bundles, portable receipt files oder Truth Package ZIPs verifizieren.
connector, connectorsconnector init, connectors create, ingest, revoke, verifyConnector manifests scaffolden, tenant connectors verwalten, events ingesten und signed connector payloads verifizieren.
local-vaultinstall, relay, spool, status, witness, fork-evidence, revokeLocal Vault installations, encrypted spool workflows, witness receipts, fork evidence und revocation bedienen.
marketplaceinit, validate, submitPublisher manifests vorbereiten, lokal validieren und assets zur privaten Attesto Review einreichen.
doctor, report, readinessreport article12, readiness lifecycle/fork-defense/quorum/assurance/connectors/local-vault/nova/productionInstall diagnostics, deterministic Article 12 reporting und release-readiness evidence checks ausführen.
cd sdk/go
go run ./cmd/attesto --json version

go run ./cmd/attesto --json \
  --api-key-env ATTESTO_API_KEY \
  streams create \
  --use-case ai-decision-history \
  --policy-id policy-2026-01

Offline receipt verification:

go run ./cmd/attesto --json receipts verify \
  --file receipt.json \
  --public-key-hex "$ATTESTO_RECEIPT_SIGNER_PUBLIC_KEY_HEX"

Production readiness evidence check:

go run ./cmd/attesto --json readiness lifecycle
go run ./cmd/attesto --json readiness fork-defense
go run ./cmd/attesto --json readiness production

Marketplace publisher automation:

go run ./cmd/attesto --json marketplace init \
  --output attesto.connector.json \
  --slug signed-webhook-evidence \
  --name "Generic Signed Webhook Evidence" \
  --version 1.0.0 \
  --category compliance \
  --summary "Produces Attesto evidence for signed webhook events." \
  --description "Produces verifiable Proofstream events for signed webhook payloads." \
  --publisher-slug attesto \
  --publisher-name Attesto \
  --repository-url https://git.rotz.ai/rotzmediagroup/attesto-v1/src/branch/attesto-2.0/connectors/webhook \
  --docs-url https://docs.attesto.eu/manuals/connectors.html#signed \
  --provider-url https://docs.attesto.eu/manuals/connectors.html#signed \
  --auth-mode signed-webhook \
  --auth-scopes webhook:read \
  --sync-modes webhook \
  --event-types webhook.event.received \
  --canary-ref release/attesto-2.0-connector-assurance-readiness/result.json \
  --capabilities proofstream,offline-verification

go run ./cmd/attesto --json marketplace validate \
  --manifest-file attesto.connector.json

go run ./cmd/attesto --json \
  --token-env ATTESTO_TENANT_TOKEN \
  marketplace submit \
  --manifest-file attesto.connector.json \
  --source-ref https://git.rotz.ai/rotzmediagroup/attesto-v1/src/branch/attesto-2.0/connectors/webhook \
  --visibility public \
  --pricing-model free

Operator Endpoints

Tenant/operator Endpoints erfordern Bearer-token Mode. Verwenden Sie das nur in trusted Operator Automation und niemals in öffentlichen Clients.

from attesto import AttestoV2Client

operator = AttestoV2Client.with_bearer_token(
    os.environ["ATTESTO_TENANT_TOKEN"],
)
streams = operator.list_tenant_streams()
forks = operator.list_fork_evidence(streams[0]["streamId"])
const operator = new AttestoV2Client({
  apiKey: process.env.ATTESTO_TENANT_TOKEN!,
  authMode: "bearer",
});

const streams = await operator.listTenantStreams();
const forks = await operator.listForkEvidence(String(streams[0].streamId));
operator, err := attesto.NewBearerClient(os.Getenv("ATTESTO_TENANT_TOKEN"))
if err != nil { log.Fatal(err) }
streams, err := operator.ListTenantStreams(context.Background(), "", 100, 0)
if err != nil { log.Fatal(err) }

Offline und Online Verify Helpers

SDK Verification Methods sind nützlich in Services, die Attesto Receipts oder Bundles empfangen und fail-closed arbeiten müssen, bevor sie diese akzeptieren.

from attesto import AttestoV2Client
from datetime import UTC, datetime
import os

with AttestoV2Client(api_key=os.environ["ATTESTO_API_KEY"]) as attesto:
    report = attesto.verify_object(
        kind="bundle",
        proof_object=bundle_object,
    )
    if not report.ok:
        raise RuntimeError(report.problems)
const report = await attesto.verifyObject({
  kind: "bundle",
  object: bundleObject,
});

if (!report.ok) {
  throw new Error(report.problems.join("; "));
}

MockAttesto für lokale Tests

attesto.testing.MockAttesto ist ein Python Test Harness für lokale CI und Integrationstests. Es verwendet dieselben canonical hashing und receipt shapes wie das SDK, signiert aber mit einem per-instance throwaway mock key und markiert Objekte als mock evidence. Verwenden Sie es, um Ihren Application Flow ohne Netzwerk oder Attesto Account zu testen; verwenden Sie mock receipts niemals in production evidence oder customer bundles.

MockAttesto ist bewusst fail-closed gegenüber echten trust roots: Verification mit einem production witness key muss mock evidence ablehnen. So bleiben Tests schnell, ohne dass synthetic evidence als production proof durchgehen kann.

Companion Packages und Edge-Oberflächen

Die Core SDKs bleiben klein. Separate Packages decken Edge Relay, MCP Tooling, Workflow Nodes und den zukünftigen independent witness node ab. Diese Packages dürfen niemals versteckte transitive Dependencies der Core SDKs werden.

SurfacePackageNutzungStatusregel
MCP-Serverattesto-mcpStellt deterministische Attesto-Tools fuer MCP-Hosts bereit.Nur aus PyPI Release Evidence installieren.
Local Vaultattesto-local-vaultVerschluesselte Customer-Edge-Spool, Relay und optionaler Witness Mode.Keys bleiben lokal; keine Frontend-Nutzung.
n8n-Noden8n-nodes-attestoWorkflow Receipts und signierte Webhook-Verifikation.Credentials bleiben in n8n Credentials.
Independent Witness Nodeattesto-witness, @attesto/witness, go.attesto.eu/witnessPrivacy-preserving Observation von public oder explizit geteilten Heads.Phase-gated; keine Core-SDK-Dependency.
pip install attesto-mcp
pipx install attesto-local-vault
npm install n8n-nodes-attesto

Spezifiziert als privacy-preserving observation node package. Aktuelles customer-operated witness Verhalten ist über Local Vault witness mode verfügbar; standalone attesto-witness, @attesto/witness und go.attesto.eu/witness sollten nur installiert werden, nachdem Release Evidence dieses Package grün markiert.

Security Rules