Создавайте ботов, оверлеи, инструменты потоковой передачи и интеграцию с данными 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) |
Рейтинги ЭЛО
| Параметр | Тип | Описание |
|---|---|---|
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 |
| ПРО | 60 | 5 |
| Окончательный | 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-адреса веб-перехватчиков должны использовать 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 сообщений
Ваше расширение автоматически получает контекстные данные при загрузке. Реализуйте эти события:
Используйте точный родительский источник 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 | Утверждено и доступно на рынке расширений. |
| rejected | Отклонено по причине. Устраните проблемы и отправьте заявку повторно. |
| suspended | Временно удален за нарушение правил. Свяжитесь со службой поддержки. |
Обновления версий
Чтобы обновить одобренное расширение, удалите текущую версию и отправьте новую с увеличенным номером версии. Новая версия снова проходит проверку.
Журнал изменений
Отслеживайте изменения API и новые функции. Мы следим за семантическим управлением версиями и объявляем о критических изменениях как минимум за 30 дней.
- Первоначальный общедоступный выпуск API с аутентификацией по ключу API.
- Потоки. Список прямых трансляций, получение сведений о стримерах по слагам.
- Категории. Найдите и перечислите все категории игр.
- Пользователи: общедоступные профили с соревновательной статистикой, рейтингом ELO и количеством медалей.
- Клипы. Просмотр и получение сведений о клипе с информацией о стримере/авторе.
- Турниры. Список, фильтрация по статусу/лиге, получение количества участников.
- Таблица лидеров ELO: глобальные таблицы лидеров и таблицы лидеров по категориям.
- Лиги. Список лиг с турнирной таблицей и разбивкой по очкам.
- D1 Frenzy Статус Frenzy в реальном времени для любого стримера.
- Веб-перехватчики (EventSub): 12 типов событий, включая потоки, каналы, турниры, клипы и события Frenzy.
- Ограничения ставок
Нужна помощь?
Есть вопросы о API? Свяжитесь с нами.