Créez des robots, des superpositions, des outils de diffusion et des intégrations avec les données D1Arena.
Authentification
Toutes les requêtes API nécessitent une clé API transmise dans l'en-tête X-API-Key / Authorization: Bearer.
Pour créer une clé API, accédez à Paramètres du développeur dans votre tableau de bord. Vous pouvez avoir jusqu'à 5 clés.
429 Too Many Requests avec un en-tête Retry-After.
URL de base
Tous les points de terminaison renvoient JSON. Les points de terminaison paginés incluent un objet meta avec current_page, last_page et total.
Flux
| Paramètre | Tapez | Descriptif |
|---|---|---|
category_id | integer | Filtrer par ID de jeu/catégorie |
limit | integer | Résultats par page (par défaut : 20) |
page | integer | Numéro de page |
Catégories
| Paramètre | Tapez | Descriptif |
|---|---|---|
search | string | Filtrer les catégories par nom |
limit | integer | Résultats par page (par défaut : 50) |
Utilisateurs
Extraits
| Paramètre | Tapez | Descriptif |
|---|---|---|
streamer_id | integer | Filtrer les clips par ID utilisateur du streamer |
category_id | integer | Filtrer par ID de jeu/catégorie |
limit | integer | Résultats par page (par défaut : 20) |
Tournois
| Paramètre | Tapez | Descriptif |
|---|---|---|
status | string | Filtrer par statut (par exemple open, in_progress, completed) |
league_id | integer | Filtrer par identifiant de ligue |
limit | integer | Résultats par page (par défaut : 20) |
Classement ELO
| Paramètre | Tapez | Descriptif |
|---|---|---|
category_id | integer | Filtrer par ID de jeu/catégorie |
limit | integer | Nombre de résultats (par défaut : 50) |
Ligues
| Paramètre | Tapez | Descriptif |
|---|---|---|
status | string | Filtrer par statut de ligue |
category_id | integer | Filtrer par ID de jeu/catégorie |
limit | integer | Résultats par page (par défaut : 20) |
Réponses aux erreurs
Toutes les erreurs renvoient une enveloppe JSON cohérente. L'objet error contient toujours un code lisible par machine et un message lisible par l'homme.
Codes d'état
Référence des codes d'erreur
| Code | Statut HTTP | Descriptif |
|---|---|---|
invalid_api_key | 401 | La clé API est manquante, mal formée ou n'existe pas |
api_key_disabled | 403 | La clé API a été révoquée ou désactivée |
not_found | 404 | La ressource demandée est introuvable |
validation_error | 422 | Un ou plusieurs paramètres de requête ne sont pas valides |
rate_limited | 429 | Limite de taux de requête dépassée pour cette clé API |
server_error | 500 | Erreur de serveur interne : veuillez réessayer ou contacter l'assistance. |
Limites de taux
Les requêtes API sont limitées en débit par clé API. Lorsque vous dépassez la limite, les requêtes renvoient 429 Too Many Requests avec un en-tête Retry-After.
Limites par niveau
| Niveau | Demandes/minute (Défaut) | Nombre maximum de clés |
|---|---|---|
| Démarreur (Gratuit) | 60 | 5 |
| PRO | 60 | 5 |
| Ultime | 60 | 5 |
| Partenaire | 60 | 5 |
En-têtes de limite de débit
Les requêtes API sont limitées en débit par clé API. Lorsque vous dépassez la limite, les requêtes renvoient 429 Too Many Requests avec un en-tête Retry-After.
| En-tête | Descriptif |
|---|---|
Retry-After | Secondes à attendre avant de réessayer (présent uniquement sur 429 réponses) |
Meilleures pratiques
- Cache responses locally — stream and tournament data doesn't change every second.
- Abonnez-vous à webhooks pour les événements en temps réel au lieu d'interroger les points de terminaison.
- Requêtes par lots lorsque cela est possible : utilisez les paramètres de filtre pour obtenir exactement ce dont vous avez besoin en moins d'appels.
Webhooks (EventSub)
Abonnez-vous aux notifications push en temps réel au lieu des sondages. Lorsqu'un événement se produit, D1Arena envoie un HTTP POST à votre URL de rappel avec une charge utile JSON signée avec HMAC-SHA256.
Configuration
Créez des abonnements webhook dans Paramètres du développeur. Chaque abonnement nécessite :
- URL de rappel — Un point de terminaison HTTPS accessible publiquement sur votre serveur.
- Événements — Un ou plusieurs types d'événements auxquels s'abonner.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Format de charge utile
Chaque livraison de webhook envoie un corps JSON avec cette structure :
En-têtes
Chaque livraison comprend les en-têtes suivants pour le routage et la vérification :
| En-tête | Descriptif |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Type d'événement (par exemple stream.online) |
X-D1Arena-Signature | Résumé hexadécimal HMAC-SHA256 du corps brut de la requête |
X-D1Arena-Signature-Version | Format de clé de signature : v2 pour les abonnements actuels ou v1-hashed-secret pour les anciens abonnements |
X-D1Arena-Delivery-Id | UUID de livraison unique — à utiliser pour la déduplication |
X-D1Arena-Timestamp | Horodatage Unix du moment où l'événement a été envoyé |
Vérification des signatures
Vérifiez toujours l’en-tête X-D1Arena-Signature avant de traiter un webhook. La signature est calculée comme HMAC-SHA256(raw_body, webhook_secret).
Pour les diffusions v2, utilisez le secret whsec_ affiché lors de la création de l'abonnement. Pour une livraison v1-hashed-secret préalable à la mise à niveau, calculez d'abord SHA256(whsec_secret) à partir de ce secret d'origine et utilisez le résumé hexadécimal minuscule résultant comme clé HMAC. Recréez l’abonnement lorsque cela est possible pour passer à v2.
Événements disponibles
| Événement | Descriptif |
|---|---|
| stream.online | Un streamer est passé en direct |
| stream.offline | Un streamer s'est déconnecté |
| channel.follow | Un utilisateur a suivi une chaîne |
| channel.subscribe | Nouvel abonnement de supporter sur une chaîne |
| channel.tip | Un pourboire a été envoyé à un streamer |
| tournament.started | Un match play de tournoi a commencé |
| tournament.ended | Un tournoi s'est terminé |
| tournament.match.completed | Un résultat de match a été enregistré |
| clip.created | Un nouveau clip a été créé à partir d'une diffusion en direct |
| overdrive.started | D1 Frenzy a démarré sur une chaîne |
| overdrive.level_up | D1 Frenzy passe au niveau supérieur |
| overdrive.ended | D1 Frenzy terminé ou expiré |
Exemples de charge utile d'événement
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Politique de livraison et de nouvelle tentative
| Tentative | Retard | Remarques |
|---|---|---|
| 1er (initiale) | Immédiat | Envoyé quelques secondes après l'événement |
| 2ème (réessayer) | 30 secondes | Si la première tentative échoue ou expire |
| 3ème (réessayer) | 2 minutes | Retard exponentiel |
| 4ème (finale) | 10 minutes | Dernière tentative avant de marquer comme échec |
2xx status within 10 secondes. Non-2xx responses or timeouts trigger a retry. After 10 échecs consécutifs, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Paramètres du développeur.
Meilleures pratiques
- Vérifiez toujours les signatures avant de traiter les charges utiles pour éviter les événements usurpés.
- Utiliser le Delivery-Id pour la déduplication — les nouvelles tentatives envoient le même identifiant, stockez donc les identifiants traités pour éviter le double traitement.
- Répondez rapidement, traitez de manière asynchrone — return
200 OKimmédiatement et gère la logique métier dans un travail en arrière-plan. - Utiliser uniquement les points de terminaison HTTPS — Les URL de webhook doivent utiliser TLS. Les rappels HTTP sont rejetés.
- Gérez les événements inconnus avec élégance — de nouveaux types d’événements peuvent être ajoutés. Renvoyez
200pour les événements non reconnus plutôt que les erreurs.
Frénésie D1
D1 Frenzy est déclenché par des conseils et des abonnements rapides pendant qu'un streamer est en direct. Il progresse à travers 5 niveaux avec des objectifs croissants.
GET /api/overdrive/{streamerId}
Obtenez le D1 Frenzy actif pour un streamer. Renvoie {"active": false} s’il n’y en a pas.
Objectifs de niveau
| Niveau | Points |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
Frénésie D1 — Points: Pourboire $1 → 100; Abonnement 500 × Niveau. Durée: 5 Procès-verbal; Temps de recharge: 30 Procès-verbal.
SDK d'extension
Créez des panneaux personnalisés et des extensions de superposition que les streamers peuvent installer sur les pages de leurs chaînes. Les extensions s'exécutent dans des iframes en bac à sable et communiquent avec la page hôte via postMessage.
Commencer
- Créez une clé API dans Paramètres du développeur.
- Créez votre extension en tant que page HTML autonome hébergée sur votre domaine (HTTPS requis).
- Soumettez-le pour examen dans la section Mes extensions.
- Une fois approuvé, les streamers peuvent l’installer à partir d’Extension Marketplace.
Types d'extensions
| Tapez | Emplacement | Comportement |
|---|---|---|
panel | Sous le lecteur de flux | Visible lorsque le flux est en direct. Carte pleine largeur, hauteur par défaut de 300 px. |
overlay | Sur le lecteur vidéo | Visible en direct. Position/taille contrôlée par le streamer via l'outil de positionnement de superposition. |
API postMessage
Votre extension reçoit automatiquement les données contextuelles lors de son chargement. Implémentez ces événements :
Utilisez l’origine exacte du parent D1Arena pour chaque message. Le SDK officiel dérive et valide automatiquement cette origine à partir de la page d'intégration.
Étant donné que les iframes d’extension utilisent intentionnellement une origine sandbox opaque, l’hôte D1Arena authentifie exactement la fenêtre iframe enregistrée. Le code d'extension doit toujours authentifier la fenêtre parent et exacte l'origine D1Arena avant d'accepter le contexte.
1. Préparation du signal
2. Recevoir le contexte
3. Envoyer des actions (facultatif)
Portées des autorisations
Déclarez les données dont votre extension a besoin. Les réviseurs vérifient que votre code correspond à vos autorisations déclarées.
| Portée | Accorde l'accès à |
|---|---|
read:stream | Statut du flux, titre, catégorie |
read:viewers | Nombre de spectateurs et liste |
read:chat | Messages de chat (via le canal Pusher) |
read:clips | Canaliser les clips via /api/clips/{slug} |
read:tournaments | Informations sur le match actif via /api/active-match/{id} |
read:channel | Profil de la chaîne, abonnés, calendrier |
Exigences de sécurité
sandbox="allow-scripts". Votre extension ne peux pas accède aux cookies, à localStorage ou effectue des demandes authentifiées à d1arena.com.
- Public HTTPS requis — Votre URL iframe doit utiliser TLS et être résolue uniquement en adresses de réseau public.
- Source lisible par l'homme — Pas de JavaScript obscurci ou réduit uniquement. Les réviseurs doivent être capables de lire votre code.
- Pas de chargement de script externe sauf indication contraire dans votre soumission. Les bibliothèques CDN (jQuery, Chart.js, etc.) conviennent.
- Pas d'exfiltration de données — Les extensions ne doivent pas envoyer les données des spectateurs à des services d'analyse ou de suivi tiers.
- Politique de contenu — Pas de publicité, de contenu NSFW, d'extraction de crypto-monnaie ou de comportement malveillant.
Processus d'examen
| Statut | Signification |
|---|---|
| pending | Soumis, en attente d'examen par l'administrateur (généralement 1 à 3 jours ouvrables). |
| approved | Approuvé et visible sur Extension Marketplace. |
| rejected | Rejeté avec raison. Résolvez les problèmes et soumettez à nouveau. |
| suspended | Temporairement supprimé pour non-respect des règles. Contactez l'assistance. |
Mises à jour des versions
Pour mettre à jour une extension approuvée, supprimez la version actuelle et soumettez-en une nouvelle avec un numéro de version incrémenté. La nouvelle version est à nouveau révisée.
Journal des modifications
Suivez les modifications de l'API et les nouvelles fonctionnalités. Nous suivons le versioning sémantique et annonçons les modifications majeures au moins 30 jours à l'avance.
- Version initiale de l'API publique avec authentification par clé API.
- Flux : répertoriez les flux en direct et obtenez les détails des streamers par slug.
- Catégories : recherchez et répertoriez toutes les catégories de jeux.
- Utilisateurs : profils publics avec statistiques de compétition, classement ELO et nombre de médailles.
- Clips : parcourez et récupérez les détails des clips avec les informations du streamer/créateur.
- Tournois : Liste, filtrez par statut/ligue, obtenez le nombre de participants.
- Classement ELO : classements mondiaux et par catégorie.
- Ligues : répertoriez les ligues avec leur classement et leur répartition par points.
- D1 Frenzy : Statut Frenzy en temps réel pour n'importe quel streamer.
- Webhooks (EventSub) : 12 types d'événements, notamment les événements de flux, de chaîne, de tournoi, de clip et de Frenzy.
- Limites de taux
Besoin d'aide ?
Des questions sur le API ? Contactez-nous.