Preskoči na glavno vsebino
D1 Arena

D1 Arena

Loading...

D1 Arena

API za razvijalce

Skupnost

API za razvijalce

Izdelajte bote, prekrivke, orodja za pretakanje in integracije s podatki D1Arena.

Preverjanje pristnosti

Vse zahteve API zahtevajo ključ API, posredovan v glavi X-API-Key / Authorization: Bearer.

# Example request curl -H "X-API-Key: d1_your_api_key_here" \ https://d1arena.com/api/v1/streams

Če želite ustvariti ključ API, pojdite na Nastavitve razvijalca na nadzorni plošči. Lahko imate do 5 ključev.

Zahteve API so glede na ključ API omejene s hitrostjo. Ko presežete omejitev, zahteve vrnejo 429 Too Many Requests z glavo Retry-After.

Osnovni URL

https://d1arena.com/api/v1

Vse končne točke vrnejo JSON. Paginirane končne točke vključujejo objekt meta z current_page, last_page in total.

Tokovi

GET /streams
Seznam trenutnih prenosov v živo. Podpira paginacijo in filtriranje kategorij.
ParameterVrstaOpis
category_idintegerFiltriraj po ID-ju igre/kategorije
limitintegerRezultati na stran (privzeto: 20)
pageintegerŠtevilka strani
Odziv
{ "data": [ { "id": 42, "name": "ProGamer99", "user_slug": "progamer99", "profile_img": "profile/abc123.jpg", "stream_title": "Ranked Grind - Road to Champion", "stream_category_id": 5, "is_vertical_stream": false, "platform_tier": "pro" } ], "meta": { "current_page": 1, "last_page": 1, "total": 3 } }
GET /streams/{slug}
Pridobite stanje posameznega pretakalca v živo in podrobnosti o pretakanju po uporabniškem imenu ali polžu.
Odziv
{ "data": { "user_id": 42, "name": "ProGamer99", "slug": "progamer99", "is_live": true, "stream_title": "Ranked Grind", "category_id": 5, "is_vertical": false, "platform_tier": "pro", "profile_img": "profile/abc123.jpg" } }

kategorije

GET /categories
Navedite vse kategorije iger. Podpira iskanje in označevanje strani.
ParameterVrstaOpis
searchstringFiltrirajte kategorije po imenu
limitintegerRezultati na stran (privzeto: 50)
Odziv
{ "data": [ { "id": 5, "name": "Call of Duty", "slug": "call-of-duty", "image": "categories/cod.png" } ], "meta": { "total": 24 } }

Uporabniki

GET /users/{slug}
Pridobite igralčev javni profil in konkurenčno statistiko po uporabniškem imenu ali polžu.
Odziv
{ "data": { "user": { "id": 42, "name": "ProGamer99", "user_slug": "progamer99", "profile_img": "profile/abc.jpg", "bio": "Competitive FPS player", "platform_tier": "pro", "is_live": "1", "stream_title": "Ranked", "gold": 3, "silver": 1, "bronze": 0 }, "stats": { "elo_rating": 1842, "total_tournaments": 27, "win_rate": 64.5, "total_earnings": 1250.00 } } }

Posnetki

GET /clips
Seznam javnih posnetkov. Podpira filtriranje po streamerju in kategoriji.
ParameterVrstaOpis
streamer_idintegerFiltrirajte posnetke po ID-ju uporabnika streamerja
category_idintegerFiltriraj po ID-ju igre/kategorije
limitintegerRezultati na stran (privzeto: 20)
Odziv
{ "data": [ { "id": 99, "streamer_id": 42, "stream_category_id": 5, "title": "Insane 1v4 clutch", "slug": "insane-1v4-clutch-abc", "duration": 28, "view_count": 412, "is_auto_clip": false, "created_at": "2026-03-15T18:30:00.000000Z", "streamer": { "id": 42, "name": "ProGamer99", "user_slug": "progamer99" } } ], "meta": { "total": 156 } }
GET /clips/{slug}
Pridobite podrobnosti posameznega posnetka s polžem.
Odziv
{ "data": { "id": 99, "title": "Insane 1v4 clutch", "slug": "insane-1v4-clutch-abc", "description": "Final round comeback", "duration": 28, "view_count": 412, "streamer": { "id": 42, "name": "ProGamer99" }, "creator": { "id": 55, "name": "ClipMaster" }, "stream_category": { "id": 5, "name": "Call of Duty" } } }

