Documentación de la API
Crea flujos de autorización de Kick, consulta permisos y gestiona tokens con la API v2.
Flujo de autorización
- Consulta el catálogo de permisos y elige los ID activos que necesita tu integración.
- Crea un flujo. Mantén privada su clave de recuperación y abre authorization_url en el navegador del titular de la cuenta.
- Tras la autorización, recupera las credenciales una sola vez. Guarda el token de acceso y el último token de actualización.
Los flujos caducan a las 24 horas. Una recuperación correcta consume las credenciales almacenadas. Espera al menos cinco segundos entre consultas pendientes.
Autenticación y límites
La recuperación usa la clave privada del flujo como credencial Bearer. Los demás endpoints usan los datos indicados abajo. La API v2 permite 120 solicitudes por minuto e IP; HTTP 429 indica que se alcanzó el límite.
Referencia de endpoints
GET /api/v2/scopes
Permisos disponibles para el token
Consulta los ID, nombres, descripciones y disponibilidad de los permisos actuales. Esta solicitud no necesita credenciales.
Este endpoint no tiene parámetros de solicitud.
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "scopes": [ { "description": "Send chat messages as the authorized account.", "id": 6, "scope": "chat:write", "secret": false } ], "success": true } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/workflows
Crear un flujo de autorización
Crea un flujo de autorización de 24 horas. Usa el modo compartido si está habilitado o envía tus credenciales de aplicación en el cuerpo POST.
Parámetros
ai_agentOpcionalstring· cuerpoNombre opcional del cliente de IA, hasta 64 bytes UTF-8 sin caracteres de control. Sirve para atribución, no para autenticación.
credentialsOpcionalobject· cuerpoUsa tu aplicación de desarrollador Kick. Deja ambos campos vacíos solo si el modo compartido está disponible. Las credenciales permanecen en la memoria de esta pestaña y se cifran temporalmente en el servidor durante la autorización.
is_aiOpcionalboolean· cuerpoMarcar un flujo como asistido por IA.
redirect_urlOpcionalstring· cuerpoDestino HTTP o HTTPS absoluto opcional tras la autorización. No se permiten credenciales en la URL.
scope_idsOpcionalarray· cuerpoID numéricos del catálogo. Elige permisos activos; como máximo 150 distintos.
scopesOpcionalarray· cuerpoNombres de permisos separados por comas. El parámetro debe estar presente; un valor vacío no solicita permisos.
titleOpcionalstring· cuerpoNombre de la aplicación, hasta 500 bytes UTF-8.
Cuerpo JSON de la solicitud
{
"credentials": {
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
},
"scope_ids": [
6
],
"title": "Example integration"
}
Respuesta
HTTP 201- Creado
application/jsonRespuesta de ejemplo
{ "authorization_url": "https://kicktokengen.com/authorize/EXAMPLE_ID", "expires_at": "2030-01-02T12:00:00Z", "id": "EXAMPLE_ID", "retrieval_key": "EXAMPLE_PRIVATE_KEY", "status_url": "https://kicktokengen.com/api/v2/workflows/EXAMPLE_ID", "success": true } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
GET /api/v2/workflows/{id}
Recuperar credenciales del flujo
Devuelve las credenciales una sola vez tras la autorización. Envía la clave del flujo como credencial Bearer. Una lectura correcta consume las credenciales almacenadas.
Parámetros
idObligatoriostring· rutaID del flujo devuelto al crearlo.
AuthorizationObligatorioBearer· cabeceraClave privada de recuperación devuelta al crear el flujo. No la incluyas en enlaces públicos.
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "access_token": "EXAMPLE_ACCESS_TOKEN", "client_id": "EXAMPLE_CLIENT_ID", "expires_at": "2030-01-01T13:00:00Z", "expires_in": 3600, "refresh_token": "EXAMPLE_REFRESH_TOKEN", "scopes": [ "chat:write" ], "status": "authorized", "success": true, "token_type": "Bearer" } HTTP 202- Autorización pendiente
application/jsonRespuesta de ejemplo
{ "status": "pending", "success": false } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 410- Credenciales caducadas o ya recuperadas
application/jsonRespuesta de ejemplo
{ "message": "workflow credentials are no longer available", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
GET /api/v2/ai/workflows/create
Crear un flujo de IA mediante GET
Alternativa GET para clientes que solo pueden consultar URLs. Crea un flujo con nombres de permisos y devuelve una URL privada de recuperación. El JSON se sirve como text/plain.
Parámetros
titleOpcionalstring· consultaNombre de la aplicación, hasta 500 bytes UTF-8.
scopesOpcionalstring· consultaNombres de permisos separados por comas. El parámetro debe estar presente; un valor vacío no solicita permisos.
scope_idsOpcionalstring· consultaID numéricos del catálogo. Elige permisos activos; como máximo 150 distintos.
ai_agentOpcionalstring· consultaNombre opcional del cliente de IA, hasta 64 bytes UTF-8 sin caracteres de control. Sirve para atribución, no para autenticación.
Respuesta
HTTP 201- Creado
application/jsonRespuesta de ejemplo
{ "authorization_url": "https://kicktokengen.com/authorize/EXAMPLE_ID", "id": "EXAMPLE_ID", "retrieval_url": "https://kicktokengen.com/api/v2/ai/workflows/EXAMPLE_ID/EXAMPLE_PRIVATE_KEY", "success": true } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
GET /api/v2/ai/workflows/{id}/{key}
Recuperar credenciales de IA mediante GET
URL privada con la clave de recuperación. La respuesta JSON entrega las credenciales una vez; protege la URL como una contraseña.
Parámetros
idObligatoriostring· rutaID del flujo devuelto al crearlo.
keyObligatoriostring· rutaClave privada de recuperación devuelta al crear el flujo. No la incluyas en enlaces públicos.
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "access_token": "EXAMPLE_ACCESS_TOKEN", "client_id": "EXAMPLE_CLIENT_ID", "expires_at": "2030-01-01T13:00:00Z", "expires_in": 3600, "refresh_token": "EXAMPLE_REFRESH_TOKEN", "scopes": [ "chat:write" ], "status": "authorized", "success": true, "token_type": "Bearer" } HTTP 202- Autorización pendiente
application/jsonRespuesta de ejemplo
{ "status": "pending", "success": false } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 410- Credenciales caducadas o ya recuperadas
application/jsonRespuesta de ejemplo
{ "message": "workflow credentials are no longer available", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/tokens/validate
Validar token
Comprueba la validez y muestra la aplicación emisora, tipo, permisos concedidos y caducidad devueltos por Kick.
Parámetros
access_tokenObligatoriostring· cuerpoToken de acceso de Kick que se consultará o revocará, sin el prefijo oauth:.
Cuerpo JSON de la solicitud
{
"access_token": "EXAMPLE_ACCESS_TOKEN"
}
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "active": true, "client_id": "EXAMPLE_CLIENT_ID", "exp": 1893502800, "expires_in": 3600, "scope_details": [ { "description": "Send chat messages.", "scope": "chat:write" } ], "scopes": [ "chat:write" ], "success": true, "token_type": "user" } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid access token", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/tokens/refresh
Token de actualización
Renueva un token de acceso mediante un token de actualización. Incluye client_id y client_secret al renovar un token de tu propia aplicación de Kick.
Parámetros
client_idOpcionalstring· cuerpoID de cliente de la aplicación de Kick. Omítelo para usar la aplicación compartida de KTG.
client_secretOpcionalstring· cuerpoSecreto de cliente de la aplicación de Kick. Para actualizar, inclúyelo junto con client_id.
refresh_tokenObligatoriostring· cuerpoÚltimo token de actualización de la cuenta y la aplicación de Kick.
Cuerpo JSON de la solicitud
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"refresh_token": "EXAMPLE_REFRESH_TOKEN"
}
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "access_token": "EXAMPLE_ACCESS_TOKEN", "client_id": "EXAMPLE_CLIENT_ID", "expires_at": "2030-01-01T13:00:00Z", "expires_in": 3600, "refresh_token": "EXAMPLE_REFRESH_TOKEN", "scopes": [ "chat:write" ], "status": "authorized", "success": true, "token_type": "Bearer" } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid refresh token or client credentials", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/tokens/revoke
Revocar token
Revoca un único token de acceso o actualización enviado en el cuerpo POST.
Parámetros
access_tokenOpcionalstring· cuerpoToken de acceso de Kick que se consultará o revocará, sin el prefijo oauth:.
refresh_tokenOpcionalstring· cuerpoÚltimo token de actualización de la cuenta y la aplicación de Kick.
Cuerpo JSON de la solicitud
{
"access_token": "EXAMPLE_ACCESS_TOKEN"
}
Respuesta
HTTP 200- Respuesta correcta
application/jsonRespuesta de ejemplo
{ "revoked": true, "success": true } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid token request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/quick-links
Enlace rápido
Crea un enlace reutilizable con los ID de permisos elegidos. auth=stay abre el generador; auth=authorize inicia la autorización de Kick.
Parámetros
authOpcionalstring· cuerpostay abre el generador. authorize y el alias de compatibilidad auth_auth inician la autorización inmediatamente.
scope_idsOpcionalarray· cuerpoID numéricos del catálogo. Elige permisos activos; como máximo 150 distintos.
scopesOpcionalarray· cuerpoNombres de permisos separados por comas. El parámetro debe estar presente; un valor vacío no solicita permisos.
Cuerpo JSON de la solicitud
{
"auth": "stay",
"scope_ids": [
6
]
}
Respuesta
HTTP 201- Creado
application/jsonRespuesta de ejemplo
{ "success": true, "url": "https://kicktokengen.com/quick/Ab3dEf8_" } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }
POST /api/v2/token-requests
Solicitar token
Crea un enlace de solicitud de autorización. Cuando el titular de la cuenta completa la autorización, las credenciales se envían a my_email.
Parámetros
credentialsOpcionalobject· cuerpoUsa tu aplicación de desarrollador Kick. Deja ambos campos vacíos solo si el modo compartido está disponible. Las credenciales permanecen en la memoria de esta pestaña y se cifran temporalmente en el servidor durante la autorización.
my_emailObligatoriostring· cuerpoDirección de correo que recibe las credenciales al completarse la solicitud.
my_nameObligatoriostring· cuerpoNombre del solicitante, hasta 128 bytes UTF-8.
scope_idsOpcionalarray· cuerpoID numéricos del catálogo. Elige permisos activos; como máximo 150 distintos.
scopesOpcionalarray· cuerpoNombres de permisos separados por comas. El parámetro debe estar presente; un valor vacío no solicita permisos.
Cuerpo JSON de la solicitud
{
"credentials": {
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
},
"my_email": "developer@example.com",
"my_name": "Example developer",
"scope_ids": [
6
]
}
Respuesta
HTTP 201- Creado
application/jsonRespuesta de ejemplo
{ "expires_at": "2030-01-02T12:00:00Z", "success": true, "url": "https://kicktokengen.com/request/EXAMPLE_ID" } HTTP 400- Solicitud no válida
application/jsonRespuesta de ejemplo
{ "message": "invalid request", "success": false } HTTP 401- Token o clave de recuperación no válidos
application/jsonRespuesta de ejemplo
{ "message": "invalid retrieval key", "success": false } HTTP 429- Límite de solicitudes alcanzado
application/jsonRespuesta de ejemplo
{ "message": "rate limit exceeded", "success": false } HTTP 503- Servicio no disponible temporalmente
application/jsonRespuesta de ejemplo
{ "message": "Service unavailable", "success": false }