Limites de débit et retries

120 lectures, 30 écritures et 10 opérations de facturation électronique par minute et par identifiant, avec les en-têtes X-RateLimit-*.

120 lectures, 30 écritures et 10 opérations de facturation électronique par minute et par identifiant, avec les en-têtes X-RateLimit-*.

← Retour à la documentation API

Votre première facture en 6 étapes

  1. Les limites s’appliquent par identifiant et par minute : 120 lectures, 30 écritures, 10 opérations de facturation électronique.
  2. Le quota de facturation électronique couvre efactura/submit, submissions/{id}/refresh et efactura/inbox/sync.
  3. Chaque réponse contient X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset, y compris la 429.
  4. Une 429 vous fournit Retry-After en secondes ; attendez ce délai avant de réessayer.

Ce qu'est l'API 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
// Respectez Retry-After ; ne retentez jamais un 4xx autre que 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;
}

// Une nouvelle tentative d'écriture DOIT réutiliser le MÊME Idempotency-Key, sinon vous émettez
// un second document fiscal.

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

Limites de débit

BucketRequêtes / minuteSignification
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

Erreurs

StatutTypeCode
429rate_limit_errorrate_limit_exceeded

Erreurs fréquentes

  • Le quota de 10 par minute n’est pas arbitraire : en Roumanie, ANAF autorise elle-même environ un appel de liste de messages par minute et par CIF.
  • Lorsque vous relancez une écriture, réutilisez la MÊME Idempotency-Key, sinon vous émettez un second document.
  • L’endpoint de jeton a une limite séparée par IP. Mettez le jeton en cache pendant toute sa durée de vie d’une heure.
  • GET /v1/me affiche les quotas actuels de l’identifiant — utile dans un health check de l’intégration.
  • Écrivez-nous via la page de contact en indiquant votre volume journalier prévu.

Questions et réponses pour développeurs

La limite s’applique-t-elle par compte ou par identifiant ?

Par identifiant. En répartissant le trafic sur des identifiants propres à chaque système, un import massif ne peut pas priver de ressources le flux en direct de votre boutique.

Quel backoff recommandez-vous ?

Respectez Retry-After lorsqu’il est présent, sinon un backoff exponentiel à partir de 1–2 secondes avec au maximum 5 tentatives. Pas de boucles serrées.

La 429 contient-elle aussi les en-têtes X-RateLimit ?

Oui. Nous les émettons sur la 429 elle-même, c’est-à-dire exactement là où un client en a besoin pour calculer la pause.