Cree bots, superposiciones, herramientas de transmisión e integraciones con datos de D1Arena.
Autenticación
Todas las solicitudes de API requieren una clave API pasada en el encabezado X-API-Key / Authorization: Bearer.
Para crear una clave API, vaya a Configuración del desarrollador en su panel de control. Puedes tener hasta 5 llaves.
429 Too Many Requests con un encabezado Retry-After.
URL base
Todos los puntos finales devuelven JSON. Los puntos finales paginados incluyen un objeto meta con current_page, last_page y total.
Transmisiones
| Parámetro | Tipo | Descripción |
|---|---|---|
category_id | integer | Filtrar por ID de juego/categoría |
limit | integer | Resultados por página (predeterminado: 20) |
page | integer | Número de página |
Categorías
| Parámetro | Tipo | Descripción |
|---|---|---|
search | string | Filtrar categorías por nombre |
limit | integer | Resultados por página (predeterminado: 50) |
Usuarios
clips
| Parámetro | Tipo | Descripción |
|---|---|---|
streamer_id | integer | Filtrar clips por ID de usuario del transmisor |
category_id | integer | Filtrar por ID de juego/categoría |
limit | integer | Resultados por página (predeterminado: 20) |
Torneos
| Parámetro | Tipo | Descripción |
|---|---|---|
status | string | Filtrar por estado (por ejemplo, open, in_progress, completed) |
league_id | integer | Filtrar por ID de liga |
limit | integer | Resultados por página (predeterminado: 20) |
Clasificaciones ELO
| Parámetro | Tipo | Descripción |
|---|---|---|
category_id | integer | Filtrar por ID de juego/categoría |
limit | integer | Número de resultados (predeterminado: 50) |
Ligas
| Parámetro | Tipo | Descripción |
|---|---|---|
status | string | Filtrar por estado de liga |
category_id | integer | Filtrar por ID de juego/categoría |
limit | integer | Resultados por página (predeterminado: 20) |
Respuestas de error
Todos los errores devuelven un sobre JSON coherente. El objeto error siempre contiene un code legible por máquina y un message legible por humanos.
Códigos de estado
Referencia de códigos de error
| Código | Estado HTTP | Descripción |
|---|---|---|
invalid_api_key | 401 | La clave API falta, está mal formada o no existe |
api_key_disabled | 403 | La clave API ha sido revocada o deshabilitada |
not_found | 404 | No se pudo encontrar el recurso solicitado |
validation_error | 422 | Uno o más parámetros de solicitud no son válidos |
rate_limited | 429 | Se superó el límite de tasa de solicitud para esta clave API |
server_error | 500 | Error interno del servidor. Vuelva a intentarlo o comuníquese con el soporte. |
Límites de tarifas
Las solicitudes de API tienen una tasa limitada por clave de API. Cuando excede el límite, las solicitudes regresan 429 Too Many Requests con un encabezado Retry-After.
Límites por nivel
| Nivel | Solicitudes / Minuto (Predeterminado) | Teclas máximas |
|---|---|---|
| Motor de arranque (Gratis) | 60 | 5 |
| PROFESIONAL | 60 | 5 |
| último | 60 | 5 |
| Pareja | 60 | 5 |
Encabezados de límite de tasa
Las solicitudes de API tienen una tasa limitada por clave de API. Cuando excede el límite, las solicitudes regresan 429 Too Many Requests con un encabezado Retry-After.
| encabezado | Descripción |
|---|---|
Retry-After | Segundos de espera antes de volver a intentarlo (solo presente en 429 respuestas) |
Mejores prácticas
- Cache responses locally — stream and tournament data doesn't change every second.
- Suscríbase a webhooks para eventos en tiempo real en lugar de puntos finales de sondeo.
- Solicitudes por lotes siempre que sea posible: utilice parámetros de filtro para obtener exactamente lo que necesita en menos llamadas.
Webhooks (EventSub)
Suscríbase a notificaciones automáticas en tiempo real en lugar de realizar encuestas. Cuando ocurre un evento, D1Arena envía una POST HTTP a su URL de devolución de llamada con una carga útil JSON firmada con HMAC-SHA256.
Configurar
Cree suscripciones a webhooks en Configuración del desarrollador. Cada suscripción requiere:
- URL de devolución de llamada — Un punto final HTTPS de acceso público en su servidor.
- Eventos — Uno o más tipos de eventos a los que suscribirse.
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
Formato de carga útil
Cada entrega de webhook envía un cuerpo JSON con esta estructura:
Encabezados
Cada entrega incluye los siguientes encabezados para enrutamiento y verificación:
| encabezado | Descripción |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | Tipo de evento (por ejemplo, stream.online) |
X-D1Arena-Signature | HMAC-SHA256 resumen hexadecimal del cuerpo de solicitud sin procesar |
X-D1Arena-Signature-Version | Formato de clave de firma: v2 para suscripciones actuales o v1-hashed-secret para suscripciones heredadas |
X-D1Arena-Delivery-Id | UUID de entrega único: uso para deduplicación |
X-D1Arena-Timestamp | Marca de tiempo Unix de cuando se envió el evento |
Verificación de firmas
Verifique siempre el encabezado X-D1Arena-Signature antes de procesar un webhook. La firma se calcula como HMAC-SHA256(raw_body, webhook_secret).
Para entregas v2, utilice el secreto whsec_ que se muestra cuando se creó la suscripción. Para una entrega de v1-hashed-secret previa a la actualización, primero calcule SHA256(whsec_secret) a partir de ese secreto original y utilice el resumen hexadecimal en minúsculas resultante como clave HMAC. Vuelva a crear la suscripción cuando sea práctico para pasar a v2.
Eventos disponibles
| Evento | Descripción |
|---|---|
| stream.online | Un transmisor se transmitió en vivo |
| stream.offline | Un transmisor se desconectó |
| channel.follow | Un usuario siguió un canal. |
| channel.subscribe | Nueva suscripción de seguidor en un canal |
| channel.tip | Se envió un aviso a un transmisor |
| tournament.started | Ha comenzado un partido de torneo |
| tournament.ended | Un torneo ha concluido |
| tournament.match.completed | Se registró el resultado del partido. |
| clip.created | Se creó un nuevo clip a partir de una transmisión en vivo. |
| overdrive.started | D1 Frenzy comenzó en un canal |
| overdrive.level_up | D1 Frenzy avanzó al siguiente nivel |
| overdrive.ended | D1 Frenzy completado o caducado |
Ejemplos de carga útil de eventos
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
Política de entrega y reintento
| intento | Retraso | Notas |
|---|---|---|
| 1º (inicial) | Inmediato | Enviado a los pocos segundos del evento. |
| 2do (reintentar) | 30 segundos | Si el primer intento falla o se agota el tiempo de espera |
| 3.º (reintentar) | 2 minutos | Retroceso exponencial |
| 4to (final) | 10 minutos | Último intento antes de marcar como fallido |
2xx status within 10 segundos. Non-2xx responses or timeouts trigger a retry. After 10 fracasos consecutivos, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in Configuración del desarrollador.
Mejores prácticas
- Verificar siempre las firmas antes de procesar cargas útiles para evitar eventos falsificados.
- Utilice el ID de entrega para la deduplicación — Los reintentos envían el mismo ID, por lo tanto, almacene los ID procesados para evitar el doble procesamiento.
- Responda rápidamente, procese de forma asincrónica — devuelve
200 OKinmediatamente y maneja la lógica empresarial en un trabajo en segundo plano. - Utilice únicamente puntos finales HTTPS — Las URL de webhook deben utilizar TLS. Se rechazan las devoluciones de llamada HTTP.
- Maneje eventos desconocidos con gracia — Se pueden agregar nuevos tipos de eventos. Devuelve
200para eventos no reconocidos en lugar de errores.
Frenesí D1
D1 Frenzy se activa mediante suscripciones y sugerencias rápidas mientras un transmisor está en vivo. Progresa a través de 5 niveles con objetivos crecientes.
GET /api/overdrive/{streamerId}
Obtén el D1 Frenzy activo para un streamer. Devuelve {"active": false} si no hay ninguno.
Objetivos de nivel
| Nivel | Puntos |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
Frenesí D1 — Puntos: Propina $1 → 100; Suscripción 500 × Nivel. Duración: 5 Minutos; Enfriamiento: 30 Minutos.
SDK de extensión
Cree paneles personalizados y extensiones de superposición que los streamers puedan instalar en las páginas de sus canales. Las extensiones se ejecutan en iframes aislados y se comunican con la página host a través de postMessage.
Empezando
- Cree una clave API en Configuración del desarrollador.
- Cree su extensión como una página HTML independiente alojada en su dominio (se requiere HTTPS).
- Envíelo para su revisión en la sección Mis extensiones.
- Una vez aprobado, los streamers pueden instalarlo desde Extension Marketplace.
Tipos de extensión
| Tipo | Ubicación | Comportamiento |
|---|---|---|
panel | Debajo del reproductor de streaming | Visible cuando la transmisión está en vivo. Tarjeta de ancho completo, altura predeterminada de 300 píxeles. |
overlay | Sobre el reproductor de video | Visible en vivo. Posición/tamaño controlado por el streamer a través de la herramienta de posicionamiento de superposición. |
API posterior al mensaje
Su extensión recibe datos de contexto automáticamente cuando se carga. Implemente estos eventos:
Utilice el origen padre D1Arena exacto para cada mensaje. El SDK oficial deriva y valida este origen de la página de inserción automáticamente.
Debido a que los iframes de extensión utilizan intencionalmente un origen de espacio aislado opaco, el host D1Arena autentica la ventana iframe registrada exacta. El código de extensión aún debe autenticar la ventana principal y el origen exacto D1Arena antes de aceptar el contexto.
1. Preparación de la señal
2. Recibir contexto
3. Enviar acciones (opcional)
Alcances de permiso
Declare qué datos necesita su extensión. Los revisores verifican que su código coincida con sus permisos declarados.
| Alcance | Otorga acceso a |
|---|---|
read:stream | Estado de la transmisión, título, categoría |
read:viewers | Recuento y lista de espectadores |
read:chat | Mensajes de chat (a través del canal Pusher) |
read:clips | Clips de canal a través de /api/clips/{slug} |
read:tournaments | Información del partido activo a través de /api/active-match/{id} |
read:channel | Perfil del canal, seguidores, programación. |
Requisitos de seguridad
sandbox="allow-scripts". Su extensión no puedo accede a cookies, localStorage o realiza solicitudes autenticadas a d1arena.com.
- Público HTTPS requerido — Su URL de iframe debe usar TLS y resolverse solo en direcciones de red públicas.
- Fuente legible por humanos — Sin JavaScript ofuscado o minimizado. Los revisores deben poder leer su código.
- Sin carga de script externo a menos que se declare en su presentación. Las bibliotecas CDN (jQuery, Chart.js, etc.) están bien.
- Sin exfiltración de datos — Las extensiones no deben enviar datos de los espectadores a servicios de seguimiento o análisis de terceros.
- Política de contenido — Sin anuncios, contenido NSFW, minería de criptomonedas ni comportamiento malicioso.
Proceso de revisión
| Estado | Significado |
|---|---|
| pending | Enviado, en espera de revisión del administrador (normalmente entre 1 y 3 días hábiles). |
| approved | Aprobado y visible en Extension Marketplace. |
| rejected | Rechazado con una razón. Solucione los problemas y vuelva a enviarlos. |
| suspended | Eliminado temporalmente por infracción de política. Póngase en contacto con el soporte. |
Actualizaciones de versión
Para actualizar una extensión aprobada, elimine la versión actual y envíe una nueva con un número de versión incrementado. La nueva versión pasa nuevamente por revisión.
Registro de cambios
Realice un seguimiento de los cambios de API y las nuevas funciones. Seguimos el control de versiones semántico y anunciamos cambios importantes con al menos 30 días de antelación.
- Lanzamiento inicial de API pública con autenticación de clave API.
- Transmisiones: enumere transmisiones en vivo, obtenga detalles del transmisor por slug.
- Categorías: busca y enumera todas las categorías de juegos.
- Usuarios: perfiles públicos con estadísticas competitivas, clasificación ELO y recuento de medallas.
- Clips: explora y recupera detalles del clip con información del transmisor/creador.
- Torneos: listar, filtrar por estado/liga, obtener recuentos de participantes.
- Tabla de clasificación ELO: tablas de clasificación clasificadas globales y por categoría.
- Ligas: enumera las ligas con clasificaciones y desgloses de puntos.
- D1 Frenzy: estado de Frenzy en tiempo real para cualquier transmisor.
- Webhooks (EventSub): 12 tipos de eventos que incluyen transmisiones, canales, torneos, clips y eventos Frenzy.
- Límites de tarifas
¿Necesitar ayuda?
¿Preguntas sobre el API? Contáctenos.