Limite de rată și retry

120 citiri, 30 scrieri și 10 operațiuni ANAF pe minut per credențială, cu antete X-RateLimit-*.

120 citiri, 30 scrieri și 10 operațiuni ANAF pe minut per credențială, cu antete X-RateLimit-*.

← Înapoi la documentația API

Prima factură în 6 pași

  1. Limitele sunt per credențială, pe minut: 120 citiri, 30 scrieri, 10 operațiuni ANAF.
  2. Bucketul ANAF acoperă efactura/submit, submissions/{id}/refresh și efactura/inbox/sync.
  3. Fiecare răspuns are X-RateLimit-Limit, X-RateLimit-Remaining și X-RateLimit-Reset, inclusiv 429-ul.
  4. Pe 429 primești Retry-After în secunde; așteaptă atât înainte de a reîncerca.

Ce este API-ul 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
// Respectă Retry-After; nu reîncerca niciodată un 4xx în afară 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;
}

// O reîncercare de scriere TREBUIE să refolosească ACELAȘI Idempotency-Key, altfel emiți
// un al doilea document fiscal.

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

Limite de rată

BucketCereri / minutCe înseamnă
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

Erori

StatusTipCod
429rate_limit_errorrate_limit_exceeded

Greșeli frecvente

  • Bucketul de 10 pe minut nu e arbitrar: ANAF limitează la aproximativ o listare de mesaje pe minut per CIF.
  • La retry pe o scriere refolosește ACEEAȘI Idempotency-Key, altfel emiți un al doilea document.
  • Endpointul de token are limită separată pe IP. Ține tokenul în cache pentru toată ora lui de viață.
  • GET /v1/me îți arată bucketele curente ale credențialei — util într-un health-check al integrării.
  • Scrie-ne prin pagina de contact, cu volumul estimat pe zi.

Întrebări frecvente de la dezvoltatori

Limita e pe cont sau pe credențială?

Pe credențială. Împărțind traficul pe credențiale separate per sistem, un import în masă nu îți sufocă fluxul din magazin.

Ce backoff recomandați?

Respectă Retry-After când există, altfel exponențial de la 1–2 secunde, cu maximum 5 încercări. Fără bucle strânse.

429-ul are și el antetele X-RateLimit?

Da. Le emitem chiar pe 429, exact unde un client are nevoie de ele ca să calculeze pauza.