๐Ÿ“… Historical page. This content reflects minia2a as of its publication date and is kept for the record. Current model: x402 pay-per-call in USDC on Base only, 5 free trial calls per signed wallet, no credits and no top-up rail. โ†’ See current

How AI Agents Actually Pay Each Other โ€” A Practical Guide

August 6, 2026 โ€” 8 min read โ€” by Iris @ minia2a

Here's something the whitepapers don't tell you: agent-to-agent payments work today. Not in a testnet. Not behind an API key. Real USDC on Base, real curl commands, real agents making real decisions about when to pay for data.

This guide skips the theory. You'll have an agent with a wallet, spending credits autonomously, in under 60 seconds. No KYC, no npm install required โ€” just a wallet your agent controls.

What you'll build

A shell script (or Python/Node function) that your AI agent can call to:

  1. Check its trial state
  2. Fetch live crypto gas prices (paid API call)
  3. Solve CAPTCHAs when websites block it
  4. Store and recall information across sessions

Cost: $0. You get 5 free trial calls plus 5 free trial calls on registration. After that: pay-per-call with USDC on Base via x402.

Step 1: Give Your Agent a Wallet (self-custody)

minia2a never holds your keys. You bring a wallet, sign a registration message to prove you own it, and register with three fields: name, wallet, and signature.

$ # 1. Sign the registration message with your wallet (EIP-191):
$ #    message = "minia2a register: 0xYOUR_WALLET"

$ # 2. Register with name + wallet + signature
$ curl -X POST https://minia2a.uk/api/v1/register-simple \
  -H "content-type: application/json" \
  -d '{"name":"my-research-agent","wallet":"0xf16F0882de08315B438E9f3a2Abfb2d2E5d94ECA","signature":"0x..."}'

{
  "ok": true,
  "message": "Registered, 5 trial calls granted"
}

That's it. Your agent now has 5 trial calls tied to its wallet. Keep the wallet โ€” you'll pass its address on every API call to identify your agent.

Step 2: Make Your First API Call

Append ?wallet=YOUR_ADDRESS to any endpoint. The first 5 calls are free (global, across all services) โ€” then the endpoint returns a 402 challenge telling you how to pay.

$ # Two halves: the wallet in the query string AND the signature headers.
$ export SERVICE=x402-gas TS=$(date +%s)
$ export SIG=$(sign-eip191 "minia2a trial:$WALLET:$SERVICE:$TS")  # your wallet lib
$ curl "https://minia2a.uk/x402/gas?wallet=$WALLET" \
    -H "X-Wallet-Signature: $SIG" -H "X-Trial-Timestamp: $TS"

{
  "ok": true,
  "result": { "chain": "base", "gasPriceWei": "6000000", "gasPriceGwei": 0.006 }
}

When your free trials run out, the same call returns a 402 Payment Required with an accepts[] array (price, asset, network, payTo), a trial block showing your remaining count, and nextSteps telling you to register for 5 trial calls or pay via x402. Your agent reads that to know exactly how much budget it has left.

Step 3: Check Your Trial State

V5 has no per-wallet balance endpoint (the old /api/v1/credits is gone โ€” it returns 404). Instead, your remaining free calls come back in each 402 response's trial block, and platform-wide numbers live at /api/stats:

$ curl -s "https://minia2a.uk/api/stats"

{
  "trials": {"totalUsed": 19049, "walletUsers": 772},
  "transactions": 54,
  "realOnChain": {"count": 86, "usdc": 3.522}
}

Step 4: POST a Paid Call

Not every call is a GET with query params. Paid services also accept POST with a JSON body โ€” the wallet rides in the body, but the signature headers are still mandatory:

$ # POST works too โ€” the wallet may go in the body instead of the query
$ # string, but the signature headers are still required.
$ export SERVICE=x402-token-security TS=$(date +%s)
$ export SIG=$(sign-eip191 "minia2a trial:$WALLET:$SERVICE:$TS")
$ curl -X POST "https://minia2a.uk/x402/token-security" \
  -H "content-type: application/json" \
  -H "X-Wallet-Signature: $SIG" -H "X-Trial-Timestamp: $TS" \
  -d '{"wallet":"0xYOUR_WALLET","address":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}'

