Límites de solicitudes
Certivant aplica un límite de solicitudes por minuto según el plan. Aprenda a leer las cabeceras de límite de solicitudes, gestionar las respuestas 429, reintentar correctamente y diseñar su integración para mantenerse por debajo del límite.
Certivant aplica un límite de solicitudes por minuto para proteger la plataforma de clientes descontrolados y de usos abusivos. Si se mantiene por debajo del límite, nunca verá limitaciones; si lo supera, recibirá un 429 con cabeceras que le indican exactamente cuándo reintentar.
El límite
Su techo por minuto lo define su plan. El operador de la plataforma también puede conceder una excepción por cliente, que siempre queda limitada por el tope del plan. El número efectivo es el que indica la cabecera X-RateLimit-Limit en cada respuesta: léala en lugar de fijar un valor en el código.
| Límite | Según el plan (valores por defecto más abajo). Se indica en X-RateLimit-Limit |
| Ventana | Ventana fija de 60 segundos |
| Backend | Redis (INCR + EXPIRE) |
| Medición | Por clave de API. Cada clave se mide de forma independiente contra el techo de su plan |
| Endpoints públicos | Sujetos a un límite por IP más bajo (60/min) para evitar abusos |
Techos por defecto según el plan
| Nivel del plan | Techo por defecto |
|---|---|
| Free / Launch / Starter | 60 solicitudes / minuto |
| Pro / Scale / Growth | 300 solicitudes / minuto |
| Enterprise | 600 solicitudes / minuto |
Estos son valores por defecto: el operador de su plataforma puede ajustar el tope de cada plan y conceder a su organización un límite por cliente más alto (hasta el tope del plan). Puede ver el límite efectivo de su organización, en modo de solo lectura, en el panel, en KYC → Desarrollador.
Si necesita un techo más alto para el tráfico de producción, pida a su contacto de cuenta (o, en instalaciones autoalojadas, a su operador de la plataforma) que aumente el tope de su plan o su límite por cliente.
Cabeceras de respuesta (en todas las respuestas autenticadas)
Cada respuesta correcta incluye el estado actual del límite de solicitudes:
| Cabecera | Tipo | Significado |
|---|---|---|
X-RateLimit-Limit | integer | Máximo de solicitudes por ventana: el techo efectivo de su plan |
X-RateLimit-Remaining | integer | Solicitudes restantes en la ventana actual |
X-RateLimit-Reset | integer | Segundos hasta que la ventana vuelve a estar completa |
HTTP/1.1 200 OK
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 42
Content-Type: application/json
{ "data": [...], "pagination": {...} }
Lea estas cabeceras en su cliente para reducir la frecuencia de forma proactiva: no espere a recibir un 429 si ve X-RateLimit-Remaining: 3.
La respuesta 429
Cuando supera el límite, la siguiente solicitud devuelve:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 18
Content-Type: application/json
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Max 120 requests per 60s. Retry in 18s."
}
}
X-RateLimit-Reset le indica exactamente cuánto tiempo debe esperar. Úselo en lugar de estimarlo.
Estrategia de reintento
El manejador correcto más sencillo:
async function withRateLimit<T>(fn: () => Promise<Response>): Promise<T> {
while (true) {
const res = await fn();
if (res.status !== 429) {
if (!res.ok) throw await readError(res);
return res.json() as Promise<T>;
}
const retryAfterSec = Number(res.headers.get("X-RateLimit-Reset") ?? 60);
await sleep(retryAfterSec * 1000 + 100); // pad by 100ms for clock skew
}
}
Tres propiedades que conviene mantener:
- Respete
X-RateLimit-Reset. Esperar menos solo provoca que vuelva a alcanzar el límite. - Añada unos 100 ms de margen para compensar el desfase de reloj entre su máquina y el borde de Certivant.
- Limite sus reintentos si la solicitud no es crítica. Insistir durante 5 minutos en una llamada de listado no urgente desperdicia recursos en ambos extremos.
Diseñar en función del límite
| Patrón | Efecto sobre el límite de solicitudes |
|---|---|
Usar webhooks en lugar de consultar GET /requests/:id | Reduce el volumen de solicitudes en torno al 99 % en integraciones típicas |
Agrupar los listados con limit=100 en lugar de limit=20 | 5 veces menos llamadas para los mismos datos |
Almacenar en caché las respuestas GET durante ventanas cortas (5-30 s) | Reduce las lecturas duplicadas |
| Usar claves separadas para cargas de trabajo de lectura intensiva y de escritura intensiva | Cada clave se mide de forma independiente contra el techo de su plan |
| Sacar los trabajos de larga duración de su manejador de webhooks | Evita ráfagas de llamadas cuando llega un lote de eventos |
El mayor ahorro procede de usar webhooks. La principal causa de los tickets de soporte del tipo «estoy alcanzando el límite de solicitudes» son las integraciones que consultan periódicamente los cambios de estado: no lo haga, configure en su lugar los webhooks.
Comportamiento ante ráfagas
El límite se aplica como ventana fija: la primera solicitud inicia un contador de 60 segundos, y cada solicitud cuenta contra su techo hasta que la ventana se reinicia. Distribuya el tráfico sostenido de manera uniforme en lugar de consumir todo el presupuesto del minuto en los primeros segundos.
Si tiene un patrón de ráfagas conocido (por ejemplo, un trabajo por lotes diario que procesa 500 registros), espacie las llamadas:
for (const record of records) {
await processOne(record);
await sleep(500); // 2 req/s — comfortably under typical ceilings
}
Qué ocurre si Redis no está disponible
Si la instancia de Redis del límite de solicitudes no está disponible temporalmente, Certivant falla en abierto: no bloquea su tráfico. Verá respuestas 2xx normales sin las cabeceras X-RateLimit-*. Cuando Redis vuelva a estar disponible, se reanuda la aplicación normal del límite. Esto significa que una caída de Redis en nuestro lado no interrumpe su integración.
Los webhooks van por separado
El límite de solicitudes se aplica a sus llamadas salientes a Certivant. Las entregas de webhooks entrantes desde Certivant a su endpoint no consumen ninguna cuota. No existe un «límite de webhooks» del que deba preocuparse.
Endpoints públicos
Los endpoints que no requieren clave de API (GET /api/status, GET /api/kyc/public/status, los endpoints de envío de formularios) tienen un límite por IP independiente de 60 solicitudes por minuto. Se aplica a la dirección IP del llamador, no a una clave de API. Se ha fijado de forma conservadora porque estos endpoints son accesibles sin autenticación; si su interfaz para solicitantes está alcanzando ese límite, encamine las llamadas a través de su propio backend para que compartan una IP bajo su control.
Errores
Todos los códigos de error de la API de Certivant explicados: forma de la respuesta, correspondencia con los códigos de estado HTTP, orientación de manejo para cada código y un envoltorio de reintento robusto que puede incorporar en su integración.
Esquemas y enumeraciones
Tipos TypeScript canónicos de cada esquema compartido de Certivant: estados de solicitud, tipos de documento, tipos de comprobación, forma de la puntuación de riesgo, campos de solicitante y de entidad KYB, sobre del webhook y paginación.