Preskočiť na hlavný obsah
D1 Arena

D1 Arena

Loading...

D1 Arena

Developer API

Spoločenstva

Developer API

Vytvárajte roboty, prekrytia, streamovacie nástroje a integrácie s údajmi D1Arena.

Autentifikácia

Všetky požiadavky API vyžadujú kľúč API odovzdaný v hlavičke X-API-Key / Authorization: Bearer.

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

Ak chcete vytvoriť kľúč API, prejdite na Nastavenia vývojára na svojom informačnom paneli. Môžete mať až 5 kľúčov.

Požiadavky API sú obmedzené rýchlosťou na kľúč API. Keď limit prekročíte, žiadosti vrátia 429 Too Many Requests s hlavičkou Retry-After.

Základná adresa URL

https://d1arena.com/api/v1

Všetky koncové body vracajú JSON. Stránkované koncové body zahŕňajú objekt meta s current_page, last_page a total.

Prúdy

GET /streams
Zoznam aktuálnych priamych prenosov. Podporuje stránkovanie a filtrovanie kategórií.
ParameterTypPopis
category_idintegerFiltrujte podľa ID hry/kategórie
limitintegerPočet výsledkov na stránku (predvolená hodnota: 20)
pageintegerČíslo strany
odpoveď
{ "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}
Získajte živý stav jedného streamera a podrobnosti o streame podľa používateľského mena alebo slimáka.
odpoveď
{ "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" } }

kategórie

GET /categories
Uveďte všetky kategórie hier. Podporuje vyhľadávanie a stránkovanie.
ParameterTypPopis
searchstringFiltrujte kategórie podľa názvu
limitintegerPočet výsledkov na stránku (predvolená hodnota: 50)
odpoveď
{ "data": [ { "id": 5, "name": "Call of Duty", "slug": "call-of-duty", "image": "categories/cod.png" } ], "meta": { "total": 24 } }

Používatelia

GET /users/{slug}
Získajte verejný profil hráča a súťažné štatistiky podľa používateľského mena alebo slimáka.
odpoveď
{ "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 } } }

Klipy

GET /clips
Zoznam verejných klipov. Podporuje filtrovanie podľa streamera a kategórie.
ParameterTypPopis
streamer_idintegerFiltrujte klipy podľa ID používateľa streamera
category_idintegerFiltrujte podľa ID hry/kategórie
limitintegerPočet výsledkov na stránku (predvolená hodnota: 20)
odpoveď
{ "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}
Získajte podrobnosti o jednom klipe pomocou slimáka.
odpoveď
{ "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" } } }

Turnaje

