Hastighedsgrænser og nye forsøg

120 læsninger, 30 skrivninger og 10 operationer mod det nationale e-fakturasystem pr. minut pr. legitimationsoplysning, med X-RateLimit-*-headere.

120 læsninger, 30 skrivninger og 10 operationer mod det nationale e-fakturasystem pr. minut pr. legitimationsoplysning, med X-RateLimit-*-headere.

← Tilbage til API-dokumentationen

Din første faktura i 6 trin

  1. Grænserne gælder pr. legitimationsoplysning, pr. minut: 120 læsninger, 30 skrivninger, 10 operationer mod det nationale e-fakturasystem.
  2. Kvoten for det nationale e-fakturasystem dækker efactura/submit, submissions/{id}/refresh og efactura/inbox/sync.
  3. Hvert svar bærer X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset, også 429.
  4. Et 429 giver dig Retry-After i sekunder; vent så længe, før du forsøger igen.

Hvad 4invoices API'et er

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
// Respektér Retry-After; forsøg aldrig igen ved en 4xx andet end 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;
}

// Et nyt forsøg af en skrivning SKAL genbruge DEN SAMME Idempotency-Key, ellers udsteder du
// et andet fiskalt dokument.

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

Hastighedsgrænser

KvotegruppeAnmodninger / minutBetydning
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

Fejl

StatusTypeKode
429rate_limit_errorrate_limit_exceeded

Almindelige fejl

  • Kvoten på 10 pr. minut er ikke vilkårlig: ANAF i Rumænien tillader selv cirka ét kald til beskedlisten pr. minut pr. CIF.
  • Ved nyt forsøg af en skrivning skal du genbruge DEN SAMME Idempotency-Key, ellers udsteder du et andet dokument.
  • Token-endpointet har en særskilt grænse pr. IP. Gem tokenet i cache i hele dets levetid på én time.
  • GET /v1/me viser legitimationsoplysningens aktuelle kvoter — nyttigt i et integrationssundhedstjek.
  • Har du brug for højere lofter? Skriv til os via kontaktsiden med dit forventede daglige volumen.

Spørgsmål og svar for udviklere

Er grænsen pr. konto eller pr. legitimationsoplysning?

Pr. legitimationsoplysning. Hvis du fordeler trafikken på legitimationsoplysninger pr. system, kan en bulkimport ikke udsulte din webshops live-flow.

Hvilken backoff anbefaler I?

Respektér Retry-After, når den er til stede; ellers eksponentielt fra 1–2 sekunder med højst 5 forsøg. Ingen stramme løkker.

Bærer 429 også X-RateLimit-headerne?

Ja. Vi sender dem på selve 429, og det er præcis dér, en klient har brug for dem til at beregne pausen.