Twórz boty, nakładki, narzędzia do transmisji strumieniowej i integracje z danymi D1Arena.
Uwierzytelnianie
Wszystkie żądania API wymagają klucza API przekazanego w nagłówku X-API-Key / Authorization: Bearer.
Aby utworzyć klucz API, przejdź do Ustawienia programisty w panelu kontrolnym. Możesz mieć maksymalnie 5 kluczy.
429 Too Many Requests z nagłówkiem Retry-After.
Bazowy adres URL
Wszystkie punkty końcowe zwracają JSON. Paginowane punkty końcowe obejmują obiekt meta z current_page, last_page i total.
Strumienie
| Parametr | Typ | Opis |
|---|---|---|
category_id | integer | Filtruj według identyfikatora gry/kategorii |
limit | integer | Wyniki na stronę (domyślnie: 20) |
page | integer | Numer strony |
Kategorie
| Parametr | Typ | Opis |
|---|---|---|
search | string | Filtruj kategorie według nazwy |
limit | integer | Wyniki na stronę (domyślnie: 50) |
Użytkownicy
Klipy
| Parametr | Typ | Opis |
|---|---|---|
streamer_id | integer | Filtruj klipy według identyfikatora użytkownika streamera |
category_id | integer | Filtruj według identyfikatora gry/kategorii |
limit | integer | Wyniki na stronę (domyślnie: 20) |
Turnieje
| Parametr | Typ | Opis |
|---|---|---|
status | string | Filtruj według statusu (np. open, in_progress, completed) |
league_id | integer | Filtruj według identyfikatora ligi |
limit | integer | Wyniki na stronę (domyślnie: 20) |
Rankingi ELO
| Parametr | Typ | Opis |
|---|---|---|
category_id | integer | Filtruj według identyfikatora gry/kategorii |
limit | integer | Liczba wyników (domyślnie: 50) |
Ligi
| Parametr | Typ | Opis |
|---|---|---|
status | string | Filtruj według statusu ligi |
category_id | integer | Filtruj według identyfikatora gry/kategorii |
limit | integer | Wyniki na stronę (domyślnie: 20) |
Odpowiedzi na błędy
Wszystkie błędy zwracają spójną kopertę JSON. Obiekt error zawsze zawiera odczytywalny maszynowo code i message czytelny dla człowieka.
Kody stanu
Odniesienie do kodów błędów
| Kod | Stan HTTP | Opis |
|---|---|---|
invalid_api_key | 401 | Brakuje klucza API, jest on zniekształcony lub nie istnieje |
api_key_disabled | 403 | Klucz API został unieważniony lub wyłączony |
not_found | 404 | Nie można znaleźć żądanego zasobu |
validation_error | 422 | Co najmniej jeden parametr żądania jest nieprawidłowy |
rate_limited | 429 | Przekroczono limit częstotliwości żądań dla tego klucza API |
server_error | 500 | Wewnętrzny błąd serwera — spróbuj ponownie lub skontaktuj się z pomocą techniczną |
Limity stawek
Żądania API są ograniczone szybkością przypadającą na klucz API. Po przekroczeniu limitu żądania zwracają 429 Too Many Requests z nagłówkiem Retry-After.
Limity według poziomu
| Poziom | Żądania / minuta (Domyślny) | Maksymalne klucze |
|---|---|---|
| Rozrusznik (Bezpłatny) | 60 | 5 |
| ZAWODOWIEC | 60 | 5 |
| Ostateczny | 60 | 5 |
| Partner | 60 | 5 |
Nagłówki limitów szybkości
Żądania API są ograniczone szybkością przypadającą na klucz API. Po przekroczeniu limitu żądania zwracają 429 Too Many Requests z nagłówkiem Retry-After.
| Nagłówek | Opis |
|---|---|
Retry-After | Sekundy oczekiwania przed ponowną próbą (występuje tylko w przypadku 429 odpowiedzi) |
Najlepsze praktyki
- Cache responses locally — stream and tournament data doesn't change every second.
- Subskrybuj webhooks, aby uzyskać zdarzenia w czasie rzeczywistym zamiast odpytywania punktów końcowych.
- Tam, gdzie to możliwe, żądania wsadowe — użyj parametrów filtru, aby uzyskać dokładnie to, czego potrzebujesz w mniejszej liczbie połączeń.
Webhooki (EventSub)
Subskrybuj powiadomienia push w czasie rzeczywistym zamiast odpytywania. Gdy wystąpi zdarzenie, D1Arena wysyła komunikat HTTP POST na adres URL wywołania zwrotnego z ładunkiem JSON podpisanym za pomocą HMAC-SHA256.
Konfiguracja
Utwórz subskrypcje webhooka w Ustawienia programisty. Każda subskrypcja wymaga:
- Adres URL wywołania zwrotnego — Publicznie dostępny punkt końcowy HTTPS na Twoim serwerze.
- Wydarzenia — Jeden lub więcej typów wydarzeń do subskrybowania.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Format ładunku
Każda dostawa webhooka wysyła treść JSON o następującej strukturze:
Nagłówki
Każda dostawa zawiera następujące nagłówki do routingu i weryfikacji:
| Nagłówek | Opis |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Typ zdarzenia (np. stream.online) |
X-D1Arena-Signature | Skrót szesnastkowy HMAC-SHA256 surowej treści żądania |
X-D1Arena-Signature-Version | Format klucza podpisującego: v2 dla bieżących subskrypcji lub v1-hashed-secret dla starszych subskrypcji |
X-D1Arena-Delivery-Id | Unikalny identyfikator UUID dostawy — użyj do deduplikacji |
X-D1Arena-Timestamp | Unixowy znacznik czasu wysłania zdarzenia |
Weryfikacja podpisów
Zawsze sprawdzaj nagłówek X-D1Arena-Signature przed przetworzeniem webhooka. Podpis jest obliczany jakoHMAC-SHA256(raw_body, webhook_secret).
W przypadku dostaw v2 użyj sekretu whsec_ pokazanego podczas tworzenia subskrypcji. W przypadku dostawy v1-hashed-secret przed aktualizacją najpierw oblicz SHA256(whsec_secret) z oryginalnego sekretu i użyj wynikowego skrótu szesnastkowego małymi literami jako klucza HMAC. Utwórz ponownie subskrypcję, jeśli będzie to możliwe, aby przejść do v2.
Dostępne wydarzenia
| Wydarzenie | Opis |
|---|---|
| stream.online | Streamer zaczął transmitować na żywo |
| stream.offline | Streamer przeszedł w tryb offline |
| channel.follow | Użytkownik obserwował kanał |
| channel.subscribe | Nowa subskrypcja dla wspierających na kanale |
| channel.tip | Wskazówka została wysłana do streamera |
| tournament.started | Rozpoczęła się gra turniejowa |
| tournament.ended | Turniej dobiegł końca |
| tournament.match.completed | Wynik meczu został zarejestrowany |
| clip.created | Z transmisji na żywo powstał nowy klip |
| overdrive.started | D1 Frenzy rozpoczęło się na kanale |
| overdrive.level_up | D1 Frenzy awansowało na kolejny poziom |
| overdrive.ended | D1 Frenzy ukończone lub wygasłe |
Przykłady ładunku zdarzeń
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Zasady dotyczące dostaw i ponawiania prób
| Próba | Opóźnienie | Notatki |
|---|---|---|
| 1. (początkowe) | Natychmiastowe | Wysłane w ciągu kilku sekund od zdarzenia |
| 2. (ponowna próba) | 30 sekund | Jeśli pierwsza próba zakończy się niepowodzeniem lub upłynie limit czasu |
| 3. (ponowna próba) | 2 minuty | Wykładniczy zwrot |
| 4. (finał) | 10 minut | Ostatnia próba przed oznaczeniem jako nieudana |
2xx status within 10 sekund. Non-2xx responses or timeouts trigger a retry. After 10 kolejnych niepowodzeń, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Ustawienia programisty.
Najlepsze praktyki
- Zawsze sprawdzaj podpisy przed przetworzeniem ładunku, aby zapobiec sfałszowanym zdarzeniom.
- Użyj identyfikatora dostawy do deduplikacji — ponowne próby wysyłają ten sam identyfikator, dlatego przechowuj przetworzone identyfikatory, aby uniknąć podwójnego przetwarzania.
- Reaguj szybko, przetwarzaj asynchronicznie — return
200 OKnatychmiast i zajmij się logiką biznesową w zadaniu w tle. - Używaj tylko punktów końcowych HTTPS — Adresy URL webhooka muszą używać protokołu TLS. Wywołania zwrotne HTTP są odrzucane.
- Radź sobie z nieznanymi zdarzeniami z wdziękiem — mogą zostać dodane nowe typy zdarzeń. Zwróć
200w przypadku nierozpoznanych zdarzeń, zamiast zgłaszać błędy.
Szał D1
D1 Frenzy uruchamiają się dzięki szybkim napiwkom i subskrypcjom, gdy streamer jest na żywo. Przechodzi przez 5 poziomów wraz ze wzrostem celów.
GET /api/overdrive/{streamerId}
Zdobądź aktywny D1 Frenzy dla streamera. Zwraca {"active": false}, jeśli żaden.
Cele poziomu
| Poziom | Punkty |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
Szał D1 — Punkty: Wskazówka $1 → 100; Subskrypcja 500 × Poziom. Czas trwania: 5 Minuty; Czas odnowienia: 30 Minuty.
Rozszerzenie SDK
Twórz niestandardowe rozszerzenia paneli i nakładek, które streamerzy mogą instalować na stronach swoich kanałów. Rozszerzenia działają w ramkach iframe w trybie piaskownicy i komunikują się ze stroną hosta za pośrednictwem postMessage.
Pierwsze kroki
- Utwórz klucz API w Ustawienia programisty.
- Utwórz rozszerzenie jako samodzielną stronę HTML hostowaną w Twojej domenie (wymagany protokół HTTPS).
- Prześlij go do recenzji w sekcji Moje rozszerzenia.
- Po zatwierdzeniu streamerzy będą mogli zainstalować rozszerzenie z Marketplace rozszerzeń.
Typy rozszerzeń
| Typ | Lokalizacja | Zachowanie |
|---|---|---|
panel | Poniżej odtwarzacza strumieniowego | Widoczne, gdy transmisja jest na żywo. Karta o pełnej szerokości, domyślna wysokość 300px. |
overlay | Nad odtwarzaczem wideo | Widoczne na żywo. Pozycja/rozmiar kontrolowany przez streamer za pomocą narzędzia do pozycjonowania nakładki. |
API postMessage
Twoje rozszerzenie automatycznie otrzymuje dane kontekstowe podczas ładowania. Zaimplementuj te zdarzenia:
Dla każdej wiadomości użyj dokładnego źródła nadrzędnego D1Arena. Oficjalny SDK automatycznie uzyskuje i sprawdza to pochodzenie na podstawie umieszczanej strony.
Ponieważ ramki iframe rozszerzeń celowo korzystają z nieprzezroczystego źródła piaskownicy, host D1Arena uwierzytelnia dokładnie zarejestrowane okno iframe. Kod rozszerzenia musi nadal uwierzytelniać okno nadrzędne i dokładne pochodzenie D1Arena przed zaakceptowaniem kontekstu.
1. Sygnał gotowości
2. Odbierz kontekst
3. Wyślij akcje (opcjonalnie)
Zakresy uprawnień
Zadeklaruj, jakich danych potrzebuje Twoje rozszerzenie. Recenzenci sprawdzają, czy Twój kod jest zgodny z zadeklarowanymi uprawnieniami.
| Zakres | Przyznaje dostęp do |
|---|---|
read:stream | Stan strumienia, tytuł, kategoria |
read:viewers | Liczba widzów i lista |
read:chat | Wiadomości na czacie (za pośrednictwem kanału Pusher) |
read:clips | Klipy kanału poprzez /api/clips/{slug} |
read:tournaments | Informacje o aktywnym dopasowaniu poprzez /api/active-match/{id} |
read:channel | Profil kanału, obserwujący, harmonogram |
Wymagania bezpieczeństwa
sandbox="allow-scripts". Twoje rozszerzenie nie mogę uzyskuje dostęp do plików cookie, localStorage lub wysyła uwierzytelnione żądania do d1arena.com.
- Wymagany publiczny HTTPS — Adres URL ramki iframe musi używać TLS i być rozpoznawany wyłącznie na adresy sieci publicznej.
- Źródło czytelne dla człowieka — Brak zaciemnionego lub zminimalizowanego kodu JavaScript. Recenzenci muszą mieć możliwość odczytania kodu.
- Brak ładowania zewnętrznego skryptu chyba że zostało to zadeklarowane w zgłoszeniu. Biblioteki CDN (jQuery, Chart.js itp.) są w porządku.
- Żadnej eksfiltracji danych — Rozszerzenia nie mogą wysyłać danych widzów do zewnętrznych usług analitycznych ani śledzących.
- Polityka treści — Żadnych reklam, treści NSFW, wydobywania kryptowalut i złośliwego zachowania.
Proces przeglądu
| Stan | Znaczenie |
|---|---|
| pending | Przesłano, oczekuje na sprawdzenie przez administratora (zwykle 1–3 dni robocze). |
| approved | Zatwierdzone i widoczne na rynku rozszerzeń. |
| rejected | Odrzucony z podaniem powodu. Napraw problemy i prześlij ponownie. |
| suspended | Tymczasowo usunięte z powodu naruszenia zasad. Skontaktuj się z pomocą techniczną. |
Aktualizacje wersji
Aby zaktualizować zatwierdzone rozszerzenie, usuń bieżącą wersję i prześlij nową ze zwiększonym numerem wersji. Nowa wersja przechodzi ponowną recenzję.
Dziennik zmian
Śledź zmiany API i nowe funkcje. Przestrzegamy wersjonowania semantycznego i ogłaszamy najważniejsze zmiany z co najmniej 30-dniowym wyprzedzeniem.
- Pierwsza publiczna wersja API z uwierzytelnianiem za pomocą klucza API.
- Strumienie: wyświetlaj listę transmisji na żywo i uzyskaj szczegółowe informacje o streamerze według ślimaka.
- Kategorie: wyszukaj i wyświetl listę wszystkich kategorii gier.
- Użytkownicy: profile publiczne ze statystykami rywalizacji, rankingiem ELO i liczbą medali.
- Klipy: przeglądaj i pobieraj szczegóły klipów wraz z informacjami o nadawcy/twórcy.
- Turnieje: wyświetlaj listę, filtruj według statusu/ligi, sprawdzaj liczbę uczestników.
- Tabela liderów ELO: tabele wyników globalne i rankingowe według kategorii.
- Ligi: wyświetla listę lig z rankingami i podziałem punktów.
- Szaleństwo D1: Stan szału w czasie rzeczywistym dla dowolnego streamera.
- Webhooki (EventSub): 12 typów wydarzeń, w tym transmisje, kanały, turnieje, klipy i wydarzenia Frenzy.
- Limity stawek
Potrzebujesz pomocy?
Masz pytania dotyczące API? Skontaktuj się z nami.