RugWard Pay
REST API リファレンス
RugWard Pay の加盟店向けエンドポイントすべてを、リクエストとレスポンスの例、API キー認証、エラー、上限、curl・Node.js・Python・PHP のコードとともに説明します。
基本#
| ベース URL | https://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 やそのシークレットの変更・取得 | |
| テスト請求書の作成 |
そのため、キーが漏えいしても資金の送り先を変えられることはありません。受取アドレスはウォレットでサインインしなければ変更できません。
エンドポイント#
| メソッドとパス | 認証 | 用途 |
|---|---|---|
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 -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
}'{
"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(受取アドレスがあり有効化されているコイン)が並びます。
他の言語での同じリクエスト:
// 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);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
$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 https://rugward.com/api/pay/merchant/invoices/Zx3kQ8pL2mN7vR1tY5wB9c \
-H "Authorization: Bearer $RUGWARD_PAY_KEY"{
"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 "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"{
"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 -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 -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": "Amount in USD, e.g. 25 or 25.50." }
// some temporary errors also carry "retry": true| HTTP | 意味 | 対処 |
|---|---|---|
| 400 | 入力が無効(メッセージにフィールド名が表示されます) | リクエストを修正 |
| 401 | API キーがない、または無効 | キーを確認。失効している可能性があります |
| 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 件。
連携チェックリスト#
- 顧客がチェックアウトしたら、サーバーから請求書を作成し、
idを注文とともに保存します。 - 顧客を
urlにリダイレクトします。 invoice.paidまたはinvoice.overpaid(Webhook)を受け取ったら、署名を検証し、GET /api/pay/merchant/invoices/:idで請求書を再取得して、発送前にstatusとamountUsdを確認します。underpaid、late、expiredに対応します(ステータスを参照)。- ハンドラーは冪等にしてください。同じイベントが複数回届くことがあります。
最終更新: 2026年10月30日