{
  "ok": true,
  "address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
  "chain": "base",
  "isHoneypot": false,
  "isOpenSource": true,
  "holderCount": "10481737"
}

Note: this section uses token security. (Correction 2026-09-16: an earlier version of this note said /x402/captcha-solve had left the catalog because it returned 404 โ€” it is listed and answers with a normal 402 challenge.) Check /api/services before relying on any endpoint named in an older post.

Step 5: Give Your Agent Memory

Agents are stateless by default. The recall/find/store endpoints give them persistent memory across sessions:

$ # Store something
$ curl "https://minia2a.uk/x402/store?content=Bitcoin+ETF+inflows+hit+Aug+5&wallet=$WALLET" \
    -H "X-Wallet-Signature: $SIG" -H "X-Trial-Timestamp: $TS"

{"ok":true,"id":"mem_abc123"}

$ # Find it later
$ # NOTE: /x402/find has NO free trial โ€” a signed trial still returns 402.
$ curl "https://minia2a.uk/x402/find?q=Bitcoin+ETF+inflows" -H "PAYMENT-SIGNATURE: 0xYOUR_PAYMENT_SIGNATURE"

[{"content":"Bitcoin ETF inflows hit $500M on Aug 5","score":0.94,"id":"mem_abc123"}]

This is how agents build knowledge over time. Store findings, recall them in later sessions, build context without re-scraping everything.

Step 6: When Free Trials Run Out โ€” Top Up

When you need more than the 5 free trial calls, pay per call with USDC on Base via x402:

$ # Any endpoint returns HTTP 402 Payment Required with an accepts[] price.
$ # Sign the payment (USDC on Base) and retry โ€” the call settles on-chain.

Pay per call: your agent settles each call directly in USDC via x402, with no credit balance at all.

No USDC? No Problem.

Your agent can start with 5 free trial calls โ€” no wallet, no crypto, no payment setup. Register and start calling APIs in 10 seconds. When you're ready to scale, fund with USDC on Base.

๐ŸŽ Get 5 Free Trials โ†’

Putting It All Together: A Real Agent Script

Here's a complete shell script your agent can use. Save it as agent-tools.sh:

#!/bin/bash
# agent-tools.sh โ€” minia2a agent toolkit
# Usage: ./agent-tools.sh <command> [args...]
#
# Trial calls take TWO halves: the wallet (query string or POST body) AND the
# X-Wallet-Signature / X-Trial-Timestamp headers. A bare wallet is a hard 400.
# The signature is EIP-191 over:  minia2a trial:<wallet>:<serviceId>:<unix_ts>

WALLET="${MINIA2A_WALLET:?set MINIA2A_WALLET}"        # your wallet address
KEY="${MINIA2A_PRIVATE_KEY:?set MINIA2A_PRIVATE_KEY}" # used to sign; never sent
BASE="https://minia2a.uk"

sign() {  # $1 = service id, $2 = unix ts
  python3 - "$WALLET" "$1" "$2" "$KEY" <<'PY'
import sys
from eth_account import Account
from eth_account.messages import encode_defunct
wallet, svc, ts, key = sys.argv[1:5]
sig = Account.sign_message(
    encode_defunct(text=f"minia2a trial:{wallet}:{svc}:{ts}"), private_key=key
).signature.hex()
print(sig if sig.startswith("0x") else "0x" + sig)
PY
}

call() {  # $1 = service id, $2 = path+query (without wallet)
  local TS=$(date +%s)
  local SIG=$(sign "$1" "$TS")
  local SEP="?"; case "$2" in *\?*) SEP="&";; esac
  curl -s "$BASE/x402/$2${SEP}wallet=$WALLET" \
    -H "X-Wallet-Signature: $SIG" -H "X-Trial-Timestamp: $TS"
}

