Límites de uso y CORS
Cuántas peticiones admite la clave de tu aplicación, qué pasa al superar el límite y desde qué webs se puede llamar a la API externa.
Actualizado el . 3 min de lectura
Incluido en todos los planes. Ver precios
Esta página explica los dos frenos que la API externa aplica antes de atender una petición: cuántas puede hacer tu aplicación (los límites de uso) y desde qué webs puede llamarla un navegador (CORS, el mecanismo con el que el navegador decide si una web puede leer la respuesta de otro dominio).
Los límites de un vistazo
Límites de la API externa
- Peticiones por hora de cada clave
- 1.000por hora
- Lo que trae una aplicación externa nueva.
- Peticiones por minuto, por IP y ruta
- 600al minuto
- Freno general de toda la API.
- Errores del navegador por aplicación
- 30al minuto
- POST /external/v1/tickets/client-errors
- Facturas enviadas por correo
- 100por hora
- POST /external/v1/invoices/:id/send, por aplicación.
El cupo por hora de tu clave
Las claves de las aplicaciones externas nacen con 1.000 peticiones por hora.
- El contador arranca con la primera petición y se reinicia una hora después. No es una ventana deslizante: si gastas el cupo en diez minutos, esperas los cincuenta restantes.
- Cuentan todas las peticiones que llevan una clave válida, también las que después fallan por permisos o por plan.
- Al superarlo, la respuesta es
429conerrorCode: 'RATE_LIMIT_EXCEEDED'y la cabeceraRetry-After: 3600. Es el plazo máximo, no el exacto: el cupo puede volver antes si la hora empezó hace rato.
{
"statusCode": 429,
"message": "Límite de peticiones superado",
"error": "TOO_MANY_REQUESTS",
"errorCode": "RATE_LIMIT_EXCEEDED",
"timestamp": "2026-10-08T10:15:00.000Z",
"requestId": "550e8400-e29b-41d4-a716-446655440000"
}Si ves en las respuestas las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset, se refieren al freno general por IP y ruta, no al cupo por hora de tu clave, que no publica cabeceras propias.
Si recibes un 429, respeta Retry-After y reintenta con espera exponencial. No reintentes enseguida: cada intento cuenta.
CORS: desde qué webs se puede llamar
CORS solo afecta a las llamadas que hace un navegador. Desde tu servidor, con curl o con el SDK en Node.js o Python, no interviene.
Cada aplicación externa tiene una lista de orígenes permitidos (en la API, allowedOrigins). Se edita en su ficha, en Ajustes › Avanzado › Dominios autorizados. Un origen es solo esquema, dominio y, si hace falta, puerto: https://app.tuempresa.com, sin ruta ni barra final.
- Si la lista tiene entradas y la petición llega desde un origen que no está en ella, la respuesta es
403conORIGIN_NOT_ALLOWED. - Si la lista está vacía, la aplicación no restringe el origen, pero el navegador tampoco podrá leer la respuesta salvo que el origen esté autorizado en la plataforma (
403conCORS_ORIGIN_NOT_ALLOWED). Para llamar desde una web, declara su origen.
Comodines
Puedes usar * para cubrir subdominios, con estas reglas:
| Patrón | ¿Se admite? |
|---|---|
https://app.tuempresa.com | Sí |
https://*.tuempresa.com | Sí: cualquier subdominio de tuempresa.com |
https://app-*.tuempresa.es | Sí |
http://localhost:3000 | Sí, para desarrollo |
*, https://*, https://*.com o https://*.tuempresa.* | No: abrirían la API a cualquier web |
https://app.tuempresa.com/ruta | No: un origen no lleva ruta |
El comodín no se admite en el dominio principal ni en la extensión (.com, .es), y el puerto, si lo pones, tiene que ser un número. Al guardar, los patrones que no cumplan las reglas se rechazan con el motivo.
CORS no protege tu clave
Permitir un origen deja que esa web llame a la API, pero la clave sigue viajando en la petición y cualquiera puede verla en las herramientas del navegador. Llama a la API externa desde tu servidor; si necesitas hacerlo desde el navegador, pasa por un intermediario tuyo que añada la clave.
Siguiente paso
Prepara tu integración para los fallos en Errores, identificador de petición y reintentos.
Ponlo en práctica
Lo encontrarás en Aplicaciones externas. Para abrirlo, entra con tu cuenta de UTILIA OS.