Bangun bot, overlay, alat streaming, dan integrasi dengan data D1Arena.
Otentikasi
Semua permintaan API memerlukan kunci API yang diteruskan di header X-API-Key / Authorization: Bearer.
Untuk membuat kunci API, buka Pengaturan Pengembang di dasbor Anda. Anda dapat memiliki hingga 5 kunci.
429 Too Many Requests dengan header Retry-After.
URL dasar
Semua titik akhir mengembalikan JSON. Titik akhir yang diberi nomor halaman mencakup objek meta dengan current_page, last_page, dan total.
Aliran
| Parameter | Ketik | Deskripsi |
|---|---|---|
category_id | integer | Filter berdasarkan ID game/kategori |
limit | integer | Hasil per halaman (default: 20) |
page | integer | Nomor halaman |
Kategori
| Parameter | Ketik | Deskripsi |
|---|---|---|
search | string | Filter kategori berdasarkan nama |
limit | integer | Hasil per halaman (default: 50) |
Pengguna
Klip
| Parameter | Ketik | Deskripsi |
|---|---|---|
streamer_id | integer | Filter klip berdasarkan ID pengguna streamer |
category_id | integer | Filter berdasarkan ID game/kategori |
limit | integer | Hasil per halaman (default: 20) |
Turnamen
| Parameter | Ketik | Deskripsi |
|---|---|---|
status | string | Filter berdasarkan status (misalnya open, in_progress, completed) |
league_id | integer | Filter berdasarkan ID liga |
limit | integer | Hasil per halaman (default: 20) |
Peringkat ELO
| Parameter | Ketik | Deskripsi |
|---|---|---|
category_id | integer | Filter berdasarkan ID game/kategori |
limit | integer | Jumlah hasil (default: 50) |
Liga
| Parameter | Ketik | Deskripsi |
|---|---|---|
status | string | Filter berdasarkan status liga |
category_id | integer | Filter berdasarkan ID game/kategori |
limit | integer | Hasil per halaman (default: 20) |
Respons Kesalahan
Semua kesalahan mengembalikan amplop JSON yang konsisten. Objek error selalu berisi code yang dapat dibaca mesin dan message yang dapat dibaca manusia.
Kode Status
Referensi Kode Kesalahan
| Kode | Status HTTP | Deskripsi |
|---|---|---|
invalid_api_key | 401 | Kunci API hilang, formatnya salah, atau tidak ada |
api_key_disabled | 403 | Kunci API telah dicabut atau dinonaktifkan |
not_found | 404 | Sumber daya yang diminta tidak dapat ditemukan |
validation_error | 422 | Satu atau beberapa parameter permintaan tidak valid |
rate_limited | 429 | Batas kapasitas permintaan untuk kunci API ini terlampaui |
server_error | 500 | Kesalahan server internal — coba lagi atau hubungi dukungan |
Batasan Tarif
Permintaan API dibatasi tarifnya per kunci API. Bila Anda melampaui batas, permintaan akan menampilkan 429 Too Many Requests dengan header Retry-After.
Batasan berdasarkan Tingkat
| Tingkat | Permintaan / Menit (Bawaan) | Kunci Maks |
|---|---|---|
| Pemula (Gratis) | 60 | 5 |
| PRO | 60 | 5 |
| Terakhir | 60 | 5 |
| Mitra | 60 | 5 |
Header Batas Nilai
Permintaan API dibatasi tarifnya per kunci API. Bila Anda melampaui batas, permintaan akan menampilkan 429 Too Many Requests dengan header Retry-After.
| Tajuk | Deskripsi |
|---|---|
Retry-After | Beberapa detik untuk menunggu sebelum mencoba kembali (hanya ada pada 429 tanggapan) |
Praktik Terbaik
- Cache responses locally — stream and tournament data doesn't change every second.
- Berlangganan webhooks untuk acara real-time alih-alih melakukan polling pada titik akhir.
- Permintaan batch jika memungkinkan — gunakan parameter filter untuk mendapatkan apa yang Anda perlukan dalam lebih sedikit panggilan.
Webhook (EventSub)
Berlangganan pemberitahuan push waktu nyata alih-alih melakukan polling. Saat suatu peristiwa terjadi, D1Arena mengirimkan HTTP POST ke URL panggilan balik Anda dengan payload JSON yang ditandatangani dengan HMAC-SHA256.
Pengaturan
Buat langganan webhook di Pengaturan Pengembang. Setiap langganan memerlukan:
- URL panggilan balik — Titik akhir HTTPS yang dapat diakses publik di server Anda.
- Acara — Satu atau beberapa jenis acara untuk berlangganan.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Format Muatan
Setiap pengiriman webhook mengirimkan isi JSON dengan struktur ini:
Header
Setiap pengiriman mencakup header berikut untuk perutean dan verifikasi:
| Tajuk | Deskripsi |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Jenis peristiwa (misalnya stream.online) |
X-D1Arena-Signature | Intisari hex HMAC-SHA256 dari badan permintaan mentah |
X-D1Arena-Signature-Version | Format kunci penandatanganan: v2 untuk langganan saat ini atau v1-hashed-secret untuk langganan lama |
X-D1Arena-Delivery-Id | UUID pengiriman unik — digunakan untuk deduplikasi |
X-D1Arena-Timestamp | Stempel waktu Unix saat acara dikirim |
Memverifikasi Tanda Tangan
Selalu verifikasi header X-D1Arena-Signature sebelum memproses webhook. Tanda tangan dihitung sebagai HMAC-SHA256(raw_body, webhook_secret).
Untuk pengiriman v2, gunakan rahasia whsec_ yang ditampilkan saat langganan dibuat. Untuk pengiriman v1-hashed-secret pra-peningkatan, pertama-tama hitung SHA256(whsec_secret) dari rahasia asli tersebut dan gunakan intisari hex huruf kecil yang dihasilkan sebagai kunci HMAC. Buat ulang langganan jika memungkinkan untuk berpindah ke v2.
Acara yang Tersedia
| Acara | Deskripsi |
|---|---|
| stream.online | Streamer menayangkan siaran langsung |
| stream.offline | Streamer menjadi offline |
| channel.follow | Seorang pengguna mengikuti saluran |
| channel.subscribe | Langganan pendukung baru di suatu saluran |
| channel.tip | Tip telah dikirim ke streamer |
| tournament.started | Pertandingan pertandingan turnamen telah dimulai |
| tournament.ended | Sebuah turnamen telah selesai |
| tournament.match.completed | Hasil pertandingan dicatat |
| clip.created | Klip baru dibuat dari streaming langsung |
| overdrive.started | D1 Frenzy dimulai di sebuah saluran |
| overdrive.level_up | D1 Frenzy maju ke level berikutnya |
| overdrive.ended | D1 Frenzy selesai atau kedaluwarsa |
Contoh Muatan Peristiwa
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Kebijakan Pengiriman & Coba Lagi
| Mencoba | Penundaan | Catatan |
|---|---|---|
| 1 (awal) | Segera | Dikirim dalam hitungan detik setelah acara |
| ke-2 (coba lagi) | 30 detik | Jika upaya pertama gagal atau waktu habis |
| ke-3 (coba lagi) | 2 menit | Kemunduran eksponensial |
| ke-4 (akhir) | 10 menit | Upaya terakhir sebelum ditandai sebagai gagal |
2xx status within 10 detik. Non-2xx responses or timeouts trigger a retry. After 10 kegagalan berturut-turut, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Pengaturan Pengembang.
Praktik Terbaik
- Selalu verifikasi tanda tangan sebelum memproses muatan untuk mencegah kejadian palsu.
- Gunakan Delivery-Id untuk deduplikasi — percobaan ulang mengirimkan ID yang sama, jadi simpan ID yang diproses untuk menghindari pemrosesan ganda.
- Tanggapi dengan cepat, proses secara asinkron — segera kembalikan
200 OKdan tangani logika bisnis di pekerjaan latar belakang. - Gunakan titik akhir HTTPS saja — URL webhook harus menggunakan TLS. Panggilan balik HTTP ditolak.
- Tangani peristiwa yang tidak diketahui dengan anggun — jenis acara baru dapat ditambahkan. Kembalikan
200untuk kejadian yang tidak dikenali, bukannya error.
D1 Kegilaan
D1 Frenzy dipicu oleh tip cepat dan langganan saat streamer sedang live. Ini berkembang melalui 5 level dengan target yang meningkat.
GET /api/overdrive/{streamerId}
Dapatkan D1 Frenzy aktif untuk streamer. Mengembalikan {"active": false} jika tidak ada.
Target Tingkat
| Tingkat | Poin |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 Kegilaan — Poin: Tip $1 → 100; Berlangganan 500 × Tingkat. Durasi: 5 Menit; Pendinginan: 30 Menit.
SDK Ekstensi
Buat panel khusus dan ekstensi overlay yang dapat dipasang oleh streamer di halaman saluran mereka. Ekstensi berjalan di iframe sandbox dan berkomunikasi dengan halaman host melalui postMessage.
Memulai
- Buat kunci API di Pengaturan Pengembang.
- Bangun ekstensi Anda sebagai halaman HTML mandiri yang dihosting di domain Anda (diperlukan HTTPS).
- Kirimkan untuk ditinjau di bagian Ekstensi Saya.
- Setelah disetujui, streamer dapat menginstalnya dari Extension Marketplace.
Jenis Ekstensi
| Ketik | Lokasi | Perilaku |
|---|---|---|
panel | Di bawah pemutar aliran | Terlihat saat streaming sedang live. Kartu lebar penuh, tinggi default 300 piksel. |
overlay | Melalui pemutar video | Terlihat saat siaran langsung. Posisi/ukuran dikontrol oleh streamer melalui alat pemosisian overlay. |
API pascaPesan
Ekstensi Anda menerima data konteks secara otomatis saat dimuat. Terapkan acara ini:
Gunakan asal induk D1Arena yang tepat untuk setiap pesan. SDK resmi memperoleh dan memvalidasi asal ini dari halaman penyematan secara otomatis.
Karena iframe ekstensi sengaja menggunakan asal kotak pasir buram, host D1Arena mengautentikasi jendela iframe yang terdaftar dengan tepat. Kode ekstensi masih harus mengautentikasi jendela induk dan asal D1Arena yang tepat sebelum menerima konteks.
1. Kesiapan sinyal
2. Menerima konteks
3. Kirim tindakan (opsional)
Cakupan Izin
Nyatakan data apa yang dibutuhkan ekstensi Anda. Peninjau memverifikasi kode Anda cocok dengan izin yang Anda nyatakan.
| Ruang lingkup | Memberikan Akses Ke |
|---|---|
read:stream | Status aliran, judul, kategori |
read:viewers | Jumlah dan daftar pemirsa |
read:chat | Pesan obrolan (melalui saluran Pusher) |
read:clips | Klip saluran melalui /api/clips/{slug} |
read:tournaments | Info pertandingan aktif melalui /api/active-match/{id} |
read:channel | Profil saluran, pengikut, jadwal |
Persyaratan Keamanan
sandbox="allow-scripts". Ekstensi Anda tidak bisa mengakses cookie, Penyimpanan lokal, atau membuat permintaan yang diautentikasi ke d1arena.com.
- HTTPS publik diperlukan — URL iframe Anda harus menggunakan TLS dan hanya ditujukan ke alamat jaringan publik.
- Sumber yang dapat dibaca manusia — Tidak ada JavaScript yang dikaburkan atau hanya diperkecil. Reviewer harus bisa membaca kode Anda.
- Tidak ada pemuatan skrip eksternal kecuali dinyatakan dalam kiriman Anda. Pustaka CDN (jQuery, Chart.js, dll.) baik-baik saja.
- Tidak ada eksfiltrasi data — Ekstensi tidak boleh mengirimkan data pengunjung ke layanan analisis atau pelacakan pihak ketiga.
- Kebijakan konten — Tidak ada iklan, konten NSFW, penambangan mata uang kripto, atau perilaku jahat.
Proses Peninjauan
| Status | Artinya |
|---|---|
| pending | Dikirim, menunggu peninjauan admin (biasanya 1-3 hari kerja). |
| approved | Disetujui dan terlihat di Extension Marketplace. |
| rejected | Ditolak dengan alasan. Perbaiki masalah dan kirim ulang. |
| suspended | Dihapus sementara karena pelanggaran kebijakan. Hubungi dukungan. |
Pembaruan Versi
Untuk memperbarui ekstensi yang disetujui, hapus versi saat ini dan kirimkan versi baru dengan nomor versi yang bertambah. Versi baru melalui peninjauan lagi.
log perubahan
Lacak perubahan API dan fitur baru. Kami mengikuti pembuatan versi semantik dan mengumumkan perubahan yang dapat menyebabkan gangguan setidaknya 30 hari sebelumnya.
- Rilis API publik awal dengan autentikasi kunci API.
- Streaming: Buat daftar streaming langsung, dapatkan detail streamer berdasarkan slug.
- Kategori: Cari dan buat daftar semua kategori game.
- Pengguna: Profil publik dengan statistik kompetitif, peringkat ELO, dan jumlah medali.
- Klip: Jelajahi dan ambil detail klip dengan info streamer/pembuat.
- Turnamen: Daftar, filter berdasarkan status/liga, dapatkan jumlah peserta.
- Papan Peringkat ELO: Papan peringkat global dan peringkat per kategori.
- Liga: Buat daftar liga dengan klasemen dan rincian poin.
- D1 Frenzy: Status Frenzy real-time untuk streamer mana pun.
- Webhook (EventSub): 12 jenis acara termasuk streaming, saluran, turnamen, klip, dan acara Frenzy.
- Batasan Tarif
Butuh Bantuan?
Pertanyaan tentang API? Hubungi kami.