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.
Activity · last 24 hours
Example data| Wrapper | Action | Decision | Receipt |
|---|---|---|---|
| support-agent | Export customer 10442 | Approved | rct_uJcX…ZK |
| support-agent | Export all customers | Denied · policy | rct_9fQa…2m |
| billing-agent | Refund $4,800 | Held for review | rct_k21L…Pa |
| ops-agent | Scale prod-api to 0 | Denied · changed | rct_Tz8m…we |
| billing-agent | Refund $49 | Approved | rct_aa3N…Q1 |
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.
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.
Wants to act
"Export customer 10442"
Checks the signed action
Who sent it · unchanged · current · allowed by your rules
Runs only if approved
With a signed receipt for the audit trail
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
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
refund, credit_note$500USDProve 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
- 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
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
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.
Verify. Authorize. Prove.
Three products that cover an agent's whole life, from first commit to measurable results.
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
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 ChatGPT or Claude about A2SPA.
Get a second opinion. Each button opens the assistant with a question about A2SPA already filled in.
ChatGPT and the OpenAI logo are trademarks of OpenAI. Claude is a trademark of Anthropic. A2SPA isn't affiliated with or endorsed by either company.
Ship AI agents your security team will sign off on.
See A2SPA approve, hold and deny real agent actions in a 30-minute walkthrough.