Skip to main content
Attesso is a spending-control layer. It authorizes a proposed action against a user-signed mandate and returns a decision with signed evidence. Attesso never moves money, holds cards, or connects to a payment account. You keep your own payment rail and bind each authorization to it. This guide covers the case where you are the only party — a single person or a small team — and your payment rail is a personal card or a virtual credit card. It works for two situations:
  1. Personal use — you want an AI agent to spend your own money within bounds you approve, with proof.
  2. 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 pattern is identical to the bind to your PSP guide. The only difference is that your “PSP” is a card you already have.

The core idea

The card goes to your agent, never to Attesso. Attesso only decides whether the action is allowed. Your agent holds the card and performs the charge. This keeps Attesso out of PCI scope and out of the money movement entirely.

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.
Amounts are in minor units (cents). The mandate starts in 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 report ACTIVE 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:
Response (ALLOW):
Execute only when 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.
The card provider here plays the role of your PSP. Attesso never sees the card number or the charge.

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 your external_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:
  1. Create a temporary virtual card in Revolut (or similar) with a small limit.
  2. Give the virtual card to your agent as its payment rail.
  3. Run the loop above against the free test environment (att_test_ key).
  4. The charge hits the virtual card; you see the full authorize → execute → commit lifecycle with real evidence.
  5. Delete the virtual card when done.
This is the same pattern as the quickstart emulator, but with a real card instead of 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.
You can self-host Attesso or use the hosted service. Test is free; a live mandate’s first approval costs $0.35 USD. See pricing for the billing model.

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