Tickerdevelopers

Pagination & Polling

List endpoints return a page of results plus a meta.paging object that tells you how to fetch the next page or check for new items. Three paging modes are supported, chosen by the parameter you pass:

ParameterModeUse for
pageCursorCursor-basedWalking a result set (no item drift)
pageNumberClassicOne-off queries where you want a total count
sinceCursorPollingWatching for new items as they arrive

The three are mutually exclusive. Passing more than one returns 400 Bad Request.

Page size

pageSize controls how many items come back per request. Defaults to 50, with a per-plan ceiling:

PlanMax pageSize
Free / Lite50
Advanced100
Ultimate200

Requests exceeding your plan's maxPage are rejected. Larger pages cost the same as smaller ones (one request, one quota unit), so prefer larger pages when backfilling.

Cursor pagination (pageCursor)

The default mode when walking a result set. Cursors are opaque strings; do not parse them.

Response includes:

{
  "meta": {
    "paging": {
      "pageSize": 50,
      "nextCursor": "eyJ0cyI6MTcz...",
      "latestCursor": "eyJ0cyI6MTcz..."
    }
  }
}

To walk the result set, pass nextCursor as pageCursor on the next request. Stop when nextCursor is null.

cursor = None
while True:
    params = {"pageSize": 100}
    if cursor:
        params["pageCursor"] = cursor
    r = requests.get(URL, headers=HEADERS, params=params)
    page = r.json()
    process(page["data"])
    cursor = page["meta"]["paging"]["nextCursor"]
    if not cursor:
        break

Cursors are stable across new items being inserted. You will not see duplicates or skipped items if RNS publishes while you walk.

Classic pagination (pageNumber)

Use when you need a total. Pages are 1-indexed.

GET /v2/disclosures/sources/rns/items?pageNumber=2&pageSize=50

Response:

{
  "meta": {
    "paging": {
      "pageSize": 50,
      "pageNumber": 2,
      "pageTotal": 14,
      "itemTotal": 683,
      "latestCursor": "eyJ0cyI6MTcz..."
    }
  }
}

New items inserted between requests will shift results: page 1 today is not page 1 tomorrow. Prefer pageCursor if you care about consistency.

Polling for new items (sinceCursor)

The polling mode. Each response includes a latestCursor; pass it back as sinceCursor on the next poll to get only items newer than the last one you saw.

cursor = None
while True:
    params = {"pageSize": 50}
    if cursor:
        params["sinceCursor"] = cursor
    r = requests.get(URL, headers=HEADERS, params=params)
    page = r.json()
    for item in page["data"]:
        process(item)
    cursor = page["meta"]["paging"]["latestCursor"]
    time.sleep(60)

Key properties:

  • Items are returned newest-first.
  • When no new items exist, the response is empty and latestCursor echoes back the value you sent. This is perfect for cheap idle polling.
  • hasMore: true means more new items existed than fit in pageSize. The response contains the newest pageSize items; older new items were truncated. Bump pageSize or poll more frequently.

sinceCursor is the recommended pattern for low-latency consumption. Empty polls still count against your quota (one request each), so size your polling interval to your tier. See Rate Limits.

latestCursor from any response

Every response (cursor, classic, or polling) includes a latestCursor in meta.paging. You can use that to seed a sinceCursor poll after a one-off backfill, without making an extra request.

Date filtering: dateFrom and dateTo

Time bounds are independent of pagination but interact with it.

  • Both are inclusive. dateFrom=2025-12-31 matches items published at 2025-12-31T00:00:00Z or later; dateTo=2025-12-31 matches items through 2025-12-31T23:59:59Z.
  • Partial dates expand to natural boundaries. dateFrom=2025 → Jan 1st 00:00:00. dateTo=2025 → Dec 31st 23:59:59. Months and days expand the same way.
  • dateFrom has a default. If omitted, it defaults to 30 days before dateTo (or 30 days ago if dateTo is also omitted). The default does not apply when filtering by symbols or isins; those queries return the full history allowed by your plan.

For full timestamp formats and examples, see the API Reference.

Which mode should I use?

  • Building a feed/alerting integrationsinceCursor polling.
  • Backfilling history into a databasepageCursor with the largest pageSize your plan allows.
  • Building a paginated UI with "page X of Y"pageNumber.