Skip to content
RugWard
☰ Меню

RugWard Pay

Справочник REST API

Все эндпоинты продавца RugWard Pay с примерами запросов и ответов, аутентификацией по ключу API, ошибками, лимитами и кодом на curl, Node.js, Python и PHP.

На этой странице

Основы#

Базовый URLhttps://rugward.com
ФорматJSON на входе и на выходе. Отправляйте Content-Type: application/json с каждым телом запроса (иначе 415). Размер тела ограничен несколькими КБ.
Аутентификацияключ API в Authorization: Bearer rwp_… или x-api-key: rwp_…
СуммыUSD строкой, до 2 знаков после запятой ("25", "25.50"); суммы в монетах — десятичные строки
Времямиллисекунды Unix (createdAt, expiresAt, paidAt)
Ошибки{"error": "human readable message"}, иногда с "retry": true

Только сервер-сервер. Храните ключ API на своём сервере. Браузеры не могут вызывать API продавца с ключом (кросс-доменные запросы запрещены), а ключ на веб-странице стал бы публичным.

Ключи API#

Создавайте ключи в панели в разделе API keys (нужен вход). Ключ имеет вид rwp_ и 40 букв и цифр и показывается один раз: сразу скопируйте его в хранилище секретов сервера. RugWard хранит только хэш SHA-256, поэтому потерянный ключ нельзя показать снова: создайте новый и отзовите старый. До 10 ключей на продавца; панель показывает префикс каждого ключа и время последнего использования.

Ключи API и вебхук в панели
Создание и отзыв ключей API, настройка вебхука

Что ключ может и чего не может:

Ключ можетКлюч не может
создавать, перечислять, читать и отменять счетаменять настройки или адреса получения
создавать, перечислять и отключать платёжные ссылкисоздавать, перечислять или отзывать ключи API
менять или читать вебхук и его секрет
создавать тестовые счета

Поэтому утёкший ключ не может перенаправить ваши деньги: адреса получения меняются только после входа с вашим кошельком.

Эндпоинты#

Метод и путьАутентификацияНазначение
POST /api/pay/merchant/invoicesключ или сессияСоздать счёт
GET /api/pay/merchant/invoicesключ или сессияСписок счетов, сначала новые, 50 на страницу
GET /api/pay/merchant/invoices/:idключ или сессияПрочитать один счёт с котировками и платежами (заодно перепроверяет сеть)
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, вебхук и несопоставленные платежи управляются в панели (только с сессией кошелька).

Создание счёта#

POST /api/pay/merchant/invoices

ПолеТипОбязательноПравила
amountUsdстрока или числодаот 1 до 50000, не более 2 знаков после запятой
orderIdстроканет1–64 символа: буквы, цифры, . _ - : # /
descriptionстроканетдо 200 символов, показывается покупателю
redirectUrlстроканетURL https:// (до 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. Чтение счёта также проверяет блокчейны на новые платежи, поэтому именно этот вызов нужен для подтверждения оплаты перед отправкой товара (вместе с вебхуками).

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: по одной записи на каждую выбранную покупателем монету (сумма, курс, адрес получения, окончание фиксации курса).
  • payments: каждая замеченная по счёту транзакция с confirmations, нужным числом required и confirmed.
  • Для платежей через сплиттер в Base amount — это то, что дошло до вас (99,5%).

Список счетов#

GET /api/pay/merchant/invoices?before=<createdAt>: 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."}

POST /api/pay/merchant/links с {amountUsd, description?, redirectUrl?} создаёт многоразовую ссылку; {"deactivate": "<link id>"} отключает её. GET возвращает до 100 ссылок с uses, active и createdAt. Сначала нужно принять условия для продавцов. См. Платёжные ссылки.

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неверные входные данные (в сообщении указано поле)исправьте запрос
401ключ API отсутствует или недействителенпроверьте ключ; возможно, он отозван
403межсайтовый запрос отклонён, условия продавца не приняты, аккаунт приостановлен или действие запрещено для ключейпрочитайте сообщение
404не найдено или принадлежит не вампроверьте id
409конфликт (например, отмена оплаченного счёта или уже 100 активных ссылок)прочитайте сообщение
415тело не в формате JSONотправьте Content-Type: application/json
429лимит частоты или 500 счетов за последний часподождите и повторите с нарастающей задержкой
451недоступно в вашем регионе—
503 с "retry": trueблокчейн или источник цен временно недоступенповторите через несколько секунд

Лимиты#

  • Частота запросов: около 20 запросов в минуту с одного IP-адреса на все эндпоинты /api/pay/*, плюс потолок 30 в минуту на группу эндпоинтов. Используйте вебхуки вместо опроса; если опрашиваете, раза в минуту на открытый счёт более чем достаточно.
  • Счета: 500 на продавца в час.
  • Платёжные ссылки: 100 активных на продавца; каждая ссылка создаёт не более 100 счетов в час.

Чек-лист интеграции#

  1. Создавайте счёт со своего сервера, когда клиент оформляет заказ; сохраните id вместе с заказом.
  2. Перенаправьте клиента на url.
  3. При invoice.paid или invoice.overpaid (вебхук) проверьте подпись, затем перечитайте счёт через GET /api/pay/merchant/invoices/:id и проверьте status и amountUsd перед отправкой товара.
  4. Обрабатывайте underpaid, late и expired (см. Статусы).
  5. Сделайте обработчик идемпотентным: одно и то же событие может прийти несколько раз.

Обновлено: 30 октября 2026 г.

Справочник REST API · RugWard Документация | RugWard