Changelog
Notable changes across the Aira platform — backend, dashboard, SDKs, and docs. Reverse chronological. SDK releases are versioned and linked to PyPI / npm.
This page lists notable changes across all five Aira surfaces (backend
API, dashboard, Python SDK, TypeScript SDK, docs). SDK releases are
versioned and linked to PyPI / npm; backend / dashboard ship
continuously off main.
If you're integrating against the API, the wire contract is stable —
nothing in the changelog below is a breaking change. Field names
(action_uuid, receipt_uuid, etc.) are the same as they've always
been; only user-facing labels and added features have changed.
Universal Receipts — 2026-04-15
Every terminal action state now produces a signed Ed25519 receipt.
Previously, only successful actions (notarized) were signed; denials
and failures were recorded in the audit log but lacked cryptographic
proof.
New receipt statuses:
notarized— action completed successfully, receipt seals the outcome.denied— policy blocked the action, receipt proves the system caught it.failed— action executed but failed, receipt records the failure.denied_by_human— human reviewer rejected the action, receipt records who and when.
Gateway: policy denials now return a receipt_uuid in the error
response body (both OpenAI and Anthropic formats), so the denial is
cryptographically verifiable without a second API call.
Zero audit gaps. A regulator can verify any decision Aira made, including the ones it blocked.
SDKs v3.1.0 — DORA compliance module — 2026-04-14
Full support for the EU Digital Operational Resilience Act (Regulation 2022/2554) — in force since 17 January 2025, mandatory for every EU financial entity and their critical ICT providers.
Install:
pip install aira-sdk==3.1.0
npm install aira-sdk@3.1.0Backend: new /api/v1/dora/* routes covering Articles 17–19
(incidents), 24–27 (resilience testing), and 28–44 (ICT third-party
register). Major-incident PDFs are rendered server-side and signed
with Ed25519 using the same key infrastructure as EU AI Act reports.
Gated behind ENABLE_DORA=true (default on).
Python + TypeScript SDKs (v3.1.0): 12 new methods each, sync +
async mirrors on Python. New types: DoraIncident, IctThirdParty,
DoraTest.
Dashboard: three new admin-only sections under
/dashboard/dora/ — incidents list + detail + classify/resolve flows,
ICT third-party register CRUD, resilience test log.
Docs: three new guides (DORA compliance, incident reporting, third-party risk) plus the DORA API reference.
SDKs v2.4.0 — 2026-04-15
Three phases of SDK work, catching up since v2.1.0. All additive.
Install:
pip install aira-sdk==2.4.0
npm install aira-sdk@2.4.0Phase B — Article 6 signed explanation envelope (v2.2.0):
verify_action_explanation()/verifyActionExplanation()on both syncAiraandAsyncAira. Public endpoint — no API key needed, so a regulator or auditor with just the saved JSON can re-verify.ActionExplanationcarries an_envelopeblock (Ed25519 signature over the canonical JSON of the explanation, excluding the envelope itself andrequest_id).- New types:
ExplanationVerification,ExplanationEnvelope(TS).
Phase C — Annex IV technical documentation (v2.3.0):
- New constant
FRAMEWORK_ANNEX_IV = "eu_ai_act_annex_iv"exported from both SDKs alongsideFRAMEWORK_ART12 / ART9 / ART6. create_compliance_report(framework=FRAMEWORK_ANNEX_IV, ...)generates the full Annex IV technical file mapped 1:1 to the nine sub-sections referenced by Article 11. 10-year retention.
Phase 2 — Output content-scan policy (v2.4.0):
get_output_policy()/update_output_policy(**fields)(PATCH semantics — only fields you pass change). Admin role required.ActionReceipt.output_scan_flags: dict | Nonecarries the mode (flag/deny/redact), decision, worst severity, libraries, and per-pattern hits.Nonewhen output filtering is disabled.- New types:
OutputPolicy,OutputPolicyUpdate,OutputScanFlags,OutputScanHit(TS).
See Output Filtering and the envelope guide for the full behaviour.
Backend + Dashboard — 2026-04-15
Output content filtering (Phase 2)
- New
enable_output_filteringfeature flag, defaultTrue. POST /api/v1/output-policiesGET + PATCH for the per-org policy. Admin-only. Returns 404 when feature flag off.POST /api/v1/output-policies/test— dry-run sandbox. Returns what would fire under the current policy without minting a receipt. Powers the dashboard "Test your policy" panel at/dashboard/settings/output-filtering.- Notarize hook scans
outcome_detailsagainst the org's policy. Three modes:flag(record on the receipt),deny(refuse the receipt with HTTP 422OUTPUT_SCAN_VIOLATION, action stays at pre-notarize state),redact(matched spans replaced with[REDACTED]before the outcome is hashed and signed). output_scan_flagsJSON column added toaction_receipts— part of the signed canonical payload, so the scan result is cryptographically tamper-evident.output_scan_policyJSON column added toorganizations— hydrated with defaults on read.
See Output Filtering guide + API reference.
Article 6 signed envelope (Phase B)
- Every
GET /api/v1/actions/{id}/explanationresponse carries an_envelopeblock (Ed25519 signature, content_hash, signing_key_id, generated_at). - New public endpoint
POST /api/v1/verify/explanation— accepts a saved explanation JSON, recomputes the canonical hash, verifies the signature against the public key registered at the JWKS endpoint. No auth required. - PDF rendering of Article 6 explanations now embeds the envelope metadata so paper exports carry the same proof as the JSON form.
Annex IV technical documentation (Phase C)
- New compliance report framework
eu_ai_act_annex_iv, generates the full Annex IV technical file mapped to the nine sub-sections referenced by Article 11. - 10-year retention (
retention_requirement_years: 10) per Article 18, vs Article 12's 6 years. - Pulls every input from existing data: org profile, registered agents, policy catalogue, signing keys, policy evaluations, behavioral baselines, drift alerts, settlement commitments.
- Section metadata also exposed on the report row's
report_metadata.sections, so the dashboard can render per-section without re-fetching the PDF.
See Annex IV guide.
Phase 1 cleanup
Article9RiskCategorymodel +GET /api/v1/compliance/reports/article9/categoriesquery route. Each Article 9 report now also persists one row per(agent_id, category)observed in the period — answers "what was agent X's risk profile in Q1 2026?" without re-running the generator.- New per-article guide pages: Article 12, Article 9, Article 6.
Internal cleanup (no behaviour change)
- All four
_build_legacy_v1_N_payloadbuilders deleted, verify dispatch collapsed to one path.ACTION_RECEIPT_VERSIONreset to"1". No customer receipts existed at the older versions — pure dead-code removal. - Provider adapter
api_key=backwards-compat shim removed; the one supported path is nowcredentials={"api_key": "..."}. - 45 accumulated Alembic migrations collapsed into a single
0001_initial_schemamigration that usesBase.metadata.create_all. Future schema changes start adding incremental migrations on top of0001as normal. Hosting moves viapg_dump/pg_restoreunaffected.
Audit fixes shipped during the same window
- Redact mode now honours
redact_severity_threshold(was redacting on every match regardless of severity — leaked policy signal). - Explicit
await db.rollback()in deny-modeOUTPUT_SCAN_VIOLATIONpath so rollback doesn't depend on implicit FastAPI exception handling. apply_redactionapplies the Luhn validation filter symmetrically for credit-card matches (no more false-positive CC redactions).ActionReceiptSummaryandActionNotarizeResponseschemas now exposeoutput_scan_flagsso the SDK gets the scan result back on the same response, no second round trip needed.- CORS
allow_methodsnow includesPATCH(previously the/output-policiesPATCH preflight failed silently).
Polish — 2026-04-15
- Landing page #04 Content Scan card + #12 Compliance Reports card updated to reflect Phases B/C/2.
- Docs
what-is-airaoverview gained a "Compliance bundles + regulator-ready reports" subsection covering Article 12, Article 9, Article 6 (with envelope), Annex IV. - UUID label sweep across dashboard dialogs, docs prose, and the
Python CLI: anywhere the underlying value is a
UUIDand the human-facing label said "ID", it now says "UUID". Wire-contract field names (action_uuid,receipt_uuid, etc.) are unchanged.
Earlier history
The platform shipped its initial round of regulatory features in the weeks leading up to this changelog page (Article 12 / Article 9 / Article 6 PDFs, compliance bundles with Annex VII field mapping, Merkle settlements, drift detection, multi-party signatures, replay context, agent identity + DIDs, evidence packages, agent estate). Going forward each shipped feature gets a dated entry above.
What is Aira?
The authorization and audit layer for AI agents. Every action intercepted before it runs, evaluated against policy, and cryptographically sealed after — with a public verification URL any regulator can hit.
Quickstart
Authorize an agent action, execute it, and mint a cryptographic receipt in under five minutes.