120 čitanja, 30 pisanja i 10 operacija e-fakturisanja po minuti po kredencijalu, sa zaglavljima X-RateLimit-*.
Vaša prva faktura u 6 koraka
- Ograničenja važe po kredencijalu, po minuti: 120 čitanja, 30 pisanja, 10 operacija e-fakturisanja.
- Grupa e-fakturisanja obuhvata 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.
- 429 vam daje Retry-After u sekundama; sačekajte toliko prije ponovnog pokušaja.
Šta je 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
// Poštujte Retry-After; nikada 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 pisanja 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
| Grupa | Zahtjeva / minut | Šta znači |
|---|---|---|
| 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 |
Greške
| Status | Tip | Kod |
|---|---|---|
| 429 | rate_limit_error | rate_limit_exceeded |
Česte greške
- Grupa od 10 po minuti nije proizvoljna: u Rumuniji sam ANAF dozvoljava otprilike jedan poziv za listu poruka po minuti po CIF-u.
- Pri ponovnom pokušaju pisanja koristite ISTI Idempotency-Key, inače izdajete drugi dokument.
- Krajnja tačka za token ima zasebno ograničenje po IP adresi. Keširajte token za cijeli njegov sat vremena života.
- GET /v1/me pokazuje trenutne grupe kredencijala — korisno u provjeri zdravlja integracije.
- Trebaju veće granice? Pišite nam preko stranice Kontakt, sa očekivanim dnevnim obimom.
Pitanja i odgovori za programere
Da li je ograničenje po nalogu ili po kredencijalu?
Po kredencijalu. Raspodjela saobraćaja na kredencijale po sistemu znači da masovni uvoz ne može ugušiti živi tok vaše prodavnice.
Koji backoff preporučujete?
Poštujte Retry-After kada postoji; inače eksponencijalno od 1–2 sekunde, najviše 5 pokušaja. Bez uskih petlji.
Da li i 429 nosi zaglavlja X-RateLimit?
Da. Šaljemo ih na samom 429, upravo tamo gdje klijentu trebaju da izračuna pauzu.