Открытый API и исходящие вебхуки

Включите доступ для разработчиков, вызывайте /api/v1 с ключом доступа и подписывайтесь на исходящие вебхуки для событий жизненного цикла заказа.

API ключи, лимиты скорости, обнаружение и вебхуки событий заказа.

Включите доступ для разработчиков

Откройте Настройки → Разработчик, включите доступ, затем создайте API ключ и необязательные конечные точки вебхуков.

  • Ключи привязаны к вашей учетной записи продавца и могут быть отозваны в любое время.
  • Открытый трафик API ограничен 300 запросами в минуту для каждого продавца.
  • GET /api/v1 возвращает метаданные обнаружения для доступных ресурсов.

Аутентификация и вызов API

Отправьте Authorization: Bearer с вашим живым секретным ключом. Предпочитайте только HTTPS. Никогда не встраивайте ключи в публичные клиенты.

  • offers:read: список и получение предложений.
  • offers:write: создание, обновление, публикация и удаление предложений.
  • orders:read: список и получение заказов продавца.
  • orders:write: пометить заказы как доставленные.

Список недавних заказов

bash
curl -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/orders

Смените ключи

Если ключ утечет, отозовите его в настройках разработчика и создайте новый. Обновите свою автоматизацию перед отзывом, если вы в прямом эфире.

Открыть карту конечных точек API

Базовый путь - /api/v1. Успешные ответы включают X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset. GET /api/v1 возвращает каталог операций в машинно-читаемом формате, который соответствует этой статье.

  • GET /api/v1: обнаружение (любой действительный ключ).
  • GET /api/v1/offers: список предложений (offers:read).
  • POST /api/v1/offers: создать черновик (offers:write).
  • GET /api/v1/offers/:urlOrId: получить предложение (offers:read).
  • PATCH /api/v1/offers/:urlOrId: обновить поля предложения (offers:write).
  • DELETE /api/v1/offers/:urlOrId: удалить или архивировать (offers:write).
  • POST /api/v1/offers/:urlOrId/publish: опубликовать (offers:write).
  • GET /api/v1/orders: список продаж (orders:read).
  • GET /api/v1/orders/:uid: получить заказ (orders:read).
  • POST /api/v1/orders/:uid/deliver: пометить как доставленный (orders:write).

Вывести каталог операций в реальном времени

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

API предложений

Идентификаторы предложений принимают публичный URL-слуг или числовой ID. Ответы не содержат внутренний ID и sellerId. Строки запасов, цены опций, медиа и атрибуты управляются в редакторе продавца (или будущих конечных точках), а не через PATCH пока.

Список активных предложений

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

Создать черновик предложения

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

Получить одно предложение с отношениями

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

Обновить разрешенные поля

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

Разрешенные поля тела PATCH

json
{
  "title": "Обновленное название",
  "description": "Описание для покупателя",
  "visibility": "PUBLIC",
  "categoryId": 12,
  "offeringId": 34,
  "thumbnail": "https://…",
  "offerType": "ACCOUNT",
  "listingMode": "STANDARD"
}

Опубликовать (по умолчанию PUBLIC)

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

Удалить или архивировать

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

Требования к публикации

Публикация завершается с ошибкой 400, если обязательные поля списка неполные (та же валидация, что и в редакторе предложений). Успешные обновления могут вызывать webhook offer.updated.

API заказов

Заказы привязаны к вашему аккаунту продавца. Данные о выставлении счетов покупателя могут быть скрыты. Используйте публичный uid заказа (не только непрозрачную ссылку) для получения и доставки.

Список недавних оплаченных продаж

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

Получить один заказ с позициями

bash
curl -H "Authorization: Bearer rmt_sk_live_…" https://rmt.gg/api/v1/orders/ORDER_UID

Пометить как доставленный

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

Ошибки и лимиты запросов

Ошибки возвращают JSON { error, code? }. Лимит запросов составляет 300 запросов в минуту на каждый API ключ.

  • 401 API_KEY_REQUIRED или API_KEY_INVALID.
  • 403 SCOPE_MISSING, когда ключу не хватает области конечной точки.
  • 404 Не найдено для предложений или заказов, которые вам не принадлежат (то же сообщение в любом случае).
  • 429 RATE_LIMITED с заголовками Retry-After и X-RateLimit-*.
  • 400 для ошибок валидации (публикация неполная, доставка не разрешена, пустой PATCH).

Обработка 429

Уменьшите частоту запросов, используя Retry-After секунды. Не меняйте ключи, чтобы обойти лимиты; лимит установлен на каждый ключ и одинаков для всех продавцов.

Исходящие вебхуки заказа

Подпишитесь на order.paid, order.delivered, order.completed, order.refunded и order.disputed. Выберите JSON для вашего сервера или Discord для встраивания в каналы. Необязательная подпись использует X-RMT-Timestamp и X-RMT-Signature.

  • Формат Discord публикует богатые встраивания с ссылкой на заказ и названием предложения.
  • Формат JSON публикует структурированное тело, включая названия предложений и позиции.
  • Если вы установили секрет, проверьте HMAC-SHA256 временной метки.body равен шестнадцатеричному v1= подписи.
  • История доставки появляется под каждой конечной точкой, чтобы вы могли повторить неудачи.

Пример подписанных заголовков

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

Проверьте подписи

Вычислите HMAC-SHA256 по строке timestamp + "." + rawBody, используя ваш секрет конечной точки. Сравните с шестнадцатеричным после v1=.

Эскиз Node.js

javascript
import crypto from "crypto";
const expected = crypto
  .createHmac("sha256", secret)
  .update(`${timestamp}.${rawBody}`)
  .digest("hex");
const ok = expected === signature.replace(/^v1=/, "");

Открыть инструменты разработчика

Создавайте ключи и конечные точки вебхуков в Настройках.