---
title: "List projects"
method: GET
path: "/v1/projects"
tags: ["Projects"]
---

# List projects

`GET /v1/projects`

Returns every project in the organization. The response uses the standard paginated shape; the project list currently fits in a single page (`nextCursor` is always `null`).

## Response `200`

List of projects

- PaginatedProjects
  - `items` Project[], required — Page of items, in the requested sort order.
    - `id` string, required — Stable project identifier (CUID2).
    - `organizationId` string, required — Organization that owns this project.
    - `name` string, required — Human-readable name.
    - `slug` string, required — URL-safe slug. Set from `name` at creation; renaming never changes it. It can only be changed from the dashboard, not via the API.
    - `settings` ProjectSettings, nullable, required — Per-project settings overrides. `null` means inherit from the organization.
      - `keepMonitoring` boolean — When `true`, the evaluation linked to an signal keeps running after the signal is resolved. When `false`, resolving the signal stops the evaluation. Defaults to `true` when omitted.
      - `redaction` RedactionSetting — Server-side PII redaction applied before spans are stored. An organization-wide policy can override this one; when the organization locks its policy, project values are ignored entirely rather than merged.
        - `mode` 'off' | 'enforce' — `enforce` scans span content as it is ingested and replaces matches with a labelled placeholder such as `[REDACTED_EMAIL]`; `off` scans nothing. Defaults to `off` when omitted. Applies only to spans ingested after the change, takes effect within a minute, and redacted content cannot be recovered.
        - `entities` string[] — Which categories to look for. Defaults to email, phone, credit_card, iban, us_ssn, secret when omitted; `ip_address` is off by default because a dotted quad and a four-part version string are the same string. Detection is pattern based: it reliably catches structured identifiers, and does not catch names, addresses, or free-form personal detail.
        - `scopes` object — Which span fields to scan beyond message and tool content.
          - `metadata` boolean — Also scan the metadata map and tags. Defaults to `false` when omitted, because metadata is usually operational and redacting it removes values you filter and group by.
        - `identities` 'keep' | 'pseudonymize' — How to handle `userId` and `userEmail`. `keep` stores them unchanged; `pseudonymize` replaces each with a stable per-organization pseudonym so filtering and grouping by user keep working. Defaults to `keep` when omitted. Deployments with no pseudonym secret configured remove the identifier entirely instead.
      - `notifications` NotificationsSetting — Per-group project-level notification toggles (`incidents`, `destinations`).
        - `incidents` IncidentNotificationsSetting — Per-alert-kind opt-out for incident notifications.
          - `signal.escalating` boolean — Send a notification when an active signal is escalating in volume or severity. Defaults to `true` when omitted.
          - `monitor.match` boolean — Send a notification when a match monitor opens an incident. Defaults to `true` when omitted.
          - `monitor.threshold` boolean — Send a notification when a threshold monitor opens an incident. Defaults to `true` when omitted.
          - `monitor.escalating` boolean — Send a notification when an escalating monitor opens an incident. Defaults to `true` when omitted.
        - `destinations` DestinationNotificationsSetting — Project-level opt-out for data-destination notifications.
          - `quarantine` boolean — Notify org members when a data destination is quarantined after repeated sync failures. Defaults to `true` when omitted.
      - `escalation` EscalationSetting — Tuning parameters for the escalation detector. Affects detector behaviour regardless of whether notifications are enabled.
        - `sensitivity` integer — Sensitivity of the escalation detector, 1 (most sensitive, more incidents) to 6 (least sensitive, fewer incidents). Defaults to a balanced value when omitted.
    - `firstTraceAt` string, nullable, required — ISO-8601 timestamp of the first ingested trace. `null` until the first trace lands.
    - `deletedAt` string, nullable, required — ISO-8601 timestamp at which the project was deleted. `null` while the project is active.
    - `lastEditedAt` string, required — ISO-8601 timestamp of the most recent name/settings edit.
    - `createdAt` string, required — ISO-8601 timestamp of creation.
    - `updatedAt` string, required — ISO-8601 timestamp of the last metadata change.
  - `nextCursor` string, nullable, required — Opaque cursor for fetching the next page. `null` when there are no more pages. Pass it back in `cursor` to continue.
  - `hasMore` boolean, required — `true` when there is at least one more page after this one.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `404` — Not found

---

[API](https://skmtc.net/latitude-dev/apis/latitude.md) · [All operations](https://skmtc.net/latitude-dev/apis/latitude/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/latitude-dev/latitude/revisions/2ce07f01d6c2/schema)
