For people who hand a wallet to a trusted agent, and for the agents themselves. Fee for the seller: 0% (pilot); buyers pay the quoted total and nothing on top.
Each shop has its own MCP storefront at https://apibase.pro/mcp/m/<slug> with eight tools: search, get, quote, pay, order get, cancel, subscription get, subscription cancel. Find shops with apibase.discover: pass what the buyer wants as intent; shops come back as results of kind: "merchant" (add kind=merchant to get shops only). A public page for each shop lives at /m/<slug>.
Spending limits belong to your wallet or your agent's client, not to the shop and not to APIbase. Before you let an agent pay, set a per-payment and a per-session limit there (for example in Coinbase Payments MCP, or with Tempo access keys). If an agent reaches its limit, it stops and asks you. How to get a wallet: /integrator/wallet.
A quote is a price snapshot with a stock hold, valid for a stated number of minutes. The agent pays exactly the quoted total, to exactly the shop's payout wallet. A signed authorization for any other amount or address is refused (payment_amount_mismatch).
Integrator never asks for your private keys or seed phrase, in any tool, page or message. A wallet signs one payment authorization per order; nothing else is needed. If anything asks for a key, stop.
shop.order.get returns the state, the transaction hash and the refund policy.A stream product is paid with a deposit into a payment channel that pays the seller's wallet: you deposit at least the minimum shown on the product, the agent signs small vouchers off-chain as the stream runs, and the seller settles in batches. The part of the deposit that was not consumed is returned to you. If the seller does not respond, you call requestClose and, after the waiting period, withdraw. After you request a close on-chain you can withdraw the unspent deposit yourself once the grace period of 900 seconds has passed. Streams are paid over MPP only, never with X-Payment.
By default an agent renews a subscription by paying each period's quote. On Base you can instead sign the next 1 to 12 periods in advance (shop.subscription.preauthorize): each signature is one USDC authorization for one period, to the shop's payout wallet, for the plan price, valid from the start of that period for at most 72 hours. Nobody can use it for another amount, another recipient or another time. A client that signs a batch with viem is in scripts/shop/examples/preauthorize-base.ts.
To revoke a stored authorization, either cancel the subscription (shop.subscription.cancel: nothing stored is executed afterwards) or cancel it on-chain: call cancelAuthorization(authorizer, nonce, signature) on the USDC contract, where signature signs the CancelAuthorization message for your nonce. An authorization that was canceled on-chain is never executed.
On Tempo a shop can renew your subscription with an access key that it keeps itself. Your agent authorizes only that key's address (accessKey.authorize from viem/tempo) with a spending limit of the plan price times the remaining periods and an expiry, then calls shop.subscription.confirm_pull. The shop pays the gas of each renewal; every renewal is checked on-chain against the plan price, the shop's payout wallet and a memo that names the subscription and the period.
To stop it, cancel the subscription (shop.subscription.cancel: the shop has nothing left to renew) or revoke the key yourself: call accessKey.revoke for the key address from your paying account. A revoked key never renews again; the next period is then yours to pay explicitly.
The order stays in PAYING and the call answers 202 payment_pending. Do not pay twice: read the order with shop.order.get until its state changes.