Abrir API y webhooks salientes

Habilita el acceso para desarrolladores, llama a /api/v1 con una clave de portador y suscríbete a webhooks salientes para eventos del ciclo de vida del pedido.

Claves de API, límites de tasa, descubrimiento y webhooks de eventos de pedidos.

Habilitar acceso para desarrolladores

Abre Configuración → Desarrollador, habilita el acceso, luego crea una clave de API y puntos finales de webhook opcionales.

  • Las claves están limitadas a tu cuenta de vendedor y pueden ser revocadas en cualquier momento.
  • El tráfico de API abierto está limitado a 300 solicitudes por minuto para cada vendedor.
  • GET /api/v1 devuelve metadatos de descubrimiento para recursos disponibles.

Autenticar y llamar a la API

Envía Authorization: Bearer con tu clave secreta en vivo. Prefiere solo HTTPS. Nunca incrustes claves en clientes públicos.

  • offers:read: listar y obtener ofertas.
  • offers:write: crear, actualizar, publicar y eliminar ofertas.
  • orders:read: listar y obtener pedidos de vendedor.
  • orders:write: marcar pedidos como entregados.

Lista de pedidos recientes

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

Rotar claves

Si una clave se filtra, revócala en Configuración de Desarrollador y crea una nueva. Actualiza tu automatización antes de revocar si estás en vivo.

Mapa de puntos finales de API abiertos

La ruta base es /api/v1. Las respuestas exitosas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset. GET /api/v1 devuelve un catálogo de operaciones legible por máquina que coincide con este artículo.

  • GET /api/v1: descubrimiento (cualquier clave válida).
  • GET /api/v1/offers: listar ofertas (offers:read).
  • POST /api/v1/offers: crear borrador (offers:write).
  • GET /api/v1/offers/:urlOrId: obtener oferta (offers:read).
  • PATCH /api/v1/offers/:urlOrId: actualizar campos de oferta (offers:write).
  • DELETE /api/v1/offers/:urlOrId: eliminar o archivar (offers:write).
  • POST /api/v1/offers/:urlOrId/publish: publicar (offers:write).
  • GET /api/v1/orders: listar ventas (orders:read).
  • GET /api/v1/orders/:uid: obtener pedido (orders:read).
  • POST /api/v1/orders/:uid/deliver: marcar como entregado (orders:write).

Imprimir el catálogo de operaciones en vivo

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

API de Ofertas

Los identificadores de oferta aceptan el slug de URL pública o el id numérico. Las respuestas omiten el id interno y sellerId. Las filas de stock, precios de opciones, medios y atributos se gestionan en el editor de vendedor (o futuros puntos finales), no a través de PATCH aún.

Listar ofertas activas

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

Crear una oferta borrador

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

Obtener una oferta con relaciones

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

Actualizar campos permitidos

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

Campos permitidos en el cuerpo de PATCH

json
{
  "title": "Título actualizado",
  "description": "Descripción para el comprador",
  "visibility": "PUBLICO",
  "categoryId": 12,
  "offeringId": 34,
  "thumbnail": "https://…",
  "offerType": "CUENTA",
  "listingMode": "ESTÁNDAR"
}

Publicar (por defecto PUBLICO)

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

Eliminar o archivar

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

Requisitos de publicación

La publicación falla con 400 si los campos de listado requeridos están incompletos (la misma validación que el editor de ofertas). Las actualizaciones exitosas pueden emitir un webhook offer.updated.

API de Pedidos

Los pedidos están limitados a tu cuenta de vendedor. Los detalles de facturación del comprador pueden ser redactados. Usa el uid de pedido público (no solo la referencia opaca) para obtener y entregar.

Listar ventas pagadas recientes

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

Obtener un pedido con artículos

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

Marcar como entregado

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

Cuerpo de evidencia opcional

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

Errores y límites de tasa

Los errores devuelven JSON { error, code? }. El límite de tasa es de 300 solicitudes por minuto por clave de API.

  • 401 API_KEY_REQUIRED o API_KEY_INVALID.
  • 403 SCOPE_MISSING cuando la clave carece del alcance del punto final.
  • 404 No encontrado para ofertas o pedidos que no posees (el mismo mensaje de cualquier manera).
  • 429 RATE_LIMITED con Retry-After y encabezados X-RateLimit-*.
  • 400 por fallos de validación (publicar incompleto, entrega no permitida, PATCH vacío).

Manejar 429

Retrocede usando los segundos de Retry-After. No gires claves para eludir límites; el límite es por clave y plano para todos los vendedores.

Webhooks de pedidos salientes

Suscríbete a order.paid, order.delivered, order.completed, order.refunded y order.disputed. Elige JSON para tu servidor o Discord para incrustaciones de canal. La firma opcional utiliza X-RMT-Timestamp y X-RMT-Signature.

  • El formato de Discord publica incrustaciones ricas con un enlace de pedido y nombre de oferta.
  • El formato JSON publica un cuerpo estructurado que incluye nombres de ofertas y elementos de línea.
  • Si estableces un secreto, verifica que HMAC-SHA256 de timestamp.body sea igual al hex de v1=.
  • El historial de entrega aparece bajo cada punto final para que puedas reintentar fallos.

Ejemplo de encabezados firmados

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

Verificar firmas

Calcula HMAC-SHA256 sobre la cadena timestamp + "." + rawBody usando tu secreto de punto final. Compara con el hex después de v1=.

Esbozo de Node.js

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

Abrir herramientas para desarrolladores

Crea claves y puntos finales de webhook en Configuración.