Ouvrir l'API et les webhooks sortants

Activez l'accès développeur, appelez /api/v1 avec une clé porteuse, et abonnez-vous aux webhooks sortants pour les événements du cycle de vie des commandes.

Clés API, limites de taux, découverte, et webhooks d'événements de commande.

Activer l'accès développeur

Ouvrez Paramètres → Développeur, activez l'accès, puis créez une clé API et des points de terminaison webhook optionnels.

  • Les clés sont limitées à votre compte vendeur et peuvent être révoquées à tout moment.
  • Le trafic API ouvert est limité à 300 requêtes par minute pour chaque vendeur.
  • GET /api/v1 renvoie des métadonnées de découverte pour les ressources disponibles.

Authentifiez et appelez l'API

Envoyez Authorization: Bearer avec votre clé secrète en direct. Préférez HTTPS uniquement. Ne jamais intégrer de clés dans des clients publics.

  • offres:read: lister et obtenir des offres.
  • offres:write: créer, mettre à jour, publier et supprimer des offres.
  • commandes:read: lister et obtenir les commandes des vendeurs.
  • commandes:write: marquer les commandes comme livrées.

Lister les commandes récentes

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

Faire tourner les clés

Si une clé fuit, révoquez-la dans les paramètres Développeur et créez-en une nouvelle. Mettez à jour votre automatisation avant de révoquer si vous êtes en direct.

Ouvrir la carte des points de terminaison de l'API

Le chemin de base est /api/v1. Les réponses réussies incluent X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. GET /api/v1 renvoie un catalogue d'opérations lisible par machine qui correspond à cet article.

  • GET /api/v1: découverte (toute clé valide).
  • GET /api/v1/offers: lister les offres (offres:read).
  • POST /api/v1/offers: créer un brouillon (offres:write).
  • GET /api/v1/offers/:urlOrId: obtenir l'offre (offres:read).
  • PATCH /api/v1/offers/:urlOrId: mettre à jour les champs de l'offre (offres:write).
  • DELETE /api/v1/offers/:urlOrId: supprimer ou archiver (offres:write).
  • POST /api/v1/offers/:urlOrId/publish: publier (offres:write).
  • GET /api/v1/orders: lister les ventes (commandes:read).
  • GET /api/v1/orders/:uid: obtenir la commande (commandes:read).
  • POST /api/v1/orders/:uid/deliver: marquer comme livré (commandes:write).

Imprimer le catalogue des opérations en direct

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

API des offres

Les identifiants d'offre acceptent le slug d'URL public ou l'ID numérique. Les réponses omettent l'ID interne et sellerId. Les lignes de stock, les prix des options, les médias et les attributs sont gérés dans l'éditeur de vendeur (ou futurs points de terminaison), pas encore via PATCH.

Lister les offres actives

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

Créer une offre brouillon

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

Obtenir une offre avec relations

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

Mettre à jour les champs autorisés

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

Champs de corps PATCH autorisés

json
{
  "title": "Titre mis à jour",
  "description": "Description pour l'acheteur",
  "visibility": "PUBLIC",
  "categoryId": 12,
  "offeringId": 34,
  "thumbnail": "https://…",
  "offerType": "COMPTE",
  "listingMode": "STANDARD"
}

Publier (PUBLIC par défaut)

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

Supprimer ou archiver

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

Conditions de publication

La publication échoue avec 400 si les champs de listing requis sont incomplets (même validation que l'éditeur d'offres). Les mises à jour réussies peuvent émettre un webhook offer.updated.

API des commandes

Les commandes sont liées à votre compte vendeur. Les détails de facturation de l'acheteur peuvent être masqués. Utilisez l'UID de commande public (pas la référence opaque seule) pour obtenir et livrer.

Lister les ventes récentes payées

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

Obtenir une commande avec des articles

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

Marquer comme livré

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

Corps de preuve optionnel

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

Erreurs et limites de taux

Les erreurs renvoient JSON { error, code? }. La limite de taux est de 300 requêtes par minute par clé API.

  • 401 API_KEY_REQUIRED ou API_KEY_INVALID.
  • 403 SCOPE_MISSING lorsque la clé manque de la portée de point de terminaison.
  • 404 Non trouvé pour les offres ou commandes que vous ne possédez pas (même message dans les deux sens).
  • 429 RATE_LIMITED avec Retry-After et X-RateLimit-* en-têtes.
  • 400 pour les échecs de validation (publication incomplète, livraison non autorisée, PATCH vide).

Gérer 429

Réduisez en utilisant Retry-After secondes. Ne faites pas tourner les clés pour contourner les limites ; la limite est par clé et plate pour tous les vendeurs.

Webhooks de commande sortants

Abonnez-vous à order.paid, order.delivered, order.completed, order.refunded, et order.disputed. Choisissez JSON pour votre serveur ou Discord pour les intégrations de canal. La signature optionnelle utilise X-RMT-Timestamp et X-RMT-Signature.

  • Les publications au format Discord affichent des intégrations riches avec un lien de commande et le nom de l'offre.
  • Le format JSON publie un corps structuré incluant les noms d'offres et les éléments de ligne.
  • Si vous définissez un secret, vérifiez que HMAC-SHA256 de timestamp.body est égal à la signature hex v1=.
  • L'historique de livraison apparaît sous chaque point de terminaison afin que vous puissiez réessayer les échecs.

Exemple d'en-têtes signés

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

Vérifiez les signatures

Calculez HMAC-SHA256 sur la chaîne timestamp + "." + rawBody en utilisant votre secret de point de terminaison. Comparez au hex après v1=.

Esquisse Node.js

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

Ouvrir les outils de développement

Créez des clés et des points de terminaison webhook dans les Paramètres.