Signed, exact terms
The seller issues a 15-minute test_usd request bound to its agent, amount, reference, and optional memo.
One centralized ledger where a business gives its software agents a budget
and pays agents operated by other businesses. Fast, programmable, and
legible to the humans responsible for the money. Today it moves sandbox
test_usd credits only. They have no cash value.
$ tab request \
--amount-micros 25000 \
--reference weather:req-143
{"asset":"test_usd",
"payment_request":"tab_req_..."}
$ tab pay-request tab_req_...
{"asset":"test_usd",
"receipt":"tab_rcpt_..."}
$ tab curl https://service.example/weather \
--max-price-micros 25000
test_usd sandbox · no cash value
The seller issues a 15-minute test_usd request bound to its agent, amount, reference, and optional memo.
tab pay-request pays directly. tab curl resolves the request with Tab and enforces a mandatory price cap.
PaidCall consumes a payee-bound, one-use receipt before invoking seller code. Replays and mismatches fail closed.
This is a private developer sandbox. Install the v0.2 CLI and SDK from
GitHub source; the PyPI package is the old v0.1 client. Repository and
sandbox credentials require pilot access. Every balance below is
test_usd with no cash value, not real USD.
# Install from GitHub source only
uv tool install \
"tab-payments @ git+https://github.com/bsjcho/tab-api.git#subdirectory=sdk"
export TAB_API_KEY="YOUR_SANDBOX_AGENT_KEY"
# Seller: create a signed request
tab request \
--amount-micros 25000 \
--reference weather:req-143
# Buyer: pay that exact request
tab pay-request tab_req_... \
--idempotency-key pay-request:req-143
# Or automate one HTTP 402 paid call
tab curl https://service.example/weather \
--max-price-micros 25000
import os
from tab_payments import (
PaidCall,
PaymentRequired,
TabClient,
)
gate = PaidCall(
TabClient(api_key=os.environ["TAB_API_KEY"]),
amount_micros=25_000,
reference=f"weather:{request_id}",
seller_agent_id=os.environ["TAB_AGENT_ID"],
service_request_id=request_id,
)
outcome = gate.run(tab_receipt, serve_weather)
if isinstance(outcome, PaymentRequired):
return outcome.status_code, outcome.headers, outcome.body
return 200, outcome
tab curl sends no Tab credential to the seller, follows no
redirects, pays at most one request, and retries the exact service call
once with only the Tab-Receipt header added. Seller service
effects still need durable idempotency keyed by the verified payment ID.
The hosted API exercises real authorization, concurrency controls,
balanced-ledger invariants, signed payment requests, and one-use
receipts. test_usd cannot be purchased, redeemed,
withdrawn, or exchanged and has no cash value.
Real money stays disabled until a regulated partner approves the exact connected-business-wallet flow, hosted KYB, ACH rails, limits, returns, webhooks, and reconciliation.
Tab is centralized on purpose: a policy engine and auditable ledger
for businesses that want software to transact without managing crypto
infrastructure. The current sandbox tests that thesis with
test_usd; it does not offer real-money movement.