# Pagination strategies

Sales Layer APIs expose pagination parameters on list operations so clients can process large datasets in controlled batches.

The current OpenAPI specifications document:

* DAM list operations: `$top` and `$skip`
* Catalog list operations: `$top`, `$skip`, and in selected endpoints `$skipToken`


## Token-based pagination

Token-based pagination uses `$skipToken` to continue reading from a position supplied by the API.

When available, this strategy is recommended for large or frequently synchronized datasets because it avoids manually calculating offsets.

Example:


```http
GET https://api2.saleslayer.com/catalog/rest/Catalog/Products?$select=prod_ref,prod_title&$skipToken=TOKEN_VALUE
```

Use the `@nextLink` value from a response when the API provides one.

## Limit-based pagination

Limit-based pagination uses `$top` and `$skip`.


```http
GET https://api2.saleslayer.com/catalog/rest/Catalog/Products?$skip=0&$top=50
```


```http
GET https://api2.saleslayer.com/dam/image?$skip=0&$top=50
```

Use this strategy when the endpoint does not expose `$skipToken` or when the integration needs explicit page offsets.

## Choosing a strategy

| Strategy | Use when |
|  --- | --- |
| `$skipToken` | The endpoint returns a continuation link and the integration processes large or changing datasets. |
| `$skip` and `$top` | The endpoint supports offset-style pagination or the integration needs predictable fixed pages. |


## Recommendations

* Prefer continuation links when the API returns them.
* Use stable sorting when paginating with `$skip` and `$top`.
* Store progress so synchronization jobs can resume after a temporary failure.
* Respect [rate limiting](/guides/rate-limiting) during long-running jobs.


> **Note:** `$skipToken` is not compatible with `$orderby`. When using token-based pagination, omit `$orderby` from the request. Use `$skip` and `$top` with `$orderby` when sorted pagination is required.