Изградете ботове, наслагвания, инструменти за поточно предаване и интеграции с данни на D1Arena.
Удостоверяване
Всички API заявки изискват API ключ, предаден в заглавката X-API-Key / Authorization: Bearer.
За да създадете API ключ, отидете на Настройки на програмиста в таблото си за управление. Можете да имате до 5 ключа.
429 Too Many Requests със заглавка Retry-After.
Основен URL адрес
Всички крайни точки връщат JSON. Странираните крайни точки включват обект meta с current_page, last_page и total.
Потоци
| Параметър | Тип | Описание |
|---|---|---|
category_id | integer | Филтрирайте по идентификатор на игра/категория |
limit | integer | Резултати на страница (по подразбиране: 20) |
page | integer | Номер на страницата |
Категории
| Параметър | Тип | Описание |
|---|---|---|
search | string | Филтрирайте категориите по име |
limit | integer | Резултати на страница (по подразбиране: 50) |
Потребители
клипове
| Параметър | Тип | Описание |
|---|---|---|
streamer_id | integer | Филтрирайте клиповете по потребителския идентификатор на стриймъра |
category_id | integer | Филтрирайте по идентификатор на игра/категория |
limit | integer | Резултати на страница (по подразбиране: 20) |
Турнири
| Параметър | Тип | Описание |
|---|---|---|
status | string | Филтриране по състояние (напр. open, in_progress, completed) |
league_id | integer | Филтрирайте по ID на лигата |
limit | integer | Резултати на страница (по подразбиране: 20) |
ELO класации
| Параметър | Тип | Описание |
|---|---|---|
category_id | integer | Филтрирайте по идентификатор на игра/категория |
limit | integer | Брой резултати (по подразбиране: 50) |
Лиги
| Параметър | Тип | Описание |
|---|---|---|
status | string | Филтриране по статус на лигата |
category_id | integer | Филтрирайте по идентификатор на игра/категория |
limit | integer | Резултати на страница (по подразбиране: 20) |
Отговори за грешки
Всички грешки връщат последователен JSON плик. Обектът error винаги съдържа машинно четим code и message.
Статус кодове
Справочник за кодове за грешки
| Код | Състояние на HTTP | Описание |
|---|---|---|
invalid_api_key | 401 | API ключът липсва, неправилно е образуван или не съществува |
api_key_disabled | 403 | API ключът е отменен или деактивиран |
not_found | 404 | Исканият ресурс не може да бъде намерен |
validation_error | 422 | Един или повече параметри на заявката са невалидни |
rate_limited | 429 | Лимитът за честота на заявките е надвишен за този API ключ |
server_error | 500 | Вътрешна грешка в сървъра — моля, опитайте отново или се свържете с поддръжката |
Граници на скоростта
Заявките за API са ограничени по скорост за всеки API ключ. Когато превишите ограничението, заявките връщат 429 Too Many Requests със заглавка Retry-After.
Ограничения по ниво
| Ниво | Заявки / Мин (По подразбиране) | Макс Кийс |
|---|---|---|
| Стартер (безплатно) | 60 | 5 |
| PRO | 60 | 5 |
| Ultimate | 60 | 5 |
| Партньор | 60 | 5 |
Заглавки за ограничение на скоростта
Заявките за API са ограничени по скорост за всеки API ключ. Когато превишите ограничението, заявките връщат 429 Too Many Requests със заглавка Retry-After.
| Заглавка | Описание |
|---|---|
Retry-After | Секунди за изчакване преди повторен опит (присъства само при 429 отговора) |
Най-добри практики
- Cache responses locally — stream and tournament data doesn't change every second.
- Абонирайте се за webhooks за събития в реално време, вместо за анкетиране на крайни точки.
- Групови заявки, където е възможно — използвайте параметри на филтъра, за да получите точно това, от което се нуждаете, с по-малко обаждания.
Уеб кукички (EventSub)
Абонирайте се за насочени известия в реално време вместо анкети. Когато възникне събитие, D1Arena изпраща HTTP POST към вашия URL адрес за обратно извикване с JSON полезен товар, подписан с HMAC-SHA256.
Настройка
Създайте абонаменти за уеб кукичка в Настройки на програмиста. Всеки абонамент изисква:
- URL адрес за обратно извикване — Обществено достъпна HTTPS крайна точка на вашия сървър.
- събития — Един или повече типове събития, за които да се абонирате.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Формат на полезния товар
Всяка доставка на webhook изпраща JSON тяло със следната структура:
Заглавки
Всяка доставка включва следните заглавки за маршрутизиране и проверка:
| Заглавка | Описание |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Тип събитие (напр. stream.online) |
X-D1Arena-Signature | HMAC-SHA256 шестнадесетичен обобщен текст на необработеното тяло на заявката |
X-D1Arena-Signature-Version | Формат на подписващ ключ: v2 за текущи абонаменти или v1-hashed-secret за наследени абонаменти |
X-D1Arena-Delivery-Id | Уникален UUID за доставка — използвайте за дедупликация |
X-D1Arena-Timestamp | Времево клеймо на Unix кога е изпратено събитието |
Проверка на подписите
Винаги проверявайте заглавката X-D1Arena-Signature, преди да обработите уеб кукичка. Подписът се изчислява като HMAC-SHA256(raw_body, webhook_secret).
За v2 доставки използвайте тайната whsec_, показана при създаването на абонамента. За доставка на v1-hashed-secret преди надграждане, първо изчислете SHA256(whsec_secret) от тази оригинална тайна и използвайте полученото шестнадесетично обобщение с малки букви като ключ HMAC. Създайте отново абонамента, когато е практично, за да преминете към v2.
Налични събития
| Събитие | Описание |
|---|---|
| stream.online | Стриймър пусна на живо |
| stream.offline | Стриймър излезе офлайн |
| channel.follow | Потребител последва канал |
| channel.subscribe | Нов абонамент за поддръжник на канал |
| channel.tip | Беше изпратен съвет до стример |
| tournament.started | Турнирният мач започна |
| tournament.ended | Турнирът приключи |
| tournament.match.completed | Беше записан резултат от мача |
| clip.created | Беше създаден нов клип от поток на живо |
| overdrive.started | D1 Frenzy започна в канал |
| overdrive.level_up | D1 Frenzy премина към следващото ниво |
| overdrive.ended | D1 Frenzy завършен или изтекъл |
Примери за полезно натоварване на събития
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Политика за доставка и повторен опит
| опит | Закъснение | Бележки |
|---|---|---|
| 1-ви (начален) | Незабавно | Изпратено в рамките на секунди след събитието |
| 2-ри (повторен опит) | 30 секунди | Ако първият опит е неуспешен или изтече време |
| 3-ти (повторен опит) | 2 минути | Експоненциално отстъпление |
| 4-ти (финален) | 10 минути | Последен опит преди маркирането като неуспешен |
2xx status within 10 секунди. Non-2xx responses or timeouts trigger a retry. After 10 поредни провала, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Настройки на програмиста.
Най-добри практики
- Винаги проверявайте подписите преди да обработите полезни товари, за да предотвратите фалшиви събития.
- Използвайте Delivery-Id за дедупликация — повторните опити изпращат същия идентификатор, така че съхранявайте обработените идентификатори, за да избегнете двойна обработка.
- Отговаряйте бързо, обработвайте асинхронно — връща
200 OKнезабавно и обработва бизнес логиката във фоново задание. - Използвайте само HTTPS крайни точки — URL адресите на webhook трябва да използват TLS. HTTP обратните извиквания се отхвърлят.
- Справяйте се с неизвестни събития елегантно — могат да се добавят нови типове събития. Връща
200за неразпознати събития, вместо за грешка.
D1 Лудост
D1 Frenzy се задейства от бързи съвети и абонаменти, докато стриймър е на живо. Напредва през 5 нива с нарастващи цели.
GET /api/overdrive/{streamerId}
Вземете активния D1 Frenzy за стриймър. Връща {"active": false}, ако няма.
Ниво Цели
| Ниво | Точки |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 Лудост — Точки: Съвет $1 → 100; Абонамент 500 × Ниво. Продължителност: 5 минути; Разхлаждане: 30 минути.
SDK за разширение
Създайте персонализирани разширения за панел и наслагване, които стриймърите могат да инсталират на страниците на своите канали. Разширенията се изпълняват във вградени рамки в пясъчна среда и комуникират с хост страницата чрез postMessage.
Първи стъпки
- Създайте API ключ в Настройки на програмиста.
- Създайте вашето разширение като самостоятелна HTML страница, хоствана на вашия домейн (изисква се HTTPS).
- Изпратете го за преглед в секцията Моите разширения.
- След като бъде одобрен, стримерите могат да го инсталират от Extension Marketplace.
Видове разширения
| Тип | Местоположение | Поведение |
|---|---|---|
panel | Под плейъра за поток | Вижда се, когато потокът е на живо. Карта с пълна ширина, височина по подразбиране 300 пиксела. |
overlay | През видео плейъра | Вижда се на живо. Позиция/размер, контролиран от стримера чрез инструмента за позициониране на наслагване. |
API за postMessage
Вашето разширение получава контекстни данни автоматично, когато се зареди. Изпълнете тези събития:
Използвайте точния родителски произход D1Arena за всяко съобщение. Официалният SDK извлича и потвърждава автоматично този произход от страницата за вграждане.
Тъй като вградените рамки на разширението умишлено използват непрозрачен източник на пясъчник, хостът D1Arena удостоверява точно регистрирания прозорец на вградена рамка. Кодът на разширението все още трябва да удостоверява родителския прозорец и точния произход на D1Arena, преди да приеме контекста.
1. Сигнална готовност
2. Получаване на контекст
3. Изпратете действия (по избор)
Обхват на разрешенията
Декларирайте от какви данни се нуждае вашето разширение. Рецензентите потвърждават, че вашият код съответства на вашите декларирани разрешения.
| Обхват | Предоставя достъп до |
|---|---|
read:stream | Състояние на потока, заглавие, категория |
read:viewers | Брой и списък на зрителите |
read:chat | Съобщения в чата (чрез Pusher канал) |
read:clips | Клипове на канала чрез /api/clips/{slug} |
read:tournaments | Информация за активно съответствие чрез /api/active-match/{id} |
read:channel | Профил на канала, последователи, график |
Изисквания за сигурност
sandbox="allow-scripts". Вашето разширение не може осъществява достъп до бисквитки, localStorage или прави удостоверени заявки към d1arena.com.
- Изисква се публичен HTTPS — Вашият URL адрес на iframe трябва да използва TLS и да се разрешава само до публични мрежови адреси.
- Човешки четим източник — Без обфусциран или минимизиран само JavaScript. Рецензентите трябва да могат да четат вашия код.
- Няма зареждане на външен скрипт освен ако не е декларирано във вашето представяне. CDN библиотеките (jQuery, Chart.js и др.) са добри.
- Няма ексфилтрация на данни — Разширенията не трябва да изпращат данни за зрителите до услуги за анализ или проследяване на трети страни.
- Политика за съдържанието — Без реклами, NSFW съдържание, копаене на криптовалута или злонамерено поведение.
Процес на преглед
| Статус | Смисъл |
|---|---|
| pending | Изпратено, чака преглед от администратор (обикновено 1-3 работни дни). |
| approved | Одобрено и видимо в Extension Marketplace. |
| rejected | Отхвърлено с основание. Коригирайте проблемите и изпратете отново. |
| suspended | Временно премахнат за нарушение на правилата. Свържете се с поддръжката. |
Актуализации на версиите
За да актуализирате одобрено разширение, изтрийте текущата версия и изпратете нова с увеличен номер на версия. Новата версия минава отново през преглед.
Дневник на промените
Проследявайте промените в API и новите функции. Следим семантичните версии и обявяваме извънредни промени поне 30 дни предварително.
- Първоначално публично издание на API с удостоверяване на API ключ.
- Потоци: Списък с потоци на живо, получаване на подробности за стриймъра по охлъвка.
- Категории: Търсете и избройте всички категории игри.
- Потребители: Публични профили с конкурентни статистики, ELO рейтинг и брой медали.
- Клипове: Преглеждайте и извличайте подробности за клипа с информация за стриймър/създател.
- Турнири: Списък, филтриране по статус/лига, получаване на брой участници.
- ELO Leaderboard: Глобални и класирани по категория класации.
- Лиги: Списък на лигите с класиране и разпределение на точките.
- D1 Frenzy: Статус на Frenzy в реално време за всеки стриймър.
- Уебкукички (EventSub): 12 типа събития, включително поток, канал, турнир, клип и Frenzy събития.
- Граници на скоростта
Нуждаете се от помощ?
Въпроси относно API? Свържете се с нас.