RMT.GG/وثائق مطور البائع
v1

واجهة برمجة التطبيقات للبائع

قم بأتمتة القوائم، تنفيذ المبيعات، وتدفق أحداث الطلب. تشمل الويب هوكس الخارجة ونقاط النهاية الاحتياطية لتجديد المخزون عند الطلب بعد الدفع.

واجهة برمجة التطبيقات المفتوحة REST

مصرح بها باستخدام Bearer /api/v1 للعروض والطلبات، مع رؤوس اكتشاف وحدود معدل.

الويب هوكس الخارجة

تسليمات HTTPS (أو Discord) الموقعة لأحداث دورة حياة الطلب والعرض.

احجز / أعد التعبئة

اصنع مخزون COMPLEX من خادمك بعد الدفع عندما يكون المخزون المحلي قليل.

ما يمكنك بناؤه

واجهة برمجة التطبيقات المفتوحة للبائعين مخصصة للبائعين الذين يرغبون في تنبيهات Discord، مزامنة المخزون، أتمتة على طراز Zapier، أو مكتب خلفي مخصص فوق RMT.GG.

  • إدارة العروض
    قم بإنشاء مسودات، تحديث الحقول الآمنة، نشر، وأرشفة عبر /api/v1/offers.
  • تنفيذ المبيعات
    قم بإدراج وفحص طلبات البائع، ثم حددها كتم التسليم مع روابط الأدلة الاختيارية.
  • ابق تحت الحد
    كل مفتاح محدود إلى 300 طلبات في الدقيقة. تتضمن الاستجابات رؤوس X-RateLimit-*.
  • تفاعل في الوقت الحقيقي
    اشترك في أحداث الطلب والعرض، أو أعد تعبئة المخزون COMPLEX باستخدام الويب هوكس الاحتياطية.

بدء سريع

قم بتمكين الوصول للمطورين، اصنع مفتاحًا، ثم اتصل بالاكتشاف لطباعة الكتالوج المباشر.

  1. 1افتح الإعدادات → المطور وقم بتمكين الوصول (خدمة ذاتية، بدون انتظار الموافقة).
  2. 2أنشئ مفتاح واجهة برمجة التطبيقات وانسخ السر مرة واحدة (rmt_sk_live_…). احفظه في مدير الأسرار الخاص بك.
  3. 3اتصل بـ GET /api/v1 مع Authorization: Bearer لتأكيد النطاقات، الحصص، والعمليات.
GET/api/v1

وثيقة الاكتشاف

تعيد النطاقات، الحصص، أحداث الويب هوكس، وكatalog العمليات الكامل. أي مفتاح واجهة برمجة تطبيقات صالح يعمل.

مثال على الطلب

bash
curl -s -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1 | jq .

مثال على الاستجابة

json
{
  "name": "RMT Seller Open API",
  "version": "1",
  "basePath": "/api/v1",
  "scopes": ["offers:read", "offers:write", "orders:read", "orders:write", "webhooks:manage"],
  "webhookEvents": ["order.paid", "order.delivered", "…"],
  "operations": [ /* full catalog */ ]
}

المصادقة

أرسل مفتاحك السري المباشر في كل طلب /api/v1. يفضل استخدام HTTPS فقط. لا تقم أبدًا بتضمين المفاتيح في العملاء العامة أو حزم المتصفح.

الرأس المفضل

http
Authorization: Bearer rmt_sk_live_<prefix>_<secret>

رأس بديل

http
X-Api-Key: rmt_sk_live_<prefix>_<secret>

قم بتدوير عند التسرب

إذا تسرب مفتاح، قم بإلغائه في إعدادات المطور وأنشئ واحدًا جديدًا. قم بتحديث الأتمتة الخاصة بك قبل الإلغاء إذا كنت مباشرًا.

نطاقات

كل مفتاح واجهة برمجة التطبيقات يحمل نطاقات تحدد نقاط النهاية. النطاق المفقود يعيد 403 SCOPE_MISSING.

offers:read
offers:write
orders:read
orders:write
webhooks:manage
  • offers:read: قائمة والحصول على عروضك.
  • offers:write: إنشاء، تحديث، نشر، وحذف العروض.
  • orders:read: قائمة والحصول على طلبات البائع.
  • orders:write: تحديد الطلبات كتم التسليم.
  • webhooks:manage: محجوز لإدارة الويب هوكس لواجهة برمجة التطبيقات المفتوحة في المستقبل. قم بتكوين نقاط النهاية في إعدادات المطور اليوم.

نطاقات المفتاح الافتراضية

