Skip to main content

The authorization and audit layer for AI agents

Project description

Aira Python SDK

PyPI License Python

Authorize every AI agent action before it runs. Sign every outcome with Ed25519.

Table of contents

Installation

pip install aira-sdk

Requires Python 3.9+.

Quick start

Three steps: authorize the action, execute it, notarize the outcome.

from aira import Aira

aira = Aira(api_key="aira_live_xxx")

# 1. Authorize — policies evaluate, denied actions raise AiraError
auth = aira.authorize(
    action_type="wire_transfer",
    details="Send EUR 75,000 to vendor-x",
    agent_id="payments-agent",
    model_id="claude-sonnet-4-6",
)

# 2. Execute
ref = send_wire(75000, to="vendor-x")

# 3. Notarize — mints an Ed25519 + RFC 3161 receipt
receipt = aira.notarize(
    action_id=auth.action_id,
    outcome="completed",
    outcome_details=f"Wire sent, ref={ref}",
)
print(receipt.signature)  # ed25519:base64url...

If the action requires human approval, auth.status returns "pending_approval" and you can enqueue it for review.

Universal receipts — Every action — authorized, denied, or failed — produces an Ed25519 receipt. The audit trail has zero gaps.

Core methods

Method Description
authorize() Gate before execution. Returns Authorization (authorized or pending_approval). Raises AiraError if denied.
notarize() Sign after execution. Mints Ed25519 + RFC 3161 receipt.
verify_action() Public receipt verification -- no auth required.
get_action() Retrieve action details and receipt.
list_actions() List actions with filters.
cosign_action() Human co-signature on an action.
get_replay_context() Reproducibility metadata (prompt hash, tool inputs, model params).

Async support

AsyncAira mirrors every method on Aira. Use await and an async context manager.

from aira import AsyncAira

async with AsyncAira(api_key="aira_live_xxx") as aira:
    auth = await aira.authorize(
        action_type="contract_signed",
        details="Signed vendor agreement #1234",
        agent_id="procurement-agent",
    )
    if auth.status == "authorized":
        ref = await sign_contract(1234)
        await aira.notarize(
            action_id=auth.action_id,
            outcome="completed",
            outcome_details=f"signed, ref={ref}",
        )

Gateway

Route existing OpenAI or Anthropic calls through Aira. Every request is policy-checked and receipted with zero prompt changes.

from aira import gateway_openai_kwargs

client = openai.OpenAI(api_key="sk-...", **gateway_openai_kwargs(aira_api_key="aira_live_xxx"))

The Anthropic equivalent:

from aira import gateway_anthropic_kwargs

client = anthropic.Anthropic(**gateway_anthropic_kwargs(aira_api_key="aira_live_xxx"))

Both helpers return base_url and default_headers dicts. Self-hosted deployments can pass gateway_url to point at your own instance.

Framework integrations

Integration Install Type
LangChain pip install aira-sdk[langchain] gate
OpenAI Agents pip install aira-sdk[openai-agents] gate
Google ADK pip install aira-sdk[google-adk] gate
AWS Bedrock pip install aira-sdk[bedrock] gate
CrewAI pip install aira-sdk[crewai] audit
MCP pip install aira-sdk[mcp] adapter
Webhooks pip install aira-sdk[webhooks] adapter

gate intercepts before execution and can deny. audit records after execution. adapter exposes Aira as tools the host framework can call.

# LangChain
from aira.extras.langchain import AiraCallbackHandler
handler = AiraCallbackHandler(client=aira, agent_id="research-agent")
result = chain.invoke({"input": "Analyze Q1"}, config={"callbacks": [handler]})

# OpenAI Agents
from aira.extras.openai_agents import AiraGuardrail
guardrail = AiraGuardrail(client=aira, agent_id="assistant-agent")
search = guardrail.wrap_tool(search_tool, tool_name="web_search")

Webhook verification

Verify incoming webhook deliveries from Aira. No extra dependencies — just HMAC-SHA256 signature checking.

from aira.extras.webhooks import verify_signature

# In your webhook handler
is_valid = verify_signature(
    payload=request.body,
    signature=request.headers["X-Aira-Signature"],
    secret=your_webhook_secret,
)

pip install aira-sdk[webhooks] — no extra dependencies, the module is pure Python. This is server-to-server webhook verification, not related to the approval flow.

Content scanning

Verify agent outputs against your organization's endpoint whitelist. Configure allowed domains and content policies in the dashboard, enforce them at authorize() time.

Compliance and DORA

Aira provides built-in support for regulatory compliance:

  • Compliance bundles -- sealed, Merkle-rooted evidence packets (EU AI Act Art 12, ISO 42001, SOC 2 CC7)
  • DORA compliance -- ICT incident reporting, resilience testing, third-party risk management
  • Public verification -- anyone can verify a receipt with verify_action(), no auth required

Self-hosted

Point the SDK at your own deployment:

aira = Aira(api_key="aira_live_xxx", base_url="https://aira.your-infra.com")

All features -- policies, receipts, settlements -- work identically on self-hosted.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aira_sdk-3.5.0.tar.gz (417.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aira_sdk-3.5.0-py3-none-any.whl (47.3 kB view details)

Uploaded Python 3

File details

Details for the file aira_sdk-3.5.0.tar.gz.

File metadata

  • Download URL: aira_sdk-3.5.0.tar.gz
  • Upload date:
  • Size: 417.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aira_sdk-3.5.0.tar.gz
Algorithm Hash digest
SHA256 cc10c4e7b0dfde8c5968e261ffd5dde1259177db8c2b6455280d49a0227f5703
MD5 3064e79e29ec134cdd95155289cf5cd5
BLAKE2b-256 6bf1e7e78a2e6a133d2202e70b33a7f867c410369fa8552b1e4e3c56f9a1e1a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for aira_sdk-3.5.0.tar.gz:

Publisher: publish.yml on aira-proof/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aira_sdk-3.5.0-py3-none-any.whl.

File metadata

  • Download URL: aira_sdk-3.5.0-py3-none-any.whl
  • Upload date:
  • Size: 47.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aira_sdk-3.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f87d7b90d8d1a3d1694dd16c85d590b789d3ef15c726c7a10006ca26a68802f
MD5 05a9a0627dd6200ed65a91871ad9f3a6
BLAKE2b-256 5a9935c3ec4c23aec40fbe7f66ae222fbdc4f537f77508a3714e5fd283bd4fb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for aira_sdk-3.5.0-py3-none-any.whl:

Publisher: publish.yml on aira-proof/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page