One rail · two payers
Invisible payments —for you,and for your AI.
People check out with an email. AI agents pay their own x402 bills — under caps their owner controls. One balance, real evidence, no theatre.
The rail
One rail. Two payers.
Diagram: a human checkout line and an agent payment line merge into one settlement rail that ends in verified evidence.
One balance settles both. Buyers never see a wallet; agents never exceed their cap. Every settlement carries evidence you can independently verify.
For your AI
Your agent hits a paywall.
Tab handles the rest.
- 01402 challengeA paid API answers with a payment challenge.
- 02Policy gatesCap, status, and kill-switch checked first.
- 03SignatureThe server wallet signs the exact amount.
- 04SettlementThe x402 facilitator settles USDC on-chain.
- 05200 OKThe request retries and simply succeeds.
No model in the loop, no blind allowance. A policy engine gates every request before any signature exists — and a kill switch stops new spending instantly.
For you
Checkout that feels like email, not a wallet.
Buyers type an email, enter a six-digit code, and pay. No extension, no seed phrase, no gas surprise. Balances live on real chains; complexity doesn’t reach the buyer.
- Email + one-time code — nothing to install
- One balance across supported chains
- Test mode is always labeled, never simulated
$12.00
- amount
- [amount] USDC
- network
- Base Sepolia · eip155:84532
- payer
- [agent address]
- challenge
- observed
- policy
- passed before signature
- settlement
- [transaction id]
Evidence, not theatre
Submitted is not settled. Tab shows the difference.
Every payment carries its own paper trail: the challenge, the policy decision, the signature, the settlement, and independent verification — each shown only when it really happened. No state is ever invented.
- Real transaction ids, linked to public explorers
- Verification is a separate, continuing check
- Failures state whether money may have moved
Developers
A component for people.
A config for agents.
checkout.tsx
import { PayButton } from "@runtab/sdk";
<PayButton
publishableKey="pk_test_…"
intentUrl="/api/intent"
onSuccess={(transactionId) => done(transactionId)}
/>Drop-in email checkout. Package publication pending.
mcp.json
{
"mcpServers": {
"tab": {
"command": "tab-agent",
"env": {
"TAB_API_BASE_URL": "https://app.example.com",
"TAB_AGENT_KEY": "agent_sk_…"
}
}
}
}Point any MCP client at Tab. The agent pays x402 bills within its cap.
Built on the open internet
- Base
- Arbitrum One
- Circle USDC

Open a tab.
Sandbox funds — no real value · Base Sepolia sandbox included