Pagination

Roblox endpoints have multiple methods of pagination. This article will outline all of those methods and how to use them.

Cursor-based
Cursor-based pagination is where the endpoint takes in a  and   parameter and returns ,  , and. Here's an example of some response data from : To advance the page, we can take the cursor passed in the  and pass it as a query parameter, then send the request again, like so: As you can see, we now have a, which we can use to move to the previous page:

Base64-encoded cursors
Some endpoints, like the one provided above, have Base64-encoded cursors. To test it out, go to  and copy the , then decode it as Base64. The resulting data will look like this: As you can see, the cursor contains data about how data should be sent - including the original keyword discriminator passed to the endpoint, the start index, and the item count. It also has this unique hash at the end - that's there to make this cursor unique. Some endpoints, like, return cursors with even more data: This cursor actually provides a sample of the data, the paging direction, the sort order, the page number, a unique discriminator containing the passed user ID, and the item count. Some of this data isn't something you can directly control via parameters, so this is a useful trick to learn more about your cursors and page data. Here's an example of a cursor debugger that uses ro.py v1.x: https://gist.github.com/jmkd3v/cc53b48ccc2bf8a35a39cc4fdc9b28f3

Plain cursors
Some endpoints, like, return plain cursors. Here's some example data from that endpoint: This cursor has three components. The first one is some sort of unique identifier, the second one is the paging order (1 for Forward and 2 for Backwards), and the third one is a unique hash. You can see the page order component in action if you pass a cursor: As you can see, the  has a value of 2, indicating a reverse order.

Static cursors
Another interesting thing is that plain cursor endpoints return static cursors. These static cursors never change unless the limit, order or cursor parameter is modified. To give you an example of what this means, a request to  will always have a   with a value of 100_1_6db4aa61b36f59d5977f0bd0cf5d9a9c.

This could be useful for finding a specific page of an endpoint without being rate limited, since you would be able to store these cursors anywhere for later usage. Another example is that the cursor of the 4th page of the endpoint above, will always be: 300_1_31128e077b81c0311d58678baaac292c. The  and   of   will always be 200_2_77659228ff52c4abdb3e2a7dd3a16d4e and 400_1_c7c4637011cc3912611f2908771fb301 respectively.