Wednesday, August 19, 2026
API
Protocol
WASM
Tooling

Release: mx-api-service: v1.21.0

Deep Pagination and Fixes in v1.21.0

This release removes the 10,000-document pagination limit on list endpoints, hardens NFT media processing, and fixes several transaction and pricing issues.

Main Feature: Pagination Beyond 10,000 Results

Until now, list endpoints could not return results past the 10,000th document. Requesting from=10000 or higher was not possible because of Elasticsearch's maximum result window.

This release adds a searchAfter parameter that removes the limit.

How it works: Every item in a response now includes its own searchAfter value, encoded as a base64 string. To get the next page, pass the searchAfter value of the last item you received:

GET /accounts?size=100
GET /accounts?size=100&searchAfter=<value from last item of previous page>

What this means:

  • There is no depth limit anymore. You can page through an entire index, not just the first 10,000 records.
  • The existing from + size pagination still works and is unchanged, so existing integrations require no updates.

Where it is available:

searchAfter was added to relevant endpoints backed by Elasticsearch. If the parameter appears in Swagger for a given endpoint, the feature is enabled there.

Related improvements include:

  • Accounts are sorted by address for stable ordering across pages.
  • Token accounts can be filtered by account type.
  • The rounds filter is now validated.

WebSocket: Pagination in Subscriptions

Pagination was also integrated into WebSocket subscriptions.

Previously, a round producing more than 10,000 transactions would hit the same result window limit, meaning subscribers would not receive everything. Subscriptions now page through the full result set, ensuring that all transactions in a round are delivered regardless of volume.

Separately, filter fields that are not explicitly set now remain undefined instead of falling back to default values. Those defaults were producing incorrect queries and preventing event subscriptions from emitting data.

Fix: NFT Media Requests

NFT asset, media, and thumbnail processing fetches user-supplied URLs. Those requests are now validated before being made:

  • URLs are checked to confirm they point to public destinations rather than internal ones.
  • Redirects are no longer followed for NFT asset, media, and thumbnail requests.

Public media URLs continue to work as before.

The /index proxy routes were also removed, since the same data is already served by the public indexer.

Fix: Thumbnails for Video NFTs

Thumbnail generation failed for video NFTs encoded with a limited color range, resulting in no thumbnail being produced.

Since ffmpeg 8.0, the JPEG encoder rejects limited-range video input, causing frame extraction to fail silently. Intermediate frames are now extracted as PNG, which does not have this restriction.

The final thumbnail is still a JPEG, so nothing changes for consumers.

Fix: Transactions

  • Batch submission: signature and guardianSignature are now decoded from hex instead of base64. Transaction batches work correctly again.
  • Transaction pool: Manual sender and receiver shard computation was removed. Reward transactions report metachain as the sender, which could not be resolved and caused decode errors at every epoch change. Shards now come directly from the gateway, and reward transactions appear in the pool as expected.

Other Changes

  • Token prices: The xExchange price is no longer overwritten when the Data API price is unavailable. Tokens affected by this on devnet now return a price on /tokens/:identifier.
  • Caching: Fixed account caching and token holders pagination.
  • Dependencies: Updated sdk-nestjs to 7.2.0.

More details: GitHub↗

For questions or help, reach us on Telegram or Discord channels.

Do you need more information?

Explore projects, tokens, and integrations built on MultiversX