Authorization for AI agents

Your AI agents act. A2SPA decides if they can.

Every action an agent takes, such as a payment, a data export or a production change, is signed, checked against your rules and recorded before your systems run it. If it isn't approved, it doesn't run.

Patent pending SAM registered Available through Carahsoft Python & Node.js SDKs
aimodularity.com/A2SPA/dashboard
A2SPA Overview Wrappers Activity Blocked Receipts API key

Activity · last 24 hours

Example data
Actions checked12,480
Approved12,391
Stopped89
Wrappers14
WrapperActionDecisionReceipt
support-agentExport customer 10442Approvedrct_uJcX…ZK
support-agentExport all customersDenied · policyrct_9fQa…2m
billing-agentRefund $4,800Held for reviewrct_k21L…Pa
ops-agentScale prod-api to 0Denied · changedrct_Tz8m…we
billing-agentRefund $49Approvedrct_aa3N…Q1
The gap

Logins prove who the agent is. Nothing checks what it's doing.

Once an agent has a valid key, most systems accept anything it sends, including a request that was altered, replayed, or asks for far more than the agent should.

"Was this exact action approved?"

An API key proves who connected. It says nothing about whether this transfer, export or change was allowed.

"Could it be changed on the way?"

A customer ID or an amount can be swapped after the agent decides and before your system acts.

"Can we prove what happened?"

Logs show activity. Auditors need a signed record of what was approved, by whom, and when.

How it works

Wrap your agent. Every action gets checked.

Create a wrapper for each agent you already run. The wrapper signs what the agent wants to do, A2SPA checks it, and your system acts only on an approval. A2SPA doesn't build or run agents.

Your agent

Wants to act

"Export customer 10442"

→
A2SPA

Checks the signed action

Who sent it · unchanged · current · allowed by your rules

ApprovedHeld for reviewDenied
→
Your system

Runs only if approved

With a signed receipt for the audit trail

What you get

Control over every action, proof for every decision.

Approve the exact action, not just the agent.

Approvals cover the exact values: which customer, which amount, which system. Change one value after signing and the action is refused.

  • Tamper-evident: signed and checked end to end
  • Each approval works once and expires in two minutes
Changed after signingDenied
customer_id: "10442"
customer_id: "99871"
reason: signature no longer matches the request

Set the rules once, per wrapper.

Decide what each agent may do: allowed actions, scope, spend limits and targets. A2SPA enforces them on every single action.

  • Spend and amount limits
  • Hold risky actions for a human
  • Switch a wrapper off instantly
Rules · billing-agentActive
Allowed actionsrefund, credit_note
Auto-approve up to$500
Above thatHold for review
CurrenciesUSD

Prove every decision with a signed receipt.

Approved, denied or held: each decision is signed by A2SPA, so your audit, risk and incident teams can verify it independently, months later.

  • Who asked, what was asked, what was decided, and when
  • Optional post-quantum signature profile
ReceiptSignature valid
receipt
rct_uJcXYbeL…ZK
wrapper
support-agent
action
export_customer_records · 10442
decision
authorized
issued
2026-11-13 16:31:08 UTC
signed
RSA-PSS-SHA256

Fails closed. Always.

If A2SPA can't confirm an approval because of an error, a timeout or a rate limit, the action doesn't run. Safe by default, with no exceptions to remember.

  • No prompt reading or guesswork: the same request always gets the same answer
  • Works alongside your IAM, policy and monitoring tools
Your codepip install a2spa
from a2spa import (build_payload_fields, build_signed_request,
                   policy_input, require_authorized_result)

action = build_payload_fields(
    agent_id=WRAPPER_ID, target_agent_id=RECORDS_SERVICE,
    input_data=policy_input(action="export", customer_id="10442"),
)
body = build_signed_request(PRIVATE_KEY, action)
result = requests.post(API + "/v1/verify_payload", json=body,
                       headers={"x-api-key": API_KEY}, timeout=10).json()

require_authorized_result(result)  # raises unless "authorized"
run_export()                       # only reached when approved
Solutions

Built for actions with real consequences.

$

Finance & payments

Transfers, refunds and payouts only within the limits you set. Larger amounts wait for a person.

◎

Customer data

Support agents can open one customer's records, never export the whole database.

⚙

DevOps & IT

Deploys, config changes and access grants need a signed approval first.

⇄

Multi-agent workflows

When one agent hands work to another, every step is checked, not just the first.

Patent pendingNovel signed-authorization method for agent actions.
Public sector readySAM registered and available through Carahsoft.
Audit evidenceSigned receipts for every decision, verifiable later.
Post-quantum optionML-DSA signatures alongside the default RSA profile.
Pricing

Start free. Pay per check. Scale with Enterprise.

Every new account includes free checks. After that, each check costs one cent. Enterprise plans add private deployment options and dedicated support.

Free

To try it

$0.01

Per check

Custom

Enterprise

FAQ

Straight answers.

Something else? Talk to us.

What is a wrapper?

A wrapper connects one of your existing AI agents to A2SPA. It gives the agent its own signing key and its own rules, and every action it takes goes through A2SPA before your systems run it. A2SPA doesn't build or host the agent itself.

Does it work with our agent framework?

Yes. Wrappers work with agents built on any framework or model, including LangChain, CrewAI, the OpenAI Agents SDK, MCP tools and custom code, using our Python and Node.js SDKs.

Does it replace IAM or our policy tools?

No. Those decide who can connect and what's allowed in general. A2SPA checks each specific action at the moment it runs, and gives you a signed record of that decision.

What happens if A2SPA is unreachable?

The action doesn't run. Anything other than an explicit approval, including errors and timeouts, is treated as a stop.

How fast can we start?

Create a free account and your first wrapper in minutes, or book a demo and we'll map it to your use case.

Ask your AI

Ask ChatGPT or Claude about A2SPA.

Get a second opinion. Each button opens the assistant with a question about A2SPA already filled in.

No Signature. No Execution.™

Ship AI agents your security team will sign off on.

See A2SPA approve, hold and deny real agent actions in a 30-minute walkthrough.