B20 payment memos

$0.005 per call · USDC via x402 · GET /api/b20-memos

Payment memos attached to B20 transfers: pairs each Memo(address,bytes32) log with its Transfer at the previous log index (same tx, same token). Send GET /api/b20-memos with the required field token and pay $0.005 per call over x402 or MPP (there is no free tier). It returns a JSON object with token, mode, fromBlock, toBlock, scannedFromBlock and 3 more.

Give a tx hash for one transaction, or scan a block window. Returns memoHex always and memoText when printable UTF-8. ?token=0xb200…&tx=0x…|&blocks=50000&address=0x…&limit=50

Category: Payments & x402 · Tags: b20 base memo payments logs transfer

TRY IN PLAYGROUND →

Parameters

NameTypeRequiredDescription
tokenstringyesB20 token address (must carry the 0xb200 prefix) Also accepted as jwt, accessToken.
txstringnooptional: decode memos in this transaction only
addressstringnooptional: only transfers where from or to equals this address
blocksnumbernowindow-scan lookback (default 50000, max 200000; ignored when tx is given)
limitnumbernomax memo rows (default 50, max 200)

Example request

curl -i "https://agent402.tools/api/b20-memos?token=0xb200000000000000000000000000000000000001&blocks=1000"

Without payment this returns HTTP 402 Payment Required with the exact price for b20-memos; any x402 v2 or MPP client pays it and retries.

Example response

{
  "token": "0xb200…0001",
  "mode": "window",
  "fromBlock": 1,
  "toBlock": 2,
  "scannedFromBlock": 1,
  "truncated": false,
  "count": 0,
  "memos": []
}
FieldTypeAlways presentIn the example
tokenstringyes0xb200…0001
modestringyeswindow
fromBlocknumberyes1
toBlocknumberyes2
scannedFromBlocknumberyes1
truncatedbooleanyesfalse
countnumberyes0
memosarrayyes0 items in the example

From an MCP client

catalog.call {
  "slug": "b20-memos",
  "params": {
    "token": "0xb200000000000000000000000000000000000001",
    "blocks": 1000
  }
}

The hosted connector at https://agent402.tools/mcp needs a payment for b20-memos; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.

Errors and behavior

Paid call (JavaScript agent)

import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://agent402.tools/api/b20-memos?token=0xb200000000000000000000000000000000000001&blocks=1000");

Related tools

New B20 tokens

$0.005 · GET /api/b20-new-tokens

Recently deployed B20 tokens on Base: scans the factory's B20Created logs over a block window, locates each new token by…

B20 activation check

$0.002 · GET /api/b20-activation-check

Is B20 live on Base mainnet? Queries the Activation Registry precompile for base.b20_asset and base.b20_stablecoin (or a…

B20 feature id

FREE w/ compute · or $0.001 · POST /api/b20-feature-id

Pure-CPU helper: turn a B20 feature string (e.g. base.b20_asset) into its bytes32 feature id and ready-to-send isActivat…

B20 token info

$0.005 · GET /api/b20-token-info

ERC-20 metadata plus B20 signals for any Base address: name, symbol, decimals, total supply, best-effort paused/cap, byt…

Verify B20 token

$0.005 · GET /api/b20-verify

Boolean verdict with reasons: is this address a real factory-issued B20 on Base? Checks the 0xB200 address prefix, ERC-2…

Build USDC transfer authorization

$0.003 · POST /api/transfer-authorization

Build the EIP-3009 transferWithAuthorization typed data for a gasless USDC transfer on Base/Polygon/Arbitrum/Optimism/Et…