# List products Building with an AI agent? Start at https://docs.payme.io/agents.md - Sandbox: `GET https://payme-store-staging.payme.io/api/products` - Production: `GET https://payme-store.payme.io/api/products` ## Credentials - Header `Authorization: Bearer ` Lists the seller's products, one page at a time. `page` and `items_per_page` are required. Filter by status, text, your own product id, store currency, store price or creation date, and sort by name, status or creation date. Without `sort_by` the order isn't defined. Pass the range filters in deep-object form, e.g. `?price[min]=10&price[max]=200&created_at[from]=2026-01-01`. Send `Authorization: Bearer `, the token from [`POST /auth-tokens`](/products-and-customers/authentication/post-auth-token). Hosts, tokens and the error format: [Hosts, authentication and errors](/products-and-customers/authentication). Prices are decimal amounts in major units (`99.99`), not minor units. ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `page` | query | integer | yes | Page number, from `1`. | | `items_per_page` | query | integer | yes | Products per page, from `1` to `100`. | | `status` | query | integer | no | `1` – available, `0` – unavailable, `-1` – draft. | | `search` | query | string | no | Case-insensitive text to find in the name or the description. | | `name` | query | string | no | Case-insensitive text to find in the name, 2–100 characters. | | `description` | query | string | no | Case-insensitive text to find in the description, 2–100 characters. | | `product_remote_id` | query | string | no | Your own product id, exact match. | | `currency` | query | string | no | ISO 4217 code (e.g. `ILS`) of the store price including VAT. | | `price[min]` | query | number | no | Lowest store price including VAT, in major units. | | `price[max]` | query | number | no | Highest store price including VAT, in major units. | | `created_at[from]` | query | string | no | Created at or after this time: `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS`. | | `created_at[to]` | query | string | no | Created at or before this time, in the same formats. | | `sort_by` | query | string | no | `name`, `status` or `created_at`. | | `sort_direction` | query | string | no | `asc` or `desc`. Default `desc`. Applies only together with `sort_by`. | ## Code samples ### curl ```bash curl -X GET 'https://payme-store-staging.payme.io/api/products?page=&items_per_page=' \ -H 'Authorization: Bearer ' ``` ### Node.js ```javascript const response = await fetch("https://payme-store-staging.payme.io/api/products?page=&items_per_page=", { method: "GET", headers: { "Authorization": "Bearer ", }, }); console.log(await response.text()); ``` ### Python ```python import requests response = requests.get( "https://payme-store-staging.payme.io/api/products?page=&items_per_page=", headers={ "Authorization": "Bearer ", }, ) print(response.text) ``` ### PHP ```php &items_per_page='); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ', ], ]); $response = curl_exec($ch); curl_close($ch); echo $response; ``` ## Responses ### 200 — A page of products. (success) | Field | Type | Description | | --- | --- | --- | | `items` | array | The products on this page. | | `items[].guid` | string | Product id (a UUID) assigned by PayMe. Use it in `/products/{guid}`. | | `items[].product_remote_id` | string | Your own product id. Left out when not set. | | `items[].name` | string | Product name. | | `items[].status` | integer | `1` – available, `0` – unavailable, `-1` – draft. | | `items[].description` | string | Product description. | | `items[].store_configuration` | object | Selling price. You send it as `store_prices` when you create or update the product. The `currency` and `price[min]`/`price[max]` filters of `GET /products` match its `price_include_vat`. | | `items[].store_configuration.is_vat_free` | boolean | `true` if the product is exempt from VAT. | | `items[].store_configuration.price_without_vat` | object | Price before VAT. `null` when not set. | | `items[].store_configuration.price_without_vat.amount` | number | Decimal amount in major units, e.g. `99.99`. | | `items[].store_configuration.price_without_vat.currency` | string | ISO 4217 currency code, e.g. `ILS`. | | `items[].store_configuration.price_include_vat` | object | Price including VAT. `null` when not set. | | `items[].store_configuration.price_include_vat.amount` | number | Decimal amount in major units, e.g. `99.99`. | | `items[].store_configuration.price_include_vat.currency` | string | ISO 4217 currency code, e.g. `ILS`. | | `items[].costs_details` | object | Your cost for the product, same shape as `store_configuration`. You send it as `costs`. Left out when not set. | | `items[].costs_details.is_vat_free` | boolean | `true` if the product is exempt from VAT. | | `items[].costs_details.price_without_vat` | object | Price before VAT. `null` when not set. | | `items[].costs_details.price_without_vat.amount` | number | Decimal amount in major units, e.g. `99.99`. | | `items[].costs_details.price_without_vat.currency` | string | ISO 4217 currency code, e.g. `ILS`. | | `items[].costs_details.price_include_vat` | object | Price including VAT. `null` when not set. | | `items[].costs_details.price_include_vat.amount` | number | Decimal amount in major units, e.g. `99.99`. | | `items[].costs_details.price_include_vat.currency` | string | ISO 4217 currency code, e.g. `ILS`. | | `total` | integer | How many products match the filters, across all pages. | | `page` | integer | The page returned. | | `items_per_page` | integer | The page size you asked for. | ```json { "items": [ { "guid": "3f2b8f0e-5d7c-4a1e-9b8a-2c4d6e8f0a1b", "product_remote_id": "PROD001", "name": "Example product", "status": 1, "description": "Example description", "store_configuration": { "is_vat_free": false, "price_without_vat": { "amount": 99.99, "currency": "ILS" }, "price_include_vat": { "amount": 117.99, "currency": "ILS" } }, "costs_details": { "is_vat_free": false, "price_without_vat": { "amount": 50, "currency": "ILS" }, "price_include_vat": { "amount": 59, "currency": "ILS" } } } ], "total": 1, "page": 1, "items_per_page": 20 } ``` ### 400 — A required parameter is missing or a parameter is invalid, e.g. `items_per_page` above `100`. (error) | Field | Type | Description | | --- | --- | --- | | `status_error_details` | string | What went wrong. Validation messages are in Hebrew unless you send `Accept-Language: en`. | | `status_error_code` | integer | `501` for a validation error or a body that isn't valid JSON, `999` for any other error. | | `validation_errors` | object | The fields that failed validation. Each key is a field name; its value maps each failed rule to a message. | | `session` | string | Trace id of the request. Quote it when you contact PayMe support. | ```json { "status_error_details": "Field validation failed.", "validation_errors": { "items_per_page": { "max": "The value must be less than max amount." } }, "status_error_code": 501, "session": "f3a1c2b0-9e4d-11ef-8c1a-0242ac120002" } ``` ### 401 — The `Authorization` header is missing, or the access token is invalid or expired. Get a new token with `POST /refresh-exchanges` or `POST /auth-tokens`. (error) | Field | Type | Description | | --- | --- | --- | | `status_error_details` | string | What went wrong. | | `status_error_code` | integer | `999`. | | `session` | string | Trace id of the request. Quote it when you contact PayMe support. | ```json { "status_error_details": "Unauthorized", "status_error_code": 999, "session": "f3a1c2b0-9e4d-11ef-8c1a-0242ac120002" } ``` ### 500 — Server error. Contact PayMe support and quote the `session`. (error) | Field | Type | Description | | --- | --- | --- | | `status_error_details` | string | What went wrong. | | `status_error_code` | integer | `999`. | | `session` | string | Trace id of the request. Quote it when you contact PayMe support. |