Get Pages
Retrieve a list of your store's landing pages.
Pages are returned newest-updated first. Each page includes its custom domains,
so you can answer "what are the analytics for domain.com?" by matching the
domain in this response, reading that page's id, and calling
Get Page Analytics - without a separate domain lookup.
When your store has no landing pages, the list is empty.
Request
GET /pages
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
search | string | No | - | Partial, case-insensitive match on the page name. |
status | string | No | - | Filter by publication status: draft or published. Omit for pages in any state. |
page | integer | No | 1 | Page number for pagination. |
per_page | integer | No | 25 | Items per page (min: 1, max: 100). |
Omitting a filter, or passing it empty, means "no filter on that field". A
non-empty but unparseable value - an unknown status or an out-of-range
per_page - returns a 400 (see Bad Request). The search
term is free-text and is always accepted.
Example Request
curl -X GET "https://cart.easy.tools/api/v1/pages?status=published&page=1" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Response
Success Response (200)
Returns a paginated list of pages.
{
"items": [
{
"id": "DeIS7b",
"slug": "my-landing-page",
"name": "My landing page",
"status": "published",
"updated_at": "2026-03-14T10:22:00+00:00",
"domains": [
{
"domain": "shop.example.com",
"status": "configured",
"include_www": true
}
]
},
{
"id": "N_9mSU",
"slug": "testowa-strona",
"name": "testowa strona",
"status": "draft",
"updated_at": "2025-08-07T07:32:35+00:00",
"domains": []
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 25,
"total": 2
}
}
Response Fields
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string | No | Stable page identifier - a short, URL-safe string (not a UUID). This is the analytics key; pass it to Get Page Analytics. |
slug | string | Yes | URL slug for the page. Mutable (changes when the slug is edited), so use it for display only - never as a stable id. |
name | string | No | Page display name. |
status | string | No | Publication status: draft or published. |
updated_at | string | No | When the page was last updated (ISO 8601). Pages are ordered by this field, newest first. |
domains | array | No | Custom domains mapped to this page. Empty when the page has no custom domain. See Domain. |
Domain
| Field | Type | Nullable | Description |
|---|---|---|---|
domain | string | No | The custom domain. |
status | string | No | Configuration status of the domain (e.g. pending, configured, failed). |
include_www | boolean | No | Whether the www. subdomain is included. |
Pagination Object
| Field | Type | Description |
|---|---|---|
current_page | integer | Current page number. |
total_pages | integer | Total number of pages. |
per_page | integer | Effective page size (echoes the per_page request parameter). |
total | integer | Total number of pages matching the applied filters. |
Error Responses
Bad Request (400)
Returned when status is not draft or published, or when per_page is out
of range. The message names the offending field and the value received.
{
"message": "Invalid value for 'status': 'activ'"
}
Unauthorized (401)
{
"message": "Unauthenticated."
}
Forbidden (403)
Returned when your API key has not been granted access to the requested store.
{
"message": "You do not have API access to the requested store."
}
Too Many Requests (429)
Returned when you exceed the rate limit. The Retry-After response header gives
the number of seconds to wait.
{
"message": "Too many requests. Please retry after 60 seconds."
}
Service Unavailable (502)
Returned when the analytics data source is temporarily unavailable. Retry shortly; do not treat it as an empty list.
{
"message": "The Easypage service is temporarily unavailable. Please retry."
}