120 читања, 30 писања и 10 операција е-фактурисања у минути по credential-у, са X-RateLimit-* заглављима.
Прва фактура у 6 корака
- Ограничења су по креденцијалу, по минуту: 120 читања, 30 уписа, 10 операција е-фактурисања.
- Корпа за операције е-фактурисања обухвата efactura/submit, submissions/{id}/refresh и efactura/inbox/sync.
- Сваки одговор садржи X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset, укључујући 429.
- Одговор 429 вам даје Retry-After у секундама; сачекајте толико пре поновног покушаја.
Шта је 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
// Поштујте Retry-After; никад не понављајте 4xx осим 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;
}
// Поновни покушај уписа МОРА користити ИСТИ Idempotency-Key, иначе издајете
// други фискални документ.https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Ограничења захтева
| Bucket | Захтева / минут | Значење |
|---|---|---|
| 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 |
Грешке
| Статус | Тип | Код |
|---|---|---|
| 429 | rate_limit_error | rate_limit_exceeded |
Честе грешке
- Корпа од 10 у минуту није произвољна: у Румунији сам ANAF дозвољава отприлике један позив за листу порука у минуту по CIF-у.
- При поновном покушају уписа употребите ИСТИ Idempotency-Key, иначе издајете други документ.
- Ендпоинт за токен има засебно ограничење по IP адреси. Кеширајте токен током целог његовог једночасовног века.
- GET /v1/me приказује тренутне bucket-е креденцијала — корисно у провери исправности интеграције.
- Потребне су вам веће границе? Пишите нам преко странице Контакт и наведите очекивани дневни обим.
Питања и одговори за програмере
Да ли је ограничење по налогу или по креденцијалу?
По креденцијалу. Када саобраћај поделите на креденцијале по системима, масовни увоз не може да угуши живи ток ваше онлајн продавнице.
Какав експоненцијално одлагање препоручујете?
Поштујте Retry-After када је присутан, а иначе експоненцијални од 1–2 секунде са највише 5 покушаја. Без уских петљи.
Да ли и 429 садржи заглавља X-RateLimit?
Да. Шаљемо их и у самом 429, а управо ту су клијенту потребна да израчуна паузу.