Turnirji

GET /tournaments
Seznam turnirjev. Podpira filtriranje po statusu in ligi.
ParameterVrstaOpis
statusstringFiltriraj po stanju (npr. open, in_progress, completed)
league_idintegerFiltriraj po ID-ju lige
limitintegerRezultati na stran (privzeto: 20)
Odziv
{ "data": [ { "id": 15, "title": "Friday Night Frenzy", "tournament_type": "single_elimination", "status": "open", "registration_fee": "5.00", "no_player": 32, "team": 0, "category": { "id": 5, "name": "Call of Duty" }, "start_date": "2026-03-28T20:00:00.000000Z" } ], "meta": { "current_page": 1, "last_page": 2, "total": 24 } }
GET /tournaments/{id}
Pridobite podrobnosti turnirja in število udeležencev.
Odziv
{ "data": { "id": 15, "title": "Friday Night Frenzy", "tournament_type": "single_elimination", "status": "open", "registration_fee": "5.00", "no_player": 32, "team": 0 }, "meta": { "participant_count": 18 } }

Lestvica ELO

GET /elo/leaderboard
Pridobite lestvico najboljših ELO. Po želji filtrirajte po kategoriji igre.
ParameterVrstaOpis
category_idintegerFiltriraj po ID-ju igre/kategorije
limitintegerŠtevilo rezultatov (privzeto: 50)
Odziv
{ "data": [ { "rank": 1, "user_id": 42, "name": "ProGamer99", "user_slug": "progamer99", "elo_rating": 2150, "wins": 45, "losses": 12, "win_rate": 78.9, "profile_img": "profile/abc123.jpg" } ], "meta": { "total": 312 } }

Lige

GET /leagues
Seznam lig z izbirnim statusom in filtri kategorij.
ParameterVrstaOpis
statusstringFiltriraj po statusu lige
category_idintegerFiltriraj po ID-ju igre/kategorije
limitintegerRezultati na stran (privzeto: 20)
Odziv
{ "data": [ { "id": 3, "name": "Spring 2026 Pro League", "status": "active", "category": { "id": 5, "name": "Call of Duty" }, "total_participants": 48, "start_date": "2026-03-01", "end_date": "2026-05-31" } ], "meta": { "current_page": 1, "last_page": 1, "total": 6 } }
GET /leagues/{id}/standings
Pridobite ligaško lestvico (razvrstitev igralcev po točkah).
Odziv
{ "data": [ { "id": 1, "points": 2400, "wins": 12, "losses": 3, "user": { "id": 42, "name": "ProGamer99", "user_slug": "progamer99" } } ], "meta": { "total": 48 } }

Odzivi na napake

Vse napake vrnejo skladno ovojnico JSON. Objekt error vedno vsebuje strojno berljiv code in človeku berljiv message.

Oblika odziva na napako
{ "success": false, "error": { "code": "not_found", "message": "The requested resource could not be found." } }
Oblika potrditvene napake (422)
{ "success": false, "error": { "code": "validation_error", "message": "The given data was invalid.", "errors": { "category_id": ["The category id must be an integer."], "limit": ["The limit must not be greater than 100."] } } }

Statusne kode

200
OK — Zahteva uspela. Odgovor vsebuje zahtevane podatke.
400
Slaba zahteva — Zahteva je napačno oblikovana ali manjka zahtevanih parametrov. Preverite error.message za podrobnosti.
401
Nepooblaščeno — Missing or invalid API key. Ensure you're passing a valid key in the X-API-Key header.
403
Prepovedano — Vaš ključ API je bil onemogočen ali nima dovoljenja za ta vir. Preverite svoje Nastavitve razvijalca.
404
Ni najdeno — Zahtevani vir ne obstaja. Preverite polž, ID ali pot končne točke.
422
Napaka pri preverjanju — Parametri zahteve niso bili preverjeni. Objekt error.errors preslika imena polj v njihove posebne težave.
429
Rate Limited — Preveč zahtev. Glava Retry-After označuje, koliko sekund je treba počakati pred ponovnim poskusom.
500
Napaka strežnika — Na naši strani je prišlo do nepričakovane napake. Če se to nadaljuje, kontaktirajte podporo.