تتلقى المفاتيح الجديدة offers:read، offers:write، orders:read، وorders:write. تظل CRUD الويب هوكس الخارجة في واجهة إعدادات (مصادقة الجلسة).

واجهة برمجة التطبيقات للعروض

معرفات العروض تقبل شريحة URL العامة أو المعرف الرقمي. تستبعد الاستجابات المعرف الداخلي وsellerId.

ما لا يمكن تغييره بعد باستخدام PATCH

تُدار صفوف المخزون، أسعار الخيارات، الوسائط، والسمات في محرر البائع (أو نقاط النهاية المستقبلية)، وليس عبر PATCH اليوم.

GET/api/v1/offers
offers:read

قائمة عروضك

قم بتصفية باستخدام archive=active (افتراضي)، archived، أو الكل.

المعلمات

  • archive
    في
    query
    النوع
    string
    الوصف
    One of "active" (default), "archived", or "all".
  • Response: { offers: Offer[], total: number }. Numeric id and sellerId are omitted.

مثال على الطلب

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  "https://rmt.gg/api/v1/offers?archive=active"

مثال على الاستجابة

json
{
  "offers": [{ "url": "my-offer", "title": "…", "visibility": "PUBLIC", "published": 1 }],
  "total": 1
}
POST/api/v1/offers
offers:write

إنشاء عرض مسودة

ينشئ مسودة فارغة مملوكة للبائع المعتمد. لا يتطلب جسم.

  • No request body required.
  • Response 201: { offer: Offer }.

مثال على الطلب

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/offers

مثال على الاستجابة

json
{
  "offer": { "url": "draft-abc", "title": null, "visibility": "UNPUBLISHED", "published": 0 }
}
GET/api/v1/offers/:urlOrId
offers:read

الحصول على عرض واحد

قم بالتحميل بواسطة شريحة URL العامة أو المعرف الرقمي. قد يتم تضمين العلاقات (الخيارات)؛ العناصر المخزنة ليست كذلك.

المعلمات

  • urlOrIdمطلوب
    في
    path
    النوع
    string
    الوصف
    Offer.url slug or Offer.id.
  • Returns relations (options, etc.) when available; items are not included.

مثال على الطلب

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/offers/YOUR_OFFER_URL
PATCH/api/v1/offers/:urlOrId
offers:write

تحديث حقول العرض

قم بتحديث مجموعة آمنة من حقول الإدراج. يصدر offer.updated عند تكوين الويب هوكس الخارجة.

المعلمات

  • urlOrIdمطلوب
    في
    path
    النوع
    string
    الوصف
    Offer.url slug or Offer.id.
  • title
    في
    body
    النوع
    string
    الوصف
    Listing title.
  • description
    في
    body
    النوع
    string
    الوصف
    Listing description.
  • visibility
    في
    body
    النوع
    string
    الوصف
    PUBLIC | PRIVATE | UNPUBLISHED.
  • categoryId
    في
    body
    النوع
    number
    الوصف
    Catalog category id.
  • offeringId
    في
    body
    النوع
    number
    الوصف
    Catalog offering id.
  • thumbnail
    في
    body
    النوع
    string
    الوصف
    Thumbnail URL or asset reference.
  • offerType
    في
    body
    النوع
    string
    الوصف
    Offer type string used by the listing.
  • listingMode
    في
    body
    النوع
    string
    الوصف
    Listing mode (for example STANDARD, RANK_BOOST, SESSION).
  • At least one allowed field is required.
  • Emits offer.updated webhook when configured.
  • Stock, options, media, and attributes are not editable via this endpoint yet.

مثال على الطلب

bash
curl -X PATCH -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  https://rmt.gg/api/v1/offers/YOUR_OFFER_URL \
  -d @body.json

جسم الطلب

json
{
  "title": "Updated title",
  "description": "Buyer-facing description",
  "visibility": "PUBLIC",
  "categoryId": 12,
  "offeringId": 34,
  "thumbnail": "https://…",
  "offerType": "ACCOUNT",
  "listingMode": "STANDARD"
}
DELETE/api/v1/offers/:urlOrId
offers:write

حذف أو أرشفة

نفس قواعد الحذف / الأرشفة مثل واجهة مستخدم البائع.

المعلمات

  • urlOrIdمطلوب
    في
    path
    النوع
    string
    الوصف
    Offer.url slug or Offer.id.
  • Response: { ok: true }.

مثال على الطلب

bash
curl -X DELETE -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/offers/YOUR_OFFER_URL

مثال على الاستجابة

json
{ "ok": true }
POST/api/v1/offers/:urlOrId/publish
offers:write

نشر عرض

