Skip to main content

Errors, Pagination & Rate Limits

Error format​

Errors come back with a non-2xx HTTP status and a JSON body containing a message:

{ "message": "Access denied: User is not authorized to access this endpoint" }
StatusMeaningWhat to do
400Invalid parameters, e.g. an order size below the pair minimum or an unknown symbolFix the request. Don't retry it unchanged.
401 / 403Missing or invalid signature, expired api-expires, IP not whitelisted, missing permission, or a user key calling an admin endpointCheck signing and key permissions.
404Wrong path, often a missing /v2 or the wrong API domainCheck the base URL.
429Rate limitedBack off and retry. See below.
5xxServer-side problemRetry with exponential backoff. Make writes idempotent before retrying them.

With hollaex-node-lib, a failed call rejects with an error whose message contains the status and the body, e.g. 403 - {"message":"..."}.

Pagination​

List endpoints (orders, trades, deposits, withdrawals, users and so on) are paginated and return a total count alongside data:

{ "count": 132, "data": [ ... ] }
ParameterDefaultNotes
limit50Maximum 50 on most endpoints
page11-based
order_byField to sort by, e.g. id or created_at
orderasc or desc
start_date / end_dateISO 8601 timestamps

Example of fetching everything:

async function fetchAll(fn, opts = {}) {
const all = [];
for (let page = 1; ; page++) {
const { count, data } = await fn({ ...opts, limit: 50, page });
all.push(...data);
if (data.length === 0 || all.length >= count) return all;
}
}

const deposits = await fetchAll((o) => client.getExchangeDeposits(o), { currency: 'usdt' });

Admin list endpoints also accept format: 'csv' to download a CSV export.

Rate limits​

When you're rate limited, the API responds with HTTP 429. Default limits per IP:

ScopeLimit
General API4 requests/second, burst of 10
Charts4 requests/second, burst of 15
Order books4 requests/second, burst of 3

How to stay within them:

  • Use the WebSocket for order books, trades, orders and balances instead of polling.
  • Cache static data such as /v2/constants and /v2/kit, and refresh it only every few minutes.
  • On a 429, wait and retry with exponential backoff plus jitter. Don't retry straight away in a tight loop.
  • Use /v2/orderbooks and /v2/tickers to get every pair in one call instead of one call per pair.

If your integration genuinely needs higher limits, contact HollaEx support.