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
- Les limites s’appliquent par identifiant et par minute : 120 lectures, 30 écritures, 10 opérations de facturation électronique.
- Le quota de facturation électronique couvre efactura/submit, submissions/{id}/refresh et efactura/inbox/sync.
- Chaque réponse contient X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset, y compris la 429.
- 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
| Bucket | Requêtes / minute | Signification |
|---|---|---|
| read | 120 | GET *, POST /invoices/preview-totals, POST /invoices/{id}/efactura/validate |
| write | 30 | POST /invoices, POST /invoices/{id}/storno, POST|DELETE /invoices/{id}/payments, POST /clients |
| submit | 10 | POST /invoices/{id}/efactura/submit, POST /efactura/submissions/{id}/refresh, POST /efactura/inbox/sync |
Erreurs
| Statut | Type | Code |
|---|---|---|
| 429 | rate_limit_error | rate_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.