Límites de peticiones y reintentos

120 lecturas, 30 escrituras y 10 operaciones de facturación electrónica por minuto y credencial, con cabeceras X-RateLimit-*.

120 lecturas, 30 escrituras y 10 operaciones de facturación electrónica por minuto y credencial, con cabeceras X-RateLimit-*.

← Volver a la documentación de la API

Tu primera factura en 6 pasos

  1. Los límites son por credencial y por minuto: 120 lecturas, 30 escrituras y 10 operaciones de facturación electrónica.
  2. El cupo de facturación electrónica cubre efactura/submit, submissions/{id}/refresh y efactura/inbox/sync.
  3. Cada respuesta incluye X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset, incluida la 429.
  4. Un 429 te da Retry-After en segundos; espera ese tiempo antes de reintentar.

Qué es la API de 4invoices

http
HTTP/2 429
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1785312000
Retry-After: 17
Content-Type: application/json

{"error":{"type":"rate_limit_error","code":"rate_limit_exceeded",
 "message":"...","doc_url":"https://4invoices.net/ro/api-dezvoltatori#errors",
 "request_id":"req_..."}}
javascript
// Respeta Retry-After; no reintentes nunca un 4xx distinto de 429.
async function call(url, init, attempt = 0) {
  const res = await fetch(url, init);
  if (res.status === 429 || res.status >= 500) {
    if (attempt >= 5) return res;
    const retryAfter = Number(res.headers.get("Retry-After")) || 2 ** attempt;
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
    return call(url, init, attempt + 1);
  }
  return res;
}

// Un reintento de escritura DEBE reutilizar el MISMO Idempotency-Key, o emitirás
// un segundo documento fiscal.

https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json

Límites de peticiones

BucketPeticiones / minutoQué significa
read120GET *, POST /invoices/preview-totals, POST /invoices/{id}/efactura/validate
write30POST /invoices, POST /invoices/{id}/storno, POST|DELETE /invoices/{id}/payments, POST /clients
submit10POST /invoices/{id}/efactura/submit, POST /efactura/submissions/{id}/refresh, POST /efactura/inbox/sync

Errores

EstadoTipoCódigo
429rate_limit_errorrate_limit_exceeded

Errores frecuentes

  • El cupo de 10 por minuto no es arbitrario: en Rumanía, la propia ANAF permite aproximadamente una llamada de listado de mensajes por minuto y por CIF.
  • Al reintentar una escritura, reutiliza la MISMA Idempotency-Key; de lo contrario, emitirás un segundo documento.
  • El endpoint de tokens tiene un límite por IP aparte. Guarda el token en caché durante toda su vida útil de una hora.
  • GET /v1/me muestra los cupos actuales de la credencial: útil en una comprobación de salud de la integración.
  • ¿Necesitas límites más altos? Escríbenos a través de la página de Contacto indicando tu volumen diario previsto.

Preguntas y respuestas para desarrolladores

¿El límite es por cuenta o por credencial?

Por credencial. Repartir el tráfico entre credenciales por sistema evita que una importación masiva deje sin capacidad el flujo en vivo de tu tienda.

¿Qué backoff se recomienda?

Respeta Retry-After cuando esté presente; si no, backoff exponencial a partir de 1–2 segundos con un máximo de 5 intentos. Nada de bucles cerrados.

¿El 429 también incluye las cabeceras X-RateLimit?

Sí. Las emitimos en el propio 429, que es precisamente donde un cliente las necesita para calcular la pausa.