Don't invest unless you're prepared to lose all the money you invest. This is a high-risk investment and you should not expect to be protected if something goes wrong. Take 2 mins to learn more.

DecryptrDevelopers

Pagination

How Decryptr API lists page with cursors, the response envelope, page sizes per plan and how pages are charged.

Every response has the same envelope: your data under data, when it was produced in as_of, and a short disclaimer. Hyperliquid-derived responses add an attribution line (see Data and licensing).

Lists that can run long, such as /v1/sentiment/{asset} and /v1/orderflow/delta, also return next_cursor:

{
  "data": [
    { "asset": "BTC", "day": "2026-10-23T00:00:00.000Z", "callers": 10, "long_pct": 40 },
    { "asset": "BTC", "day": "2026-10-22T00:00:00.000Z", "callers": 11, "long_pct": 47 }
  ],
  "next_cursor": "eyJ0IjoiMjAyNi0xMC0yMVQwMDowMDowMFoifQ",
  "as_of": "2026-10-23T12:14:30.000Z",
  "disclaimer": "Crowd and model output, not a recommendation. Information only, not financial advice."
}
  • data holds the items, newest first unless the endpoint says otherwise.
  • next_cursor is an opaque string. Pass it back as cursor to get the next page. It is null on the last page.
  • Ranked lists such as /v1/trending/coins and /v1/calls/most-called return the top limit and have no cursor.

Pages use cursors, never offsets, so items that arrive while you page do not shift or repeat what you see.

Page size

Set limit to choose the page size, from 1 to 100. It defaults to 20, or your plan's maximum if that is lower. Your plan sets the most calls one request may reserve, so the most items per page is that number divided by the endpoint's calls per item (see Plans and pricing). Asking for more gets 400 limit_too_large, and max_items in the error says what you can have.

Each page costs the endpoint's calls per item for each item it returns, and before it runs the API reserves limit times that. A smaller limit near the end of the month avoids a 429 quota_exceeded.

Reading every page

Keep the same filters on every request; only cursor changes. A cursor is opaque: pass it back exactly as you received it.

all-pages.mjs
export async function* allDelta(key, asset) {
  let cursor = null;
  do {
    const q = new URLSearchParams({ asset, limit: "25" });
    if (cursor) q.set("cursor", cursor);
    const res = await fetch(`https://data.decryptr.ai/v1/orderflow/delta?${q}`, {
      headers: { Authorization: `Bearer ${key}` },
    });
    if (!res.ok) throw new Error(`${res.status} ${(await res.json()).code}`);
    const page = await res.json();
    yield* page.data;
    cursor = page.next_cursor;
  } while (cursor);
}

for await (const c of allDelta(process.env.DECRYPTR_API_KEY, "BTC")) {
  console.log(c.open_time, c.delta);
}

These examples need a Starter plan or above, and a limit of 25 uses 25 calls a page. On Developer, use /v1/sentiment/{asset} with limit 10.

Time ranges

Endpoints that take since and until use ISO 8601 times with an offset, such as 2026-10-23T09:00:00Z. since must be inside your plan's history, or you get 400 history_limit. On the Developer plan, until is capped at 60 minutes before now.

To keep up with new items without paging the whole history, store the newest timestamp you have seen and pass it as since next time.

On this page