Bouw bots, overlays, streamtools en integraties met D1Arena-gegevens.
Authenticatie
Voor alle API-verzoeken is een API-sleutel vereist die wordt doorgegeven in de X-API-Key / Authorization: Bearer-header.
Om een API-sleutel aan te maken, gaat u naar Ontwikkelaarsinstellingen in uw dashboard. U kunt maximaal 5 sleutels hebben.
429 Too Many Requests met een header Retry-After.
Basis-URL
Alle eindpunten retourneren JSON. Gepagineerde eindpunten omvatten een meta-object met current_page, last_page en total.
Stromen
| Parameter | Typ | Beschrijving |
|---|---|---|
category_id | integer | Filter op game-/categorie-ID |
limit | integer | Resultaten per pagina (standaard: 20) |
page | integer | Paginanummer |
Categorieën
| Parameter | Typ | Beschrijving |
|---|---|---|
search | string | Filter categorieën op naam |
limit | integer | Resultaten per pagina (standaard: 50) |
Gebruikers
Klemmen
| Parameter | Typ | Beschrijving |
|---|---|---|
streamer_id | integer | Filter clips op de gebruikers-ID van de streamer |
category_id | integer | Filter op game-/categorie-ID |
limit | integer | Resultaten per pagina (standaard: 20) |
Toernooien
| Parameter | Typ | Beschrijving |
|---|---|---|
status | string | Filter op status (bijv. open, in_progress, completed) |
league_id | integer | Filter op competitie-ID |
limit | integer | Resultaten per pagina (standaard: 20) |
ELO-ranglijsten
| Parameter | Typ | Beschrijving |
|---|---|---|
category_id | integer | Filter op game-/categorie-ID |
limit | integer | Aantal resultaten (standaard: 50) |
Liga's
| Parameter | Typ | Beschrijving |
|---|---|---|
status | string | Filter op competitiestatus |
category_id | integer | Filter op game-/categorie-ID |
limit | integer | Resultaten per pagina (standaard: 20) |
Foutreacties
Alle fouten retourneren een consistente JSON-envelop. Het object error bevat altijd een door een machine leesbare code en een door mensen leesbare message.
Statuscodes
Referentie foutcodes
| Codeer | HTTP-status | Beschrijving |
|---|---|---|
invalid_api_key | 401 | De API-sleutel ontbreekt, heeft een onjuiste indeling of bestaat niet |
api_key_disabled | 403 | De API-sleutel is ingetrokken of uitgeschakeld |
not_found | 404 | De gevraagde bron kon niet worden gevonden |
validation_error | 422 | Een of meer aanvraagparameters zijn ongeldig |
rate_limited | 429 | De limiet voor de aanvraagsnelheid is overschreden voor deze API-sleutel |
server_error | 500 | Interne serverfout. Probeer het opnieuw of neem contact op met de ondersteuning |
Tarieflimieten
API-verzoeken zijn beperkt in aantal per API-sleutel. Wanneer u de limiet overschrijdt, retourneren verzoeken 429 Too Many Requests met een header Retry-After.
Limieten per niveau
| Niveau | Verzoeken / Minuut (Standaard) | Maximaal aantal sleutels |
|---|---|---|
| Voorgerecht (Gratis) | 60 | 5 |
| PRO | 60 | 5 |
| Ultiem | 60 | 5 |
| Partner | 60 | 5 |
Kopteksten voor tarieflimieten
API-verzoeken zijn beperkt in aantal per API-sleutel. Wanneer u de limiet overschrijdt, retourneren verzoeken 429 Too Many Requests met een header Retry-After.
| Koptekst | Beschrijving |
|---|---|
Retry-After | Seconden wachten voordat u het opnieuw probeert (alleen aanwezig bij 429 reacties) |
Beste praktijken
- Cache responses locally — stream and tournament data doesn't change every second.
- Abonneer u op webhooks voor realtime gebeurtenissen in plaats van eindpunten te pollen.
- Batchaanvragen waar mogelijk: gebruik filterparameters om precies te krijgen wat u nodig heeft, in minder oproepen.
Webhooks (EventSub)
Abonneer u op realtime pushmeldingen in plaats van op polls. Wanneer er een gebeurtenis plaatsvindt, verzendt D1Arena een HTTP POST naar uw callback-URL met een JSON-payload ondertekend met HMAC-SHA256.
Installatie
Maak webhook-abonnementen in Ontwikkelaarsinstellingen. Voor elk abonnement is het volgende vereist:
- Terugbel-URL — Een openbaar toegankelijk HTTPS-eindpunt op uw server.
- Evenementen — Een of meer evenementtypen waarop u zich kunt abonneren.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Payload-formaat
Elke webhooklevering verzendt een JSON-body met deze structuur:
Kopteksten
Elke levering bevat de volgende headers voor routering en verificatie:
| Koptekst | Beschrijving |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Type gebeurtenis (bijv. stream.online) |
X-D1Arena-Signature | HMAC-SHA256 hexadecimale samenvatting van de onbewerkte aanvraagtekst |
X-D1Arena-Signature-Version | Formaat van handtekeningsleutel: v2 voor huidige abonnementen of v1-hashed-secret voor oudere abonnementen |
X-D1Arena-Delivery-Id | Unieke leverings-UUID — gebruik voor deduplicatie |
X-D1Arena-Timestamp | Unix-tijdstempel van wanneer de gebeurtenis is verzonden |
Handtekeningen verifiëren
Controleer altijd de header X-D1Arena-Signature voordat u een webhook verwerkt. De handtekening wordt berekend als HMAC-SHA256(raw_body, webhook_secret).
Voor v2-leveringen gebruikt u het geheim whsec_ dat werd weergegeven toen het abonnement werd aangemaakt. Voor een levering van v1-hashed-secret vóór de upgrade berekent u eerst SHA256(whsec_secret) op basis van dat oorspronkelijke geheim en gebruikt u de resulterende hexadecimale samenvatting in kleine letters als de HMAC sleutel. Maak het abonnement opnieuw aan als dit praktisch mogelijk is en verplaats het naar v2.
Beschikbare evenementen
| Evenement | Beschrijving |
|---|---|
| stream.online | Er is een streamer live gegaan |
| stream.offline | Een streamer is offline gegaan |
| channel.follow | Een gebruiker heeft een kanaal gevolgd |
| channel.subscribe | Nieuw supporterabonnement op een kanaal |
| channel.tip | Er is een tip naar een streamer gestuurd |
| tournament.started | Een toernooi-matchplay is begonnen |
| tournament.ended | Er is een toernooi afgesloten |
| tournament.match.completed | Er werd een wedstrijdresultaat geregistreerd |
| clip.created | Er is een nieuwe clip gemaakt van een livestream |
| overdrive.started | D1 Frenzy begon op een kanaal |
| overdrive.level_up | D1 Frenzy ging naar het volgende niveau |
| overdrive.ended | D1 Frenzy voltooid of verlopen |
Voorbeelden van gebeurtenispayloads
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Beleid voor bezorging en opnieuw proberen
| Poging | Vertraging | Opmerkingen |
|---|---|---|
| 1e (initieel) | Onmiddellijk | Verzonden binnen enkele seconden na de gebeurtenis |
| 2e (opnieuw proberen) | 30 seconden | Als de eerste poging mislukt of een time-out optreedt |
| 3e (opnieuw proberen) | 2 minuten | Exponentiële uitstel |
| 4e (finale) | 10 minuten | Laatste poging voordat deze als mislukt wordt gemarkeerd |
2xx status within 10 seconden. Non-2xx responses or timeouts trigger a retry. After 10 opeenvolgende mislukkingen, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Ontwikkelaarsinstellingen.
Beste praktijken
- Controleer handtekeningen altijd voordat payloads worden verwerkt om vervalste gebeurtenissen te voorkomen.
- Gebruik de Delivery-Id voor deduplicatie — Bij nieuwe pogingen wordt dezelfde ID verzonden. Bewaar verwerkte ID's dus om dubbele verwerking te voorkomen.
- Reageer snel, verwerk asynchroon — retourneer
200 OKonmiddellijk en handel de bedrijfslogica af in een achtergrondtaak. - Gebruik alleen HTTPS-eindpunten — webhook-URL's moeten TLS gebruiken. HTTP-callbacks worden afgewezen.
- Ga op een elegante manier om met onbekende gebeurtenissen — er kunnen nieuwe gebeurtenistypen worden toegevoegd. Retourneer
200voor niet-herkende gebeurtenissen in plaats van fouten.
D1 Waanzin
D1 Frenzy wordt geactiveerd door snelle tips en abonnementen terwijl een streamer live is. Het vordert door 5 niveaus met toenemende doelstellingen.
GET /api/overdrive/{streamerId}
Koop de actieve D1 Frenzy voor een streamer. Retourneert {"active": false} als er geen is.
Niveaudoelen
| Niveau | Punten |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 Waanzin — Punten: Tip $1 → 100; Abonnement 500 × Niveau. Duur: 5 Minuten; Afkoelen: 30 Minuten.
Extensie SDK
Bouw aangepaste paneel- en overlay-extensies die streamers op hun kanaalpagina's kunnen installeren. Extensies worden uitgevoerd in iframes in een sandbox en communiceren met de hostpagina via postMessage.
Aan de slag
- Maak een API-sleutel in Ontwikkelaarsinstellingen.
- Bouw uw extensie als een zelfstandige HTML-pagina die wordt gehost op uw domein (HTTPS vereist).
- Dien het ter beoordeling in in de sectie Mijn extensies.
- Na goedkeuring kunnen streamers het installeren via de Extension Marketplace.
Extensietypen
| Typ | Locatie | Gedrag |
|---|---|---|
panel | Hieronder de streamspeler | Zichtbaar wanneer de stream live is. Kaart over de volledige breedte, standaardhoogte 300px. |
overlay | Via de videospeler | Zichtbaar wanneer live. Positie/grootte geregeld door de streamer via de overlay-positioneringstool. |
postMessage-API
Uw extensie ontvangt automatisch contextgegevens wanneer deze wordt geladen. Implementeer deze evenementen:
Gebruik voor elk bericht de exacte D1Arena bovenliggende oorsprong. De officiële SDK leidt deze oorsprong automatisch af van de insluitingspagina en valideert deze.
Omdat extensie-iframes opzettelijk een ondoorzichtige sandbox-oorsprong gebruiken, verifieert de D1Arena-host het exacte geregistreerde iframe-venster. Extensiecode moet nog steeds het bovenliggende venster en de exacte D1Arena-oorsprong verifiëren voordat context wordt geaccepteerd.
1. Signaalgereedheid
2. Ontvang context
3. Acties verzenden (optioneel)
Toestemmingsbereiken
Geef aan welke gegevens uw extensie nodig heeft. Reviewers verifiëren dat uw code overeenkomt met uw aangegeven machtigingen.
| Reikwijdte | Verleent toegang tot |
|---|---|
read:stream | Streamstatus, titel, categorie |
read:viewers | Aantal kijkers en lijst |
read:chat | Chatberichten (via Pusher-kanaal) |
read:clips | Kanaalclips via /api/clips/{slug} |
read:tournaments | Actieve wedstrijdinformatie via /api/active-match/{id} |
read:channel | Kanaalprofiel, volgers, schema |
Beveiligingsvereisten
sandbox="allow-scripts". Uw extensie kan niet heeft toegang tot cookies, localStorage of doet geverifieerde verzoeken aan d1arena.com.
- Openbaar HTTPS vereist — Uw iframe-URL moet TLS gebruiken en alleen worden omgezet in openbare netwerkadressen.
- Voor mensen leesbare bron — Geen versluierd of verkleind JavaScript. Reviewers moeten uw code kunnen lezen.
- Geen extern script laden tenzij aangegeven in uw inzending. CDN-bibliotheken (jQuery, Chart.js, enz.) zijn prima.
- Geen data-exfiltratie — Extensies mogen geen kijkersgegevens naar analyse- of trackingservices van derden sturen.
- Inhoudsbeleid — Geen advertenties, NSFW-inhoud, cryptocurrency-mining of kwaadaardig gedrag.
Beoordelingsproces
| Toestand | Betekenis |
|---|---|
| pending | Ingediend, in afwachting van beoordeling door de beheerder (doorgaans één tot drie werkdagen). |
| approved | Goedgekeurd en zichtbaar op de Extensiemarktplaats. |
| rejected | Afgewezen met een reden. Los de problemen op en dien het opnieuw in. |
| suspended | Tijdelijk verwijderd wegens beleidsschending. Neem contact op met ondersteuning. |
Versie-updates
Als u een goedgekeurde extensie wilt bijwerken, verwijdert u de huidige versie en dient u een nieuwe in met een verhoogd versienummer. De nieuwe versie wordt opnieuw beoordeeld.
Wijzigingslog
Houd API-wijzigingen en nieuwe functies bij. We volgen semantisch versiebeheer en kondigen belangrijke wijzigingen minstens 30 dagen van tevoren aan.
- Eerste openbare API-release met API-sleutelverificatie.
- Streams: geef livestreams weer, ontvang streamergegevens per slug.
- Categorieën: zoek en vermeld alle spelcategorieën.
- Gebruikers: openbare profielen met competitieve statistieken, ELO-beoordeling en medailletellingen.
- Clips: blader en haal clipdetails op met informatie over de streamer/maker.
- Toernooien: Lijst, filter op status/competitie, krijg deelnemersaantallen.
- ELO-klassement: Globale en per categorie gerangschikte klassementen.
- Leagues: lijst competities met klassementen en puntenverdelingen.
- D1 Frenzy: Realtime Frenzy-status voor elke streamer.
- Webhooks (EventSub): 12 soorten evenementen, waaronder stream-, kanaal-, toernooi-, clip- en Frenzy-evenementen.
- Tarieflimieten
Hulp nodig?
Vragen over de API? Neem contact met ons op.