Ліміти запитів і повторні спроби

120 читань, 30 записів і 10 операцій з національною системою електронного виставлення рахунків на хвилину для кожного набору облікових даних, із заголовками X-RateLimit-*.

120 читань, 30 записів і 10 операцій з національною системою електронного виставлення рахунків на хвилину для кожного набору облікових даних, із заголовками X-RateLimit-*.

← Назад до документації API

Перший рахунок за 6 кроків

  1. Ліміти діють на набір облікових даних, за хвилину: 120 читань, 30 записів, 10 операцій з національною системою електронного виставлення рахунків.
  2. Кошик для національної системи електронного виставлення рахунків охоплює efactura/submit, submissions/{id}/refresh і efactura/inbox/sync.
  3. Кожна відповідь містить X-RateLimit-Limit, X-RateLimit-Remaining і X-RateLimit-Reset, включно з 429.
  4. 429 повертає Retry-After у секундах; зачекайте стільки, перш ніж повторювати.

Що таке 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
// Дотримуйтеся 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Запитів / хвилинуЩо означає
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

Помилки

СтатусТипКод
429rate_limit_errorrate_limit_exceeded

Типові помилки

  • Кошик 10 на хвилину не довільний: у Румунії ANAF дозволяє приблизно один виклик списку повідомлень на хвилину для одного CIF.
  • Повторюючи запис, використовуйте ТОЙ САМИЙ Idempotency-Key, інакше ви випустите другий документ.
  • Токен ендпоінт має окремий ліміт на IP. Кешуйте токен на весь його годинний строк дії.
  • GET /v1/me показує поточні кошики облікових даних — корисно для перевірки справності інтеграції.
  • Потрібні вищі стелі? Напишіть нам через сторінку Контакти, вказавши очікуваний добовий обсяг.

Питання та відповіді для розробників

Ліміт діє на акаунт чи на облікові дані?

На облікові дані. Розподіл трафіку між окремими обліковими даними для кожної системи означає, що масовий імпорт не зможе позбавити ресурсів живий потік вашого магазину.

Який експоненційна затримка ви рекомендуєте?

Дотримуйтеся Retry-After, якщо він є, інакше — експоненційний від 1–2 секунд, щонайбільше 5 спроб. Без щільних циклів.

Чи містить 429 також заголовки X-RateLimit?

Так. Ми передаємо їх і в самій відповіді 429 — саме там, де клієнту вони потрібні, щоб обчислити паузу.