GET /api/v1/signup-pages
Every sign-up page of the organization, newest first. This is where the id the other sign-up page
calls require comes from.
The rows carry no HTML: a page document weighs a few kilobytes, and twenty of them would travel for
nothing. Ask for a page one by one to read its content.
Authorization
| Role in the organization | This endpoint |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Allowed |
Query parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number, 1 by default |
limit | number | Rows per page, 20 by default, 100 at most |
search | string | Matches the internal name and the slug |
status | string | draft or published. Anything else answers 400 |
listId | string | Only the pages that feed this list |
Example
bash
curl -H "x-api-key: $AGENTMAIL_API_KEY" \
"https://www.agentsmail.io/api/v1/signup-pages?status=published&limit=50"Response
200 OK— the pages of the organization. An organization with none answers an empty array.400 Bad Request—statusis neitherdraftnorpublished. Returning everything would suggest no page carries the status you asked for.401 Unauthorized— missing or invalid key, or its owner left the organization.429 Too Many Requests— the key is over its rate limit.
Response fields
| Field | Type | Description |
|---|---|---|
success | boolean | Indicates if the operation was successful |
data | array | The sign-up pages |
data[].id | string | Unique identifier — this is the id every other page call takes |
data[].name | string | Internal name, the one only your team sees |
data[].slug | string | The last part of the public address |
data[].status | string | draft or published |
data[].listId | string | The list that receives the subscribers |
data[].listName | string | Name of that list, so you do not have to read it separately |
data[].sourceTemplateName | string | null | The theme the page was copied from, null for pasted HTML |
data[].createdAt | string | ISO creation date |
data[].updatedAt | string | ISO date of the last change |
pagination.total | number | Total number of pages matching the filters |
pagination.page | number | Current page number |
pagination.limit | number | Rows per page |
pagination.totalPages | number | Number of pages of results |
Example response
json
{
"success": true,
"data": [
{
"id": "3d3d3d3d-4444-4eee-9fff-000011112222",
"name": "Newsletter footer",
"slug": "newsletter",
"status": "published",
"listId": "9f8e7d6c-1111-4bbb-8ccc-ddddeeeeffff",
"listName": "Subscribers",
"sourceTemplateName": "Minimal",
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-02T10:00:00.000Z"
}
],
"pagination": {"total": 1, "page": 1, "limit": 20, "totalPages": 1}
}Notes
contentis not in the rows. Read a single page to get its HTML.- A
listIdbelonging to another organization simply matches nothing: the filter never crosses the organization boundary.