120 четения, 30 записа и 10 операции с националната система за е-фактуриране на минута за идентификатор, с X-RateLimit-* хедъри.
← Обратно към API документацията
Първата фактура в 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, иначе издавате втори документ.
- Токен endpoint-ът има отделен лимит по IP. Кеширайте токена за целия му едночасов живот.
- GET /v1/me показва текущите кошници на идентификационните данни — полезно в проверка на здравето на интеграцията.
- Трябват ви по-високи тавани? Пишете ни през страницата Контакт с очаквания дневен обем.
Въпроси и отговори за разработчици
Лимитът за акаунт ли е или за идентификационни данни?
За идентификационни данни. Разделянето на трафика между отделни идентификационни данни за всяка система означава, че масов импорт не може да задуши живия поток на магазина ви.
Какъв експоненциално забавяне препоръчвате?
Спазвайте Retry-After, когато го има, иначе експоненциален от 1–2 секунди с най-много 5 опита. Без плътни цикли.
Съдържа ли 429 и заглавките X-RateLimit?
Да. Изпращаме ги и в самия 429 — точно там, където клиентът има нужда от тях, за да изчисли паузата.