RMT.GG/卖家开发者文档
v1

卖家 API

自动化产品列表、完成销售并流式传输订单事件。包括出站 Webhook 和按需库存补充的保留端点。

REST 开放 API

Bearer 认证的 /api/v1 用于产品和订单,带有发现和速率限制头部。

出站 Webhook

用于订单和产品生命周期事件的签名 HTTPS(或 Discord)传递。

保留 / 补充

在本地库存不足时,付款后从您的服务器铸造 COMPLEX 库存。

您可以构建的内容

卖家开放 API 适用于希望获得 Discord 警报、库存同步、Zapier 风格自动化或在 RMT.GG 上构建自定义后台的卖家。

  • 管理产品
    通过 /api/v1/offers 创建草稿、更新安全字段、发布和归档。
  • 完成销售
    列出并检查卖家订单,然后使用可选证据 URL 标记为已交付。
  • 保持在限制内
    每个密钥每分钟限制为 300 次请求。响应包括 X-RateLimit-* 头部。
  • 实时反应
    订阅订单和产品事件,或使用保留 Webhook 补充 COMPLEX 库存。

快速入门

启用开发者访问,铸造密钥,然后调用发现以打印实时目录。

  1. 1打开设置 → 开发者并启用访问(自助,无需等待批准)。
  2. 2创建一个 API 密钥并复制一次密钥(rmt_sk_live_…)。将其存储在您的秘密管理器中。
  3. 3调用 GET /api/v1 并使用 Authorization: Bearer 确认作用域、配额和操作。
GET/api/v1

发现文档

返回作用域、配额、Webhook 事件和完整的操作目录。任何有效的 API 密钥均可使用。

示例请求

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>

泄露时更换

如果密钥泄露,请在开发者设置中撤销它并创建一个新的。如果您正在使用,请在撤销之前更新您的自动化。

作用域

每个 API 密钥携带作用域以限制端点。缺少作用域将返回 403 SCOPE_MISSING。

offers:read
offers:write
orders:read
orders:write
webhooks:manage
  • offers:read: 列出并获取您的产品。
  • offers:write: 创建、更新、发布和删除产品。
  • orders:read: 列出并获取卖家订单。
  • orders:write: 标记订单为已交付。
  • webhooks:manage: 保留用于未来开放 API Webhook 管理。今天在开发者设置中配置端点。

默认密钥作用域

新密钥接收 offers:read、offers:write、orders:read 和 orders:write。出站 Webhook CRUD 保留在设置 UI(会话认证)中。

产品 API

产品标识符接受公共 URL 段或数字 ID。响应省略内部 ID 和 sellerId。

PATCH 目前无法更改的内容

库存行、选项价格、媒体和属性在卖家编辑器中管理(或未来的端点),而不是通过 PATCH。

GET/api/v1/offers
offers:read

列出您的产品

使用 archive=active(默认)、archived 或 all 进行过滤。

参数

  • 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 段或数字 ID 加载。关系(选项)可能会被包含;库存项目不会。

参数

  • 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

更新产品字段

对产品字段的安全子集进行补丁。当配置出站 Webhook 时,发出 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

删除或归档

与卖家 UI 相同的删除/归档规则。

参数

  • 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"}'

订单 API

订单与您的卖家账户相关联。根据市场记录隐私规则,买方账单详细信息可能会被隐藏。

GET/api/v1/orders
orders:read

列出卖家订单

支持 limit、offset、status、q 和 sort(最新、最旧、总高、总低)。

参数

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

出站 Webhook

在设置 → 开发者中配置 HTTPS 端点(或 Discord Webhook)。当订阅事件触发时,RMT 会发送 POST。

order.paid
order.delivered
order.completed
order.refunded
order.disputed
offer.published
offer.updated
  • JSON 格式发布一个结构化的信封,包含 id、类型、创建时间和数据。
  • 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…"
}

验证 Webhook 签名

当设置签名密钥时,计算 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));

保留 Webhook(库存补充)

对于 COMPLEX(唯一单位)产品,RMT 可以在付款后向您的 HTTPS 端点发送 POST,以在本地库存不足时铸造下一个许可证、账户或密钥。

付款安全失败

如果您的端点超时或返回无效数据,订单将保持为已付款。买方将被收费;您将在订单上看到错误,并可以重试保留或手动附加密钥。

  • 始终优先使用本地库存;Webhook 仅填补短缺部分。
  • 在产品编辑器的项目步骤中配置产品级默认值,或按定价选项覆盖。
  • 仅限 HTTPS。可选 HMAC 签名与出站 Webhook 匹配(X-RMT-Event: reserve.item)。
  • 在编辑器中测试发送 dryRun: true。在订单页面上,修复端点后使用重试保留。

规范 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 字段(响应映射路径如 $.license)

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

付款前请勿调用保留

RMT 仅在付款成功后调用您的端点,因此放弃的结账不会消耗许可证。

错误和速率限制

错误返回 JSON { error, code? }。开放 API 流量限制为每个 API 密钥每分钟 300 次请求。

  • API_KEY_REQUIRED
    401

    缺少 Authorization 或 X-Api-Key 头部。

  • API_KEY_INVALID
    401

    密钥未知、已撤销、已过期或开发者访问被禁用。

  • SCOPE_MISSING
    403

    密钥缺少端点所需的作用域。

  • RATE_LIMITED
    429

    请求过多。请遵循 Retry-After 和 X-RateLimit-Reset。

  • RESERVE_FAILED
    400

    保留 Webhook 超时、返回无效数据或缺少必填字段。

处理 429

使用 Retry-After 秒数进行退避。不要旋转密钥以绕过限制;限制是针对每个密钥的,并且对所有卖家是统一的。

成功响应包括 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset。

准备好自动化了吗?

启用开发者访问,创建密钥,并在设置中连接您的第一个 Webhook。