ينشر مسودة (أو يغير الرؤية). يفشل مع 400 إذا كانت حقول الإدراج المطلوبة غير مكتملة.

المعلمات

  • urlOrIdمطلوب
    في
    path
    النوع
    string
    الوصف
    Offer.url slug or Offer.id.
  • visibility
    في
    body
    النوع
    string
    الوصف
    Optional. PUBLIC (default), PRIVATE, or UNPUBLISHED.
  • Response: { offer: Offer }.
  • Fails if the listing is incomplete for publish.

مثال على الطلب

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  https://rmt.gg/api/v1/offers/YOUR_OFFER_URL/publish \
  -d '{"visibility":"PUBLIC"}'

واجهة برمجة التطبيقات للطلبات

الطلبات محددة لحساب البائع الخاص بك. قد يتم حذف تفاصيل فواتير المشتري بموجب قواعد خصوصية سوق السجلات.

GET/api/v1/orders
orders:read

قائمة طلبات البائع

يدعم limit، offset، status، q، وsort (الأحدث، الأقدم، total_high، total_low).

المعلمات

  • limit
    في
    query
    النوع
    number
    الوصف
    Page size.
  • offset
    في
    query
    النوع
    number
    الوصف
    Pagination offset.
  • status
    في
    query
    النوع
    string
    الوصف
    Filter by order status (for example PAID, DELIVERED, COMPLETED).
  • q
    في
    query
    النوع
    string
    الوصف
    Search query (reference / related text).
  • sort
    في
    query
    النوع
    string
    الوصف
    newest | oldest | total_high | total_low.
  • Response: { orders: Order[], total: number }.

مثال على الطلب

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  "https://rmt.gg/api/v1/orders?status=PAID&limit=20&sort=newest"
GET/api/v1/orders/:uid
orders:read

الحصول على طلب واحد

تعيد الطلب مع عناصر الخط. استخدم uid الطلب العام.

المعلمات

  • uidمطلوب
    في
    path
    النوع
    string
    الوصف
    Order.uid.
  • Response: { order } with line items.
  • Buyer billing fields may be redacted under marketplace-of-record privacy rules.

مثال على الطلب

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/orders/ORDER_UID
POST/api/v1/orders/:uid/deliver
orders:write

تحديد كتم التسليم

تنفيذ يدوي. يجب أن تكون خطوط COMPLEX مرتبطة بالكامل عند الطلب. يصدر order.delivered.

المعلمات

  • uidمطلوب
    في
    path
    النوع
    string
    الوصف
    Order.uid.
  • evidence
    في
    body
    النوع
    string[]
    الوصف
    Optional array of evidence URLs (screenshots, transfer proofs).
  • Response: { success: true, order }.
  • COMPLEX inventory lines must be fully attached before deliver when the product requires it.
  • Emits order.delivered webhook when configured.

مثال على الطلب

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  https://rmt.gg/api/v1/orders/ORDER_UID/deliver \
  -d @evidence.json

جسم الطلب

json
{
  "evidence": [
    "https://cdn.example.com/proof-1.png"
  ]
}

الويب هوكس الخارجة

قم بتكوين نقاط النهاية HTTPS (أو الويب هوكس Discord) في الإعدادات → المطور. يقوم RMT بإرسال POST عند تشغيل الأحداث المشترك فيها.

order.paid
order.delivered
order.completed
order.refunded
order.disputed
offer.published
offer.updated
  • تنسيق JSON ينشر ظرفًا منظمًا مع id، النوع، created، وdata.
  • تنسيق Discord ينشر تضمينات غنية مع روابط الطلب أو العرض.
  • التوقيع الاختياري يستخدم X-RMT-Timestamp وX-RMT-Signature (نفس المخطط مثل الاحتياطي).
  • تظهر تاريخ التسليم تحت كل نقطة نهاية حتى تتمكن من إعادة محاولة الفشل. تتوقف نقاط النهاية تلقائيًا بعد الفشل المتكرر.

ظرف تسليم JSON

json
{
  "id": "whd_…",
  "type": "order.paid",
  "created": "2026-07-23T12:00:00.000Z",
  "data": {
    "order": {
      "uid": "ord_…",
      "reference": "RMT-…",
      "status": "PAID",
      "url": "https://rmt.gg/orders/ord_…",
      "items": [ /* line items with offer names */ ]
    }
  }
}

رؤوس تسليم موقعة

json
{
  "X-RMT-Event": "order.paid",
  "X-RMT-Delivery": "whd_…",
  "X-RMT-Timestamp": "1710000000",
  "X-RMT-Signature": "v1=abc123…"
}

تحقق من توقيعات الويب هوكس

