Skip to main content
Run one historical job that stays inside its request, concurrency, credit, retry, and page budgets, and ends with a clear stop state. The example pulls one hour of Hyperliquid core BTC trades, a window every plan’s history reaches, including Free’s most recent 30 days.

Before you start

  • Choose one venue and market type, symbol, data family, and time window.
  • Read Rate limits for your plan’s capacity and Errors for retry behavior.
  • Set a worker count, page budget, retry budget, and output path before the first request.
  • Keep the API key in the runtime environment and out of job logs.

Inputs

Steps

1

Run one baseline request

Save the status, row count, request ID, and any meta.next_cursor before adding workers.
2

Set finite workers and pages

Give each worker one market, symbol, window, and cursor chain. Stop when the window is exhausted or the page budget is reached. Do not let an agent or scheduler create an unbounded loop.
3

Apply bounded retries

Retry rate_limited, transient 5xx, and network timeouts only within the retry budget, and stop on insufficient_credits. When you reach a limit says how long to wait for each.
4

Widen only after the run is inspectable

Compare returned rows, request IDs, latency, retries, and quality state with the inputs. Add symbols or workers only after this run has a clear stop state.

What a finished run looks like

Every request has a recorded status and request ID. The run ends as complete, partial, or stopped with a reason. A remaining cursor, an exhausted retry budget, or a quality failure is visible in the output rather than hidden by a retry loop. Write the route, numeric window, page size, worker count, retry budget, and stop rule beside the output. Keep request IDs per page, including failed attempts when the client exposes them. A capacity limit affects request rate, concurrency, credits, standard replay speed, or export volume. It can slow or narrow a job; it does not mean the route or dataset is unavailable.

If something fails

  • 400, invalid symbols, or invalid parameters: fix the input before another call.
  • 401: repair the key source or X-API-Key header.
  • 403: read the exact error for that endpoint, account, and key, and stop unchanged retries.
  • 429: retry rate_limited within the budget and stop on insufficient_credits, as When you reach a limit describes.
  • 5xx or timeout: retry within budget, then check Data quality and stop if the budget is exhausted.
  • Page budget reached with a cursor remaining: mark the output partial and resume from the saved cursor under a new bounded run.
  • A stale or incomplete quality result: narrow, delay, or mark the output as described in gap handling.

Saved run metadata

The zero UUID is a shape placeholder only. Replace it with the UUID returned by each response or client wrapper.

Next step

Follow the cursor through the full window with Pull historical market data.
Last modified on October 6, 2026