curl --request GET \
--url 'https://api.lovable.dev/v1/workspaces/workspace-id/members' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"data": [
{
"name": "Jane Cooper",
"type": "user",
"user_id": "404666c6-b533-5d2c-9768-c425bf40559b"
}
],
"pagination": {
"has_more": true,
"next_cursor": "eyJ2IjoxLCJpZCI6InByal8wMWp3M2s5In0"
}
}{
"detail": "validation failed",
"errors": [
{
"location": "body.members",
"message": "expected array length >= 1"
}
],
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 400,
"title": "Bad Request",
"type": "invalid_request"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 401,
"title": "Authorization header required",
"type": "unauthorized"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 402,
"title": "You need to upgrade your plan to access this feature",
"type": "payment_required"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 403,
"title": "You don't have the permissions to perform this action",
"type": "forbidden"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 404,
"title": "Not Found",
"type": "workspace_not_found"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 406,
"title": "This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.",
"type": "not_acceptable"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 429,
"title": "Too Many Requests",
"type": "rate_limited"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 503,
"title": "Request timed out",
"type": "request_timeout"
}{
"detail": "validation failed",
"errors": [
{
"location": "body.workspace_id",
"message": "expected string"
}
],
"props": {
"finding_refs": [
"supabase/finding-1"
]
},
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 429,
"title": "Too Many Requests",
"type": "rate_limited"
}List workspace members
Plan: Business or higher
Scope: workspaces:read
Returns accepted workspace members with user_id, type, and name. The name is the stored display name, or null when unavailable. Filter with a repeated role, scim_managed=true|false, and query. Sort with sort_by plus sort_order; with a search query, results default to best matches first, otherwise they are ordered by role precedence, then most recently joined. Cursors are pinned to the filters and sort they were issued under; presenting one with different parameters returns 400. Reads are eventually consistent: recent changes may not appear immediately. Retry the read with backoff if an expected change is missing.
curl --request GET \
--url 'https://api.lovable.dev/v1/workspaces/workspace-id/members' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"data": [
{
"name": "Jane Cooper",
"type": "user",
"user_id": "404666c6-b533-5d2c-9768-c425bf40559b"
}
],
"pagination": {
"has_more": true,
"next_cursor": "eyJ2IjoxLCJpZCI6InByal8wMWp3M2s5In0"
}
}{
"detail": "validation failed",
"errors": [
{
"location": "body.members",
"message": "expected array length >= 1"
}
],
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 400,
"title": "Bad Request",
"type": "invalid_request"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 401,
"title": "Authorization header required",
"type": "unauthorized"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 402,
"title": "You need to upgrade your plan to access this feature",
"type": "payment_required"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 403,
"title": "You don't have the permissions to perform this action",
"type": "forbidden"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 404,
"title": "Not Found",
"type": "workspace_not_found"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 406,
"title": "This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.",
"type": "not_acceptable"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 429,
"title": "Too Many Requests",
"type": "rate_limited"
}{
"detail": null,
"errors": null,
"props": null,
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 503,
"title": "Request timed out",
"type": "request_timeout"
}{
"detail": "validation failed",
"errors": [
{
"location": "body.workspace_id",
"message": "expected string"
}
],
"props": {
"finding_refs": [
"supabase/finding-1"
]
},
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"status": 429,
"title": "Too Many Requests",
"type": "rate_limited"
}Authorizations
Lovable API key. Send its value in the Lovable-API-Key header.
Headers
Stable API version to serve, as a YYYY-MM-DD date. Omit for the oldest supported stable version, currently 2026-09-11.
Comma-separated beta revision strings to enable on top of the stable version.
Path Parameters
Workspace ID.
"workspace_01jw3k9m2xq8r5v0c7d4e6f2gh"
Query Parameters
Maximum number of items to return per page.
1 <= x <= 10050
Pass pagination.next_cursor from the previous response to fetch the next page. Omit for the first page; keep the same filters and sort order across pages.
Search by display name, username, or email. Terms shorter than 3 characters are ignored.
1000"jane"
Filter by workspace role. Repeat to match any of the values. Omit to include every role.
owner, admin, member, viewer, collaborator ["admin"]
Sort field. Omit for the default order: role precedence (owner, admin, member, collaborator, viewer), then most recently joined; with query set, best matches first. name sorts case-insensitively by the returned name, with null names first ascending and last descending. display_name is an alias for name, with identical ordering and interchangeable cursors. joined_at falls back to the invitation time. role sorts by role precedence. relevance ranks by match score and requires query; ties break by most recent join. Other ties break by membership id.
name, display_name, joined_at, role, relevance "name"
Direction for sort_by. Defaults to descending. Requires sort_by.
asc, desc "desc"
Filter by SCIM (System for Cross-domain Identity Management) provisioning: true returns only members provisioned by the identity provider, false only members added another way. Omit to include both.
true
Was this page helpful?