Skip to content

Quickstart

Install the SDK

pip install ./python

For OpenTimestamps anchoring:

pip install ./python[anchoring]

Create a record

from axiom_sdk import Record

record = Record.create(
    kind="model.deployed",
    subject_id="model-123",
    subject_type="model",
    payload={"environment": "prod", "traffic_pct": 100},
    previous_hash=None,
)
print(record.to_json())

Verify a chain

axiom verify ./records.json
axiom anchor --path ./records.json --output ./records.ots

Build a federated anchor manifest

[
  {
    "participant_id": "tenant-alpha",
    "record_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "scope": "prod"
  },
  {
    "participant_id": "tenant-bravo",
    "record_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
    "scope": "prod"
  }
]
axiom federated-build --input ./members.json --output ./federated-manifest.json
axiom federated-verify \
  --manifest ./federated-manifest.json \
  --participant-id tenant-alpha \
  --record-hash aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
  --scope prod

The manifest stores blinded per-member commitments plus Merkle proofs. Each tenant can present only their own participant_id, record_hash, nonce, and proof path.

Use the GitHub Action

- uses: ./github-action
  with:
    endpoint: ${{ secrets.AXIOM_ENDPOINT }}
    api-token: ${{ secrets.AXIOM_TOKEN }}
    kind: model.deployed
    subject-id: model-123
    subject-type: model
    payload-file: ./build/axiom-payload.json

Provider middleware

from axiom_sdk import Client, wrap_anthropic_client

ledger = Client("https://ledger.example.com", token="secret")
anthropic = wrap_anthropic_client(anthropic, ledger)
reply = anthropic.messages.create(
    model="claude-3-7-sonnet",
    max_tokens=256,
    messages=[{"role": "user", "content": "Summarize the policy"}],
)

Each wrapped call writes an AEF record with request summary, response summary, and provider error details when the upstream call fails.

Framework integrations

LangChain

from axiom_sdk import Client, LangChainAxiomCallbackHandler

ledger = Client("https://ledger.example.com", token="secret")
handler = LangChainAxiomCallbackHandler(ledger)

LlamaIndex

from axiom_sdk import Client, LlamaIndexAxiomCallbackHandler

ledger = Client("https://ledger.example.com", token="secret")
handler = LlamaIndexAxiomCallbackHandler(ledger)

Haystack

from axiom_sdk import Client, wrap_haystack_component

ledger = Client("https://ledger.example.com", token="secret")
generator = wrap_haystack_component(generator, ledger)