Skip to content

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

Client to gatewayStep 1 of 5

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 connect

That 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

Claude
Cursor
OpenAI
Gemini
Zed
Tab
Tabopen tab +0.01 USDC
Any Service

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.

  1. Agent signs
  2. TabSettlement.settle
  3. Service paid
    Open Tab reduced
    Headroom 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.

01

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.

02

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.

03

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

Settlements on Monad Testnet
SettlementTransactionBlockAgentServiceAmountAppliedPrepaid
0x959769…f0de240x23ca6a…2b39da (opens in a new tab)71,977,4440x3a3b60…39e7cetab.demo0.02 mUSDC0.02 mUSDC0.00 mUSDC
0x64a05b…3a7c250x06e627…037340 (opens in a new tab)71,976,3690x3a3b60…39e7cetab.demo0.08 mUSDC0.08 mUSDC0.00 mUSDC
0xce0047…fb863d0x8cc7e3…6923e1 (opens in a new tab)68,300,2270x3a3b60…39e7cetab.demo0.07 mUSDC0.07 mUSDC0.00 mUSDC
0xa3d184…34afa20x3462ca…12c914 (opens in a new tab)68,299,4790xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0xf1f1c9…7f4a480xdc08ab…914db6 (opens in a new tab)68,298,8390xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0x3ddfea…a489460xd5d061…7f54bb (opens in a new tab)68,298,2440xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0xb328b2…7976a20x91c3f9…12f323 (opens in a new tab)68,297,6680xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0x962496…46a6b20x60d042…2b814a (opens in a new tab)68,297,0990xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0x470f6a…48bcea0x40b74e…75e3d8 (opens in a new tab)68,285,1210xfe3b56…2be6f6tab.demo0.01 mUSDC0.01 mUSDC0.00 mUSDC
0x403646…7c001e0xe8b861…57c4d3 (opens in a new tab)68,284,8950xfe3b56…2be6f6tab.demo0.02 mUSDC0.02 mUSDC0.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
REGISTER A SERVICE
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?
Tab is post-paid billing and a credit facility for autonomous agents, on Monad. There are two ends to it.
An Agent that wants to use paid tools. It is served before it pays, settles later in USDC or AUSD from its own key, and builds a Credit Limit out of its own settlement history rather than a deposit.
A Service that wants to charge for them. It meters each delivery into the Agent's Open Tab as the work goes out, and is paid on a Settlement Window it chooses.
What does post-paid actually mean here?
No payment blocks a call. The Service delivers the work and records the charge against an Open Tab in 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?
The Agent calls 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?
It is a pure function of what is already on chain: the Agent's own Settlements, and the Bond each counterparty Service has escrowed in that Asset. A brand-new Agent starts at a baseline capped by counterparty stake, and the limit grows with every Settlement applied. It is recomputed from the record rather than assigned, and the read API serves a figure only where the contract agrees with it at the same block.
Does Tab ever hold my keys or my funds?
No. Settlement is a transaction the Agent signs itself, and 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?
Once the Settlement Window closes, anyone may call 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?
One Monad block. The payment and the ledger entry are the same transaction, so headroom is restored in the block that carries it and the next call goes through. There is no waiting period between paying and being served again.
What does it cost to use?
Each Service sets its own price per tool, in integer base units of one Asset. Tab adds no fee of its own. The other cost is gas on Monad, paid in MON: the Agent pays it to authorise a Service and to settle, and the Service pays it to meter each delivery. An Agent that settles through a gateway's Permit2 relay only signs, and the relay submits the transaction, once the Agent has approved Permit2 for that Asset.
What does a Service risk?
The unpaid tab, and nothing more. A Service escrows a Bond because free stake is what caps the Credit Limit of every Agent that settles with it, not because it is forfeited when an Agent fails to pay. Deposits and withdrawals go through 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.