GET /tournaments
Zoznam turnajov. Podporuje filtrovanie podľa stavu a ligy.
ParameterTypPopis
statusstringFiltrujte podľa stavu (napr. open, in_progress, completed)
league_idintegerFiltrujte podľa ID ligy
limitintegerPočet výsledkov na stránku (predvolená hodnota: 20)
odpoveď
{ "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}
Získajte podrobnosti o turnaji a počet účastníkov.
odpoveď
{ "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 } }

Rebríček ELO

GET /elo/leaderboard
Získajte rebríček hodnotenia ELO. Voliteľne filtrujte podľa kategórie hry.
ParameterTypPopis
category_idintegerFiltrujte podľa ID hry/kategórie
limitintegerPočet výsledkov (predvolená hodnota: 50)
odpoveď
{ "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 } }

ligy

GET /leagues
Zoznam líg s voliteľnými filtrami stavu a kategórií.
ParameterTypPopis
statusstringFiltrujte podľa stavu ligy
category_idintegerFiltrujte podľa ID hry/kategórie
limitintegerPočet výsledkov na stránku (predvolená hodnota: 20)
odpoveď
{ "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
Získajte ligové poradie (hodnotenie hráčov podľa bodov).
odpoveď
{ "data": [ { "id": 1, "points": 2400, "wins": 12, "losses": 3, "user": { "id": 42, "name": "ProGamer99", "user_slug": "progamer99" } } ], "meta": { "total": 48 } }

Odpovede na chyby

Všetky chyby vracajú konzistentnú obálku JSON. Objekt error vždy obsahuje strojovo čitateľný code a človekom čitateľný message.

Formát odpovede na chybu
{ "success": false, "error": { "code": "not_found", "message": "The requested resource could not be found." } }
Formát chyby overenia (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."] } } }

Stavové kódy

200
OK — Žiadosť bola úspešná. Odpoveď obsahuje požadované údaje.
400
Zlá požiadavka — Požiadavka má nesprávny formát alebo chýbajú požadované parametre. Podrobnosti nájdete v error.message.
401
Neoprávnené — Missing or invalid API key. Ensure you're passing a valid key in the X-API-Key header.
403
Zakázané — Váš kľúč API bol zakázaný alebo nemá povolenie pre tento zdroj. Skontrolujte svoje Nastavenia vývojára.
404
Nenájdené — Požadovaný zdroj neexistuje. Overte cestu slug, ID alebo koncový bod.
422
Chyba overenia — Overenie parametrov požiadavky zlyhalo. Objekt error.errors mapuje názvy polí na ich konkrétne problémy.
429
Obmedzená sadzba — Príliš veľa žiadostí. Hlavička Retry-After udáva, koľko sekúnd sa má čakať, kým to zopakujete.
500
Chyba servera — Na našej strane sa vyskytla neočakávaná chyba. Ak to pretrváva, kontaktujte podporu.

Odkaz na chybové kódy

kódStav HTTPPopis
invalid_api_key401Kľúč API chýba, má nesprávny tvar alebo neexistuje
api_key_disabled403Kľúč API bol odvolaný alebo zakázaný
not_found404Požadovaný zdroj sa nepodarilo nájsť
validation_error422Jeden alebo viacero parametrov požiadavky je neplatných
rate_limited429Pre tento kľúč API bol prekročený limit počtu žiadostí
server_error500Interná chyba servera – skúste to znova alebo kontaktujte podporu

Obmedzenia sadzieb

Požiadavky API sú obmedzené rýchlosťou na kľúč API. Keď limit prekročíte, žiadosti vrátia 429 Too Many Requests s hlavičkou Retry-After.

Limity podľa úrovne

TierŽiadosti / minúta (Predvolené)Max Keys
Štartér (zadarmo)605
PRO605
Ultimate605
Partner605

Hlavičky limitu sadzby

Požiadavky API sú obmedzené rýchlosťou na kľúč API. Keď limit prekročíte, žiadosti vrátia 429 Too Many Requests s hlavičkou Retry-After.

HlavičkaPopis
Retry-AfterSekundy čakania pred opätovným pokusom (prítomné iba pri 429 odpovediach)

osvedčené postupy

Tipy, ako dodržať limity:
  • Cache responses locally — stream and tournament data doesn't change every second.
  • Prihláste sa na odber webhooks pre udalosti v reálnom čase namiesto koncových bodov prieskumu.
  • Dávkové požiadavky tam, kde je to možné – pomocou parametrov filtra získate presne to, čo potrebujete, za menej hovorov.

Webhooky (EventSub)

Prihláste sa na odber upozornení push v reálnom čase namiesto hlasovania. Keď nastane udalosť, D1Arena odošle HTTP POST na vašu URL spätného volania s JSON dátovým obsahom podpísaným pomocou HMAC-SHA256.

Nastavenie

Vytvorte odbery webhooku v Nastavenia vývojára. Každé predplatné vyžaduje:

  • Adresa URL spätného volania — Verejne prístupný koncový bod HTTPS na vašom serveri.
  • Udalosti — Jeden alebo viac typov udalostí na odber.

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

Formát užitočného zaťaženia

Každé doručenie webhooku odosiela telo JSON s touto štruktúrou:

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

Hlavičky

Každá dodávka obsahuje nasledujúce hlavičky na smerovanie a overenie:

HlavičkaPopis
Content-Typeapplication/json
X-D1Arena-EventTyp udalosti (napr. stream.online)
X-D1Arena-SignatureHMAC-SHA256 hexadecimálny súhrn nespracovaného tela požiadavky
X-D1Arena-Signature-VersionFormát podpisového kľúča: v2 pre aktuálne odbery alebo v1-hashed-secret pre staršie odbery
X-D1Arena-Delivery-IdJedinečné UUID doručenia – použite na deduplikáciu
X-D1Arena-TimestampUnix časová pečiatka, kedy bola udalosť odoslaná

Overovanie podpisov

Pred spracovaním webhooku vždy overte hlavičku X-D1Arena-Signature. Podpis sa vypočíta ako HMAC-SHA256(raw_body, webhook_secret).

Pre dodávky v2 použite tajný kľúč whsec_ zobrazený pri vytvorení predplatného. V prípade doručenia v1-hashed-secret pred inováciou najskôr vypočítajte SHA256(whsec_secret) z tohto pôvodného tajného kľúča a použite výsledný hexadecimálny súhrn malých písmen ako kľúč HMAC. Keď to bude praktické, znova vytvorte predplatné a prejdite 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)

Dostupné udalosti

UdalosťPopis
stream.onlineVysielal streamer
stream.offlineStreamer prešiel do režimu offline
channel.followPoužívateľ sledoval kanál
channel.subscribeNové odbery podporovateľov na kanáli
channel.tipStreamerovi bol zaslaný tip
tournament.startedTurnajový zápas sa začal
tournament.endedSkončil sa turnaj
tournament.match.completedBol zaznamenaný výsledok zápasu
clip.createdZo živého prenosu bol vytvorený nový klip
overdrive.startedD1 Frenzy začalo na kanáli
overdrive.level_upD1 Frenzy postúpil do ďalšej úrovne
overdrive.endedD1 Frenzy dokončená alebo vypršala

Príklady užitočného zaťaženia udalosti

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 } }

Pravidlá doručenia a opätovného pokusu

PokusOneskoreniePoznámky
1. (počiatočné)OkamžitéOdoslané do niekoľkých sekúnd od udalosti
2. (skúsiť znova)30 sekúndAk prvý pokus zlyhá alebo vyprší časový limit
3. (skúsiť znova)2 minútyExponenciálny ústup
4. (finále)10 minútPosledný pokus pred označením ako neúspešný
Important: Your endpoint must respond with a 2xx status within 10 sekúnd. Non-2xx responses or timeouts trigger a retry. After 10 po sebe idúcich zlyhaní, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Nastavenia vývojára.

osvedčené postupy

  • Vždy overujte podpisy pred spracovaním dát, aby sa predišlo falošným udalostiam.
  • Na deduplikáciu použite Delivery-Id — opakované pokusy odosielajú rovnaké ID, takže spracované ID ukladajte, aby ste predišli dvojitému spracovaniu.
  • Reagujte rýchlo, spracujte asynchrónne — okamžite vráťte 200 OK a spravujte obchodnú logiku v úlohe na pozadí.
  • Používajte iba koncové body HTTPS — Webové adresy webhooku musia používať TLS. Spätné volania HTTP sú odmietnuté.
  • Zvládajte neznáme udalosti s gráciou — môžu byť pridané nové typy udalostí. Vráťte 200 pre nerozpoznané udalosti, nie pre chybu.

D1 Frenzy

D1 Frenzy sa spúšťa rýchlymi tipmi a odbermi, keď je streamer naživo. Postupuje cez 5 úrovní s rastúcimi cieľmi.

GET /api/overdrive/{streamerId}

Získajte aktívnu D1 Frenzy pre streamera. Ak žiadne, vráti {"active": false}.

{ "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" }

Úroveň cieľov

úroveňBody
1100
2250
3500
41,000
52,000

D1 Frenzy — Body: Tip $1 → 100; Predplatné 500 × Tier. Trvanie: 5 Minúty; Cooldown: 30 Minúty.

Rozšírenie SDK

Vytvorte si vlastný panel a prekryvné rozšírenia, ktoré si streameri môžu nainštalovať na svoje stránky kanála. Rozšírenia sa spúšťajú v rámcoch iframe v karanténe a komunikujú s hostiteľskou stránkou prostredníctvom postMessage.

Začíname

  1. Vytvorte kľúč API v Nastavenia vývojára.
  2. Zostavte svoje rozšírenie ako samostatnú stránku HTML hostenú na vašej doméne (vyžaduje sa HTTPS).
  3. Odošlite ho na kontrolu v sekcii Moje rozšírenia.
  4. Po schválení si ho streameri môžu nainštalovať z Extension Marketplace.

Typy rozšírení

TypPolohaSprávanie
panelPod prehrávačom streamovViditeľné pri priamom prenose. Karta s plnou šírkou, predvolená výška 300 pixelov.
overlayCez prehrávač videaViditeľné naživo. Poloha/veľkosť ovládaná streamerom pomocou nástroja na polohovanie prekrytia.

postMessage API

Vaše rozšírenie prijíma kontextové údaje automaticky pri načítaní. Implementujte tieto udalosti:

Pre každú správu použite presný nadradený pôvod D1Arena. Oficiálny SDK odvodzuje a overuje tento pôvod zo stránky vkladania automaticky.

Keďže prvky iframe rozšírenia zámerne používajú nepriehľadný pôvod v karanténe, hostiteľ D1Arena overuje presné zaregistrované okno prvku iframe. Kód rozšírenia musí pred prijatím kontextu overiť rodičovské okno a presný pôvod D1Arena.

1. Pripravenosť na signál

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

2. Prijať kontext

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. Odoslať akcie (voliteľné)

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

Rozsahy povolení

Uveďte, aké údaje vaše rozšírenie potrebuje. Recenzenti overia, či váš kód zodpovedá vašim deklarovaným povoleniam.

RozsahUdeľuje prístup k
read:streamStav streamu, názov, kategória
read:viewersPočet a zoznam divákov
read:chatChatové správy (cez kanál Pusher)
read:clipsKlipy kanálov cez /api/clips/{slug}
read:tournamentsInformácie o aktívnom zápase cez /api/active-match/{id}
read:channelProfil kanála, sledovatelia, plán

Bezpečnostné požiadavky

Rozšírenia sa spúšťajú v rámček iframe v karanténe s sandbox="allow-scripts". Vaše rozšírenie nemôže pristupuje k súborom cookie, localStorage alebo odosiela overené požiadavky na d1arena.com.
  • Vyžaduje sa verejné HTTPS — Vaša adresa URL prvku iframe musí používať TLS a musí sa prenášať iba na adresy verejnej siete.
  • Ľudsky čitateľný zdroj — Žiadny zahmlený alebo iba miniifikovaný JavaScript. Recenzenti musia byť schopní prečítať váš kód.
  • Žiadne externé načítanie skriptu pokiaľ nie je uvedené vo vašom podaní. Knižnice CDN (jQuery, Chart.js atď.) sú v poriadku.
  • Žiadna exfiltrácia údajov — Rozšírenia nesmú odosielať údaje divákov do analytických alebo sledovacích služieb tretích strán.
  • Pravidlá pre obsah — Žiadne reklamy, obsah NSFW, ťažba kryptomien ani škodlivé správanie.

Proces kontroly

StavVýznam
pendingOdoslané, čaká sa na kontrolu správcu (zvyčajne 1 – 3 pracovné dni).
approvedSchválené a viditeľné na trhu rozšírení.
rejectedOdmietnuté s dôvodom. Opravte problémy a znova odošlite.
suspendedDočasne odstránené pre porušenie pravidiel. Kontaktujte podporu.

Aktualizácie verzií

Ak chcete aktualizovať schválené rozšírenie, odstráňte aktuálnu verziu a odošlite novú so zvýšeným číslom verzie. Nová verzia opäť prechádza kontrolou.

Denník zmien

Sledujte zmeny API a nové funkcie. Dodržiavame sémantické verzie a oznamujeme prelomové zmeny najmenej 30 dní vopred.

v1.0marec 2026
  • Počiatočné verejné vydanie API s autentifikáciou kľúčom API.
  • Streamy: Uveďte zoznam priamych prenosov a získajte podrobnosti o streame podľa jednotlivých záberov.
  • Kategórie: Vyhľadajte a uveďte všetky kategórie hier.
  • Používatelia: Verejné profily s konkurenčnými štatistikami, hodnotením ELO a počtom medailí.
  • Klipy: Prehliadajte a získavajte podrobnosti o klipe s informáciami o streamerovi/tvorcovi.
  • Turnaje: zoznam, filtrovanie podľa stavu/ligy, získanie počtu účastníkov.
  • Výsledková tabuľka ELO: Globálne výsledkové tabuľky a rebríčky podľa kategórií.
  • Ligy: Zoznam líg s tabuľkami a bodovými rozpismi.
  • D1 Frenzy: Stav šialenstva v reálnom čase pre každého streamera.
  • Webhooky (EventSub): 12 typov udalostí vrátane streamov, kanálov, turnajov, klipov a udalostí Frenzy.
  • Obmedzenia sadzieb

Potrebujete pomoc?

Máte otázky týkajúce sa API? Kontaktujte nás.