Skip to content

Pagination

All list-based endpoints follow a unified pagination convention.

Request Parameters

ParameterTypeDescription
next_keystringPagination cursor. Leave empty "" for the first page. Pass back pagination.next_key from the previous response to fetch the next page.
limitintPage size (each endpoint has its own default and maximum).

Response

Pagination info is placed in the top-level pagination object (not inside data):

FieldTypeDescription
has_moreboolWhether there is a next page. Use has_more=false as the only signal to stop paginating.
next_keystringNext page cursor; "-1" when no more pages.
totalint (optional)Total count of matching items. Only returned by some endpoints (e.g. screening, rating summary, insider list, valuation list, plate constituent stocks).

TIP

The next_key cursor is opaque to callers — do not parse or construct it manually.

Example

Request first page:

bash
curl -s -X POST "https://webapi.moomoo.com/api/v1.0/quote/plate/HK.BK1001/stock" \
  -H "Content-Type: application/json" \
  -H "X-Futu-Client-Nnid: 76879657" \
  -d '{"next_key":"","limit":20}' | jq

Response:

json
{
  "code": 0,
  "data": { ... },
  "pagination": {
    "has_more": true,
    "next_key": "eyJsYXN0X2lkIjo0MH0=",
    "total": 156
  }
}

Request next page:

bash
curl -s -X POST "https://webapi.moomoo.com/api/v1.0/quote/plate/HK.BK1001/stock" \
  -H "Content-Type: application/json" \
  -H "X-Futu-Client-Nnid: 76879657" \
  -d '{"next_key":"eyJsYXN0X2lkIjo0MH0=","limit":20}' | jq

Exceptions

A few endpoints that fetch by date range (get_capital_flow_history, request_history_kline) use pagination.has_more to indicate whether earlier data exists. Callers paginate backward by adjusting the date range (capital uses end; history-kline uses extra.next_time as the next end), rather than using next_key.

See Also