Erstellen Sie Bots, Overlays, Stream-Tools und Integrationen mit D1Arena-Daten.
Authentifizierung
Alle API-Anfragen erfordern einen API-Schlüssel, der im X-API-Key / Authorization: Bearer-Header übergeben wird.
Um einen API-Schlüssel zu erstellen, gehen Sie zu Entwicklereinstellungen in Ihrem Dashboard. Sie können bis zu 5 Schlüssel haben.
429 Too Many Requests mit einem Retry-After-Header zurück.
Basis-URL
Alle Endpunkte geben JSON zurück. Paginierte Endpunkte enthalten ein meta-Objekt mit current_page, last_page und total.
Streams
| Parameter | Typ | Beschreibung |
|---|---|---|
category_id | integer | Filtern Sie nach Spiel-/Kategorie-ID |
limit | integer | Ergebnisse pro Seite (Standard: 20) |
page | integer | Seitenzahl |
Kategorien
| Parameter | Typ | Beschreibung |
|---|---|---|
search | string | Filtern Sie Kategorien nach Namen |
limit | integer | Ergebnisse pro Seite (Standard: 50) |
Benutzer
Clips
| Parameter | Typ | Beschreibung |
|---|---|---|
streamer_id | integer | Filtern Sie Clips nach der Benutzer-ID des Streamers |
category_id | integer | Filtern Sie nach Spiel-/Kategorie-ID |
limit | integer | Ergebnisse pro Seite (Standard: 20) |
Turniere
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Nach Status filtern (z. B. open, in_progress, completed) |
league_id | integer | Nach Liga-ID filtern |
limit | integer | Ergebnisse pro Seite (Standard: 20) |
ELO-Rangliste
| Parameter | Typ | Beschreibung |
|---|---|---|
category_id | integer | Filtern Sie nach Spiel-/Kategorie-ID |
limit | integer | Anzahl der Ergebnisse (Standard: 50) |
Ligen
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Filtern Sie nach Ligastatus |
category_id | integer | Filtern Sie nach Spiel-/Kategorie-ID |
limit | integer | Ergebnisse pro Seite (Standard: 20) |
Fehlerantworten
Alle Fehler geben einen konsistenten JSON-Umschlag zurück. Das error-Objekt enthält immer einen maschinenlesbaren code und eine für Menschen lesbare message.
Statuscodes
Referenz zu Fehlercodes
| Code | HTTP-Status | Beschreibung |
|---|---|---|
invalid_api_key | 401 | Der API-Schlüssel fehlt, ist fehlerhaft oder existiert nicht |
api_key_disabled | 403 | Der API-Schlüssel wurde widerrufen oder deaktiviert |
not_found | 404 | Die angeforderte Ressource konnte nicht gefunden werden |
validation_error | 422 | Ein oder mehrere Anforderungsparameter sind ungültig |
rate_limited | 429 | Anforderungsratenlimit für diesen API-Schlüssel überschritten |
server_error | 500 | Interner Serverfehler – bitte versuchen Sie es erneut oder wenden Sie sich an den Support |
Ratenbeschränkungen
API-Anfragen sind pro API-Schlüssel ratenbegrenzt. Wenn Sie das Limit überschreiten, geben Anfragen 429 Too Many Requests mit einem Retry-After-Header zurück.
Grenzen nach Stufe
| Stufe | Anfragen / Minute (Standard) | Max Keys |
|---|---|---|
| Anlasser (Kostenlos) | 60 | 5 |
| PRO | 60 | 5 |
| Ultimativ | 60 | 5 |
| Partner | 60 | 5 |
Rate-Limit-Header
API-Anfragen sind pro API-Schlüssel ratenbegrenzt. Wenn Sie das Limit überschreiten, geben Anfragen 429 Too Many Requests mit einem Retry-After-Header zurück.
| Kopfzeile | Beschreibung |
|---|---|
Retry-After | Sekunden, die vor dem erneuten Versuch gewartet werden müssen (nur bei 429 Antworten vorhanden) |
Best Practices
- Cache responses locally — stream and tournament data doesn't change every second.
- Abonnieren Sie webhooks für Echtzeitereignisse, anstatt Endpunkte abzufragen.
- Wenn möglich, bündeln Sie Anfragen – verwenden Sie Filterparameter, um in weniger Anrufen genau das zu erhalten, was Sie benötigen.
Webhooks (EventSub)
Abonnieren Sie Echtzeit-Push-Benachrichtigungen statt Umfragen. Wenn ein Ereignis auftritt, sendet D1Arena einen HTTP-POST mit einer mit HMAC-SHA256 signierten JSON-Nutzlast an Ihre Rückruf-URL.
Einrichtung
Erstellen Sie Webhook-Abonnements in Entwicklereinstellungen. Für jedes Abonnement ist Folgendes erforderlich:
- Rückruf-URL — Ein öffentlich zugänglicher HTTPS-Endpunkt auf Ihrem Server.
- Veranstaltungen — Ein oder mehrere Ereignistypen zum Abonnieren.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Nutzlastformat
Jede Webhook-Zustellung sendet einen JSON-Body mit dieser Struktur:
Überschriften
Jede Lieferung enthält die folgenden Header für die Weiterleitung und Überprüfung:
| Kopfzeile | Beschreibung |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Ereignistyp (z. B. stream.online) |
X-D1Arena-Signature | HMAC-SHA256-Hex-Digest des rohen Anforderungstexts |
X-D1Arena-Signature-Version | Signaturschlüsselformat: v2 für aktuelle Abonnements oder v1-hashed-secret für ältere Abonnements |
X-D1Arena-Delivery-Id | Eindeutige Zustellungs-UUID – zur Deduplizierung verwenden |
X-D1Arena-Timestamp | Unix-Zeitstempel, wann das Ereignis gesendet wurde |
Signaturen überprüfen
Überprüfen Sie immer den X-D1Arena-Signature-Header, bevor Sie einen Webhook verarbeiten. Die Signatur wird als HMAC-SHA256(raw_body, webhook_secret) berechnet.
Für v2-Lieferungen verwenden Sie das whsec_-Geheimnis, das bei der Erstellung des Abonnements angezeigt wurde. Berechnen Sie für eine v1-hashed-secret-Zustellung vor dem Upgrade zunächst SHA256(whsec_secret) aus diesem ursprünglichen Geheimnis und verwenden Sie den resultierenden Kleinbuchstaben-Hex-Digest als HMAC-Schlüssel. Erstellen Sie das Abonnement nach Möglichkeit neu, um zu v2 zu wechseln.
Verfügbare Veranstaltungen
| Veranstaltung | Beschreibung |
|---|---|
| stream.online | Ein Streamer ging live |
| stream.offline | Ein Streamer ist offline gegangen |
| channel.follow | Ein Benutzer ist einem Kanal gefolgt |
| channel.subscribe | Neues Unterstützerabonnement auf einem Kanal |
| channel.tip | Ein Tipp wurde an einen Streamer gesendet |
| tournament.started | Ein Turnierspiel hat begonnen |
| tournament.ended | Ein Turnier ist zu Ende gegangen |
| tournament.match.completed | Es wurde ein Spielergebnis aufgezeichnet |
| clip.created | Aus einem Livestream wurde ein neuer Clip erstellt |
| overdrive.started | D1 Frenzy wurde auf einem Kanal gestartet |
| overdrive.level_up | D1 Frenzy ist zum nächsten Level aufgestiegen |
| overdrive.ended | D1 Frenzy abgeschlossen oder abgelaufen |
Beispiele für Ereignisnutzlasten
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Zustellungs- und Wiederholungsrichtlinie
| Versuch | Verzögerung | Notizen |
|---|---|---|
| 1. (anfänglich) | Sofort | Wird innerhalb von Sekunden nach dem Ereignis gesendet |
| 2. (Wiederholung) | 30 Sekunden | Wenn der erste Versuch fehlschlägt oder eine Zeitüberschreitung auftritt |
| 3. (Wiederholung) | 2 Minuten | Exponentieller Backoff |
| 4. (endgültig) | 10 Minuten | Letzter Versuch vor der Markierung als fehlgeschlagen |
2xx status within 10 Sekunden. Non-2xx responses or timeouts trigger a retry. After 10 aufeinanderfolgende Ausfälle, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Entwicklereinstellungen.
Best Practices
- Überprüfen Sie immer die Unterschriften vor der Verarbeitung von Nutzlasten, um gefälschte Ereignisse zu verhindern.
- Verwenden Sie die Delivery-Id für die Deduplizierung — Bei Wiederholungsversuchen wird dieselbe ID gesendet. Speichern Sie daher verarbeitete IDs, um eine Doppelverarbeitung zu vermeiden.
- Schnell reagieren, asynchron verarbeiten — Geben Sie sofort
200 OKzurück und verarbeiten Sie die Geschäftslogik in einem Hintergrundjob. - Verwenden Sie nur HTTPS-Endpunkte — Webhook-URLs müssen TLS verwenden. HTTP-Rückrufe werden abgelehnt.
- Gehen Sie mit unbekannten Ereignissen elegant um — Es können neue Veranstaltungstypen hinzugefügt werden. Geben Sie „
200“ für nicht erkannte Ereignisse und nicht für Fehler zurück.
D1 Raserei
D1 Frenzy wird durch schnelle Tipps und Abonnements ausgelöst, während ein Streamer live ist. Es verläuft über 5 Level mit steigenden Zielen.
GET /api/overdrive/{streamerId}
Holen Sie sich den aktiven D1 Frenzy für einen Streamer. Gibt {"active": false} zurück, wenn keine vorhanden ist.
Level-Ziele
| Ebene | Punkte |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 Raserei — Punkte: Tipp $1 → 100; Abonnement 500 × Stufe. Dauer: 5 Minuten; Abklingzeit: 30 Minuten.
Erweiterungs-SDK
Erstellen Sie benutzerdefinierte Panel- und Overlay-Erweiterungen, die Streamer auf ihren Kanalseiten installieren können. Erweiterungen werden in Sandbox-Iframes ausgeführt und kommunizieren über postMessage mit der Hostseite.
Erste Schritte
- Erstellen Sie einen API-Schlüssel in Entwicklereinstellungen.
- Erstellen Sie Ihre Erweiterung als eigenständige HTML-Seite, die auf Ihrer Domain gehostet wird (HTTPS erforderlich).
- Reichen Sie es zur Überprüfung im Abschnitt Meine Erweiterungen ein.
- Nach der Genehmigung können Streamer es über den Extension Marketplace installieren.
Erweiterungstypen
| Typ | Standort | Verhalten |
|---|---|---|
panel | Unterhalb des Stream-Players | Sichtbar, wenn der Stream live ist. Karte in voller Breite, Standardhöhe 300 Pixel. |
overlay | Über den Videoplayer | Im Live-Zustand sichtbar. Position/Größe wird vom Streamer über das Overlay-Positionierungstool gesteuert. |
postMessage-API
Ihre Erweiterung empfängt beim Laden automatisch Kontextdaten. Implementieren Sie diese Ereignisse:
Verwenden Sie für jede Nachricht den genauen übergeordneten Ursprung D1Arena. Der offizielle SDK leitet diesen Ursprung automatisch von der Einbettungsseite ab und validiert ihn.
Da Erweiterungs-Iframes absichtlich einen undurchsichtigen Sandbox-Ursprung verwenden, authentifiziert der D1Arena-Host genau das registrierte Iframe-Fenster. Der Erweiterungscode muss weiterhin das übergeordnete Fenster und den genauen Ursprung D1Arena authentifizieren, bevor er den Kontext akzeptiert.
1. Signalbereitschaft
2. Kontext empfangen
3. Aktionen senden (optional)
Berechtigungsbereiche
Geben Sie an, welche Daten Ihre Erweiterung benötigt. Prüfer überprüfen, ob Ihr Code mit Ihren erklärten Berechtigungen übereinstimmt.
| Umfang | Gewährt Zugriff auf |
|---|---|
read:stream | Streamstatus, Titel, Kategorie |
read:viewers | Anzahl und Liste der Zuschauer |
read:chat | Chat-Nachrichten (über Pusher-Kanal) |
read:clips | Kanalclips über /api/clips/{slug} |
read:tournaments | Aktive Spielinformationen über /api/active-match/{id} |
read:channel | Kanalprofil, Follower, Zeitplan |
Sicherheitsanforderungen
sandbox="allow-scripts" ausgeführt. Ihre Erweiterung kann nicht greift auf Cookies und localStorage zu oder stellt authentifizierte Anfragen an d1arena.com.
- Öffentlich HTTPS erforderlich — Ihre Iframe-URL muss TLS verwenden und darf nur in öffentliche Netzwerkadressen aufgelöst werden.
- Für Menschen lesbare Quelle — Kein verschleiertes oder nur minimiertes JavaScript. Prüfer müssen Ihren Code lesen können.
- Kein Laden externer Skripte sofern nicht in Ihrer Einreichung angegeben. CDN-Bibliotheken (jQuery, Chart.js usw.) sind in Ordnung.
- Keine Datenexfiltration — Erweiterungen dürfen keine Zuschauerdaten an Analyse- oder Trackingdienste Dritter senden.
- Inhaltsrichtlinie — Keine Werbung, NSFW-Inhalte, Kryptowährungs-Mining oder böswilliges Verhalten.
Überprüfungsprozess
| Status | Bedeutung |
|---|---|
| pending | Eingereicht, wartet auf Überprüfung durch den Administrator (normalerweise 1–3 Werktage). |
| approved | Genehmigt und im Extension Marketplace sichtbar. |
| rejected | Mit einem Grund abgelehnt. Beheben Sie Probleme und reichen Sie es erneut ein. |
| suspended | Vorübergehend wegen Richtlinienverstoß entfernt. Kontaktieren Sie den Support. |
Versionsaktualisierungen
Um eine genehmigte Erweiterung zu aktualisieren, löschen Sie die aktuelle Version und reichen Sie eine neue mit einer erhöhten Versionsnummer ein. Die neue Version wird erneut überprüft.
Änderungsprotokoll
Verfolgen Sie API-Änderungen und neue Funktionen. Wir folgen der semantischen Versionierung und kündigen wichtige Änderungen mindestens 30 Tage im Voraus an.
- Erste öffentliche API-Veröffentlichung mit API-Schlüsselauthentifizierung.
- Streams: Live-Streams auflisten, Streamer-Details per Slug abrufen.
- Kategorien: Alle Spielkategorien suchen und auflisten.
- Benutzer: Öffentliche Profile mit Wettbewerbsstatistiken, ELO-Bewertung und Medaillenanzahl.
- Clips: Clipdetails mit Streamer-/Erstellerinformationen durchsuchen und abrufen.
- Turniere: Auflisten, nach Status/Liga filtern, Teilnehmerzahlen abrufen.
- ELO-Bestenliste: Globale und nach Kategorien bewertete Bestenlisten.
- Ligen: Listen Sie Ligen mit Rangliste und Punkteverteilung auf.
- D1 Frenzy: Echtzeit-Frenzy-Status für jeden Streamer.
- Webhooks (EventSub): 12 Ereignistypen, darunter Stream-, Kanal-, Turnier-, Clip- und Frenzy-Ereignisse.
- Ratenbeschränkungen
Brauchen Sie Hilfe?
Fragen zum API? Kontaktieren Sie uns.