curl --request GET \
--url 'https://api.lovable.dev/v1/projects?workspace_id=workspace-id' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"data": [
{
"created_at": "2026-01-15T09:30:00Z",
"description": "A landing page for Acme with a hero, features, and pricing.",
"id": "prj_01jw3k9m2xq8r5v0c7d4e6f2gh",
"is_published": true,
"last_edited_at": "2026-01-15T09:30:00Z",
"latest_screenshot_url": "https://screenshot2.lovable.dev/acme-landing-page.png",
"name": "Acme Landing Page",
"owner_id": "404666c6-b533-5d2c-9768-c425bf40559b",
"publish_audience": "public",
"visibility": "workspace_edit",
"workspace_id": "workspace_01jw3k9m2xq8r5v0c7d4e6f2gh"
}
],
"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 projects
Plan: Business or higher
Scope: workspaces:read
Returns projects across the selected workspaces in one cursor-paginated list, sorted by last edited time descending then project ID ascending. Projects without a last edit use their update time for ordering; projects with neither sort last. Repeat workspace_id to select up to 10 workspaces. Every selected workspace must pass authorization; any failure rejects the whole request. Workspace-scoped API keys remain limited to their own workspace. Cursors are bound to the selected workspace set and filters. 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/projects?workspace_id=workspace-id' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"data": [
{
"created_at": "2026-01-15T09:30:00Z",
"description": "A landing page for Acme with a hero, features, and pricing.",
"id": "prj_01jw3k9m2xq8r5v0c7d4e6f2gh",
"is_published": true,
"last_edited_at": "2026-01-15T09:30:00Z",
"latest_screenshot_url": "https://screenshot2.lovable.dev/acme-landing-page.png",
"name": "Acme Landing Page",
"owner_id": "404666c6-b533-5d2c-9768-c425bf40559b",
"publish_audience": "public",
"visibility": "workspace_edit",
"workspace_id": "workspace_01jw3k9m2xq8r5v0c7d4e6f2gh"
}
],
"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.
Query Parameters
Workspace IDs to list projects from. Repeat the parameter to select up to 10 workspaces; duplicates are ignored. Every workspace must be accessible to the caller. Workspace-scoped API keys can select only their own workspace.
1 - 10 elementsFilter by the visibility field. Repeat to match any of the values. Omit to include every level you can access.
restricted, workspace_edit, workspace_view Filter by whether the project is published. Omit for no filter.
Filter published projects by the publish_audience field, resolved the same way the response resolves it, including the workspace default. Repeat to match any value. Omit for no filter. Requires is_published to be true or omitted.
public, workspace, custom Search project names, generated descriptions, and owner names or email addresses. Terms shorter than 3 characters are ignored.
1000Maximum number of items to return per page.
1 <= x <= 100Pass 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.
Was this page helpful?