120 odczytów, 30 zapisów i 10 operacji e-fakturowania na minutę na poświadczenie, z nagłówkami X-RateLimit-*.
Pierwsza faktura w 6 krokach
- Limity liczone są na poświadczenie, na minutę: 120 odczytów, 30 zapisów, 10 operacji e-fakturowania.
- Pula operacji e-fakturowania obejmuje efactura/submit, submissions/{id}/refresh i efactura/inbox/sync.
- Każda odpowiedź zawiera X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset, łącznie z 429.
- 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 |
|---|---|---|
| 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 |
Błędy
| Status | Typ | Kod |
|---|---|---|
| 429 | rate_limit_error | rate_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.