Skip to main content

Overview

DAS API methods return up to 1,000 records per call. To retrieve more, you paginate — making multiple calls and crawling through pages of data. Helius supports two mechanisms: page-based and keyset pagination. Page-based pagination is the simplest way to get started. Keyset pagination is for advanced users querying across large (500k+) datasets efficiently.

When to use this

  • Page-based — static views, dashboards, and most everyday queries. Easy and intuitive.
  • Keyset (cursor or range) — large datasets (entire collections, 500k+ assets) where page-based crawling becomes slow.
  • Parallel keyset — the fastest option for scanning an entire collection by partitioning the address range.

Sorting options

You can sort results by different fields using the sortBy field: Disabling sorting yields the fastest results, but because the data is unordered you may get inconsistent results when paginating.

Page-based pagination

You specify the page number and the number of items per page. To move to the next page, increment the page number. This is easy, intuitive, and fast for most use cases.
Using pages requires the database to crawl across all items until it reaches the next page. For example, if you ask for page 100 with a page size of 1,000, the database must traverse the first 1M records before returning your data. For this reason, page-based pagination is not recommended for large datasets — keyset pagination is far better suited to those workloads.

Keyset pagination

You define pages by providing conditions that filter the dataset. For example, “get me all assets with an ID > X but an ID < Y.” You traverse the entire dataset by modifying X or Y on each call. There are two methods of keyset pagination:
  1. Cursor-based — easier to use but less flexible.
  2. Range-based — more complex but very flexible.
Keyset pagination is only supported when sorting by id.

Cursor-based

A DAS query without any pagination parameters returns a cursor. Pass the cursor back to the DAS API to continue from where you left off.
At the time of writing, the cursor is the last asset ID of the response; however, the cursor design is flexible and can support any string.

Range-based

To query across a range, specify before and/or after. The query is essentially “get me all assets after X but before Y.” You traverse the dataset by updating the before or after parameter on each call.

Parallel querying with keysets (advanced)

Advanced users querying large datasets (for example, entire compressed NFT collections) should use keyset-based pagination for performance. The following example shows how to query in parallel by partitioning the Solana address range and using the before/after parameters. This method is fast, efficient, and safe.
In the example below, we scan the entire Tensorian collection (~10k records). It partitions the Solana address space into 8 ranges and scans those ranges concurrently. This is far faster than the other approaches.

Next steps

Search Assets

Filter assets by owner, collection, and tokenType.

Get Assets (NFTs)

Retrieve NFTs, collections, editions, and proofs.

DAS API reference

Full schemas for every DAS method.