Creați roboți, suprapuneri, instrumente de transmitere în flux și integrări cu datele D1Arena.
Autentificare
Toate solicitările API necesită o cheie API transmisă în antetul X-API-Key / Authorization: Bearer.
Pentru a crea o cheie API, accesați Setări pentru dezvoltatori din tabloul de bord. Puteți avea până la 5 chei.
429 Too Many Requests cu un antet Retry-After.
Adresa URL de bază
Toate punctele finale returnează JSON. Punctele finale paginate includ un obiect meta cu current_page, last_page și total.
Fluxuri
| Parametru | Tip | Descriere |
|---|---|---|
category_id | integer | Filtrați după ID joc/categorie |
limit | integer | Rezultate pe pagină (implicit: 20) |
page | integer | Numărul paginii |
Categorii
| Parametru | Tip | Descriere |
|---|---|---|
search | string | Filtrați categoriile după nume |
limit | integer | Rezultate pe pagină (implicit: 50) |
Utilizatori
Clipuri
| Parametru | Tip | Descriere |
|---|---|---|
streamer_id | integer | Filtrați clipurile după ID-ul de utilizator al streamerului |
category_id | integer | Filtrați după ID joc/categorie |
limit | integer | Rezultate pe pagină (implicit: 20) |
Turnee
| Parametru | Tip | Descriere |
|---|---|---|
status | string | Filtrați după stare (de exemplu, open, in_progress, completed) |
league_id | integer | Filtrați după ID-ul ligii |
limit | integer | Rezultate pe pagină (implicit: 20) |
Clasamentul ELO
| Parametru | Tip | Descriere |
|---|---|---|
category_id | integer | Filtrați după ID joc/categorie |
limit | integer | Număr de rezultate (implicit: 50) |
Ligi
| Parametru | Tip | Descriere |
|---|---|---|
status | string | Filtrați după statutul ligii |
category_id | integer | Filtrați după ID joc/categorie |
limit | integer | Rezultate pe pagină (implicit: 20) |
Răspunsuri de eroare
Toate erorile returnează un plic JSON consistent. Obiectul error conține întotdeauna un code care poate fi citit de mașină și un message care poate fi citit de către om.
Coduri de stare
Referință coduri de eroare
| Cod | Stare HTTP | Descriere |
|---|---|---|
invalid_api_key | 401 | Cheia API lipsește, este malformată sau nu există |
api_key_disabled | 403 | Cheia API a fost revocată sau dezactivată |
not_found | 404 | Resursa solicitată nu a putut fi găsită |
validation_error | 422 | Unul sau mai mulți parametri de solicitare sunt nevalidi |
rate_limited | 429 | Limita ratei de solicitare a fost depășită pentru această cheie API |
server_error | 500 | Eroare internă de server — vă rugăm să reîncercați sau să contactați asistența |
Limite de rate
Solicitările API sunt limitate la rate pentru fiecare cheie API. Când depășiți limita, solicitările returnează 429 Too Many Requests cu un antet Retry-After.
Limite în funcție de nivel
| Nivelul | Cereri / Minut (Implicit) | Chei maxime |
|---|---|---|
| Starter (gratuit) | 60 | 5 |
| PRO | 60 | 5 |
| Ultima | 60 | 5 |
| Partener | 60 | 5 |
Antete pentru limita de rată
Solicitările API sunt limitate la rate pentru fiecare cheie API. Când depășiți limita, solicitările returnează 429 Too Many Requests cu un antet Retry-After.
| Antet | Descriere |
|---|---|
Retry-After | Secunde de așteptat înainte de a reîncerca (prezent doar pentru 429 de răspunsuri) |
Cele mai bune practici
- Cache responses locally — stream and tournament data doesn't change every second.
- Abonați-vă la webhooks pentru evenimente în timp real în loc de punctele finale de sondare.
- Solicitări în loturi acolo unde este posibil — utilizați parametrii de filtrare pentru a obține exact ceea ce aveți nevoie în mai puține apeluri.
Webhooks (EventSub)
Abonați-vă la notificări push în timp real în loc să faceți sondaje. Când are loc un eveniment, D1Arena trimite un HTTP POST la adresa URL de apel invers cu o sarcină utilă JSON semnată cu HMAC-SHA256.
Configurare
Creați abonamente webhook în Setări pentru dezvoltatori. Fiecare abonament necesită:
- Adresa URL de apel invers — Un punct final HTTPS accesibil public pe serverul dvs.
- Evenimente — Unul sau mai multe tipuri de evenimente la care să vă abonați.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Format de încărcare utilă
Fiecare livrare webhook trimite un corp JSON cu această structură:
Anteturi
Fiecare livrare include următoarele antete pentru rutare și verificare:
| Antet | Descriere |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Tip de eveniment (de exemplu, stream.online) |
X-D1Arena-Signature | HMAC-SHA256 digerare hexagonală a corpului cererii brute |
X-D1Arena-Signature-Version | Format cheie de semnare: v2 pentru abonamentele curente sau v1-hashed-secret pentru abonamentele vechi |
X-D1Arena-Delivery-Id | UUID unic de livrare — utilizat pentru deduplicare |
X-D1Arena-Timestamp | Marca temporală Unix a când a fost trimis evenimentul |
Verificarea semnăturilor
Verificați întotdeauna antetul X-D1Arena-Signature înainte de a procesa un webhook. Semnătura este calculată ca HMAC-SHA256(raw_body, webhook_secret).
Pentru livrările v2, utilizați secretul whsec_ afișat când a fost creat abonamentul. Pentru o livrare v1-hashed-secret înainte de actualizare, mai întâi calculați SHA256(whsec_secret) din acel secret original și utilizați rezumatul hexadecimal rezultat cu litere mici ca cheie HMAC. Recreează abonamentul atunci când este practic pentru a trece la v2.
Evenimente disponibile
| Eveniment | Descriere |
|---|---|
| stream.online | Un streamer a intrat în direct |
| stream.offline | Un streamer a fost offline |
| channel.follow | Un utilizator a urmărit un canal |
| channel.subscribe | Abonament nou pentru suporteri pe un canal |
| channel.tip | Un pont a fost trimis unui streamer |
| tournament.started | A început un meci de turneu |
| tournament.ended | S-a încheiat un turneu |
| tournament.match.completed | A fost înregistrat un rezultat al meciului |
| clip.created | Un nou clip a fost creat dintr-un stream live |
| overdrive.started | D1 Frenzy a început pe un canal |
| overdrive.level_up | D1 Frenzy a avansat la nivelul următor |
| overdrive.ended | D1 Frenez s-a încheiat sau a expirat |
Exemple de sarcină utilă pentru evenimente
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Politica de livrare și reîncercare
| încercare | Întârziere | Note |
|---|---|---|
| primul (inițial) | Imediat | Trimis în câteva secunde de la eveniment |
| al doilea (reîncercați) | 30 de secunde | Dacă prima încercare eșuează sau expiră |
| a treia (reîncercați) | 2 minute | Retragere exponențială |
| al 4-lea (finala) | 10 minute | Ultima încercare înainte de marcarea ca eșuată |
2xx status within 10 secunde. Non-2xx responses or timeouts trigger a retry. After 10 eșecuri consecutive, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Setări pentru dezvoltatori.
Cele mai bune practici
- Verificați întotdeauna semnăturile înainte de procesarea sarcinilor utile pentru a preveni evenimentele falsificate.
- Utilizați ID-ul de livrare pentru deduplicare — reîncercările trimit același ID, așa că stocați ID-urile procesate pentru a evita dubla procesare.
- Răspunde rapid, procesează asincron — returnați
200 OKimediat și gestionați logica de afaceri într-o lucrare de fundal. - Utilizați numai punctele finale HTTPS — URL-urile webhook trebuie să utilizeze TLS. Apelurile HTTP sunt respinse.
- Gestionați cu grație evenimentele necunoscute — pot fi adăugate noi tipuri de evenimente. Returnați
200pentru evenimente nerecunoscute și nu pentru erori.
D1 frenezie
D1 Frenzy este declanșată de sfaturi și abonamente rapide în timp ce un streamer este live. Progresează prin 5 niveluri cu ținte crescânde.
GET /api/overdrive/{streamerId}
Obțineți D1 Frenzy activ pentru un streamer. Returnează {"active": false} dacă nu există.
Ținte de nivel
| Nivel | Puncte |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 frenezie — Puncte: Sfat $1 → 100; Abonament 500 × Nivelul. Durata: 5 Minute; Cooldown: 30 Minute.
Extensie SDK
Creați panouri personalizate și extensii de suprapunere pe care streamerii le pot instala pe paginile lor de canal. Extensiile rulează în iframe sandbox și comunică cu pagina gazdă prin postMessage.
Noțiuni introductive
- Creați o cheie API în Setări pentru dezvoltatori.
- Creați-vă extensia ca o pagină HTML autonomă găzduită pe domeniul dvs. (este necesar HTTPS).
- Trimiteți-l spre examinare în secțiunea Extensiile mele.
- Odată aprobat, streamerii îl pot instala de pe Extension Marketplace.
Tipuri de extensii
| Tip | Locație | Comportament |
|---|---|---|
panel | Sub playerul de flux | Vizibil atunci când fluxul este live. Card cu lățime completă, înălțime implicită de 300 px. |
overlay | Peste playerul video | Vizibil în direct. Poziția/dimensiunea controlată de streamer prin instrumentul de poziționare suprapusă. |
API postMessage
Extensia dvs. primește automat date de context atunci când se încarcă. Implementați aceste evenimente:
Utilizați originea părinte exactă D1Arena pentru fiecare mesaj. SDK oficial derivă și validează această origine din pagina de încorporare automat.
Deoarece iframe-urile de extensie folosesc în mod intenționat o origine sandbox opac, gazda D1Arena autentifică fereastra iframe înregistrată exactă. Codul de extensie trebuie să autentifice în continuare fereastra părinte și exact originea D1Arena înainte de a accepta contextul.
1. Pregătirea semnalului
2. Primește context
3. Trimiteți acțiuni (opțional)
Domenii de aplicare
Declarați de ce date are nevoie extensia dvs. Examinatorii verifică că codul dvs. se potrivește cu permisiunile declarate.
| Domeniul de aplicare | Oferă acces la |
|---|---|
read:stream | Starea fluxului, titlu, categorie |
read:viewers | Numărul de spectatori și lista |
read:chat | Mesaje de chat (prin canalul Pusher) |
read:clips | Clipuri de canal prin /api/clips/{slug} |
read:tournaments | Informații despre meciul activ prin /api/active-match/{id} |
read:channel | Profil canal, urmăritori, program |
Cerințe de securitate
sandbox="allow-scripts". Extensia dvs. nu poate accesează cookie-uri, localStorage sau face solicitări autentificate către d1arena.com.
- Public HTTPS obligatoriu — Adresa URL iframe trebuie să utilizeze TLS și să se rezolve numai la adresele de rețea publice.
- Sursă care poate fi citită de om — Fără JavaScript obscurcat sau minimizat. Recenziatorii trebuie să poată citi codul dvs.
- Nu se încarcă script extern cu excepția cazului în care este declarat în depunerea dvs. Bibliotecile CDN (jQuery, Chart.js etc.) sunt bune.
- Fără exfiltrare de date — Extensiile nu trebuie să trimită datele privitorului către servicii de analiză sau de urmărire terță parte.
- Politica de conținut — Fără reclame, conținut NSFW, minare de criptomonede sau comportament rău intenționat.
Procesul de revizuire
| Stare | Înțeles |
|---|---|
| pending | Trimis, în așteptarea examinării de către administrator (de obicei, 1-3 zile lucrătoare). |
| approved | Aprobat și vizibil în Piața de extensii. |
| rejected | Respins cu un motiv. Remediați problemele și trimiteți din nou. |
| suspended | Eliminată temporar pentru încălcarea politicii. Contactați asistența. |
Actualizări de versiune
Pentru a actualiza o extensie aprobată, ștergeți versiunea curentă și trimiteți una nouă cu un număr de versiune incrementat. Noua versiune trece din nou prin revizuire.
Jurnalul modificărilor
Urmăriți modificările API și noile funcții. Urmărim versiunea semantică și anunțăm modificări ulterioare cu cel puțin 30 de zile înainte.
- Lansarea API publică inițială cu autentificare cu cheie API.
- Streamuri: enumerați streamurile live, obțineți detalii despre streamer în funcție de slug.
- Categorii: căutați și enumerați toate categoriile de jocuri.
- Utilizatori: profiluri publice cu statistici competitive, evaluare ELO și număr de medalii.
- Clipuri: răsfoiți și preluați detaliile clipurilor cu informații despre streamer/creator.
- Turnee: listează, filtrează după statut/ligă, obține numărul de participanți.
- Clasament ELO: Clasamente clasate global și pe categorii.
- Ligi: enumerați ligile cu clasamente și defalcări de puncte.
- D1 Frenzy: starea Frenzy în timp real pentru orice streamer.
- Webhooks (EventSub): 12 tipuri de evenimente, inclusiv evenimente în flux, canal, turneu, clip și Frenzy.
- Limite de rate
Ai nevoie de ajutor?
Întrebări despre API? Contactați-ne.