GET /v1/projects
List projects in your organization with cursor pagination.
GET
/v1/projectsPhase 1stable
- Auth
- Bearer
- Scope
- projects:read
Returns the organization's projects in reverse-creation order. One project per end-customer is the recommended model — the partner-supplied customerExternalId is your handle for looking a project up without having to store Layers IDs on your side.
Filter by status, free-text search over project name, or customerExternalId. The list is cursor-paginated; pass the nextCursor from the previous response to page forward.
Query
cursorstringoptionalOpaque pagination token from a previous response's nextCursor.limitintegeroptionaldefault: 25Page size, 1–200.statusstringoptionalFilter by project status.One of:active,archivedsearchstringoptionalCase-insensitive substring match on project name.customerExternalIdstringoptionalReturn the single project bound to this partner-supplied customer ID.
Example request
curl "https://api.layers.com/v1/projects?limit=25&status=active" \
-H "Authorization: Bearer lp_live_01HX9Y6K7EJ4T2_4QZpN..."const { items, nextCursor } = await layers.projects.list({
limit: 25,
status: "active",
});result = layers.projects.list(limit=25, status="active")Response
200OK
{
"items": [
{
"id": "prj_01HX9Y7K8M2P4RSTUV56789AB",
"name": "Acme Coffee iOS",
"status": "active",
"customerExternalId": "acme-coffee",
"timezone": "America/Los_Angeles",
"primaryLanguage": "en",
"ownerEmail": "growth@gicgrowth.com",
"createdAt": "2026-04-10T09:14:22Z",
"updatedAt": "2026-04-15T17:01:09Z"
}
],
"nextCursor": "eyJvZmZzZXQiOjI1fQ=="
}Errors
| Status | Code | When |
|---|---|---|
| 422 | VALIDATION | limit out of range or cursor malformed. |
| 401 | UNAUTHENTICATED | Missing or invalid key. |
| 403 | FORBIDDEN_SCOPE | Key lacks projects:read. |
| 429 | RATE_LIMITED | Honor Retry-After. |
See also
POST /v1/projects— createGET /v1/projects/:id— read one- Projects concept — one project per end-customer