BASE = http://localhost:4321
amount
address
memo
txid

<script src="/embed.js"
        data-address="DIA_CHI_NHAN_CUA_BAN"
        data-amount="1.5"
        data-label="Coffee ☕"
        data-webhook="https://your-site.com/webhook"></script>

<img src="/api/qr?address=DIA_CHI&amount=1.5">

POST /api/pay

address
amount
description
webhook

curl -X POST /api/pay \
  -H "Content-Type: application/json" \
  -d '{"address":"DIA_CHI","amount":"2.5","description":"Order #123","webhook":"https://your-site.com/hook"}'

{
  "ok": true,
  "payId": "pay_ab12cd34...",
  "status": "pending",
  "amount": "2.5",
  "uri": "rox:DIA_CHI?amount=2.5&memo=pay_ab12cd34...",
  "payUrl": "/pay.html?id=pay_ab12cd34...",
  "qrUrl": "/api/qr?data=..."
}

POST https://your-site.com/hook
{
  "event": "payment.paid",
  "payId": "pay_ab12cd34...",
  "address": "DIA_CHI",
  "amount": "2.5",
  "txid": "8b4a7b32...",
  "from": "SENDER_ADDRESS",
  "blockIndex": 421,
  "paidAt": 1783771150167
}

GET /api/pay/:payId

curl /api/pay/pay_ab12cd34...

{ "payId": "...", "status": "paid", "txid": "8b4a...", "blockIndex": 421, ... }

POST /api/verify

curl -X POST /api/verify \
  -H "Content-Type: application/json" \
  -d '{"txid":"8b4a...","payTo":"DIA_CHI","minAmount":"2.5","memo":"pay_ab12..."}'

{ "valid": true, "blockIndex": 421, "tx": { ... } }
txid
payTo
minAmount
memo

GET /x402/premium
→ 402 { accepts:[{ payTo, maxAmountRequired, ... }] }

GET /x402/premium
    X-PAYMENT: 8b4a7b32...
→ 200 { content: "..." }