TAB

One request.
One payment.
Access opens.

A service answers with 402 Payment Required and its terms. Your agent signs one authorization over USDG. Anyone can submit it. The answer comes back.

No account. No API key. No invoice at the end of the month. No ETH — an agent that holds nothing but dollars can pay, because the signature is the payment and somebody else pays for the transaction.

TAB
>GET /premium-data
402 PAYMENT REQUIRED

assetUSDG
network—
pay to—
resource—

pay—

asking the endpoint…

Live on 4663

USDG on this chain
—
head block
—
base fee
—
one request
—

Two shapes, because a cent and a loop are not the same problem

TabGate

One request, one payment

x402 “exact” settlement. The nonce the payer signs commits to the merchant and to the resource, and the authorization can only be executed by the contract — so a signature in flight cannot be redirected, repriced, or spent on something else. Not a check that could be forgotten: it is not expressible.

TabBook

A running tab

One deposit. A session key signs a cumulative voucher per call, off-chain, for free. The service claims whenever it likes — once per thousand calls, or once a day. The payer can always get the rest back after a challenge window it chose itself.

TabIndex

The price list

What a service charges, on-chain and enumerable, so an agent knows the price before it spends anything. Enumerable on purpose: a browser cannot read this chain’s event history, so a registry that lives in logs is a registry nobody can list.

The protocol ledger

TabGate—
TabBook—
TabIndex—
Payments settled—
Volume settled—
Tabs opened—
Protocol feeat most 1%, set in the constructor, immutable
Challenge window5 minutes to 7 days, chosen by the payer
Admin functionsnone: no owner, no pause, no setter, no upgrade path
Settlement assetUSDG, native EIP-3009, 6 decimals

Why this works here, measured and not assumed

USDG on Robinhood Chain is a Global Dollar at 0x5fc5…d168, six decimals, behind an ERC-1967 proxy. Probed against the live chain:

transferWithAuthorizationanswers InvalidSignature() 0x8baa579f to a garbage signature — the selector is live
receiveWithAuthorizationanswers CallerMustBePayee() 0x5454b17d, in the (v,r,s) shape and the bytes shape — so a smart-account agent signs like an EOA
cancelAuthorizationpresent, and authorizationState reads true once an authorization is used or cancelled
DOMAIN_SEPARATORre-derives exactly from name Global Dollar, version 1, chain 4663 and the proxy address — an agent can build a payment signature with no RPC call at all

The contract repo settles a real 0.01 USDG payment against this token on a fork of 4663, with dollars taken from a real holder. That test is the reason this page says the scheme runs natively here.