Referencia de la API REST de la plataforma Quickchat AI: autenticación, URL base, límites de tasa, paginación y manejo de errores.
Quickchat AI ofrece una API REST para acceder de forma programática a la configuración de tu Agente de IA, la Base de Conocimiento, las Conversaciones, las AI Actions y mucho más.
Autenticación
Sección titulada «Autenticación»Todos los endpoints de la API usan autenticación mediante Bearer token. Incluye tu token de API en el encabezado Authorization de cada petición:
Authorization: Bearer <API_TOKEN>Los tokens se crean en el Dashboard de Quickchat en External Apps > API. Cada token es un JWT que contiene tu scenario_id, por lo que no se necesita ningún encabezado identificador adicional.
- Validez del token: 52 semanas desde su creación
- Los tokens pueden revocarse en cualquier momento desde el Dashboard
- Cada token está vinculado a un único Agente de IA (scenario)
- La creación de tokens requiere el plan Business o superior; en los planes inferiores la opción está deshabilitada y el endpoint devuelve
402 Payment Required
Token Scopes
Sección titulada «Token Scopes»Los tokens de API se crean con uno de dos scopes:
| Scope | Access Level | Description |
|---|---|---|
read_all | Solo lectura | Puede leer todos los recursos pero no crear, actualizar ni eliminar |
write_all | Lectura + Escritura | Acceso completo a todos los endpoints, incluidas las operaciones de escritura |
- A los tokens se les asigna un scope al crearse en el Dashboard, en External Apps > API
- El scope
write_allincluye automáticamente todos los permisos deread_all - Usar un token
read_allen un endpoint de escritura devuelve403con"Insufficient token scope. Required: write_all"
Requisitos de scope por grupo de endpoints:
| Endpoint Group | Read Operations | Write Operations |
|---|---|---|
| Chatbot Settings | read_all | write_all |
| Knowledge Base Settings | read_all | write_all |
| Articles | read_all | write_all |
| Article Language URLs | read_all | write_all |
| Tags | read_all | — |
| File Upload | — | write_all |
| Import External Content | — | write_all |
| Intercom Knowledge Base | read_all | write_all |
| Widget Configuration | read_all | write_all |
| Conversations | read_all | — |
| Conversation Metadata | read_all | write_all |
| Handoff Configuration | read_all | write_all |
| Conversation Rating | read_all | write_all |
| AI Actions | read_all | write_all |
URL base
Sección titulada «URL base»| Endpoint Group | Base URL |
|---|---|
| Knowledge Base, AI Actions, File Upload, Import, Chatbot Settings, Widget, Handoff, Conversation Rating | https://app.quickchat.ai/v1/api/ |
| Conversations | https://app.quickchat.ai/v1/api_core/ |
| Realtime Chat | https://app.quickchat.ai/chat |
Límites de tasa
Sección titulada «Límites de tasa»Los límites de tasa se aplican por token y por endpoint.
| Tier | Limit | Applies To |
|---|---|---|
| READ | 120 peticiones/min | Operaciones GET y de listado |
| WRITE | 60 peticiones/min | POST, PATCH, PUT, DELETE |
| HEAVY | 20 peticiones/min | Carga de archivos, importaciones, scraping |
Cuando se excede un límite de tasa, la API devuelve HTTP 429 Too Many Requests.
Paginación
Sección titulada «Paginación»Los endpoints de listado admiten paginación mediante parámetros de consulta:
| Parameter | Description |
|---|---|
limit integer | Número de elementos por página |
offset integer | Número de elementos a omitir |
Las respuestas paginadas siguen esta estructura:
{ "items": [], "offset": 0, "limit": 10, "count": 100}Manejo de errores
Sección titulada «Manejo de errores»Todos los errores se devuelven como JSON en el siguiente formato:
{ "errors": { "root": [ { "message": "Description of the error", "code": "ERROR_CODE" } ] }}| Status | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Entrada no válida o campos obligatorios faltantes |
| 401 | PERMISSION_DENIED | Token no válido, expirado o revocado |
| 402 | PAYMENT_REQUIRED | Se requiere una suscripción activa |
| 403 | PERMISSION_DENIED | El token carece del scope necesario para esta operación |
| 404 | NOT_FOUND | Recurso no encontrado |
| 409 | CONFLICT | Operación en conflicto (p. ej., modificación concurrente) |
| 422 | VALIDATION_ERROR | El cuerpo de la petición no pasó la validación del esquema |
| 429 | TOO_MANY_REQUESTS | Límite de tasa excedido |
| 500 | UNKNOWN | Error interno del servidor |
| 503 | SERVICE_UNAVAILABLE | Indisponibilidad temporal |