Skip to content
RugWard
☰ القائمة

RugWard Pay

مرجع REST API

كل نقاط نهاية التاجر في RugWard Pay مع أمثلة الطلبات والاستجابات، والمصادقة بمفتاح API، والأخطاء، والحدود، وأكواد بلغات curl وNode.js وPython وPHP.

في هذه الصفحة

الأساسيات#

العنوان الأساسيhttps://rugward.com
الصيغةJSON في الطلب والاستجابة. أرسل Content-Type: application/json مع كل جسم طلب (وإلا 415). حجم الجسم محدود ببضعة كيلوبايتات.
المصادقةمفتاح API في Authorization: Bearer rwp_… أو x-api-key: rwp_…
المبالغالدولار كنص بحدّ أقصى منزلتين عشريتين ("25"، "25.50")؛ ومبالغ العملات نصوص عشرية
الأوقاتميلي ثانية بتوقيت Unix (createdAt، expiresAt، paidAt)
الأخطاء{"error": "رسالة مقروءة"}، وأحيانًا مع "retry": true

من خادم إلى خادم فقط. احتفظ بمفتاح API على خادمك. لا تستطيع المتصفحات استدعاء واجهة التاجر بمفتاح (الطلبات عبر النطاقات غير مسموحة)، والمفتاح الموضوع في صفحة ويب يصبح علنيًا.

مفاتيح API#

أنشئ المفاتيح في اللوحة تحت API keys (يتطلب تسجيل الدخول). يبدو المفتاح هكذا: rwp_ متبوعًا بـ 40 حرفًا ورقمًا، ويظهر مرة واحدة فقط: انسخه فورًا إلى مخزن الأسرار على خادمك. لا يحتفظ RugWard إلا ببصمة SHA-256، فلا يمكن عرض مفتاح مفقود مرة أخرى: أنشئ مفتاحًا جديدًا وألغِ القديم. حتى 10 مفاتيح لكل تاجر؛ وتعرض اللوحة بادئة كل مفتاح وآخر استخدام له.

مفاتيح API وإشعار Webhook في اللوحة
أنشئ مفاتيح API أو ألغها، واضبط إشعار Webhook

ما يستطيع المفتاح فعله وما لا يستطيعه:

المفتاح يستطيعالمفتاح لا يستطيع
إنشاء الفواتير وسردها وقراءتها وإلغاؤهاتغيير الإعدادات أو عناوين الاستلام
إنشاء روابط الدفع وسردها وإيقافهاإنشاء مفاتيح API أو سردها أو إلغاؤها
تغيير إشعار Webhook أو قراءته أو قراءة سرّه
إنشاء فواتير تجريبية

لذلك لا يستطيع مفتاحٌ مسرَّب إعادة توجيه أموالك: لا تتغير عناوين الاستلام إلا بتسجيل الدخول بمحفظتك.

نقاط النهاية#

الطريقة والمسارالمصادقةالغرض
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 وإشعار Webhook والمدفوعات غير المطابقة من اللوحة (بجلسة المحفظة فقط).

إنشاء فاتورة#

POST /api/pay/merchant/invoices

الحقلالنوعإلزاميالقواعد
amountUsdنص أو رقمنعممن 1 إلى 50000، بحدّ أقصى منزلتين عشريتين
orderIdنصلامن 1 إلى 64 محرفًا: أحرف وأرقام و. _ - : # /
descriptionنصلاحتى 200 محرف، ويظهر للمشتري
redirectUrlنصلارابط 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 معرّفات الأصول التي يستطيع المشتري الاختيار منها (عملاتك المفعّلة التي لها عنوان استلام).

الطلب نفسه بلغات أخرى:

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: إدخال لكل عملة اختارها المشتري (المبلغ والسعر وعنوان الاستلام وانتهاء تثبيت السعر).
  • 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غير موجود أو لا يخصكتحقّق من المعرّف
409تعارض (مثل إلغاء فاتورة مدفوعة، أو وجود 100 رابط نشط)اقرأ الرسالة
415الجسم ليس JSONأرسل Content-Type: application/json
429تجاوز حد المعدل، أو 500 فاتورة في الساعة الأخيرةانتظر وأعد المحاولة مع تأخير متزايد
451غير متاح في منطقتك—
503 مع "retry": trueتعذّر الوصول مؤقتًا إلى بلوك تشين أو مصدر أسعارأعد المحاولة بعد بضع ثوانٍ

الحدود#

  • معدل الطلبات: نحو 20 طلبًا في الدقيقة لكل عنوان IP عبر كل نقاط /api/pay/*، إضافةً إلى سقف 30 في الدقيقة لكل مجموعة نقاط نهاية. استخدم إشعارات Webhook بدل الاستطلاع المتكرر؛ وإن استطلعت فمرة في الدقيقة لكل فاتورة مفتوحة تكفي.
  • الفواتير: 500 لكل تاجر في الساعة.
  • روابط الدفع: 100 رابط نشط لكل تاجر؛ وكل رابط يُنشئ 100 فاتورة في الساعة كحد أقصى.

قائمة التحقق للتكامل#

  1. أنشئ الفاتورة من خادمك عندما يُتمّ العميل الطلب؛ واحفظ id مع طلبك.
  2. أعد توجيه العميل إلى url.
  3. عند invoice.paid أو invoice.overpaid (Webhook) تحقّق من التوقيع، ثم أعد قراءة الفاتورة عبر GET /api/pay/merchant/invoices/:id وتحقّق من status وamountUsd قبل الشحن.
  4. تعامل مع underpaid وlate وexpired (راجع الحالات).
  5. اجعل معالجك متساوي الأثر (idempotent): قد يصل الحدث نفسه أكثر من مرة.

آخر تحديث: 30 أكتوبر 2026

مرجع REST API · RugWard التوثيق | RugWard