balance() {
  curl -s "$BASE/api/stats" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'{d[\"trials\"][\"totalUsed\"]} trials, {d[\"transactions\"]} txns')"
}

gas() {  # $1 = chain (default base)
  call x402-gas "gas?chain=${1:-base}" | python3 -c "import sys,json; r=json.load(sys.stdin)['result']; print(f'{r[\"chain\"]}: {r[\"gasPriceGwei\"]} gwei')"
}

token-security() {
  call x402-token-security "token-security?address=$1" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'honeypot={d[\"isHoneypot\"]} openSource={d[\"isOpenSource\"]} holders={d[\"holderCount\"]}')"
}

store() {
  call x402-store "store?content=$(python3 -c "import sys,urllib.parse; print(urllib.parse.quote(sys.argv[1]))" "$1")"
}

# Route command
case "$1" in
  balance) balance ;;
  gas) gas "$2" ;;
  token-security) token-security "$2" ;;
  store) store "$2" ;;
  *) echo "Usage: $0 {balance|gas|token-security|store} [args]" ;;
esac

Your agent now has a toolkit: ./agent-tools.sh gas, ./agent-tools.sh captcha SITEKEY URL, ./agent-tools.sh recall "Bitcoin price". Each call costs 1-5 credits, deducted automatically.

Why This Matters

The agent economy isn't science fiction. It's running right now:

The infrastructure giants are building the payment rails (Cloudflare Wallets, Coinbase SDK, Circle Agent Stack). The discovery layer โ€” where agents find, compare, and trial APIs โ€” is still wide open. That's where minia2a sits.

What Your Agent Can Do Right Now

A quick tour of what's available, all accessible with the same ?wallet= pattern:

CategoryEndpointsWhat agents use them for
๐Ÿ” Searchfind, recall, search, web-searchSemantic memory across sessions
๐Ÿ”’ Token securitytoken-securityHoneypot / rug-pull checks (Base tokens)
๐ŸŒ Webweb-scrape, screenshot, text-scrapeExtract data from any URL
๐Ÿ’ฐ Cryptogas, dex-price, token-security, funding-rateReal-time on-chain data
๐Ÿ” Securitydomain-intel, wallet-intel, token-securityDue diligence before transactions
๐Ÿ“Š Datapolymarket, fear-greed, sentimentMarket intelligence feeds
๐Ÿ› ๏ธ Utilsuuid, hash, base64, qr, json-validateData transformation in pipelines
๐Ÿง  AIsummarize, classify, translate, sentimentText processing and analysis

Full catalog: GET /api/services โ€” 1,600+ endpoints, 5 free trial calls (global).

Start Building

You don't need a whitepaper. You don't need a token sale. You need one curl command and your agent has a wallet:

curl -X POST https://minia2a.uk/api/v1/register-simple \
  -H "content-type: application/json" \
  -d '{"name":"your-agent-name","wallet":"0xYOUR_WALLET","signature":"0x..."}'

That's it. Your agent can now pay for APIs autonomously. No human in the loop.

minia2a.uk โ€” agent-to-agent API marketplace. 1,600+ services, USDC on Base, 5 free trial calls. No KYC. ยท Docs ยท API Catalog ยท Register

โš ๏ธ Update (2026-09-12): this post is an August 2026 snapshot; two things have changed. (1) A trial call now takes two halves โ€” the wallet (in the query string, or a "wallet" field in a POST body) and the X-Wallet-Signature / X-Trial-Timestamp headers, the signature being EIP-191 over minia2a trial:<wallet>:<serviceId>:<unix_ts>. A bare wallet with no signature is a hard 400. (2) The deposit-and-credit rail was retired on 2026-09-06 โ€” calls are now paid individually over x402. The captcha example below was also removed from the catalog at that time (2026-09-16: it is listed and answers with a normal 402 challenge). Numbers in the stats output are frozen at the time of writing. Current reference: quickstart.