Paginate Through Results

Many history and market-data methods have a _paged variant that walks every page for you: candles, aggregate and historical trades, funding rates, orders, fills, income, margin history and spot transaction history, plus the paged builder and announcement endpoints.

One Page At A Time

The plain method makes one request and returns one page:

from datetime import datetime, timezone

from typed_aster import Aster

async with Aster.new(public=True) as client:
  candles = await client.futures.market.klines(
    'BTCUSDT',
    interval='1m',
    start_time=datetime(2026, 9, 1, tzinfo=timezone.utc),
    limit=500,
  )
  print(len(candles))

Automatic Pagination

The _paged method takes the same arguments. Await it for every row, or iterate it for one page at a time:

from datetime import datetime, timezone

from typed_aster import Aster

async with Aster.new(public=True) as client:
  walk = client.futures.market.klines_paged(
    'BTCUSDT',
    interval='1m',
    start_time=datetime(2026, 9, 1, tzinfo=timezone.utc),
    end_time=datetime(2026, 9, 2, tzinfo=timezone.utc),
  )
  candles = await walk  # every candle in the range

  async for page in walk:  # or one page at a time
    print(len(page), page[0][0])

Walks by time or id move from oldest to newest, except client.futures.trade.force_orders_paged, which moves newest to oldest.

Account History

The same pattern works for signed history:

from typed_aster import Aster

async with Aster.new() as client:
  fills = await client.futures.trade.user_trades_paged('BTCUSDT')
  orders = await client.spot.trade.all_orders_paged('ASTERUSDT')
  income = await client.futures.account.income_paged(income_type='REALIZED_PNL')
  print(len(fills), len(orders), len(income))

Retry And Resume

Each page is fetched from a saved state, so a failed page can be retried and a walk resumed:

from typed_aster import Aster

async with Aster.new() as client:
  walk = client.futures.trade.all_orders_paged('BTCUSDT')
  async for page in walk.pages():
    print(len(page.rows))
    checkpoint = page.next  # pass to walk.resume(checkpoint) to continue later