Mine põhisisu juurde
D1 Arena

D1 Arena

Loading...

D1 Arena

Arendaja API

kogukond

Arendaja API

Looge D1Arena andmetega roboteid, ülekatteid, vootööriistu ja integratsioone.

Autentimine

Kõik API-päringud nõuavad API-võtit, mis edastatakse päises X-API-Key / Authorization: Bearer.

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

API-võtme loomiseks minge oma juhtpaneelil aadressile Arendaja seaded. Teil võib olla kuni 5 võtit.

API päringute kiirus on API võtme kohta piiratud. Kui ületate limiidi, tagastavad päringud 429 Too Many Requests päisega Retry-After.

Baas-URL

https://d1arena.com/api/v1

Kõik lõpp-punktid tagastavad JSON-i. Leheküljega lõpp-punktid hõlmavad objekti meta koos current_page, last_page ja total.

Vood

GET /streams
Loetlege praegu toimuvad otseülekanded. Toetab lehekülgede ja kategooriate filtreerimist.
ParameeterTüüpKirjeldus
category_idintegerFiltreerige mängu/kategooria ID järgi
limitintegerTulemusi lehekülje kohta (vaikimisi: 20)
pageintegerLehekülje number
Vastus
{ "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}
Saate vaadata ühe voogedastaja reaalajas olekut ja voogesituse üksikasju kasutajanime või nälkja järgi.
Vastus
{ "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" } }

Kategooriad

GET /categories
Loetlege kõik mängukategooriad. Toetab otsingut ja lehekülgede jagamist.
ParameeterTüüpKirjeldus
searchstringFiltreerige kategooriaid nime järgi
limitintegerTulemusi lehekülje kohta (vaikimisi: 50)
Vastus
{ "data": [ { "id": 5, "name": "Call of Duty", "slug": "call-of-duty", "image": "categories/cod.png" } ], "meta": { "total": 24 } }

Kasutajad

GET /users/{slug}
Hankige mängija avalik profiil ja võistlusstatistika kasutajanime või nälkja järgi.
Vastus
{ "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 } } }

Klipid

GET /clips
Loetlege avalikud klipid. Toetab filtreerimist striimija ja kategooria järgi.
ParameeterTüüpKirjeldus
streamer_idintegerFiltreerige klippe striimija kasutajatunnuse järgi
category_idintegerFiltreerige mängu/kategooria ID järgi
limitintegerTulemusi lehekülje kohta (vaikimisi: 20)
Vastus
{ "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}
Hankige nälkja abil ühe klipi üksikasjad.
Vastus
{ "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" } } }

Turniirid

