Limity żądań i ponowne próby

120 odczytów, 30 zapisów i 10 operacji e-fakturowania na minutę na poświadczenie, z nagłówkami X-RateLimit-*.

120 odczytów, 30 zapisów i 10 operacji e-fakturowania na minutę na poświadczenie, z nagłówkami X-RateLimit-*.

← Powrót do dokumentacji API

Pierwsza faktura w 6 krokach

  1. Limity liczone są na poświadczenie, na minutę: 120 odczytów, 30 zapisów, 10 operacji e-fakturowania.
  2. Pula operacji e-fakturowania obejmuje efactura/submit, submissions/{id}/refresh i efactura/inbox/sync.
  3. Każda odpowiedź zawiera X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset, łącznie z 429.
  4. 429 podaje Retry-After w sekundach; odczekaj tyle przed ponowieniem.

Czym jest 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
// Respektuj Retry-After; nigdy nie ponawiaj 4xx innego niż 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;
}

// Ponowna próba zapisu MUSI użyć TEGO SAMEGO Idempotency-Key, inaczej wystawisz
// drugi dokument fiskalny.

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

Limity żądań

BucketŻądania / minutęZnaczenie
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

Błędy

StatusTypKod
429rate_limit_errorrate_limit_exceeded

Częste błędy

  • Pula 10 na minutę nie jest arbitralna: w Rumunii sam ANAF pozwala na mniej więcej jedno wywołanie listy wiadomości na minutę na CIF.
  • Przy ponawianiu zapisu użyj TEGO SAMEGO Idempotency-Key, w przeciwnym razie wystawisz drugi dokument.
  • Endpoint tokenu ma osobny limit na adres IP. Przechowuj token w pamięci podręcznej przez cały jego godzinny okres ważności.
  • GET /v1/me pokazuje bieżące pule poświadczenia — przydatne w kontroli stanu integracji.
  • Potrzebujesz wyższych limitów? Napisz do nas przez stronę Kontakt, podając oczekiwany wolumen dzienny.

Pytania i odpowiedzi dla programistów

Czy limit dotyczy konta, czy poświadczenia?

Poświadczenia. Rozdzielenie ruchu na poświadczenia dla poszczególnych systemów sprawia, że import masowy nie zagłodzi bieżącego ruchu Twojego sklepu.

Jaki backoff zalecacie?

Respektuj Retry-After, jeśli jest obecny, w przeciwnym razie wykładniczy od 1–2 sekund, najwyżej 5 prób. Żadnych ciasnych pętli.

Czy 429 również zawiera nagłówki X-RateLimit?

Tak. Emitujemy je w samej odpowiedzi 429, czyli dokładnie tam, gdzie klient potrzebuje ich do obliczenia przerwy.