Ograničenja zahtjeva i ponovni pokušaji

120 čitanja, 30 pisanja i 10 operacija e-računa u minuti po credentialu, sa X-RateLimit-* zaglavljima.

120 čitanja, 30 pisanja i 10 operacija e-računa u minuti po credentialu, sa X-RateLimit-* zaglavljima.

← Natrag na API dokumentaciju

Prva faktura u 6 koraka

  1. Ograničenja su po vjerodajnici, po minuti: 120 čitanja, 30 upisa, 10 operacija e-računa.
  2. Bucket za operacije e-računa obuhvaća efactura/submit, submissions/{id}/refresh i efactura/inbox/sync.
  3. Svaki odgovor nosi X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset, uključujući 429.
  4. 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

BucketZahtjeva / minutuZnačenje
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

Pogreške

StatusTipKod
429rate_limit_errorrate_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.