Límites de solicitudes
La API aplica límites de frecuencia por organización para garantizar un uso equitativo y la estabilidad de la plataforma.
Límites
| Ventana | Límite |
|---|---|
| Por segundo | 5 solicitudes |
Se aplica por organización en todos los endpoints de la API de datos. Al superar el límite, se devuelve 429 Too Many Requests.
Encabezados de límite de frecuencia
Cuando una solicitud supera el límite de frecuencia, la respuesta incluye encabezados para facilitar el reintento:
| Encabezado | Descripción |
|---|---|
Retry-After | Segundos de espera antes de reintentar |
X-RateLimit-Limit-Second | Límite por segundo (5) |
Ejemplo de respuesta 429
HTTP/1.1 429 Too Many RequestsRetry-After: 1X-RateLimit-Limit-Second: 5Content-Type: application/json
{"detail": "Rate limit exceeded. Please slow down."}Estrategia de reintento
Utilice retroceso exponencial con el encabezado Retry-After:
import timeimport requests
def api_request(url, headers, max_retries=3): for attempt in range(max_retries): response = requests.get(url, headers=headers)
if response.status_code != 429: return response
retry_after = int(response.headers.get("Retry-After", 2 ** attempt)) print(f"Rate limited. Retrying in {retry_after}s...") time.sleep(retry_after)
return response # Return last response if all retries exhaustedasync function apiRequest(url: string, headers: HeadersInit, maxRetries = 3) { for (let attempt = 0; attempt < maxRetries; attempt++) { const response = await fetch(url, { headers });
if (response.status !== 429) return response;
const retryAfter = parseInt(response.headers.get("Retry-After") || String(2 ** attempt)); console.log(`Rate limited. Retrying in ${retryAfter}s...`); await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); }}# Simple retry with backofffor i in 1 2 3; do response=$(curl -s -w "\n%{http_code}" \ "https://be.graph8.com/api/v1/contacts" \ -H "Authorization: Bearer $API_KEY")
status=$(echo "$response" | tail -1)
if [ "$status" != "429" ]; then echo "$response" | head -n -1 break fi
echo "Rate limited, retrying in ${i}s..." sleep $idoneBuenas prácticas
- Use paginación con límites altos: obtenga 200 elementos por página en lugar de hacer 200 solicitudes individuales.
- Espacie las solicitudes cada ~200 ms: un intervalo de 200 ms lo mantiene con holgura por debajo de las 5 solicitudes por segundo, con margen para variaciones.
- Almacene respuestas en caché: si consulta los mismos datos de forma repetida, guárdelos en caché localmente para reducir las llamadas a la API.
- Use retroceso exponencial, no bucles continuos: cuando alcance el límite de frecuencia, respete siempre el encabezado
Retry-Afteren lugar de reintentar de inmediato.