Skip to content
RugWard
☰ メニュー

RugWard Pay

REST API リファレンス

RugWard Pay の加盟店向けエンドポイントすべてを、リクエストとレスポンスの例、API キー認証、エラー、上限、curl・Node.js・Python・PHP のコードとともに説明します。

このページの内容

基本#

ベース URLhttps://rugward.com
形式JSON で送信し、JSON で受信します。ボディを送るときは必ず Content-Type: application/json を付けてください(付けないと 415)。ボディは数 KB までです。
認証Authorization: Bearer rwp_… または x-api-key: rwp_… に API キーを指定
金額米ドルは小数点以下 2 桁までの文字列("25"、"25.50")。コインの金額は 10 進数の文字列
時刻Unix ミリ秒(createdAt、expiresAt、paidAt)
エラー{"error": "human readable message"}。"retry": true が付く場合もあります

サーバー間通信専用です。 API キーはサーバーに保管してください。ブラウザからキーを使って加盟店 API を呼び出すことはできず(クロスオリジンリクエストは許可されていません)、ウェブページに含めたキーは公開されてしまいます。

API キー#

ダッシュボードの API keys でキーを作成します(サインインが必要)。キーは rwp_ に英数字 40 文字が続く形式で、表示されるのは 1 回だけです。すぐにサーバーのシークレットストアにコピーしてください。RugWard は SHA-256 ハッシュしか保存しないため、紛失したキーを再表示することはできません。新しいキーを作成し、古いキーを失効させてください。加盟店ごとに最大 10 個まで作成でき、ダッシュボードには各キーのプレフィックスと最終使用日時が表示されます。

ダッシュボードの API キーと Webhook
API キーの作成・失効と Webhook の設定

キーでできること・できないこと:

キーでできるキーでできない
請求書の作成、一覧、取得、キャンセル設定や受取アドレスの変更
支払いリンクの作成、一覧、停止API キーの作成、一覧、失効
Webhook やそのシークレットの変更・取得
テスト請求書の作成

そのため、キーが漏えいしても資金の送り先を変えられることはありません。受取アドレスはウォレットでサインインしなければ変更できません。

エンドポイント#

メソッドとパス認証用途
POST /api/pay/merchant/invoicesキーまたはセッション請求書を作成
GET /api/pay/merchant/invoicesキーまたはセッション請求書の一覧(新しい順、1 ページ 50 件)
GET /api/pay/merchant/invoices/:idキーまたはセッション見積もりと支払いを含む請求書を 1 件取得(チェーンの再確認も実施)
POST /api/pay/merchant/invoices/:id/cancelキーまたはセッション支払いのない未完了の請求書をキャンセル
GET /api/pay/merchant/linksキーまたはセッション支払いリンクの一覧
POST /api/pay/merchant/linksキーまたはセッション支払いリンクの作成または停止
GET /api/pay/proof/:id公開支払い証明(paid または overpaid の請求書のみ)

設定、API キー、Webhook、照合できない支払いはダッシュボードで管理します(ウォレットのセッションのみ)。

請求書を作成する#

POST /api/pay/merchant/invoices

フィールド型必須ルール
amountUsd文字列または数値はい1〜50000、小数点以下 2 桁まで
orderId文字列いいえ1〜64 文字:英字、数字、. _ - : # /
description文字列いいえ最大 200 文字。購入者に表示
redirectUrl文字列いいえhttps:// の URL(最大 500 文字)。支払い後に表示
expiresMin整数いいえ15〜10080(7 日)。既定は 60
curl · create an invoice
curl -X POST https://rugward.com/api/pay/merchant/invoices \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amountUsd": "25.00",
    "orderId": "1234",
    "description": "1 x T-shirt, size M",
    "redirectUrl": "https://shop.example/thanks?order=1234",
    "expiresMin": 60
  }'
201 Created
{
  "id": "Zx3kQ8pL2mN7vR1tY5wB9c",
  "url": "https://rugward.com/pay/i/Zx3kQ8pL2mN7vR1tY5wB9c",
  "status": "open",
  "expiresAt": 1793326882069,
  "assets": ["BTC", "ETH-8453", "USDC-8453", "USDT-56", "SOL", "USDC-SOL"]
}

