Post-paid billing for autonomous agents, settled on Monad
An Agent is served before it pays, settles in stablecoin with its own key, and the payment and the ledger entry land in one Monad transaction. Nothing asserts that money arrived, because the transaction that moved it is the one that recorded it.

- Settlements:
- 42
- Indexed to block:
- 76,793,445
Post-paid billing for autonomous agents, settled on Monad
An Agent is served before it pays, settles in stablecoin with its own key, and the payment and the ledger entry land in one Monad transaction. Nothing asserts that money arrived, because the transaction that moved it is the one that recorded it.
- Settlements:
- 42
- Indexed to block:
- 76,793,445

How it works
One settlement, end to end
tab_discover
- Service
- tab.demo
- Tool
- quote.generate
- Price
- 0.01 USDC per call
- Prepayment
- not required
Nothing has to be deposited before the first call. The Agent already has credit.
Get started
Setup in one minute
prompt
Connect me to Tab, then use tab_discover to list the Services and call one with tab_call.
$ pnpm dlx @tabai/sdk connectThat writes one entry into your client's configuration and nothing else. No private key is written anywhere, and the tools appear the next time the client starts. When headroom runs out the Agent settles on Monad in one transaction and carries on.
Works with
Any client that speaks MCP
What a call looks like
The result comes back before the charge does
Call goes out carrying the Agent's identity. Nothing is paid to send it, and no balance blocks it.
Result comes back first. Only then is the charge written to the Open Tab, on Monad.
One transaction
The payment is the record
TabSettlement.settle pulls the Asset from the Agent, pays it to the Service's collection address, and calls TabBook.applySettlement before the transaction ends. If any part of that reverts, all of it does. A Settlement either happened in full on Monad or it did not happen.
- Agent signs

TabSettlement.settle- Service paidOpen Tab reducedHeadroom back
One transaction, in block 71,977,444. The payment and the ledger entry are the same Monad transaction, so there is nothing to wait for after it. Every figure is in the card beside this; the picture carries none of its own.
Why it holds
Take the atomic settlement away and there is no product
Split the payment from the ledger entry and a Service would learn that it was paid only because somebody told it so. Tab never asks a Service to take that on trust: the transfer that pays the tab is the call that records it, so the Open Tab, the Credit Limit and the Service's balance can only ever agree.
A Service meters first and is paid later
Usage is recorded into an Open Tab on Monad as the work is delivered. Nothing has to be paid up front, and no payment blocks a call.
The Agent settles with its own key
The stablecoin moves from the Agent to the Service's collection address by the Agent's own signature. No component of Tab can move an Agent's funds.
The payment and the ledger entry are one transaction
TabSettlement moves the Asset and applies the Settlement to the tab in the same Monad transaction. Either both happen or neither does, and the transaction hash is the whole receipt.
Live on Testnet
Settlements on Monad Testnet
chain 10143 · gas in MON
| Settlement | Transaction | Block | Agent | Service | Amount | Applied | Prepaid |
|---|---|---|---|---|---|---|---|
| 0x959769…f0de24 | 0x23ca6a…2b39da (opens in a new tab) | 71,977,444 | 0x3a3b60…39e7ce | tab.demo | 0.02 mUSDC | 0.02 mUSDC | 0.00 mUSDC |
| 0x64a05b…3a7c25 | 0x06e627…037340 (opens in a new tab) | 71,976,369 | 0x3a3b60…39e7ce | tab.demo | 0.08 mUSDC | 0.08 mUSDC | 0.00 mUSDC |
| 0xce0047…fb863d | 0x8cc7e3…6923e1 (opens in a new tab) | 68,300,227 | 0x3a3b60…39e7ce | tab.demo | 0.07 mUSDC | 0.07 mUSDC | 0.00 mUSDC |
| 0xa3d184…34afa2 | 0x3462ca…12c914 (opens in a new tab) | 68,299,479 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0xf1f1c9…7f4a48 | 0xdc08ab…914db6 (opens in a new tab) | 68,298,839 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0x3ddfea…a48946 | 0xd5d061…7f54bb (opens in a new tab) | 68,298,244 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0xb328b2…7976a2 | 0x91c3f9…12f323 (opens in a new tab) | 68,297,668 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0x962496…46a6b2 | 0x60d042…2b814a (opens in a new tab) | 68,297,099 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0x470f6a…48bcea | 0x40b74e…75e3d8 (opens in a new tab) | 68,285,121 | 0xfe3b56…2be6f6 | tab.demo | 0.01 mUSDC | 0.01 mUSDC | 0.00 mUSDC |
| 0x403646…7c001e | 0xe8b861…57c4d3 (opens in a new tab) | 68,284,895 | 0xfe3b56…2be6f6 | tab.demo | 0.02 mUSDC | 0.02 mUSDC | 0.00 mUSDC |
One line to bill for it. The Agent settles when it likes.
- Post-paid: the work is delivered first and the charge lands after it
- No key held: nothing in the SDK can move an Agent's funds
- Nothing throws: every fallible call returns a Result a model can read
- One transaction: a Settlement pays and applies in the same Monad block
import { tabPostPaid, withTabPostPaid } from "@tabai/sdk"const plugin = tabPostPaid({ serviceId: SERVICE_ID, asset: USDC, tabBook, // the gateway's chain client priceOf: () => ({ tool, units: 1, unitPrice: 10_000n }), // base units, never a decimal})export const POST = withTabPostPaid(plugin, serve)Questions
Frequently asked
questions
Every answer below is checkable. Where one names a figure, that figure is read from Monad, and the pages on this site show the read it came from rather than a summary of it.
Read the documentation (opens in a new tab)What is Tab, and who is it for?
What does post-paid actually mean here?
TabBook afterwards, and the Agent settles whenever it chooses inside the Settlement Window. Nothing has to be deposited up front. An Agent that wants to pay ahead can: a Settlement larger than the Open Tab is kept as prepaid credit, and a call refused for lack of credit can be paid for on the spot with x402 instead.How does a Settlement work?
TabSettlement.settle with the Service, the Asset and an amount. In that one Monad transaction the stablecoin moves from the Agent to the Service's collection address and TabBook applies it to the Open Tab. The transaction hash is the whole record: if either half reverts, both do, so there is nothing to reconcile or confirm afterwards.Where does the Credit Limit come from?
Does Tab ever hold my keys or my funds?
TabSettlement holds nothing: the Asset goes from the Agent to the Service inside the call. Nothing in the SDK, the command line tool or this site can move an Agent's funds. Connecting a client writes one configuration entry and no key.What happens if an Agent never settles?
TabBook.markDelinquent on the tab. The call is permissionless on purpose, so liveness does not depend on the Service. The mark zeroes the Agent's Credit Limit in that Asset until it settles, and the Service's Bond is untouched. The overdue tabs, and the exact command to mark them, are listed on this site.How long does a Settlement take to count?
What does it cost to use?
What does a Service risk?
Bond directly, and every change to a Service's terms sits behind a 48-hour timelock in public first.Let your agents pay for what they use.
One command connects a client. Nothing has to be paid up front, nothing holds your keys, a Settlement is one Monad transaction, and every Settlement on this site is checkable against the block it landed in.