120 čitanja, 30 pisanja i 10 operacija e-računa u minuti po credentialu, sa X-RateLimit-* zaglavljima.
Prva faktura u 6 koraka
- Ograničenja su po vjerodajnici, po minuti: 120 čitanja, 30 upisa, 10 operacija e-računa.
- Bucket za operacije e-računa obuhvaća efactura/submit, submissions/{id}/refresh i efactura/inbox/sync.
- Svaki odgovor nosi X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset, uključujući 429.
- Odgovor 429 daje vam Retry-After u sekundama; pričekajte toliko prije ponovnog pokušaja.
Što je 4invoices API
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
// Poštujte Retry-After; nikad ne ponavljajte 4xx osim 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;
}
// Ponovni pokušaj zapisa MORA koristiti ISTI Idempotency-Key, inače izdajete
// drugi fiskalni dokument.https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Ograničenja zahtjeva
| Bucket | Zahtjeva / minutu | Značenje |
|---|---|---|
| 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 |
Pogreške
| Status | Tip | Kod |
|---|---|---|
| 429 | rate_limit_error | rate_limit_exceeded |
Česte pogreške
- Bucket od 10 u minuti nije proizvoljan: u Rumunjskoj sam ANAF dopušta otprilike jedan poziv za popis poruka u minuti po CIF-u.
- Pri ponovnom pokušaju upisa upotrijebite ISTI Idempotency-Key, inače izdajete drugi dokument.
- Endpoint za token ima zasebno ograničenje po IP adresi. Token držite u cacheu cijeli njegov jednosatni vijek.
- GET /v1/me prikazuje trenutačne buckete vjerodajnice — korisno u provjeri ispravnosti integracije.
- Trebate veće granice? Pišite nam preko stranice Kontakt i navedite očekivani dnevni obujam.
Pitanja i odgovori za razvijatelje
Je li ograničenje po računu ili po vjerodajnici?
Po vjerodajnici. Kad promet podijelite na vjerodajnice po sustavima, masovni uvoz ne može izgladnjeti živi tijek vašeg webshopa.
Kakav backoff preporučujete?
Poštujte Retry-After kad je prisutan, a inače eksponencijalni od 1–2 sekunde s najviše 5 pokušaja. Bez uskih petlji.
Nosi li i 429 zaglavlja X-RateLimit?
Da. Šaljemo ih i u samom 429, a upravo ondje ih klijent treba da izračuna pauzu.