---
title: "Search project cards"
method: GET
path: "/api/v2/projects/{projectId}/cards"
tags: ["Cards"]
---

# Search project cards

`GET /api/v2/projects/{projectId}/cards`

## Request

- Base URL: `https://davinci-app.com`
- URL: `https://davinci-app.com/api/v2/projects/{projectId}/cards`
- Auth: HTTP bearer

Returns a bounded flat card page plus tag, assignee, linked-team,
workflow-status, and accessible active/planned sprint filter options.
Cards default to open only. Values within
one repeated/comma-separated filter are ORed; distinct filter dimensions
are ANDed. `includeNoTeam` extends the team facet with cards having no
placement, and `includeUnassigned` extends the assignee facet with cards
having no user links. Deadline and effort bounds are inclusive. Within
either range dimension, its include-no-value flag ORs null-valued cards
with bounded non-null matches; using only the flag matches only null-valued
cards. Range dimensions AND with every other facet. Invalid instants,
negative/non-integer effort values, reversed ranges, and cursors issued
for different ranges return canonical 400 errors:
`INVALID_CARD_DEADLINE_FILTER`, `INVALID_CARD_DEADLINE_RANGE`,
`INVALID_CARD_EFFORT_FILTER`, `INVALID_CARD_EFFORT_RANGE`, or
`INVALID_CARD_CURSOR`. Results use an explicit stable sort and opaque
cursor.

## Query parameters

- `q` string
- `state` 'open' | 'closed' | 'all'
- `tagIds` string[]
- `assigneeIds` string[]
- `includeUnassigned` boolean
- `teamIds` string[]
- `includeNoTeam` boolean
- `statusIds` string[]
- `sprintIds` string[]
- `deadlineFrom` string, date-time
- `deadlineTo` string, date-time
- `includeNoDeadline` boolean
- `effortMin` integer
- `effortMax` integer
- `includeNoEffort` boolean
- `sort` 'created_asc' | 'created_desc' | 'updated_asc' | 'updated_desc' | 'deadline_asc' | 'deadline_desc' | 'effort_asc' | 'effort_desc' | 'name_asc' | 'name_desc'
- `limit` integer
- `cursor` string

## Response `200`

Flat project-card search page.

- CardSearchResponse
  - `cards` CardSearchCard[], required
    - `<<` unknown
    - `tag_ids` string[], required
    - `user_ids` string[], required
    - `team_ids` string[], required
    - `team_status_ids` string[], required
    - `sprint_ids` string[], required
    - `team_statuses` CardPlacementStatus[], required: Deterministically ordered placed-team status metadata.
      - `team_id` string, uuid, required
      - `status_id` string, uuid, required
      - `status_name` string, nullable, required
      - `status_color` string, nullable, required
      - `sprint_id` string, uuid, nullable, required
    - `team_placements` CardPlacement[], required: Deterministically ordered team placement filter metadata.
      - `team_id` string, uuid, required
      - `status_id` string, uuid, nullable, required
      - `sprint_id` string, uuid, nullable, required
    - `history_head_id` string, uuid, nullable, required: Latest committed card-history row ID; null only before a card has history.
    - `history_head_sequence` string, nullable, required: Globally monotonic card-history sequence.
  - `filterOptions` CardFilterOptions
    - `tags` CardTagFilterOption[], required
      - `id` string, uuid, required
      - `name` string, required
      - `color` string, required
    - `teams` CardTeamFilterOption[], required
      - `id` string, uuid, required
      - `name` string, required
    - `assignees` CardAssignee[], required
      - `id` string, uuid, required
      - `display_name` string, nullable, required
    - `statuses` CardStatusFilterOption[], required
      - `id` string, uuid, required
      - `name` string, required
      - `color` string, required
      - `teamId` string, uuid, required
      - `teamName` string, required
    - `sprints` CardSprintFilterOption[], required
      - `id` string, uuid, required
      - `name` string, required
      - `status` 'active' | 'planned', required
      - `teamId` string, uuid, required
      - `teamName` string, required
  - `meta` CardSearchPageMeta, required
    - `limit` integer, required
    - `hasMore` boolean, required
    - `total` integer
    - `state` 'open' | 'closed' | 'all', required
    - `sort` string, required
    - `projection` 'full' | 'index' | 'mention'
    - `hydrateOpen` boolean
    - `pageStart` integer
    - `pageEnd` integer
    - `previousCursor` string, nullable, required
    - `nextCursor` string, nullable, required

## Other responses

- `400`: Malformed request parameters or body. Agile requests may return `INVALID_PAGINATION` or `INVALID_IDEMPOTENCY_KEY`.
- `401`: No credential was supplied, or the supplied credential is malformed, expired, or revoked. A credential that is present but unusable is never downgraded to an anonymous request.
- `403`: Authenticated but not authorized. Either the acting user lacks the required resource permission, the key's scope ceiling excludes it, or the endpoint rejects this credential type (`CREDENTIAL_NOT_PERMITTED`).
- `404`: The resource does not exist in the parent named by the path, or is hidden from the caller. Absence and privacy denial are deliberately indistinguishable so project, organization, and private-team existence cannot be probed.
- `429`: Request rate exceeded, either globally or for this key.
- `500`: Unexpected server error.

## Changes

- **2026-09-15** (v2) `67c8b8616dbb`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/changes/api/v2/projects/:projectId/cards/get.md)

---

[API](https://skmtc.dev/celedon-solutions/apis/davinci-public-api.md) - [All operations](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/celedon-solutions/apis/davinci-public-api/revisions/279218ca2e8d?raw)
