# Fetches items based on the game you pass as a query with cursor pagination

`GET /v2/get-items-list`

Same filters and the same item shape as GET /v1/get-items-list. It adds cursor (keyset) pagination, which stays fast on deep pages. With skip, v1 is capped at 5000 rows.

Pass the `next_cursor` value from the previous page to get the next one. Alternatively, pass `cursor_price` and `cursor_item_id` of the last received item.

`order_by` supports `price` (default), `profit` or `discount`. The cursor follows the chosen order. `item_id` breaks ties.

`skip` is still accepted (≤ 5000), but it is ignored when a cursor is passed.

A hold listing is created while the item is still under a Steam trade lock. You can buy it now, and it is delivered after the lock expires. Hold listings are omitted unless you pass include_hold=1 or true. Each hold listing then includes unlock_at (when the lock ends; delivery starts after that) and send_until (delivery deadline; if the item is not sent by then the trade fails and you are refunded in full). Both are RFC 3339 UTC. Regular listings omit both fields. A listing is trade-locked when unlock_at is present.

next_cursor is present only when has_more is true. It is omitted on the last page.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `api` | query | string | required | Your [WAXPEER API](https://waxpeer.com/profile/user) |
| `skip` | query | number | optional | Skip offset (≤ 5000). Accepted on v2, but ignored when a cursor is passed. |
| `search` | query | string | optional | Search items by name, ex: asiimov |
| `brand` | query | enum | optional | The specified category of game items, ex: rifle for CS:GO and Pants for Rust |
| `order` | query | enum | optional |  |
| `order_by` | query | enum | optional | Return order: price (default), profit or discount. The cursor follows the chosen order. item_id breaks ties. |
| `exterior` | query | enum | optional | For CS:GO game |
| `max_price` | query | number | optional | 1000 = 1$ |
| `min_price` | query | number | optional | 1000 = 1$ |
| `game` | query | enum | optional | Which game would you like to get items from |
| `limit` | query | number | optional | Page size, 1–100. Default 100. On v2 it sets the page size. |
| `cursor` | query | string | optional | Pass the next_cursor value from the previous page to get the next one. |
| `cursor_price` | query | number | optional | Alternative to cursor: the sort value (e.g. price) of the last item you received. Must be used with cursor_item_id. |
| `cursor_item_id` | query | string | optional | Alternative to cursor: the item_id of the last item you received. Must be used with cursor_price. |
| `sort` | query | enum | optional | ASC / DESC. Alias of order. Default DESC. |
| `include_hold` | query | string | optional | 1 / true: also return trade-locked listings. Without this parameter the response is unchanged. |

## Example (curl)

```bash
curl -X GET 'https://api.waxpeer.com/v2/get-items-list?api=%7B%7BAPI_KEY%7D%7D&skip=0&brand=knife&order=desc&order_by=price&exterior=FN&game=csgo&limit=100&sort=DESC'
```

## Example response

```json
{
  "success": true,
  "items": [
    {
      "name": "★ Butterfly Knife | Gamma Doppler (Factory New)",
      "price": 4999,
      "float": 0.1452850103378296,
      "best_deals": 541,
      "discount": 10,
      "steam_price": 5540,
      "image": "https://steamcommunity-a.akamaihd.net/economy/image/class/730/520026599/200fx125f",
      "item_id": "27402864642",
      "brand": "pistol",
      "type": "Glock-18",
      "phase": "Phase 4",
      "unlock_at": "2026-08-04T12:00:00Z",
      "send_until": "2026-08-05T12:00:00Z"
    }
  ],
  "count": 100,
  "has_more": true,
  "next_cursor": "eyJwcmljZSI6MTUwMDAsIml0ZW1faWQiOiIyNzQwMjg2NDY0MiJ9"
}
```

## Responses

- `200` successful operation

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `success` | boolean | optional |  |
| `items` | array<object> | optional |  |
| `items.name` | string | optional |  |
| `items.price` | number | optional | Item price (1000 = 1$) |
| `items.float` | number | optional | Item float For CS:GO game |
| `items.best_deals` | number | optional | The difference between the suggested price and the price of the item |
| `items.discount` | number | optional | Percentage difference between the suggested price and the price of the item |
| `items.steam_price` | number | optional | Suggested Steam price |
| `items.image` | string | optional |  |
| `items.item_id` | string | optional |  |
| `items.brand` | string | optional | Item category if specified |
| `items.type` | string | optional | Item type if specified |
| `items.phase` | string | optional | Steam csgo item doppler phase. Available only on doppler items. Possible values: 'Emerald', 'Ruby', 'Sapphire', 'Black Pearl', 'Phase 1', 'Phase 2', 'Phase 3', 'Phase 4' |
| `items.unlock_at` | string | optional | When the Steam trade lock ends. Delivery starts after this. RFC 3339 UTC. Present only on a trade-locked listing returned with include_hold. Regular listings omit this field. |
| `items.send_until` | string | optional | Delivery deadline. If the item is not delivered by then, the trade fails and you are refunded in full. RFC 3339 UTC. Present only on a trade-locked listing. Regular listings omit this field. |
| `count` | number | optional | Page size or number of items returned |
| `has_more` | boolean | optional | True when more items exist past this page |
| `next_cursor` | string | optional | Opaque cursor for the next page. Present only when has_more is true. Omitted on the last page. |


## Notes for agents

- Auth is the query parameter `api`, not an Authorization header.
- See [/statuses.md](/statuses.md) for numeric trade status plus `escrow_status` / `release_date`.
- Prefer GET /v2/search-items-by-name over v1.
- Prefer GET /v2/get-items-list over v1 (cursor keyset pagination without the 5000 row cap). Pass next_cursor only while has_more is true.
- Prefer POST /v2/my-history over v1 (faster on long histories, ordered by trade id). On buy rows, price is the amount you paid.
- Trade-locked listings are omitted unless you pass include_hold=1. They then include unlock_at and send_until (RFC 3339 UTC).
- Buy a trade-locked listing only by exact item_id with allow_trade_locked (query 1 on GET /v1/buy-one-p2p, body true on POST /v1/buy). GET /v1/buy-one-p2p-name never sells hold items.
- CSV snapshot: GET /v1/prices/snapshot?format=csv (gzip). include_hold appends unlock_at,send_until. compact and whitemarket are JSON-only.
- Do not use GET /v1/ready-to-transfer-p2p; use the [trade websocket](/websocket.md).
