curl --request GET \
--url 'https://api.lovable.dev/v1/workspaces/workspace-id/security-center/insights/projects' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"activity_as_of": {
"edits_as_of": "2026-01-15T09:30:00Z",
"visitors_as_of": "2026-01-15T09:30:00Z"
},
"applied_finding": {
"category": "exposure",
"description": "Publicly published projects with error-level security findings.",
"id": "public_security_exposure",
"project_count": 12,
"review_priority": "needs_review",
"title": "Public app with security errors"
},
"as_of": "2026-01-15T09:30:00Z",
"data": [
{
"activity_group": "last_14_days",
"connectors": [
"<string>"
],
"description": "A single-page marketing site with a hero, feature grid, and signup form.",
"edge_functions": [
{
"name": "send-welcome-email"
}
],
"edit_count": 128,
"edits_7d": 21,
"edits_24h": 4,
"edits_30d": 67,
"id": "prj_01jw3k9m2xq8r5v0c7d4e6f2gh",
"is_published": true,
"last_edited_at": "2026-01-15T09:30:00Z",
"last_security_scan_at": "2026-01-15T09:30:00Z",
"matched_reason": {
"category": "data",
"detail": "A public table exposes personal data to anonymous callers.",
"id": "public_pii_exposure",
"label": "Public PII exposure",
"review_priority": "needs_review",
"values": {
"connector_count": 2,
"edge_function_count": 3,
"error_count": 2,
"info_count": 8,
"open_pii_finding_count": 3,
"secret_count": 4,
"shared_user_count": 6,
"warning_count": 5
}
},
"message_count": 56,
"name": "Acme Landing Page",
"owner": {
"display_name": "Jane Cooper"
},
"publish_audience": "public",
"review_priority": "needs_review",
"review_priority_explanation": [
{
"category": "data",
"detail": "A public table exposes personal data to anonymous callers.",
"id": "public_pii_exposure",
"label": "Public PII exposure",
"review_priority": "needs_review",
"values": {
"connector_count": 2,
"edge_function_count": 3,
"error_count": 2,
"info_count": 8,
"open_pii_finding_count": 3,
"secret_count": 4,
"shared_user_count": 6,
"warning_count": 5
}
}
],
"url": "https://acme-landing-page.lovable.app",
"visibility": "workspace_edit",
"visitors_7d": 210,
"visitors_24h": 35,
"visitors_30d": 840
}
],
"pagination": {
"has_more": true,
"next_cursor": "eyJ2IjoxLCJpZCI6InByal8wMWp3M2s5In0"
},
"total": 42
}{
"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 security project inventory
Plan: Enterprise
Scope: workspaces:read
Returns workspace projects with review priorities, security finding counts, activity counts, and publishing details. Use GET /v1/projects//security-scans//findings for individual findings. Supports search and filters. By default, projects are ordered by most recently edited, or search relevance when query is set. Project and membership data is eventually consistent and may not immediately reflect recent changes.
curl --request GET \
--url 'https://api.lovable.dev/v1/workspaces/workspace-id/security-center/insights/projects' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11'{
"activity_as_of": {
"edits_as_of": "2026-01-15T09:30:00Z",
"visitors_as_of": "2026-01-15T09:30:00Z"
},
"applied_finding": {
"category": "exposure",
"description": "Publicly published projects with error-level security findings.",
"id": "public_security_exposure",
"project_count": 12,
"review_priority": "needs_review",
"title": "Public app with security errors"
},
"as_of": "2026-01-15T09:30:00Z",
"data": [
{
"activity_group": "last_14_days",
"connectors": [
"<string>"
],
"description": "A single-page marketing site with a hero, feature grid, and signup form.",
"edge_functions": [
{
"name": "send-welcome-email"
}
],
"edit_count": 128,
"edits_7d": 21,
"edits_24h": 4,
"edits_30d": 67,
"id": "prj_01jw3k9m2xq8r5v0c7d4e6f2gh",
"is_published": true,
"last_edited_at": "2026-01-15T09:30:00Z",
"last_security_scan_at": "2026-01-15T09:30:00Z",
"matched_reason": {
"category": "data",
"detail": "A public table exposes personal data to anonymous callers.",
"id": "public_pii_exposure",
"label": "Public PII exposure",
"review_priority": "needs_review",
"values": {
"connector_count": 2,
"edge_function_count": 3,
"error_count": 2,
"info_count": 8,
"open_pii_finding_count": 3,
"secret_count": 4,
"shared_user_count": 6,
"warning_count": 5
}
},
"message_count": 56,
"name": "Acme Landing Page",
"owner": {
"display_name": "Jane Cooper"
},
"publish_audience": "public",
"review_priority": "needs_review",
"review_priority_explanation": [
{
"category": "data",
"detail": "A public table exposes personal data to anonymous callers.",
"id": "public_pii_exposure",
"label": "Public PII exposure",
"review_priority": "needs_review",
"values": {
"connector_count": 2,
"edge_function_count": 3,
"error_count": 2,
"info_count": 8,
"open_pii_finding_count": 3,
"secret_count": 4,
"shared_user_count": 6,
"warning_count": 5
}
}
],
"url": "https://acme-landing-page.lovable.app",
"visibility": "workspace_edit",
"visitors_7d": 210,
"visitors_24h": 35,
"visitors_30d": 840
}
],
"pagination": {
"has_more": true,
"next_cursor": "eyJ2IjoxLCJpZCI6InByal8wMWp3M2s5In0"
},
"total": 42
}{
"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.
Query Parameters
Maximum 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.
Free-text search across project name and owner. Terms shorter than 3 characters are ignored.
1000Sort field. Omit for the default order: most recently edited first, or best matches first when query is set. Ties break by project id unless noted. review_priority: unscored projects last in both directions, ties by risk score. name: projects without a name first ascending and last descending. publish_audience: ranks not published, then workspace, custom, public. last_edited_at: falls back to the last update time. risk_factor_count, open_pii_finding_count, external_access_rank: missing counts as 0, ties by name; external_access_rank ranks external collaborators above shared users, publicly published apps, then none; open_pii_finding_count returns 402 when personal data detection is not available on the workspace plan. edits_* and visitors_*: missing counts as 0. last_security_scan_at: never scanned last in both directions. relevance: requires query, ties by last update time.
relevance, review_priority, name, publish_audience, last_edited_at, risk_factor_count, open_pii_finding_count, external_access_rank, edits_24h, edits_7d, edits_30d, visitors_24h, visitors_7d, visitors_30d, last_security_scan_at Direction for sort_by. Defaults to descending. Requires sort_by.
asc, desc Filter by the activity_group field: time since the last edit, or last update for projects never edited, using 14-day and 60-day boundaries. Repeat to match any value. Omit for no filter.
last_14_days, last_60_days, older Filter by whether the project is published. Omit for no filter.
Filter by the visibility field. Repeat to match any of the values. Omit for no filter.
restricted, workspace_edit, workspace_view Filter by the has_pii signal. false selects projects without detected personal data. Omit for no filter. Returns 402 when personal data detection is not available on the workspace plan.
Filter by whether the project has a connected service. false selects projects without one. Omit for no filter.
Filter published projects by the publish_audience field. Repeat to match any value. Omit for no filter. Requires is_published to be true or omitted.
public, workspace, custom Filter by Security Center review priority. Repeat to match any selected priority; unscored matches projects not yet scored. Omit to include every project.
needs_review, review_recommended, no_review_needed, unscored Finding type IDs returned by GET /v1/workspaces/{workspace_id}/security-center/insights. Repeat to match any selected type. Unknown IDs return 400. Types that depend on personal data detection return 402 when that feature is not available on the workspace plan.
Response
OK
Projects with security finding counts, review priorities, activity counts, and publishing details.
Data timestamps for the edit and visitor counts on this page; null when none are available.
Show child attributes
Show child attributes
Finding type used as a filter when exactly one finding_type_id is selected; null otherwise. project_count equals the total matching projects after all filters are applied.
Show child attributes
Show child attributes
Timestamp indicating the freshness of workspace review-priority data. Individual projects may have newer results. Null when unavailable; not a security scan completion time.
"2026-01-15T09:30:00Z"
Items in this page. Empty when there are none.
Show child attributes
Show child attributes
Whether more results are available and the cursor to fetch the next page.
Show child attributes
Show child attributes
Total matching projects across all pages.
42
Was this page helpful?