- Personal use — you want an AI agent to spend your own money within bounds you approve, with proof.
- Testing without a merchant account — you are a developer and want to exercise a real card charge end-to-end without building a full PSP integration or opening a merchant account.
The core idea
Who is who
Step 1 — Create a bounded mandate
You define what your agent is allowed to do. Keep the bounds tight: a max amount, an allowed action, and a validity window.PENDING_APPROVAL.
Step 2 — Approve the mandate
Send yourself through the hosted approval session and approve the exact bounds with WebAuthn. A browser return is not approval evidence — wait for a server-side read to reportACTIVE or SCHEDULED before proceeding. See the quickstart for the full approval flow.
Step 3 — Authorize a concrete action
Your agent asks Attesso whether a specific action is allowed:can_execute is exactly true and before execute_before. A DENY or INDETERMINATE means do not charge the card.
Step 4 — Charge your card
Now your agent performs the charge on the card you gave it. The request must be derived from the same immutable proposed action you sent to Attesso — never rebuild it from mutable UI or agent state.Example: charge a virtual credit card
A virtual credit card is a single-use or limited card you create in an app such as Revolut, Monzo, or your bank. It is ideal for a one-off test charge or for giving your agent a bounded spending surface.Example: charge a personal card
The same pattern applies if your agent holds a personal debit or credit card through a card-issuing API. The card is just the rail; Attesso’s role is unchanged.Step 5 — Report finality
After the card provider returns a definite result, close the loop.Commit (the charge was accepted)
Cancel (the charge was declined, or you aborted)
If the card provider times out
A timeout is not proof the charge did not happen. Reconcile before committing or canceling — query the card provider by yourexternal_action_reference. See the reconciliation guide for the exact decision table. Never charge twice while the outcome is ambiguous.
Testing without a merchant account
If you are a developer who wants to exercise a real card charge without building a full PSP integration, a virtual card is the fastest path:- Create a temporary virtual card in Revolut (or similar) with a small limit.
- Give the virtual card to your agent as its payment rail.
- Run the loop above against the free test environment (
att_test_key). - The charge hits the virtual card; you see the full authorize → execute → commit lifecycle with real evidence.
- Delete the virtual card when done.
emu_ — so you validate the actual charge path without opening a merchant account or integrating a full PSP.
Personal use: is this for you?
Yes, if you want an AI agent to spend your money with your explicit approval and a verifiable record. The flow is the same as any other Attesso integration:- You define the bounds and approve them.
- Your agent spends within those bounds.
- Attesso proves the agent stayed inside them and signs the evidence.
What Attesso does not do
Attesso does not execute payments, issue cards, hold payment credentials, or connect to your card account. It never sees your card number. It only authorizes the action and produces evidence. You keep your card, your funds, and your compliance responsibility.Next steps
- Quickstart — the full test loop with an emulator.
- Bind to your PSP — the same pattern with Stripe, Adyen, or any provider.
- Reconcile outcomes — handle timeouts and ambiguous results safely.
- Verify evidence — check a signed bundle yourself, without trusting Attesso.

