Bumuo ng mga bot, overlay, stream tool, at pagsasama sa data ng D1Arena.
Pagpapatunay
Ang lahat ng kahilingan sa API ay nangangailangan ng API key na ipinasa sa X-API-Key / Authorization: Bearer header.
Upang gumawa ng API key, pumunta sa Mga Setting ng Developer sa iyong dashboard. Maaari kang magkaroon ng hanggang 5 susi.
429 Too Many Requests na may Retry-After na header.
Base URL
Lahat ng endpoint ay nagbabalik ng JSON. Kasama sa mga paginated endpoint ang isang meta object na may current_page, last_page, at total.
Mga stream
| Parameter | Uri | Paglalarawan |
|---|---|---|
category_id | integer | I-filter ayon sa ID ng laro/kategorya |
limit | integer | Mga resulta bawat pahina (default: 20) |
page | integer | Numero ng pahina |
Mga kategorya
| Parameter | Uri | Paglalarawan |
|---|---|---|
search | string | I-filter ang mga kategorya ayon sa pangalan |
limit | integer | Mga resulta sa bawat pahina (default: 50) |
Mga gumagamit
Mga clip
| Parameter | Uri | Paglalarawan |
|---|---|---|
streamer_id | integer | I-filter ang mga clip ayon sa user ID ng streamer |
category_id | integer | I-filter ayon sa ID ng laro/kategorya |
limit | integer | Mga resulta bawat pahina (default: 20) |
Mga paligsahan
| Parameter | Uri | Paglalarawan |
|---|---|---|
status | string | I-filter ayon sa katayuan (hal. open, in_progress, completed) |
league_id | integer | I-filter ayon sa league ID |
limit | integer | Mga resulta bawat pahina (default: 20) |
Mga Ranggo ng ELO
| Parameter | Uri | Paglalarawan |
|---|---|---|
category_id | integer | I-filter ayon sa ID ng laro/kategorya |
limit | integer | Bilang ng mga resulta (default: 50) |
Mga liga
| Parameter | Uri | Paglalarawan |
|---|---|---|
status | string | I-filter ayon sa katayuan ng liga |
category_id | integer | I-filter ayon sa ID ng laro/kategorya |
limit | integer | Mga resulta bawat pahina (default: 20) |
Mga Tugon sa Error
Lahat ng error ay nagbabalik ng pare-parehong JSON envelope. Ang bagay na error ay laging naglalaman ng code na nababasa ng makina at nababasa ng tao na message.
Mga Code ng Katayuan
Sanggunian ng Mga Error Code
| Code | Katayuan ng HTTP | Paglalarawan |
|---|---|---|
invalid_api_key | 401 | Ang API key ay nawawala, mali ang pagkakabuo, o wala |
api_key_disabled | 403 | Ang API key ay binawi o hindi pinagana |
not_found | 404 | Hindi mahanap ang hiniling na mapagkukunan |
validation_error | 422 | Ang isa o higit pang mga parameter ng kahilingan ay hindi wasto |
rate_limited | 429 | Lumampas sa limitasyon sa rate ng kahilingan para sa API key na ito |
server_error | 500 | Error sa panloob na server — pakisubukang muli o makipag-ugnayan sa suporta |
Mga Limitasyon sa Rate
Ang mga kahilingan sa API ay limitado sa rate bawat API key. Kapag lumampas ka sa limitasyon, ang mga kahilingan ay nagbabalik ng 429 Too Many Requests na may Retry-After na header.
Mga limitasyon ayon sa Tier
| Tier | Mga Kahilingan / Minuto (Default) | Max Keys |
|---|---|---|
| Starter (Libre) | 60 | 5 |
| PRO | 60 | 5 |
| Ultimate | 60 | 5 |
| Kasosyo | 60 | 5 |
Mga Header ng Hangganan ng Rate
Ang mga kahilingan sa API ay limitado sa rate bawat API key. Kapag lumampas ka sa limitasyon, ang mga kahilingan ay nagbabalik ng 429 Too Many Requests na may Retry-After na header.
| Header | Paglalarawan |
|---|---|
Retry-After | Mga segundong maghihintay bago subukang muli (naroroon lamang sa 429 na tugon) |
Pinakamahusay na Kasanayan
- Cache responses locally — stream and tournament data doesn't change every second.
- Mag-subscribe sa webhooks para sa mga real-time na kaganapan sa halip na mga endpoint ng botohan.
- Mga batch na kahilingan kung posible — gumamit ng mga parameter ng filter upang makuha ang eksaktong kailangan mo sa mas kaunting mga tawag.
Webhooks (EventSub)
Mag-subscribe sa mga real-time na push notification sa halip na botohan. Kapag may nangyaring kaganapan, nagpapadala ang D1Arena ng HTTP POST sa iyong callback URL na may JSON payload na nilagdaan ng HMAC-SHA256.
Setup
Lumikha ng mga subscription sa webhook sa Mga Setting ng Developer. Ang bawat subscription ay nangangailangan ng:
- URL ng callback — Isang endpoint ng HTTPS na naa-access ng publiko sa iyong server.
- Mga kaganapan — Isa o higit pang mga uri ng kaganapan upang mag-subscribe.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Payload Format
Ang bawat paghahatid ng webhook ay nagpapadala ng JSON body na may ganitong istraktura:
Mga header
Kasama sa bawat paghahatid ang mga sumusunod na header para sa pagruruta at pag-verify:
| Header | Paglalarawan |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Uri ng kaganapan (hal. stream.online) |
X-D1Arena-Signature | HMAC-SHA256 hex digest ng raw request body |
X-D1Arena-Signature-Version | Format ng signing-key: v2 para sa mga kasalukuyang subscription o v1-hashed-secret para sa mga legacy na subscription |
X-D1Arena-Delivery-Id | Unique delivery UUID — gamitin para sa deduplication |
X-D1Arena-Timestamp | Unix timestamp kung kailan ipinadala ang kaganapan |
Pagpapatunay ng mga Lagda
Palaging i-verify ang X-D1Arena-Signature header bago magproseso ng webhook. Ang lagda ay kinukuwenta bilang HMAC-SHA256(raw_body, webhook_secret).
Para sa v2 na mga paghahatid, gamitin ang whsec_ na lihim na ipinakita noong ginawa ang subscription. Para sa pre-upgrade na v1-hashed-secret na paghahatid, kalkulahin muna ang SHA256(whsec_secret) mula sa orihinal na lihim na iyon at gamitin ang nagresultang lowercase na hex digest bilang HMAC na key. Gawin muli ang subscription kapag praktikal na lumipat sa v2.
Mga Magagamit na Kaganapan
| Kaganapan | Paglalarawan |
|---|---|
| stream.online | Nag-live ang isang streamer |
| stream.offline | Nag-offline ang isang streamer |
| channel.follow | Sinundan ng isang user ang isang channel |
| channel.subscribe | Bagong subscription ng tagasuporta sa isang channel |
| channel.tip | Isang tip ang ipinadala sa isang streamer |
| tournament.started | Nagsimula na ang isang tournament match play |
| tournament.ended | Natapos ang isang tournament |
| tournament.match.completed | Isang resulta ng laban ang naitala |
| clip.created | Isang bagong clip ang ginawa mula sa isang live stream |
| overdrive.started | Nagsimula ang D1 Frenzy sa isang channel |
| overdrive.level_up | Ang D1 Frenzy ay sumulong sa susunod na antas |
| overdrive.ended | Nakumpleto o nag-expire ang D1 Frenzy |
Mga Halimbawa ng Payload ng Kaganapan
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Patakaran sa Paghahatid at Subukang Muli
| Pagtatangka | Pagkaantala | Mga Tala |
|---|---|---|
| 1st (inisyal) | Agad-agad | Ipinadala sa loob ng ilang segundo ng kaganapan |
| ika-2 (subukang muli) | 30 segundo | Kung nabigo ang unang pagsubok o nag-time out |
| ika-3 (subukang muli) | 2 minuto | Exponential backoff |
| ika-4 (pangwakas) | 10 minuto | Huling pagsubok bago markahan bilang nabigo |
2xx status within 10 segundo. Non-2xx responses or timeouts trigger a retry. After 10 magkakasunod na kabiguan, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Mga Setting ng Developer.
Pinakamahusay na Kasanayan
- Palaging i-verify ang mga lagda bago magproseso ng mga payload para maiwasan ang mga spoofed na kaganapan.
- Gamitin ang Delivery-Id para sa deduplication — Ang mga muling pagsubok ay magpadala ng parehong ID, kaya mag-imbak ng mga naprosesong ID upang maiwasan ang dobleng pagproseso.
- Mabilis na tumugon, iproseso nang asynchronous — ibalik kaagad ang
200 OKat pangasiwaan ang lohika ng negosyo sa isang background na trabaho. - Gumamit lamang ng mga endpoint ng HTTPS — Dapat gumamit ang mga URL ng webhook ng TLS. Tinanggihan ang mga HTTP callback.
- Pangasiwaan ang hindi kilalang mga kaganapan nang maayos — maaaring magdagdag ng mga bagong uri ng kaganapan. Ibalik ang
200para sa hindi nakikilalang mga kaganapan sa halip na magkamali.
D1 Siklab ng galit
Ang D1 Frenzy ay na-trigger ng mabilis na mga tip at subscription habang live ang isang streamer. Umuusad ito sa 5 antas na may pagtaas ng mga target.
GET /api/overdrive/{streamerId}
Kunin ang aktibong D1 Frenzy para sa isang streamer. Ibinabalik ang {"active": false} kung wala.
Mga Level Target
| Antas | Mga puntos |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 Siklab ng galit — Mga puntos: Tip $1 → 100; Subscription 500 × Tier. Tagal: 5 Mga minuto; Cooldown: 30 Mga minuto.
Extension SDK
Bumuo ng mga custom na panel at overlay na extension na maaaring i-install ng mga streamer sa kanilang mga page ng channel. Tumatakbo ang mga extension sa mga sandboxed na iframe at nakikipag-ugnayan sa host page sa pamamagitan ng postMessage.
Pagsisimula
- Gumawa ng API key sa Mga Setting ng Developer.
- Buuin ang iyong extension bilang isang standalone na HTML page na naka-host sa iyong domain (kinakailangan ang HTTPS).
- Isumite ito para sa pagsusuri sa seksyong Aking Mga Extension.
- Kapag naaprubahan, mai-install ito ng mga streamer mula sa Extension Marketplace.
Mga Uri ng Extension
| Uri | Lokasyon | Pag-uugali |
|---|---|---|
panel | Sa ibaba ng stream player | Nakikita kapag live ang stream. Full-width na card, 300px na default na taas. |
overlay | Sa ibabaw ng video player | Nakikita kapag live. Posisyon/laki na kinokontrol ng streamer sa pamamagitan ng overlay positioning tool. |
postMessage API
Awtomatikong natatanggap ng iyong extension ang data ng konteksto kapag nag-load ito. Ipatupad ang mga kaganapang ito:
Gamitin ang eksaktong D1Arena na pinagmulan ng magulang para sa bawat mensahe. Awtomatikong nakukuha at pinapatunayan ng opisyal na SDK ang pinagmulang ito mula sa pahina ng pag-embed.
Dahil sinasadya ng mga extension na iframe ang isang opaque na pinanggalingan ng sandbox, pinapatotohanan ng D1Arena host ang eksaktong nakarehistrong window ng iframe. Dapat pa ring patunayan ng extension code ang parent window at eksaktong D1Arena pinanggalingan bago tanggapin ang konteksto.
1. Kahandaan ng signal
2. Tumanggap ng konteksto
3. Magpadala ng mga aksyon (opsyonal)
Saklaw ng Pahintulot
Ipahayag kung anong data ang kailangan ng iyong extension. Bine-verify ng mga reviewer na tumutugma ang iyong code sa iyong mga ipinahayag na pahintulot.
| Saklaw | Nagbibigay ng Access To |
|---|---|
read:stream | Katayuan ng stream, pamagat, kategorya |
read:viewers | Bilang ng manonood at listahan |
read:chat | Mga mensahe sa chat (sa pamamagitan ng Pusher channel) |
read:clips | Mga clip ng channel sa pamamagitan ng /api/clips/{slug} |
read:tournaments | Impormasyon ng aktibong tugma sa pamamagitan ng /api/active-match/{id} |
read:channel | Profile ng channel, mga tagasunod, iskedyul |
Mga Kinakailangan sa Seguridad
sandbox="allow-scripts". Ina-access ng iyong extension na hindi pwede ang cookies, localStorage, o gumawa ng mga napatunayang kahilingan sa d1arena.com.
- Pampubliko HTTPS kinakailangan — Ang iyong iframe URL ay dapat gumamit ng TLS at lutasin lamang sa mga pampublikong network address.
- Nababasa ng tao na pinagmulan — Walang obfuscated o minified-only JavaScript. Dapat na mabasa ng mga tagasuri ang iyong code.
- Walang paglo-load ng panlabas na script maliban kung ipinahayag sa iyong pagsusumite. Ang mga CDN library (jQuery, Chart.js, atbp.) ay maayos.
- Walang data exfiltration — Ang mga extension ay hindi dapat magpadala ng data ng manonood sa mga third-party na analytics o mga serbisyo sa pagsubaybay.
- Patakaran sa nilalaman — Walang mga ad, nilalaman ng NSFW, pagmimina ng cryptocurrency, o malisyosong pag-uugali.
Proseso ng Pagsusuri
| Katayuan | Ibig sabihin |
|---|---|
| pending | Naisumite, naghihintay ng pagsusuri ng admin (karaniwang 1-3 araw ng negosyo). |
| approved | Naaprubahan at nakikita sa Extension Marketplace. |
| rejected | Tinanggihan na may dahilan. Ayusin ang mga isyu at muling isumite. |
| suspended | Pansamantalang inalis dahil sa paglabag sa patakaran. Makipag-ugnayan sa suporta. |
Mga Update sa Bersyon
Upang mag-update ng naaprubahang extension, tanggalin ang kasalukuyang bersyon at magsumite ng bago na may nadagdag na numero ng bersyon. Ang bagong bersyon ay dumaan muli sa pagsusuri.
Changelog
Subaybayan ang mga pagbabago sa API at mga bagong feature. Sinusundan namin ang semantic versioning at inaanunsyo namin ang mga paglabag sa pagbabago nang hindi bababa sa 30 araw nang maaga.
- Paunang public API release na may API key authentication.
- Mga Stream: Maglista ng mga live stream, kumuha ng mga detalye ng streamer ayon sa slug.
- Mga Kategorya: Hanapin at ilista ang lahat ng kategorya ng laro.
- Mga User: Mga pampublikong profile na may mapagkumpitensyang istatistika, rating ng ELO, at bilang ng medalya.
- Mga Clip: Mag-browse at kunin ang mga detalye ng clip gamit ang impormasyon ng streamer/creator.
- Mga Tournament: Listahan, i-filter ayon sa katayuan/liga, kumuha ng mga bilang ng kalahok.
- ELO Leaderboard: Global at per-category na ranggo na mga leaderboard.
- Mga Liga: Maglista ng mga liga na may mga standing at point breakdown.
- D1 Frenzy: Real-time Frenzy status para sa anumang streamer.
- Webhooks (EventSub): 12 uri ng kaganapan kabilang ang stream, channel, tournament, clip, at Frenzy na mga kaganapan.
- Mga Limitasyon sa Rate
Kailangan ng Tulong?
Mga tanong tungkol sa API? Makipag-ugnayan sa amin.