Byg bots, overlejringer, streamværktøjer og integrationer med D1Arena-data.
Autentificering
Alle API-anmodninger kræver en API-nøgle, der sendes i X-API-Key / Authorization: Bearer-headeren.
For at oprette en API-nøgle skal du gå til Udviklerindstillinger i dit betjeningspanel. Du kan have op til 5 nøgler.
429 Too Many Requests med en Retry-After overskrift.
Basis URL
Alle endepunkter returnerer JSON. Sideinddelte endepunkter inkluderer et meta-objekt med current_page, last_page og total.
Strømme
| Parameter | Type | Beskrivelse |
|---|---|---|
category_id | integer | Filtrer efter spil/kategori-id |
limit | integer | Resultater pr. side (standard: 20) |
page | integer | Sidenummer |
Kategorier
| Parameter | Type | Beskrivelse |
|---|---|---|
search | string | Filtrer kategorier efter navn |
limit | integer | Resultater pr. side (standard: 50) |
Brugere
Klip
| Parameter | Type | Beskrivelse |
|---|---|---|
streamer_id | integer | Filtrer klip efter streamerens bruger-id |
category_id | integer | Filtrer efter spil/kategori-id |
limit | integer | Resultater pr. side (standard: 20) |
Turneringer
| Parameter | Type | Beskrivelse |
|---|---|---|
status | string | Filtrer efter status (f.eks. open, in_progress, completed) |
league_id | integer | Filtrer efter liga-id |
limit | integer | Resultater pr. side (standard: 20) |
ELO Rankings
| Parameter | Type | Beskrivelse |
|---|---|---|
category_id | integer | Filtrer efter spil/kategori-id |
limit | integer | Antal resultater (standard: 50) |
Ligaer
| Parameter | Type | Beskrivelse |
|---|---|---|
status | string | Filtrer efter ligastatus |
category_id | integer | Filtrer efter spil/kategori-id |
limit | integer | Resultater pr. side (standard: 20) |
Fejlsvar
Alle fejl returnerer en konsistent JSON-konvolut. Objektet error indeholder altid et maskinlæsbart code og et menneskelæsbart message.
Statuskoder
Fejlkoder reference
| Kode | HTTP-status | Beskrivelse |
|---|---|---|
invalid_api_key | 401 | API-nøglen mangler, er forkert udformet eller findes ikke |
api_key_disabled | 403 | API-nøglen er blevet tilbagekaldt eller deaktiveret |
not_found | 404 | Den anmodede ressource blev ikke fundet |
validation_error | 422 | En eller flere anmodningsparametre er ugyldige |
rate_limited | 429 | Anmodningshastighedsgrænsen er overskredet for denne API-nøgle |
server_error | 500 | Intern serverfejl — prøv venligst igen, eller kontakt support |
Satsgrænser
API-anmodninger er hastighedsbegrænsede pr. API-nøgle. Når du overskrider grænsen, returnerer anmodninger 429 Too Many Requests med en Retry-After overskrift.
Grænser efter niveau
| Tier | Forespørgsler / minut (Standard) | Max nøgler |
|---|---|---|
| Starter (Gratis) | 60 | 5 |
| PRO | 60 | 5 |
| Ultimativt | 60 | 5 |
| Partner | 60 | 5 |
Rate Limit Headers
API-anmodninger er hastighedsbegrænsede pr. API-nøgle. Når du overskrider grænsen, returnerer anmodninger 429 Too Many Requests med en Retry-After overskrift.
| Overskrift | Beskrivelse |
|---|---|
Retry-After | Sekunder at vente, før du prøver igen (kun til stede ved 429 svar) |
Bedste praksis
- Cache responses locally — stream and tournament data doesn't change every second.
- Abonner på webhooks for begivenheder i realtid i stedet for afstemningsendepunkter.
- Batch-anmodninger, hvor det er muligt – brug filterparametre for at få præcis det, du har brug for, med færre opkald.
Webhooks (EventSub)
Abonner på push-beskeder i realtid i stedet for afstemning. Når en hændelse opstår, sender D1Arena en HTTP POST til din tilbagekalds-URL med en JSON-nyttelast, der er signeret med HMAC-SHA256.
Opsætning
Opret webhook-abonnementer i Udviklerindstillinger. Hvert abonnement kræver:
- Callback URL — Et offentligt tilgængeligt HTTPS-slutpunkt på din server.
- Begivenheder — En eller flere begivenhedstyper at abonnere på.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Nyttelast format
Hver webhook-levering sender en JSON-body med denne struktur:
Overskrifter
Hver levering inkluderer følgende overskrifter til routing og verifikation:
| Overskrift | Beskrivelse |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Hændelsestype (f.eks. stream.online) |
X-D1Arena-Signature | HMAC-SHA256 hex-digest af den rå anmodningstekst |
X-D1Arena-Signature-Version | Signeringsnøgleformat: v2 for nuværende abonnementer eller v1-hashed-secret for ældre abonnementer |
X-D1Arena-Delivery-Id | Unik leverings-UUID — brug til deduplikering |
X-D1Arena-Timestamp | Unix-tidsstempel for, hvornår begivenheden blev sendt |
Verifikation af signaturer
Bekræft altid X-D1Arena-Signature-headeren, før du behandler en webhook. Signaturen beregnes som HMAC-SHA256(raw_body, webhook_secret).
Til v2-leveringer skal du bruge hemmeligheden whsec_, der blev vist, da abonnementet blev oprettet. For en præ-opgradering v1-hashed-secret levering skal du først beregne SHA256(whsec_secret) fra den oprindelige hemmelighed og bruge den resulterende små hex-digest som HMAC nøglen. Genopret abonnementet, når det er praktisk muligt at flytte til v2.
Tilgængelige arrangementer
| Begivenhed | Beskrivelse |
|---|---|
| stream.online | En streamer gik live |
| stream.offline | En streamer gik offline |
| channel.follow | En bruger fulgte en kanal |
| channel.subscribe | Nyt supporterabonnement på en kanal |
| channel.tip | Et tip blev sendt til en streamer |
| tournament.started | En turneringskamp er begyndt |
| tournament.ended | En turnering er afsluttet |
| tournament.match.completed | Et kampresultat blev registreret |
| clip.created | Et nyt klip blev oprettet fra en livestream |
| overdrive.started | D1 Frenzy startede på en kanal |
| overdrive.level_up | D1 Frenzy avancerede til næste niveau |
| overdrive.ended | D1 Frenzy afsluttet eller udløbet |
Eksempler på begivenhedsnyttelast
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Politik for levering og genforsøg
| Forsøg | Forsinkelse | Noter |
|---|---|---|
| 1. (initial) | Øjeblikkelig | Sendt inden for få sekunder efter begivenheden |
| 2. (forsøg igen) | 30 sekunder | Hvis første forsøg mislykkes eller timeout |
| 3. (forsøg igen) | 2 minutter | Eksponentiel tilbageslag |
| 4. (finale) | 10 minutter | Sidste forsøg før markering som mislykket |
2xx status within 10 sekunder. Non-2xx responses or timeouts trigger a retry. After 10 fejl i træk, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Udviklerindstillinger.
Bedste praksis
- Bekræft altid underskrifter før behandling af nyttelast for at forhindre falske hændelser.
- Brug Delivery-Id til deduplikering — genforsøg sender det samme ID, så gem behandlede ID'er for at undgå dobbeltbehandling.
- Reager hurtigt, bearbejd asynkront — returner
200 OKmed det samme og håndtere forretningslogik i et baggrundsjob. - Brug kun HTTPS-endepunkter — webhook-URL'er skal bruge TLS. HTTP-tilbagekald afvises.
- Håndter ukendte begivenheder med ynde — nye begivenhedstyper kan tilføjes. Returner
200for ikke-genkendte hændelser i stedet for fejl.
D1 vanvid
D1 Frenzy udløses af hurtige tips og abonnementer, mens en streamer er live. Det skrider frem gennem 5 niveauer med stigende mål.
GET /api/overdrive/{streamerId}
Få den aktive D1 Frenzy til en streamer. Returnerer {"active": false} hvis ingen.
Niveaumål
| Niveau | Points |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 vanvid — Points: Tip $1 → 100; Abonnement 500 × Tier. Varighed: 5 Referater; Nedkøling: 30 Referater.
Udvidelse SDK
Byg tilpassede panel- og overlejringsudvidelser, som streamere kan installere på deres kanalsider. Udvidelser kører i sandboxed iframes og kommunikerer med værtssiden via postMessage.
Kom godt i gang
- Opret en API-nøgle i Udviklerindstillinger.
- Byg din udvidelse som en selvstændig HTML-side, der hostes på dit domæne (HTTPS påkrævet).
- Send den til gennemgang i afsnittet Mine udvidelser.
- Når det er godkendt, kan streamere installere det fra Extension Marketplace.
Udvidelsestyper
| Type | Beliggenhed | Adfærd |
|---|---|---|
panel | Under stream-afspilleren | Synlig, når streamen er live. Kort i fuld bredde, 300 px standardhøjde. |
overlay | Over videoafspilleren | Synlig når live. Position/størrelse styret af streameren via overlejringspositioneringsværktøjet. |
postMessage API
Din udvidelse modtager automatisk kontekstdata, når den indlæses. Implementer disse begivenheder:
Brug den nøjagtige D1Arena overordnede oprindelse for hver meddelelse. Den officielle SDK udleder og validerer denne oprindelse fra indlejringssiden automatisk.
Fordi udvidelses-iframes med vilje bruger en uigennemsigtig sandbox-oprindelse, godkender D1Arena-værten det nøjagtige registrerede iframe-vindue. Udvidelseskoden skal stadig godkende det overordnede vindue og den nøjagtige D1Arena oprindelse, før konteksten accepteres.
1. Signalberedskab
2. Modtag kontekst
3. Send handlinger (valgfrit)
Tilladelsesomfang
Erklær, hvilke data din udvidelse har brug for. Korrekturlæsere bekræfter, at din kode matcher dine erklærede tilladelser.
| Omfang | Giver adgang til |
|---|---|
read:stream | Stream status, titel, kategori |
read:viewers | Seertal og liste |
read:chat | Chatbeskeder (via Pusher-kanal) |
read:clips | Kanalklip via /api/clips/{slug} |
read:tournaments | Aktive kampoplysninger via /api/active-match/{id} |
read:channel | Kanalprofil, følgere, tidsplan |
Sikkerhedskrav
sandbox="allow-scripts". Din udvidelse ikke kan får adgang til cookies, localStorage eller foretager godkendte anmodninger til d1arena.com.
- Offentlig HTTPS påkrævet — Din iframe-URL skal bruge TLS og kun løses til offentlige netværksadresser.
- Menneskelæselig kilde — Intet tilsløret eller minificeret JavaScript. Anmeldere skal kunne læse din kode.
- Ingen ekstern script indlæsning medmindre det er angivet i din indsendelse. CDN-biblioteker (jQuery, Chart.js osv.) er fine.
- Ingen dataeksfiltrering — Udvidelser må ikke sende seerdata til tredjepartsanalyse- eller sporingstjenester.
- Indholdspolitik — Ingen annoncer, NSFW-indhold, cryptocurrency-mining eller ondsindet adfærd.
Gennemgangsprocessen
| Status | Betydning |
|---|---|
| pending | Indsendt, afventer admingennemgang (typisk 1-3 hverdage). |
| approved | Godkendt og synlig på Extension Marketplace. |
| rejected | Afvist med en grund. Løs problemer, og send dem igen. |
| suspended | Midlertidigt fjernet på grund af politikovertrædelse. Kontakt support. |
Versionsopdateringer
For at opdatere en godkendt udvidelse skal du slette den nuværende version og indsende en ny med et forhøjet versionsnummer. Den nye version gennemgår igen.
Ændringslog
Spor API-ændringer og nye funktioner. Vi følger semantisk versionering og annoncerer brudændringer mindst 30 dage i forvejen.
- Indledende offentlig API-udgivelse med API-nøglegodkendelse.
- Streams: Liste over livestreams, få streamerdetaljer efter slug.
- Kategorier: Søg og liste alle spilkategorier.
- Brugere: Offentlige profiler med konkurrencestatistikker, ELO-rating og medaljeantal.
- Klip: Gennemse og hent klipdetaljer med info om streamer/skaber.
- Turneringer: Liste, filtrer efter status/liga, få deltagerantal.
- ELO Leaderboard: Globale ranglister og rangerede ranglister pr. kategori.
- Ligaer: Liste ligaer med stillinger og pointopdelinger.
- D1 Frenzy: Real-time Frenzy-status for enhver streamer.
- Webhooks (EventSub): 12 begivenhedstyper inklusive stream-, kanal-, turnerings-, klip- og Frenzy-begivenheder.
- Satsgrænser
Har du brug for hjælp?
Spørgsmål om API? Kontakt os.