Skip to content
RugWard
☰ Menu

RugWard Pay

Referensi REST API

Semua endpoint merchant RugWard Pay dengan contoh permintaan dan respons, autentikasi kunci API, error, batasan, dan kode dalam curl, Node.js, Python, dan PHP.

Di halaman ini

Dasar-dasar#

URL dasarhttps://rugward.com
FormatJSON masuk, JSON keluar. Kirim Content-Type: application/json bersama setiap body (jika tidak, 415). Ukuran body dibatasi beberapa KB.
Autentikasikunci API di Authorization: Bearer rwp_… atau x-api-key: rwp_…
JumlahUSD sebagai string dengan maksimal 2 desimal ("25", "25.50"); jumlah koin berupa string desimal
Waktumilidetik Unix (createdAt, expiresAt, paidAt)
Error{"error": "human readable message"}, terkadang dengan "retry": true

Hanya server ke server. Simpan kunci API di server Anda. Browser tidak dapat memanggil API merchant dengan kunci (permintaan lintas origin tidak diizinkan), dan kunci di halaman web akan menjadi publik.

Kunci API#

Buat kunci di dasbor pada API keys (perlu masuk). Kunci berbentuk rwp_ diikuti 40 huruf dan angka dan hanya ditampilkan sekali: segera salin ke penyimpanan rahasia server Anda. RugWard hanya menyimpan hash SHA-256, sehingga kunci yang hilang tidak dapat ditampilkan lagi: buat yang baru dan cabut yang lama. Hingga 10 kunci per merchant; dasbor menampilkan prefiks setiap kunci dan kapan terakhir dipakai.

Kunci API dan webhook di dasbor
Buat atau cabut kunci API dan atur webhook

Yang bisa dan tidak bisa dilakukan kunci:

Kunci bisaKunci tidak bisa
membuat, mendaftar, membaca, dan membatalkan invoicemengubah pengaturan atau alamat penerimaan
membuat, mendaftar, dan menonaktifkan tautan pembayaranmembuat, mendaftar, atau mencabut kunci API
mengubah atau membaca webhook maupun rahasianya
membuat invoice uji

Jadi kunci yang bocor tidak dapat mengalihkan uang Anda: alamat penerimaan hanya dapat diubah dengan masuk menggunakan dompet Anda.

Endpoint#

Metode dan pathAutentikasiFungsi
POST /api/pay/merchant/invoiceskunci atau sesiMembuat invoice
GET /api/pay/merchant/invoiceskunci atau sesiMendaftar invoice, terbaru dulu, 50 per halaman
GET /api/pay/merchant/invoices/:idkunci atau sesiMembaca satu invoice beserta kuotasi dan pembayaran (sekaligus memeriksa ulang rantai)
POST /api/pay/merchant/invoices/:id/cancelkunci atau sesiMembatalkan invoice terbuka tanpa pembayaran
GET /api/pay/merchant/linkskunci atau sesiMendaftar tautan pembayaran
POST /api/pay/merchant/linkskunci atau sesiMembuat tautan pembayaran, atau menonaktifkannya
GET /api/pay/proof/:idpublikBukti pembayaran (hanya invoice paid atau overpaid)

Pengaturan, kunci API, webhook, dan pembayaran yang tidak cocok dikelola di dasbor (hanya dengan sesi dompet).

Membuat invoice#

POST /api/pay/merchant/invoices

KolomTipeWajibAturan
amountUsdstring atau angkaya1 hingga 50000, maks. 2 desimal
orderIdstringtidak1–64 karakter: huruf, angka, . _ - : # /
descriptionstringtidakmaks. 200 karakter, ditampilkan kepada pembeli
redirectUrlstringtidakURL https:// (maks. 500 karakter), ditampilkan setelah pembayaran
expiresMinintegertidak15 hingga 10080 (7 hari); bawaan 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"]
}

Arahkan pembeli ke url. assets mencantumkan id aset yang dapat dipilih pembeli (koin aktif Anda yang memiliki alamat penerimaan).

Permintaan yang sama dalam bahasa lain:

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

Membaca invoice#

GET /api/pay/merchant/invoices/:id. Membaca invoice juga memeriksa blockchain untuk pembayaran baru, jadi ini panggilan yang tepat untuk memastikan pembayaran sebelum mengirim barang (bersama 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: satu entri per koin yang dipilih pembeli (jumlah, kurs, alamat penerimaan, kedaluwarsa penguncian kurs).
  • payments: setiap transaksi yang terlihat untuk invoice ini, dengan confirmations, jumlah required, dan confirmed.
  • Pada pembayaran splitter Base, amount adalah yang sampai ke Anda (99,5%).

Mendaftar invoice#

GET /api/pay/merchant/invoices?before=<createdAt>: 50 per halaman, terbaru dulu. Untuk halaman berikutnya, kirim createdAt dari invoice terakhir yang Anda terima.

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
    }
  ]
}

Membatalkan invoice#

POST /api/pay/merchant/invoices/:id/cancel (tanpa body). Hanya berfungsi selama invoice open dan belum ada pembayaran yang terlihat; jika tidak, 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 dengan {amountUsd, description?, redirectUrl?} membuat tautan yang dapat dipakai ulang; {"deactivate": "<link id>"} menonaktifkannya. GET mendaftar hingga 100 tautan dengan uses, active, dan createdAt. Ketentuan merchant harus disetujui terlebih dulu. Lihat Tautan pembayaran.

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#

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

// some temporary errors also carry  "retry": true
HTTPArtiYang harus dilakukan
400input tidak valid (pesan menyebutkan kolomnya)perbaiki permintaan
401kunci API tidak ada atau tidak validperiksa kunci; mungkin sudah dicabut
403permintaan lintas situs ditolak, ketentuan merchant belum disetujui, akun ditangguhkan, atau tindakan tidak diizinkan untuk kuncibaca pesannya
404tidak ditemukan atau bukan milik Andaperiksa id
409konflik (misalnya membatalkan invoice yang lunas, atau sudah ada 100 tautan aktif)baca pesannya
415body bukan JSONkirim Content-Type: application/json
429batas laju, atau 500 invoice dalam satu jam terakhirtunggu dan coba lagi dengan jeda bertahap
451tidak tersedia di wilayah Anda—
503 dengan "retry": trueblockchain atau sumber harga sementara tidak dapat dijangkaucoba lagi setelah beberapa detik

Batasan#

  • Laju permintaan: sekitar 20 permintaan per menit per alamat IP di semua endpoint /api/pay/*, ditambah batas 30 per menit per grup endpoint. Gunakan webhook alih-alih polling; jika melakukan polling, sekali per menit per invoice terbuka sudah lebih dari cukup.
  • Invoice: 500 per merchant per jam.
  • Tautan pembayaran: 100 aktif per merchant; setiap tautan membuat paling banyak 100 invoice per jam.

Daftar periksa integrasi#

  1. Buat invoice dari server Anda saat pelanggan checkout; simpan id bersama pesanan Anda.
  2. Arahkan pelanggan ke url.
  3. Saat menerima invoice.paid atau invoice.overpaid (webhook), verifikasi tanda tangannya, lalu baca ulang invoice dengan GET /api/pay/merchant/invoices/:id dan periksa status serta amountUsd sebelum mengirim barang.
  4. Tangani underpaid, late, dan expired (lihat Status).
  5. Buat handler Anda idempoten: event yang sama dapat datang lebih dari sekali.

Terakhir diperbarui: 30 Oktober 2026

Referensi REST API · RugWard Dokumentasi | RugWard