GET /tournaments
Loetle turniirid. Toetab filtreerimist oleku ja liiga järgi.
ParameeterTüüpKirjeldus
statusstringFiltreeri oleku järgi (nt open, in_progress, completed)
league_idintegerFiltreeri liiga ID järgi
limitintegerTulemusi lehekülje kohta (vaikimisi: 20)
Vastus
{ "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}
Hankige turniiri üksikasjad ja osalejate arv.
Vastus
{ "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 } }

ELO edetabel

GET /elo/leaderboard
Hankige ELO reitinguga edetabel. Soovi korral filtreerige mängukategooria järgi.
ParameeterTüüpKirjeldus
category_idintegerFiltreerige mängu/kategooria ID järgi
limitintegerTulemuste arv (vaikimisi: 50)
Vastus
{ "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 } }

Liigad

GET /leagues
Loetlege liigad valikuliste oleku- ja kategooriafiltritega.
ParameeterTüüpKirjeldus
statusstringFiltreeri liiga oleku järgi
category_idintegerFiltreerige mängu/kategooria ID järgi
limitintegerTulemusi lehekülje kohta (vaikimisi: 20)
Vastus
{ "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
Hankige liiga edetabel (mängijate paremusjärjestus punktide järgi).
Vastus
{ "data": [ { "id": 1, "points": 2400, "wins": 12, "losses": 3, "user": { "id": 42, "name": "ProGamer99", "user_slug": "progamer99" } } ], "meta": { "total": 48 } }

Vigade vastused

Kõik vead tagastavad järjepideva JSON-ümbriku. Objekt error sisaldab alati masinloetavat code ja inimloetavat message.

Vea vastuse vorming
{ "success": false, "error": { "code": "not_found", "message": "The requested resource could not be found." } }
Valideerimisvea vorming (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."] } } }

Olekukoodid

200
OK — Taotlus õnnestus. Vastus sisaldab nõutud andmeid.
400
Halb taotlus — Taotlus on valesti vormindatud või puuduvad nõutavad parameetrid. Vaadake üksikasju error.message-st.
401
Volitamata — Missing or invalid API key. Ensure you're passing a valid key in the X-API-Key header.
403
Keelatud — Teie API võti on keelatud või puudub selle ressursi luba. Kontrollige oma Arendaja seaded.
404
Ei leitud — Taotletud ressurssi pole olemas. Kontrollige nälkja, ID või lõpp-punkti tee.
422
Valideerimisviga — Taotluse parameetrite valideerimine ebaõnnestus. Objekt error.errors seostab väljade nimed nende konkreetsete probleemidega.
429
Rate Limited — Liiga palju taotlusi. Päis Retry-After näitab, mitu sekundit tuleb enne uuesti proovimist oodata.
500
Serveri viga — Meie poolel ilmnes ootamatu viga. Kui see püsib, võtke ühendust toega.

Veakoodide viide

KoodHTTP olekKirjeldus
invalid_api_key401API võti puudub, on valesti vormindatud või puudub
api_key_disabled403API võti on tühistatud või keelatud
not_found404Taotletud ressurssi ei leitud
validation_error422Üks või mitu päringu parameetrit on kehtetud
rate_limited429Selle API-võtme päringu määra limiit on ületatud
server_error500Siseserveri viga – proovige uuesti või võtke ühendust toega

Hindade piirangud

API päringute kiirus on API võtme kohta piiratud. Kui ületate limiidi, tagastavad päringud 429 Too Many Requests päisega Retry-After.

Piirangud taseme järgi

TaseTaotlused / minut (Vaikimisi)Max Keys
Starter (tasuta)605
PRO605
Ülim605
Partner605

Rate Limit päised

API päringute kiirus on API võtme kohta piiratud. Kui ületate limiidi, tagastavad päringud 429 Too Many Requests päisega Retry-After.

PäisKirjeldus
Retry-AfterSekundid oodata enne uuesti proovimist (esineb ainult 429 vastuse korral)

Parimad tavad

Näpunäiteid piirides püsimiseks:
  • Cache responses locally — stream and tournament data doesn't change every second.
  • Tellige webhooks, et vaadata reaalajas sündmusi küsitluse lõpp-punktide asemel.
  • Võimaluse korral paketttaotlused – kasutage filtriparameetreid, et saada vähemate kõnedega täpselt see, mida vajate.

Veebihaagid (EventSub)

Küsitluse asemel tellige reaalajas tõukemärguanded. Kui sündmus toimub, saadab D1Arena teie tagasihelistamise URL-ile HTTP POST-i koos JSON-i kasuliku koormusega, mis on allkirjastatud HMAC-SHA256-ga.

Seadistamine

Looge veebihaagi tellimusi rakenduses Arendaja seaded. Iga tellimus nõuab:

  • Tagasihelistamise URL — Avalikult juurdepääsetav HTTPS-i lõpp-punkt teie serveris.
  • Sündmused — Tellimiseks üks või mitu sündmuse tüüpi.

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

Kasuliku koorma vorming

Iga veebihaagi kohaletoimetamine saadab järgmise struktuuriga JSON-keha:

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

Päised

Iga tarne sisaldab järgmisi päiseid suunamiseks ja kinnitamiseks:

PäisKirjeldus
Content-Typeapplication/json
X-D1Arena-EventSündmuse tüüp (nt stream.online)
X-D1Arena-SignatureHMAC-SHA256 kuueteistkümnendlik kokkuvõte töötlemata päringu kehast
X-D1Arena-Signature-VersionAllkirjastamisvõtme vorming: v2 praeguste tellimuste jaoks või v1-hashed-secret pärandtellimuste jaoks
X-D1Arena-Delivery-IdAinulaadne kohaletoimetamise UUID – kasutage dubleerimiseks
X-D1Arena-TimestampUnixi ajatempel sündmuse saatmise ajast

Allkirjade kontrollimine

Enne veebihaagi töötlemist kontrollige alati päist X-D1Arena-Signature. Allkiri arvutatakse kui HMAC-SHA256(raw_body, webhook_secret).

v2 tarnete puhul kasutage tellimuse loomisel näidatud saladust whsec_. Täienduseelse v1-hashed-secret tarne jaoks arvutage esmalt algsest saladusest välja SHA256(whsec_secret) ja kasutage saadud väiketähtedega kuueteistkümnendlõigu võtmena HMAC. Võimalusel looge tellimus uuesti, et liikuda saidile 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)

Saadaolevad sündmused

SündmusKirjeldus
stream.onlineStreamer läks otseülekandesse
stream.offlineStriimer läks võrguühenduseta
channel.followKasutaja jälgis kanalit
channel.subscribeKanali uus toetaja tellimus
channel.tipStriimerile saadeti vihje
tournament.startedTurniiri matš on alanud
tournament.endedTurniir on lõppenud
tournament.match.completedMängu tulemus registreeriti
clip.createdOtseülekandest loodi uus klipp
overdrive.startedD1 Frenzy algas ühel kanalil
overdrive.level_upD1 Frenzy tõusis järgmisele tasemele
overdrive.endedD1 Frenzy lõpetatud või aegunud

Sündmuse kasuliku koormuse näited

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

Kohaletoimetamise ja uuesti proovimise eeskirjad

KatseViivitusMärkmed
1. (esialgne)VahetuSaadetud mõne sekundi jooksul pärast sündmust
2. (proovi uuesti)30 sekunditKui esimene katse ebaõnnestub või aegub
3. (proovi uuesti)2 minutitEksponentsiaalne taganemine
4. (finaal)10 minutitViimane katse enne ebaõnnestunuks märkimist
Important: Your endpoint must respond with a 2xx status within 10 sekundit. Non-2xx responses or timeouts trigger a retry. After 10 järjestikust ebaõnnestumist, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Arendaja seaded.

Parimad tavad

  • Kontrollige alati allkirju enne kasulike koormate töötlemist, et vältida võltsitud sündmusi.
  • Kasutage dubleerimiseks tarne ID-d — korduskatsed saadavad sama ID, nii et topelttöötlemise vältimiseks salvestage töödeldud ID-d.
  • Vasta kiiresti, töötle asünkroonselt — tagastage kohe 200 OK ja käsitlege äriloogikat taustatöös.
  • Kasutage ainult HTTPS-i lõpp-punkte — veebihaagi URL-id peavad kasutama TLS-i. HTTP tagasihelistamised lükatakse tagasi.
  • Käsitle tundmatuid sündmusi nõtkelt — võib lisada uusi sündmuste tüüpe. Tagasta 200 tundmatute sündmuste, mitte vigade korral.

D1 meeletus

D1 Frenzy käivitavad kiired näpunäited ja tellimused striimimise ajal. See edeneb 5 tasemeni koos kasvavate eesmärkidega.

GET /api/overdrive/{streamerId}

Hankige striimimiseks aktiivne D1 Frenzy. Tagastab {"active": false}, kui seda pole.

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

Taseme eesmärgid

TasePunktid
1100
2250
3500
41,000
52,000

D1 meeletus — Punktid: Vihje $1 → 100; Tellimus 500 × Tase. Kestus: 5 Minutid; Jahtumine: 30 Minutid.

Laienduse SDK

Looge kohandatud paneeli- ja ülekattelaiendeid, mida striimijad saavad oma kanalilehtedele installida. Laiendused töötavad liivakastis iframe'ides ja suhtlevad hostlehega postMessage kaudu.

Alustamine

  1. Looge rakenduses Arendaja seaded API võti.
  2. Looge laiendus eraldiseisva HTML-lehena, mida hostitakse teie domeenis (vajalik HTTPS).
  3. Esitage see jaotises Minu laiendused ülevaatamiseks.
  4. Pärast heakskiitmist saavad striimijad selle installida Extension Marketplace'ist.

Laienduse tüübid

TüüpAsukohtKäitumine
panelVoopleieri allNähtav otseülekande ajal. Täislaiusega kaart, vaikekõrgus 300 pikslit.
overlayÜle videopleieriNähtav reaalajas. Asendit/suurust juhib striimer ülekatte positsioneerimistööriista kaudu.

postMessage API

Teie laiendus saab laadimisel kontekstiandmed automaatselt. Rakendage need sündmused:

Kasutage iga sõnumi puhul täpset D1Arena lähtepunkti. Ametlik SDK tuletab ja kinnitab selle päritolu manustuslehelt automaatselt.

Kuna laiendi iframe'id kasutavad tahtlikult läbipaistmatut liivakasti päritolu, autentib D1Arena host täpselt registreeritud iframe'i akna. Laienduskood peab enne konteksti aktsepteerimist siiski autentima emaakna ja täpselt D1Arena päritolu.

1. Signaali valmidus

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

2. Saate konteksti

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. Saatke toimingud (valikuline)

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

Lubade ulatused

Deklareerige, milliseid andmeid teie laiendus vajab. Ülevaatajad kontrollivad, et teie kood vastab teie deklareeritud lubadele.

UlatusAnnab juurdepääsu
read:streamVoo olek, pealkiri, kategooria
read:viewersVaatajate arv ja loend
read:chatVestlussõnumid (pusheri kanali kaudu)
read:clipsKanali klipid /api/clips/{slug} kaudu
read:tournamentsAktiivse mängu teave /api/active-match/{id} kaudu
read:channelKanali profiil, jälgijad, ajakava

Turvanõuded

Laiendused töötavad liivakastiga iframe-s koos sandbox="allow-scripts"-ga. Teie laiendus ei saa pääseb juurde küpsistele, kohalikule salvestusruumile või esitage saidile d1arena.com autentitud taotlusi.
  • Avalik HTTPS nõutav — Teie iframe'i URL peab kasutama TLS ja määrama ainult avalike võrguaadresside.
  • Inimloetav allikas — Puudub hägustatud või ainult minimeeritud JavaScript. Ülevaatajad peavad saama teie koodi lugeda.
  • Välist skripti ei laadita välja arvatud juhul, kui see on teie avalduses märgitud. CDN-i teegid (jQuery, Chart.js jne) on korras.
  • Andmete väljafiltreerimine puudub — Laiendused ei tohi saata vaatajate andmeid kolmanda osapoole analüüsi- või jälgimisteenustele.
  • Sisupoliitika — Ei mingeid reklaame, NSFW sisu, krüptoraha kaevandamist ega pahatahtlikku käitumist.

Ülevaatusprotsess

OlekTähendus
pendingEsitatud, ootab administraatori ülevaatust (tavaliselt 1–3 tööpäeva).
approvedKinnitatud ja laiendusturul nähtav.
rejectedPõhjusega tagasi lükatud. Parandage probleemid ja esitage uuesti.
suspendedEeskirjade rikkumise tõttu ajutiselt eemaldatud. Võtke ühendust toega.

Versiooni värskendused

Kinnitatud laienduse värskendamiseks kustutage praegune versioon ja esitage uus suurendatud versiooninumbriga. Uus versioon läbib uuesti ülevaatuse.

Muudatuste logi

Jälgige API muudatusi ja uusi funktsioone. Jälgime semantilist versioonimist ja teatame purunevatest muudatustest vähemalt 30 päeva ette.

v1.0märts 2026
  • API esialgne avalik väljalase API võtme autentimisega.
  • Vood: loendage otseülekandeid, hankige striimijate üksikasju.
  • Kategooriad: otsige ja loetlege kõik mängukategooriad.
  • Kasutajad: avalikud profiilid konkurentsistatistika, ELO reitingu ja medalite arvuga.
  • Klipid: sirvige ja hankige klipi üksikasju voogedastaja/looja teabe abil.
  • Turniirid: loendage, filtreerige oleku/liiga järgi, vaadake osalejate arvu.
  • ELO edetabel: globaalsed ja kategooriate edetabelid.
  • Liigad: loetlege liigad koos tabeliseisude ja punktide jaotusega.
  • D1 Frenzy: reaalajas meeletu olek iga striimija jaoks.
  • Veebihaagid (EventSub): 12 sündmuse tüüpi, sealhulgas voog, kanal, turniir, klipp ja meeletud sündmused.
  • Hindade piirangud

Kas vajate abi?

Kas teil on küsimusi API kohta? Võtke meiega ühendust.