購入者を url に誘導してください。assets には購入者が選べるアセット ID(受取アドレスがあり有効化されているコイン)が並びます。

他の言語での同じリクエスト:

Node.js 18+ (server side only)
// Never put the API key in a browser page: call RugWard Pay from your server.
const res = await fetch("https://rugward.com/api/pay/merchant/invoices", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.RUGWARD_PAY_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ amountUsd: "25.00", orderId: "1234", expiresMin: 60 }),
});
const body = await res.json();
if (!res.ok) throw new Error(body.error);
// Save body.id with your order, then send the buyer to body.url
console.log(body.id, body.url);
Python 3 (requests)
import os, requests

r = requests.post(
    "https://rugward.com/api/pay/merchant/invoices",
    headers={"Authorization": f"Bearer {os.environ['RUGWARD_PAY_KEY']}"},
    json={"amountUsd": "25.00", "orderId": "1234", "expiresMin": 60},
    timeout=15,
)
data = r.json()
if r.status_code != 201:
    raise RuntimeError(data.get("error"))
print(data["id"], data["url"])  # store the id, redirect the buyer to the url
PHP 8 (cURL)
<?php
$ch = curl_init("https://rugward.com/api/pay/merchant/invoices");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("RUGWARD_PAY_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(["amountUsd" => "25.00", "orderId" => "1234", "expiresMin" => 60]),
]);
$data = json_decode(curl_exec($ch), true);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code !== 201) { throw new Exception($data["error"] ?? "RugWard Pay error"); }
header("Location: " . $data["url"]); // send the buyer to the hosted checkout

請求書を取得する#

GET /api/pay/merchant/invoices/:id。請求書を取得すると、ブロックチェーン上の新しい支払いも確認されます。そのため、発送前に支払いを確認するには(Webhook と併せて)この呼び出しが適しています。

curl · read one invoice
curl https://rugward.com/api/pay/merchant/invoices/Zx3kQ8pL2mN7vR1tY5wB9c \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY"
200 OK
{
  "invoice": {
    "id": "Zx3kQ8pL2mN7vR1tY5wB9c",
    "status": "paid",
    "amountUsd": "25.00",
    "orderId": "1234",
    "description": "1 x T-shirt, size M",
    "redirectUrl": "https://shop.example/thanks?order=1234",
    "createdAt": 1793323282069,
    "expiresAt": 1793326882069,
    "paidAt": 1793324100512,
    "assets": ["BTC", "ETH-8453", "USDC-8453", "USDT-56", "SOL", "USDC-SOL"],
    "test": false,
    "quotes": [
      {
        "id": 4711,
        "asset": "USDC-8453",
        "amount": "25.000629",
        "rateUsd": "1",
        "address": "0xYourMerchantAddress…",
        "expiresAt": 1793325082069
      }
    ],
    "payments": [
      {
        "txid": "0x…",
        "asset": "USDC-8453",
        "amount": "24.875626",
        "confirmations": 30,
        "required": 30,
        "confirmed": true,
        "seenAt": 1793324012000,
        "explorer": "https://basescan.org/tx/0x…"
      }
    ]
  }
}
  • quotes:購入者が選んだコインごとに 1 件(金額、レート、受取アドレス、レート固定の期限)。
  • payments:この請求書で検出された各トランザクション。confirmations、必要数の required、confirmed を含みます。
  • Base のスプリッター支払いでは、amount はあなたに届いた額(99.5%)です。

請求書の一覧#

GET /api/pay/merchant/invoices?before=<createdAt>:1 ページ 50 件、新しい順。次のページを取得するには、最後に受け取った請求書の createdAt を渡します。

curl · list invoices (50 per page, newest first)
curl "https://rugward.com/api/pay/merchant/invoices" \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY"