Referenca kod napak

KodaStatus HTTPOpis
invalid_api_key401Ključ API manjka, je napačno oblikovan ali ne obstaja
api_key_disabled403Ključ API je bil preklican ali onemogočen
not_found404Zahtevanega vira ni bilo mogoče najti
validation_error422Eden ali več parametrov zahteve je neveljavnih
rate_limited429Omejitev števila zahtev je presežena za ta ključ API
server_error500Notranja napaka strežnika — poskusite znova ali se obrnite na podporo

Omejitve hitrosti

Zahteve API so glede na ključ API omejene s hitrostjo. Ko presežete omejitev, zahteve vrnejo 429 Too Many Requests z glavo Retry-After.

Omejitve glede na stopnjo

StopnjaZahtevki / minuta (Privzeto)Max Keys
Zaganjalnik (brezplačno)605
PRO605
Ultimativno605
Partner605

Glave omejitev hitrosti

Zahteve API so glede na ključ API omejene s hitrostjo. Ko presežete omejitev, zahteve vrnejo 429 Too Many Requests z glavo Retry-After.

GlavaOpis
Retry-AfterNekaj sekund čakanja pred ponovnim poskusom (prisotno samo pri 429 odgovorih)

Najboljše prakse

Nasveti za ohranjanje znotraj omejitev:
  • Cache responses locally — stream and tournament data doesn't change every second.
  • Naročite se na webhooks za dogodke v realnem času namesto anketiranja končnih točk.
  • Paketne zahteve, kjer je to mogoče — uporabite parametre filtra, da dobite točno tisto, kar potrebujete, v manj klicih.

Webhooks (EventSub)

Namesto glasovanja se naročite na sprotna potisna obvestila. Ko pride do dogodka, D1Arena pošlje HTTP POST na vaš URL za povratni klic s obremenitvijo JSON, podpisano s HMAC-SHA256.

Nastavitev

Ustvarite naročnine na webhook v Nastavitve razvijalca. Vsaka naročnina zahteva:

  • URL povratnega klica — Javno dostopna končna točka HTTPS na vašem strežniku.
  • Dogodki — Ena ali več vrst dogodkov, na katere se lahko naročite.

You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.

Oblika koristnega tovora

Vsaka dostava webhooka pošlje telo JSON s to strukturo:

{ "id": "evt_a1b2c3d4e5f6", "event": "stream.online", "created_at": "2026-03-23T14:30:00Z", "data": { // Event-specific fields (see examples below) } }

Glave

Vsaka dobava vključuje naslednje glave za usmerjanje in preverjanje:

GlavaOpis
Content-Typeapplication/json
X-D1Arena-EventVrsta dogodka (npr. stream.online)
X-D1Arena-SignatureHMAC-SHA256 šestnajstiški izvleček neobdelanega telesa zahteve
X-D1Arena-Signature-VersionOblika podpisnega ključa: v2 za trenutne naročnine ali v1-hashed-secret za starejše naročnine
X-D1Arena-Delivery-IdEnolični UUID dostave — uporabite za deduplikacijo
X-D1Arena-TimestampČasovni žig Unix, kdaj je bil dogodek poslan

Preverjanje podpisov

Pred obdelavo webhooka vedno preverite glavo X-D1Arena-Signature. Podpis je izračunan kot HMAC-SHA256(raw_body, webhook_secret).

Za dostave v2 uporabite skrivnost whsec_, prikazano ob ustvarjanju naročnine. Za dostavo v1-hashed-secret pred nadgradnjo najprej izračunajte SHA256(whsec_secret) iz te prvotne skrivnosti in uporabite dobljeni šestnajstiški povzetek z malimi črkami kot ključ HMAC. Znova ustvarite naročnino, ko je to praktično, da se premaknete na v2.

PHP
// Get the raw body and signature header $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_D1ARENA_SIGNATURE'] ?? ''; // Compute expected signature $expected = hash_hmac('sha256', $payload, $webhookSecret); // Constant-time comparison to prevent timing attacks if (!hash_equals($expected, $signature)) { http_response_code(401); exit('Invalid signature'); } $event = json_decode($payload, true);
Node.js
const crypto = require('crypto'); app.post('/webhook', (req, res) => { const payload = req.rawBody; // Ensure raw body is available const signature = req.headers['x-d1arena-signature']; const expected = crypto .createHmac('sha256', WEBHOOK_SECRET) .update(payload) .digest('hex'); if (!crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) )) { return res.status(401).send('Invalid signature'); } const event = JSON.parse(payload); // Process event... res.status(200).send('OK'); });
Python
import hmac, hashlib, json def handle_webhook(request): payload = request.body signature = request.headers.get('X-D1Arena-Signature', '') expected = hmac.new( WEBHOOK_SECRET.encode(), payload, hashlib.sha256 ).hexdigest() if not hmac.compare_digest(expected, signature): return HttpResponse(status=401) event = json.loads(payload) # Process event... return HttpResponse(status=200)

Razpoložljivi dogodki

DogodekOpis
stream.onlinePretočni predvajalnik je bil predvajan v živo
stream.offlinePretočni predvajalnik je bil brez povezave
channel.followUporabnik je sledil kanalu
channel.subscribeNova naročnina navijača na kanal
channel.tipNamig je bil poslan strimerju
tournament.startedTekma turnirja se je začela
tournament.endedTurnir se je zaključil
tournament.match.completedZabeležen je bil rezultat tekme
clip.createdIz pretoka v živo je bil ustvarjen nov posnetek
overdrive.startedD1 Frenzy se je začel na kanalu
overdrive.level_upD1 Frenzy je napredoval na naslednjo stopnjo
overdrive.endedD1 Norost je končana ali potekla

Primeri obremenitve dogodkov

stream.online

{ "id": "evt_a1b2c3d4e5f6", "event": "stream.online", "created_at": "2026-03-23T14:30:00Z", "data": { "user_id": 42, "user_slug": "progamer99", "name": "ProGamer99", "stream_title": "Ranked Grind - Road to Champion", "category_id": 5, "category_name": "Call of Duty", "protocol": "RTMP", "started_at": "2026-03-23T14:30:00Z" } }

stream.offline

{ "id": "evt_f6e5d4c3b2a1", "event": "stream.offline", "created_at": "2026-03-23T17:45:00Z", "data": { "user_id": 42, "user_slug": "progamer99", "duration_seconds": 11700, "vod_id": 281 } }

channel.follow

{ "id": "evt_c1d2e3f4a5b6", "event": "channel.follow", "created_at": "2026-03-23T15:10:00Z", "data": { "follower_id": 88, "follower_slug": "newplayer", "followed_id": 42, "followed_slug": "progamer99" } }

channel.tip

{ "id": "evt_d1e2f3a4b5c6", "event": "channel.tip", "created_at": "2026-03-23T16:20:00Z", "data": { "streamer_id": 42, "streamer_slug": "progamer99", "tipper_id": 55, "tipper_slug": "clipmaster", "amount": "5.00", "currency": "USD", "message": "Great stream!" } }

tournament.match.completed

{ "id": "evt_e1f2a3b4c5d6", "event": "tournament.match.completed", "created_at": "2026-03-23T21:15:00Z", "data": { "tournament_id": 15, "tournament_title": "Friday Night Frenzy", "match_id": 204, "round": 2, "winner": { "id": 42, "slug": "progamer99", "name": "ProGamer99" }, "loser": { "id": 77, "slug": "rival_x", "name": "Rival_X" }, "score": "3-1" } }

clip.created

{ "id": "evt_b1c2d3e4f5a6", "event": "clip.created", "created_at": "2026-03-23T15:45:00Z", "data": { "clip_id": 99, "slug": "insane-1v4-clutch-abc", "title": "Insane 1v4 clutch", "duration": 28, "streamer_id": 42, "streamer_slug": "progamer99", "creator_id": 55, "creator_slug": "clipmaster", "category_id": 5 } }

Politika dostave in ponovnega poskusa

PoskusZamudaOpombe
1. (začetno)TakojPoslano v nekaj sekundah po dogodku
2. (ponovni poskus)30 sekundČe prvi poskus ne uspe ali poteče
3. (ponovni poskus)2 minutiEksponentni povratek
4. (končno)10 minutZadnji poskus pred označevanjem kot neuspešnim
Important: Your endpoint must respond with a 2xx status within 10 sekund. Non-2xx responses or timeouts trigger a retry. After 10 zaporednih napak, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Nastavitve razvijalca.

Najboljše prakse

  • Vedno preverite podpise pred obdelavo uporabnih obremenitev, da preprečite lažne dogodke.
  • Za deduplikacijo uporabite Delivery-Id — ponovni poskusi pošljejo isti ID, zato shranite obdelane ID-je, da se izognete dvojni obdelavi.
  • Hiter odziv, obdelava asinhrona — vrne 200 OK takoj in obravnava poslovno logiko v opravilu v ozadju.
  • Uporabljajte samo končne točke HTTPS — URL-ji webhook morajo uporabljati TLS. Povratni klici HTTP so zavrnjeni.
  • Uglajeno ravnajte z neznanimi dogodki — se lahko dodajo nove vrste dogodkov. Vrni 200 za neprepoznane dogodke namesto napake.

D1 Norost

D1 Frenzy sprožijo hitri nasveti in naročnine, medtem ko pretočni predvajalnik predvaja v živo. Napreduje skozi 5 stopenj z naraščajočimi cilji.

GET /api/overdrive/{streamerId}

Pridobite aktivni D1 Frenzy za streamer. Vrne {"active": false}, če nič.

{ "active": true, "level": 2, "progress": 150, "target": 250, "progress_pct": 60.0, "total_contributions": 8, "total_contributors": 5, "expires_at": "2026-03-22T15:30:00+00:00" }

Ciljne ravni

RavenTočke
1100
2250
3500
41,000
52,000

D1 Norost — Točke: Namig $1 → 100; Naročnina 500 × Stopnja. Trajanje: 5 minute; Ohladitev: 30 minute.

SDK razširitve

Zgradite ploščo po meri in prekrivne razširitve, ki jih lahko pretakalci namestijo na svoje strani kanala. Razširitve se izvajajo v okvirjih iframe v peskovniku in komunicirajo z gostiteljsko stranjo prek postMessage.

Kako začeti

  1. Ustvarite ključ API v Nastavitve razvijalca.
  2. Zgradite svojo razširitev kot samostojno stran HTML, ki gostuje v vaši domeni (potreben je HTTPS).
  3. Pošljite ga v pregled v razdelku Moje razširitve.
  4. Ko je odobren, ga lahko pretakalci namestijo iz Extension Marketplace.

Vrste razširitev

VrstaLokacijaVedenje
panelPod predvajalnikom tokaVidno, ko je tok v živo. Kartica polne širine, privzeta višina 300 slikovnih pik.
overlayPreko video predvajalnikaVidno v živo. Položaj/velikost, ki jo nadzira streamer prek orodja za pozicioniranje prekrivanja.

postMessage API

Vaša razširitev samodejno prejme kontekstne podatke, ko se naloži. Izvedite te dogodke:

Za vsako sporočilo uporabite natančen nadrejeni izvor D1Arena. Uradni SDK samodejno izpelje in potrdi ta izvor s strani za vdelavo.

Ker iframe razširitve namenoma uporabljajo neprozoren izvor peskovnika, gostitelj D1Arena preveri pristnost natančno registriranega okna iframe. Koda razširitve mora še vedno preverjati pristnost nadrejenega okna in natančnega izvora D1Arena, preden sprejme kontekst.

1. Signalna pripravljenost

var d1ParentOrigin = 'https://d1arena.com'; // Tell the host page your extension is ready for context window.parent.postMessage({ type: 'D1_EXT_READY' }, d1ParentOrigin);

2. Prejemanje konteksta

window.addEventListener('message', function(e) { if (e.source === window.parent && e.origin === d1ParentOrigin && e.data && e.data.type === 'D1_CONTEXT') { var ctx = e.data.payload; // ctx.channelId - Streamer's user ID // ctx.channelName - Streamer's display name // ctx.channelSlug - Streamer's URL slug // ctx.viewerId - Current viewer's ID (null if not logged in) // ctx.isLive - Whether the stream is currently live } });

3. Pošlji dejanja (neobvezno)

// Redirect the host page (e.g. for a "Storm" button) window.parent.postMessage({ type: 'D1_EXT_ACTION', action: 'storm', target: 'username-slug' }, d1ParentOrigin);

Obseg dovoljenj

Navedite, katere podatke potrebuje vaša razširitev. Pregledovalci preverijo, ali se vaša koda ujema z vašimi prijavljenimi dovoljenji.

Področje uporabeOmogoči dostop do
read:streamStanje toka, naslov, kategorija
read:viewersŠtevilo in seznam gledalcev
read:chatSporočila klepeta (prek kanala Pusher)
read:clipsPosnetki kanala prek /api/clips/{slug}
read:tournamentsInformacije o aktivnem ujemanju prek /api/active-match/{id}
read:channelProfil kanala, sledilci, urnik

Varnostne zahteve

Razširitve se izvajajo v iframe v peskovniku z sandbox="allow-scripts". Vaša razširitev ne more dostopa do piškotkov, localStorage ali pošilja overjene zahteve na d1arena.com.
  • Potreben je javni HTTPS — Vaš URL iframe mora uporabljati TLS in se mora razrešiti samo na javne omrežne naslove.
  • Človeku berljiv vir — Brez zamegljenega ali pomanjšanega JavaScripta. Pregledovalci morajo znati prebrati vašo kodo.
  • Brez nalaganja zunanjega skripta razen če je navedeno v vaši predložitvi. Knjižnice CDN (jQuery, Chart.js itd.) so v redu.
  • Brez ekstrakcije podatkov — Razširitve ne smejo pošiljati podatkov o gledalcih storitvam za analizo ali sledenje tretjih oseb.
  • Politika vsebine — Brez oglasov, vsebine NSFW, rudarjenja kriptovalut ali zlonamernega vedenja.

Postopek pregleda

StanjePomen
pendingPoslano, čaka na skrbniški pregled (običajno 1-3 delovne dni).
approvedOdobreno in vidno na tržnici razširitev.
rejectedZavrnjeno z razlogom. Odpravite težave in znova pošljite.
suspendedZačasno odstranjen zaradi kršitve pravilnika. Obrnite se na podporo.

Posodobitve različic

Če želite posodobiti odobreno razširitev, izbrišite trenutno različico in pošljite novo s povečano številko različice. Nova različica gre ponovno v pregled.

Dnevnik sprememb

Sledite spremembam API-ja in novim funkcijam. Spremljamo semantično različico in objavimo pomembne spremembe vsaj 30 dni vnaprej.

v1.0marec 2026
  • Začetna javna izdaja API-ja s preverjanjem pristnosti ključa API-ja.
  • Tokovi: Seznam tokov v živo, pridobite podrobnosti o pretakalnikih glede na polža.
  • Kategorije: Iskanje in seznam vseh kategorij iger.
  • Uporabniki: javni profili s konkurenčno statistiko, oceno ELO in številom medalj.
  • Posnetki: Prebrskajte in pridobite podrobnosti posnetkov z informacijami o pretakalniku/ustvarjalcu.
  • Turnirji: Seznam, filtriranje po statusu/ligi, pridobivanje števila udeležencev.
  • ELO Lestvica najboljših: Globalne lestvice in lestvice najboljših po kategorijah.
  • Lige: seznam lig z lestvico in razčlenitvijo točk.
  • D1 Frenzy: Status Frenzy v realnem času za katerega koli pretakalca.
  • Webhooks (EventSub): 12 vrst dogodkov, vključno s tokovi, kanali, turnirji, izrezki in dogodki Frenzy.
  • Omejitve hitrosti

Potrebujete pomoč?

Imate vprašanja o API? Kontaktirajte nas.