Створюйте ботів, накладки, інструменти для трансляції та інтеграцію з даними 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 | Фільтрувати за ідентифікатором ліги |
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)
Підпишіться на push-повідомлення в режимі реального часу замість опитування. Коли відбувається подія, 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.
Формат корисного навантаження
Кожен вебхук надсилає тіло 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 розширення
Створюйте спеціальні панелі та розширення для оверлеїв, які стримери можуть установлювати на сторінках своїх каналів. Розширення працюють в ізольованому програмному середовищі iframe і спілкуються з головною сторінкою через postMessage.
Початок роботи
- Створіть ключ API в Налаштування розробника.
- Створіть своє розширення як окрему HTML-сторінку, розміщену у вашому домені (потрібен HTTPS).
- Надішліть його на розгляд у розділі Мої розширення.
- Після схвалення стримери зможуть установити його з Extension Marketplace.
Типи розширень
| Тип | Розташування | Поведінка |
|---|---|---|
panel | Під програвачем потоку | Видно під час трансляції. Картка повної ширини, висота за замовчуванням 300 пікселів. |
overlay | Через відеоплеєр | Видно в прямому ефірі. Розташування/розмір контролюється стримером за допомогою інструмента позиціонування накладання. |
API postMessage
Ваше розширення автоматично отримує контекстні дані під час завантаження. Реалізувати такі заходи:
Використовуйте точне джерело D1Arena для кожного повідомлення. Офіційний SDK автоматично отримує та підтверджує це походження зі сторінки вбудовування.
Оскільки розширення iframe навмисно використовують непрозоре джерело пісочниці, хост D1Arena автентифікує саме зареєстроване вікно iframe. Код розширення все ще має автентифікувати батьківське вікно та точне походження 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". Ваше розширення не може отримує доступ до файлів cookie, 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: Глобальні та категорійні таблиці лідерів.
- Ліги: список ліг із турнірною таблицею та розподілом очок.
- D1 Frenzy: Статус Frenzy в реальному часі для будь-якого стримера.
- Веб-хуки (EventSub): 12 типів подій, включаючи потоки, канали, турніри, кліп і події Frenzy.
- Обмеження швидкості
Потрібна допомога?
Запитання щодо API? Зв'яжіться з нами.