security-governance

List workspace security project inventory

Plan: Enterprise

Returns the review-priority-ranked project inventory for the workspace, sorted by the selected sort_by (default last_edited, or relevance when query is set) with offset-based paging behind the cursor.

get/v1/workspaces/{workspace_id}/security-center/insights/projects

Path parameters

workspace_idstring required

Workspace ID

Workspace ID

Query parameters

limitinteger

Max results per page.

Max results per page.

cursorstring

Opaque cursor from a prior response. Omit on the first page.

Opaque cursor from a prior response. Omit on the first page.

querystring

Free-text search across project name and owner.

Free-text search across project name and owner.

sort_by'review_priority_desc' | 'name_asc' | 'name_desc' | 'published_status_asc' | 'published_status_desc' | 'last_edited_asc' | 'last_edited_desc' | 'risk_factors_asc' | 'risk_factors_desc' | 'pii_findings_asc' | 'pii_findings_desc' | 'external_access_asc' | 'external_access_desc' | 'most_edited_24h' | 'most_edited_7d' | 'most_edited_30d' | 'most_visitors_24h' | 'most_visitors_7d' | 'most_visitors_30d' | 'last_scan_desc' | 'last_scan_asc'

Sort axis. When omitted, results sort by last_edited (or by relevance when 'query' is set).

Sort axis. When omitted, results sort by last_edited (or by relevance when 'query' is set).

activity'active' | 'inactive' | 'dead'

Activity bucket filter.

Activity bucket filter.

is_published'true' | 'false'

Filter by publishing status. Omit for no filter.

Filter by publishing status. Omit for no filter.

visibility'public' | 'private' | 'draft'

Filter by project visibility.

Filter by project visibility.

contains_piiboolean

Filter to projects flagged with PII.

Filter to projects flagged with PII.

has_connectorsboolean

Filter to projects with at least one connector.

Filter to projects with at least one connector.

publish_statusstring[] nullable

Repeat to include multiple publishing statuses. Omit for all.

Repeat to include multiple publishing statuses. Omit for all.

review_prioritystring[] nullable

Repeat to include multiple review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Unscored projects are not filterable but may appear in results.

Repeat to include multiple review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Unscored projects are not filterable but may appear in results.

finding_idstring[] nullable

Repeat to filter to projects matching any of the listed catalog findings (e.g. public_pii_exposure, abandoned_published). Unknown finding ids return 400.

Repeat to filter to projects matching any of the listed catalog findings (e.g. public_pii_exposure, abandoned_published). Unknown finding ids return 400.

Response

OK

as_ofstring date-time

Conservative workspace-wide freshness horizon for the risk rollups; individual project rollups may be newer.

totalinteger required

Total matching projects across all pages.

Example response

{
  "activity_as_of": {
    "edits_as_of": "2026-01-15T09:30:00Z",
    "visitors_as_of": "2026-01-15T09:30:00Z"
  },
  "applied_finding": {
    "category": "data",
    "description": "A public table has row-level security disabled, exposing all rows to anonymous callers.",
    "id": "public_pii_exposure",
    "project_count": 12,
    "severity": "needs_review",
    "title": "Row-level security disabled on a public table"
  },
  "as_of": "2026-01-15T09:30:00Z",
  "data": [
    {
      "activity_group": "active",
      "description": "Marketing landing page for the Q1 product launch.",
      "display_name": "Acme Landing Page",
      "edge_functions": [
        {
          "name": "send-welcome-email"
        }
      ],
      "edit_count": 128,
      "edits_24h": 4,
      "edits_30d": 67,
      "edits_7d": 21,
      "generated_description": "A single-page marketing site with a hero, feature grid, and signup form.",
      "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",
        "severity": "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",
      "og_image_url": "https://lovable.dev/cdn/projects/acme-landing-page/og.png",
      "owner": {
        "display_name": "Jane Cooper"
      },
      "publish_visibility": "external",
      "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",
          "severity": "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
          }
        }
      ],
      "signals": {
        "chat_attachment_count": 7,
        "connector_count": 2,
        "edge_function_count": 3,
        "error_count": 2,
        "external_collaborators_known": true,
        "has_chat_attachment": true,
        "has_external_collaborators": true,
        "has_pii": true,
        "has_project_asset": true,
        "has_project_secret": true,
        "info_count": 8,
        "is_public_published": true,
        "is_published": true,
        "lovable_cloud_enabled": true,
        "open_pii_finding_count": 3,
        "project_asset_count": 10,
        "project_secret_count": 4,
        "shared_user_count": 6,
        "supabase_rls_enabled_table_count": 10,
        "supabase_signals_fetched_at": "2026-01-15T09:30:00Z",
        "supabase_storage_bucket_count": 2,
        "supabase_table_count": 12,
        "supply_chain_error_count": 1,
        "supply_chain_info_count": 4,
        "supply_chain_warning_count": 3,
        "warning_count": 5
      },
      "url": "https://acme-landing-page.lovable.app",
      "visibility": "public",
      "visitors_24h": 35,
      "visitors_30d": 840,
      "visitors_7d": 210
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "eyJ2IjoxLCJpZCI6InByal8wMWp3M2s5In0"
  },
  "total": 42
}

Changes