عند تعيين سر التوقيع، احسب HMAC-SHA256 على timestamp + '.' + rawBody وقارنه بالهيكس بعد v1=.

استخدم بايتات جسم الطلب الخام، وليس كائن JSON معاد تسلسله. ارفض الطوابع الزمنية القديمة (على سبيل المثال، التي تزيد عن خمس دقائق).

رسم تخطيطي لـ Node.js

javascript
import crypto from "node:crypto";

const expected = crypto
  .createHmac("sha256", secret)
  .update(`${timestamp}.${rawBody}`)
  .digest("hex");
const provided = signatureHeader.replace(/^v1=/, "");
const ok =
  expected.length === provided.length &&
  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(provided));

احجز الويب هوكس (إعادة تعبئة المخزون)

للعروض COMPLEX (وحدات فريدة)، يمكن لـ RMT إرسال POST إلى نقطة النهاية HTTPS الخاصة بك بعد الدفع لصنع الترخيص التالي، الحساب، أو المفتاح عندما يكون المخزون المحلي قليل.

فشل آمن للدفع

إذا انتهى وقت نقطة النهاية الخاصة بك أو أعادت بيانات غير صالحة، يبقى الطلب مدفوعًا. يتم تحصيل رسوم من المشتري؛ ترى خطأ في الطلب ويمكنك إعادة محاولة الاحتياطي أو إرفاق المفاتيح يدويًا.

  • يفضل دائمًا المخزون المحلي؛ يملأ الويب هوك فقط النقص.
  • قم بتكوين افتراضي على مستوى العرض، أو تجاوز لكل خيار تسعير، في خطوة العناصر من محرر العرض.
  • HTTPS فقط. التوقيع HMAC الاختياري يتطابق مع الويب هوكس الخارجة (X-RMT-Event: reserve.item).
  • اختبار في المحرر يرسل dryRun: true. في صفحة الطلب، استخدم Retry reserve بعد إصلاح نقطة النهاية الخاصة بك.

جسم POST القياسي (مقصوص)

json
{
  "id": "rsv_…",
  "type": "reserve.item",
  "order": { "uid": "ord_…", "reference": "RMT-…", "url": "https://rmt.gg/orders/ord_…" },
  "offer": { "url": "my-offer", "title": "Game key", "pageUrl": "https://rmt.gg/offers/my-offer" },
  "option": { "id": 1, "name": "Standard" },
  "fields": [{ "id": 10, "name": "License", "type": "text", "required": true }],
  "quantity": 1
}

استجابة ملائمة

json
{
  "entries": [
    { "name": "License", "value": "AAAA-BBBB-CCCC" }
  ]
}

حقول JSON المرسومة (مع مسارات responseMap مثل $.license)

json
{
  "license": "AAAA-BBBB-CCCC",
  "email": "[email protected]",
  "password": "temporary-pass"
}

لا تتصل بالاحتياطي قبل الدفع

RMT يتصل بنقطة النهاية الخاصة بك فقط بعد نجاح الدفع، لذا فإن عمليات الخروج المهجورة لا تحرق التراخيص.

الأخطاء وحدود المعدل

تعود الأخطاء بصيغة JSON { error, code? }. يتم تحديد حركة مرور واجهة برمجة التطبيقات المفتوحة إلى 300 طلبات في الدقيقة لكل مفتاح واجهة برمجة التطبيقات.

  • API_KEY_REQUIRED
    401

    مفقود Authorization أو X-Api-Key header.

  • API_KEY_INVALID
    401

    المفتاح غير معروف، تم إلغاؤه، انتهت صلاحيته، أو تم تعطيل وصول المطورين.

  • SCOPE_MISSING
    403

    المفتاح يفتقر إلى النطاق المطلوب من قبل نقطة النهاية.

  • RATE_LIMITED
    429

    عدد كبير جدًا من الطلبات. احترم Retry-After وX-RateLimit-Reset.

  • RESERVE_FAILED
    400

    انتهى وقت الويب هوك الاحتياطي، أعاد بيانات غير صالحة، أو فاته حقول مطلوبة.

تعامل مع 429

تراجع باستخدام Retry-After seconds. لا تقم بتدوير المفاتيح لتجاوز الحدود؛ الحد هو لكل مفتاح وثابت لجميع البائعين.

تتضمن الاستجابات الناجحة X-RateLimit-Limit، X-RateLimit-Remaining، وX-RateLimit-Reset.

هل أنت مستعد للأتمتة؟

قم بتمكين الوصول للمطورين، أنشئ مفتاحًا، وقم بتوصيل الويب هوك الأول الخاص بك في الإعدادات.