エージェント開発者向け

リクエスト単位で支払う。
アカウントもキーも不要。

x402 は HTTP ステータス 402 Payment Required の上に構築されたオープンな支払いプロトコルです。有料エンドポイントはキーなしのリクエストに機械可読な支払いチャレンジで応答し、クライアントは提示額の USDC 送金許可に署名して再送。決済はオンチェーンで確定し、データが返ります。1 リクエスト = 1 マイクロペイメント — サインアップも API キーもサブスクも不要。この API の有料エンドポイントはすべて x402 をネイティブに話します。

01 — ディスカバリ

Bazaar でのエンドポイント発見

全エンドポイントを Coinbase x402 Bazaar(facilitator のディスカバリカタログ)に掲載しています。エージェントは意図で検索し、リソース URL・価格・入力スキーマを取得できます。同じ情報は 402 レスポンス自体にも載っています — PAYMENT-REQUIRED ヘッダーの extensions.bazaar ブロックに、具体的な入力例・JSON スキーマ・出力例が入っているため、URL を知っているエージェントに別チャネルは不要です。

02 — 402 フロー

支払い付きリクエストの流れ

キーを付けずにリクエストを送ると、支払いチャレンジが返ります:

リクエスト(キーなし — 課金は発生しません)

curl -i "https://api.kakerapetit.dev/v2/companies/jp/7203"

レスポンス — 402 + 支払いチャレンジ

HTTP/2 402
content-type: application/json
payment-required: eyJ4NDAyVmVyc2lvbiI6MiwiYWNjZXB0cyI6W3sic2NoZW1lIjoiZXhhY3QiLC4uLg==

{"error":"payment_required","message":"This endpoint is paid via the x402 protocol. ..."}

PAYMENT-REQUIRED を base64 デコード(抜粋)

{
  "x402Version": 2,
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",
      "amount": "5000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x...(seller wallet)",
      "resource": "https://api.kakerapetit.dev/v2/companies/jp/7203",
      "description": "Company profile and latest fundamentals for a Japanese listed company in an EDGAR-style unified schema."
    }
  ],
  "extensions": {
    "bazaar": "...(input example + JSON schema + output example)"
  }
}

amount はトークンの最小単位です — USDC は小数 6 桁なので 5000 = $0.005。この額の USDC 送金許可(EIP-3009)に署名し、署名済みペイロードを X-PAYMENT ヘッダーに載せて同じリクエストを再送すると、オンチェーン決済の結果が PAYMENT-RESPONSE ヘッダー付きで返ります。クライアントライブラリはこの一連を自動化します:

03 — クライアント

クライアントライブラリ

支払い可能なウォレットで fetch をラップすると、キーなしの呼び出しが可能になります — ラッパーが 402 を捕捉し、署名・再送・決済確認まで行います:

npm i @x402/fetch @x402/evm viem

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

const account = privateKeyToAccount(process.env.WALLET_KEY); // holds USDC on Base
const client = new x402Client().register("eip155:8453", new ExactEvmScheme(account));
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://api.kakerapetit.dev/v2/companies/jp/7203");
console.log(await res.json()); // paid, settled, done
04 — 価格

リクエスト単位の価格

エンドポイントごと・リクエストごとに課金されます。402 チャレンジが提示する価格は、常にこの表と同じです。

GET /v2/*USDC on Base · リクエスト単位
エンドポイント価格 / コール
GET /v2/companies/:market/:code$0.005
GET /v2/companies/:market/:code/financials$0.01
GET /v2/companies/:market/:code/governance$0.01
GET /v2/screener$0.02
GET /v2/rankings$0.01
GET /v2/calendar$0.002
05 — MCP

MCP で使う場合

エージェントが生の HTTP ではなく MCP を話すなら、同じデータを API キー付きの 6 つの MCP ツールとして使えます(無料枠あり)— 多段リサーチを行うチャットエージェントに適しています。ドキュメントの MCP セクション、または /signup で無料キーを取得してください。

06 — 注意事項

注意事項

  • 支払いは Base メインネット上の本物の USDC(eip155:8453)で、Coinbase facilitator を通じて決済されます。テストネットの支払いは受け付けません。
  • 価格は上記のとおりエンドポイントごと・リクエストごとです — 最低額もサブスクもありません。キーなしのリクエスト自体には課金されず、署名済み支払いを再送するまで何も決済されません。
  • 同じルートは X-API-Key のサブスク(無料・定額)でも呼べます。x402 と API キーは、同じエンドポイントに対する 2 通りの利用方法です。詳しくは料金セクションへ。
  • Bazaar に掲載中の /v1 エンドポイントも、掲載価格で x402 チャレンジに応答します。