# next page: pass the createdAt of the last invoice you received
curl "https://rugward.com/api/pay/merchant/invoices?before=1793323282069" \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY"
200 OK
{
  "invoices": [
    {
      "id": "Zx3kQ8pL2mN7vR1tY5wB9c",
      "status": "open",
      "amountUsd": "25.00",
      "orderId": "1234",
      "description": "1 x T-shirt, size M",
      "createdAt": 1793323282069,
      "expiresAt": 1793326882069,
      "paidAt": null
    }
  ]
}

請求書をキャンセルする#

POST /api/pay/merchant/invoices/:id/cancel(ボディなし)。請求書が open で、支払いが検出されていない間だけ有効です。それ以外は 409 になります。

curl · cancel an open invoice
curl -X POST https://rugward.com/api/pay/merchant/invoices/Zx3kQ8pL2mN7vR1tY5wB9c/cancel \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY"

# 200 {"ok":true}
# 409 {"error":"Only your open invoices without payments can be canceled."}

{amountUsd, description?, redirectUrl?} を付けて POST /api/pay/merchant/links を呼ぶと再利用可能なリンクが作成され、{"deactivate": "<link id>"} でリンクを停止できます。GET は uses、active、createdAt を含むリンクを最大 100 件返します。事前に加盟店規約への同意が必要です。支払いリンクを参照してください。

curl · create a reusable payment link
curl -X POST https://rugward.com/api/pay/merchant/links \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amountUsd": "15", "description": "Monthly membership", "redirectUrl": "https://shop.example/welcome"}'

# 201 {"id":"k33JZ0ij5F2yLDprwrQgjN","url":"https://rugward.com/pay/l/k33JZ0ij5F2yLDprwrQgjN"}

# list your links
curl https://rugward.com/api/pay/merchant/links -H "Authorization: Bearer $RUGWARD_PAY_KEY"

# turn one off
curl -X POST https://rugward.com/api/pay/merchant/links \
  -H "Authorization: Bearer $RUGWARD_PAY_KEY" -H "Content-Type: application/json" \
  -d '{"deactivate": "k33JZ0ij5F2yLDprwrQgjN"}'

エラー#

Error response (any 4xx/5xx)
{ "error": "Amount in USD, e.g. 25 or 25.50." }

// some temporary errors also carry  "retry": true
HTTP意味対処
400入力が無効(メッセージにフィールド名が表示されます)リクエストを修正
401API キーがない、または無効キーを確認。失効している可能性があります
403クロスサイトリクエストの拒否、加盟店規約に未同意、アカウント停止中、またはキーでは許可されていない操作メッセージを確認
404見つからない、またはあなたのものではないID を確認
409競合(例:支払済み請求書のキャンセル、有効なリンクがすでに 100 件)メッセージを確認
415ボディが JSON ではないContent-Type: application/json を送信
429レート制限、または直近 1 時間で請求書 500 件待ってからバックオフ付きで再試行
451お住まいの地域では利用不可—
"retry": true 付きの 503ブロックチェーンまたは価格ソースに一時的に接続できない数秒後に再試行

上限#

  • リクエスト頻度: すべての /api/pay/* エンドポイント合計で IP アドレスごとに毎分約 20 リクエスト。さらにエンドポイントグループごとに毎分 30 件の上限があります。ポーリングではなく Webhook を使ってください。ポーリングする場合でも、未完了の請求書 1 件につき毎分 1 回で十分です。
  • 請求書: 加盟店ごとに 1 時間あたり 500 件。
  • 支払いリンク: 加盟店ごとに有効なもの 100 件。各リンクが作成する請求書は 1 時間あたり最大 100 件。

連携チェックリスト#

  1. 顧客がチェックアウトしたら、サーバーから請求書を作成し、id を注文とともに保存します。
  2. 顧客を url にリダイレクトします。
  3. invoice.paid または invoice.overpaid(Webhook)を受け取ったら、署名を検証し、GET /api/pay/merchant/invoices/:id で請求書を再取得して、発送前に status と amountUsd を確認します。
  4. underpaid、late、expired に対応します(ステータスを参照)。
  5. ハンドラーは冪等にしてください。同じイベントが複数回届くことがあります。

最終更新: 2026年10月30日