Skip to content

List workspaces

Viewing v2— current version

GET
/v2/workspaces
curl --request GET \
--url https://api.app.layer.ai/api/v2/workspaces \
--header 'Authorization: Bearer <token>'

Unchanged from v1. This endpoint’s documented request and response schemas are identical in v1 and v2 — change the /v1 prefix to /v2. Schema equality is not a promise about behaviour, so keep your usual smoke tests.

List all workspaces the authenticated user belongs to, with Creative Units balance details.

limit
Limit

Maximum number of results to return.

integer
default: 20 >= 1 <= 100

Maximum number of results to return.

cursor
Any of:
string

Cursor from a previous response to get the next page.

Successful Response

Media typeapplication/json
ListWorkspacesOutput
object
workspaces
required
Workspaces

All workspaces the authenticated user belongs to, ordered by most recently active first.

Array<object>
WorkspaceInfo
object
workspace_id
required
Workspace Id

The workspace’s unique identifier.

string format: uuid
slug
required
Slug

The workspace slug (its representation in the app URL).

string
name
required
Name

The workspace display name.

string
balance_creative_units
required
Balance Creative Units

Total Creative Units balance before reservations.

number
reserved_creative_units
required
Reserved Creative Units

Creative Units reserved by in-progress generations.

number
available_creative_units
required
Available Creative Units

Usable balance (balance minus reserved). Can be negative.

number
last_active_at
required
Any of:
string format: date-time
pagination
required
PaginationOutput
object
next_cursor
Any of:
string
has_more_results
required
Has More Results

If there are more results to page through

boolean
total_count
Any of:
integer
Examplegenerated
{
"workspaces": [
{
"workspace_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"slug": "example",
"name": "example",
"balance_creative_units": 1,
"reserved_creative_units": 1,
"available_creative_units": 1,
"last_active_at": "2026-04-15T12:00:00Z"
}
],
"pagination": {
"next_cursor": "example",
"has_more_results": true,
"total_count": 1
}
}

Unauthenticated — missing or invalid Bearer token.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Forbidden — insufficient permissions.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Resource not found.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Invalid input parameters.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Rate limited — too many concurrent requests.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Internal server error.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}