한 줄이면 402가 뜹니다.

npx create-x402-store 로 시작해서 curl 한 번이면 402 가 뜹니다. 검색·견적·결제링크·MCP 는 키 없이 열려 있습니다.

먼저 실제로 사보고 싶다면 — $0.10 짜리 디지털 상품이 상시 열려 있습니다. 배송이 없어서 결제만 확인하면 됩니다.
curl -i https://buysign.ai/s/buysign/items/test-payment/buy
x402-bind buy https://buysign.ai/s/buysign/items/test-payment/buy --max 1.00

015분 안에 첫 402 만들기

내 서버가 402 를 뱉고 결제가 통과하는 것까지가 목표입니다. 설치할 게 없습니다.

① 상점을 만든다

npx create-x402-store my-store
cd my-store

② 돈 받을 주소를 넣는다

# .env
PAY_TO=0x여기에_당신의_지갑_주소     // 팔린 금액이 여기로 바로 들어옵니다

③ 띄운다

npm install && npm run dev

  x402 store  →  http://localhost:8787
  결제 대상   →  http://localhost:8787/hello.txt

④ 402 를 확인한다

curl -i http://localhost:8787/hello.txt

HTTP/1.1 402 Payment Required
PAYMENT-REQUIRED: eyJ4NDAyVmVyc2lvbiI6Mi...

{
  "x402Version": 2,
  "accepts": [{
    "scheme": "exact",
    "network": "eip155:4663",          // Robinhood Chain
    "amount": "100000",                // 0.10 USDG (6 decimals)
    "asset":  "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
    "payTo":  "0x...",
    "extra":  { "name": "Global Dollar", "version": "1" }
  }]
}
여기까지가 5분입니다. 402 가 떴으면 당신의 서버는 이미 x402 로 팔립니다. 남은 건 구매자가 서명하는 것뿐입니다.

⑤ 결제까지 해본다

# 한도 안인지 확인 (서명은 키가 있어야 합니다)
npx x402 test-buy http://localhost:8787/hello.txt --max 1.00

# 실제 서명·결제
pip install x402-bind
x402-bind new
x402-bind buy http://localhost:8787/hello.txt --max 1.00

유료로 만든 줄

import { x402 } from "@buysign/x402/express";

app.get("/report.pdf",
  x402({ price: "0.50", payTo: PAY_TO }),   // ← 이 한 줄
  (req, res) => {
    // 결제가 끝난 뒤에만 실행됩니다
    res.locals.x402;          // { order_id, transaction, payer }
    res.sendFile("/report.pdf");
  });
성공하면 물건이 아니라 주문번호가 옵니다. 실물 배송이라 응답으로 줄 수 있는 게 없습니다. 배송지는 주문번호로 따로 제출합니다.
Node SDK 전체 문서 → · Python(구매자) SDK →

03402 결제

엔드포인트설명
GET/s/<shop>/items/<sku>/buy?to=US X-PAYMENT 없으면 402 + 결제 조건
있으면 검증·정산 후 200 + 주문번호
POST/orders/<id>/ship 배송지 제출. 온체인에 올리지 않고 주문번호로만 잇습니다.
조회 응답에 다시 나오지 않습니다 — 제출한 사람만 봅니다.
GET/facilitator/supported지원 레일
POST/facilitator/verify 서명 검증만(읽기 전용). 실패 사유를 고칠 수 있는 말로 돌려줍니다.

X-PAYMENT 만드는 법

payload = {
  "x402Version": 2, "scheme": "exact", "network": "eip155:4663",
  "payload": {
    "authorization": { "from","to","value","validAfter","validBefore","nonce" },
    "signature": "0x..."          // EIP-712 TransferWithAuthorization
  }
}
X-PAYMENT: base64(json(payload))
EIP-712 도메인을 추측하지 마세요. accepts[].extra 의 name/version 을 그대로 쓰세요. 틀리면 "서명자 불일치" 로만 보여서 디버깅이 지옥이 됩니다.
멱등성. 같은 nonce 로 다시 오면 같은 주문을 돌려줍니다. 에이전트는 재시도하니까요. 두 번 팔지 않습니다.

05MCP — ChatGPT · Claude · Gemini

셋 다 같은 URL 하나로 붙습니다. 벤더별로 만들 게 없습니다.

https://buysign.ai/mcp   // streamable HTTP
클라이언트붙이는 법
ChatGPT설정 → Security and login → Developer mode → + → 이 URL
ClaudeCustomize → Connectors → Add custom connector → 이 URL (무료 플랜도 1개)
Gemini CLI~/.gemini/settings.json 의 mcpServers 에 {"httpUrl": "…/mcp"}
Claude Codeclaude mcp add --transport http x402 https://buysign.ai/mcp

도구: search_items · get_item · quote · checkout_link · list_shops · how_to_pay

이 서버에는 buy 도구가 없습니다. 개인키를 받지 않기 때문입니다. 결제는 사용자가 checkout_link 를 열고 자기 지갑으로 서명해서 합니다. 에이전트가 직접 결제하려면 키를 가진 쪽에서 도는 로컬 SDK 를 쓰세요.

06판매 API

계정도 비밀번호도 없습니다. 지갑 서명이 곧 신원이고, 그 주소가 곧 수령 주소입니다.

# 1. 서명할 문장을 받는다
POST /api/auth/challenge      { "address": "0x..." }
# 2. personal_sign 으로 서명하고 세션을 받는다 (30분)
POST /api/auth/session        { "message": "...", "signature": "0x..." }
# 3. 상점을 연다
POST /api/shops               { "slug": "my-shop", "name": "My Shop" }
# 4. 상품을 올린다 (사진은 data: URL 로 같이)
POST /api/shops/my-shop/items { "item": { "sku","title","price_usdc","stock",
                                          "photos":[...], "shipping_zones":[...] } }
가격이 비어 있으면 409 not for sale 이 옵니다. 402 로 임의 금액을 요구하지 않습니다. 판매자가 가격을 넣어야 팔립니다.

07왜 구매자가 가스를 안 내나

EIP-3009 는 서명과 제출을 분리합니다. 구매자는 "이 금액을 이 주소로 보내도 좋다" 는 메시지에 서명만 하고, 그걸 체인에 올려 가스를 내는 건 판매자 쪽 릴레이어입니다. 그래서 구매자 지갑에는 스테이블코인만 있으면 됩니다. ETH 가 필요 없습니다.

레일자산EIP-712 도메인
eip155:4663
Robinhood Chain
USDG 0x5fc5…1d168
decimals 6
Global Dollar / 1
온체인 DOMAIN_SEPARATOR 와 대조 완료
eip155:8453
Base
USDC 0x8335…2913
decimals 6
USD Coin / 2
지금 릴레이어에 가스가 없습니다. GET /facilitator/relayer 로 상태를 공개합니다. ready:false 면 정산 요청이 실패합니다. 결제 전에 확인하세요.

08아직 없는 것

붙이기 전에 알고 있어야 하는 것들입니다.

  1. 에스크로가 없습니다. 즉시 이전이라 물건이 안 오면 구매자가 집니다. (x402 v2 스펙에도 escrow 스킴이 없습니다 — 스킴은 exact·upto·batch-settlement 뿐입니다.)
  2. 판정이 없습니다. 물건이 설명과 같은지 제3자가 확인하는 층은 아직 없습니다.
  3. Node SDK 가 없습니다. 서명이 로컬에서 일어나야 해서 파이썬으로 먼저 냈습니다.