---
title: "Get a single card"
method: GET
path: "/cards/{id}"
---

# Get a single card

`GET /cards/{id}`

## Request

- Base URL: `https://craaft.io/api/v1`
- URL: `https://craaft.io/api/v1/cards/{id}`
- Auth: HTTP bearer

Returns the same shape `PATCH /cards/{id}` responds with, including
`following`. `404` when the card does not exist OR the caller has no
access to its board - the two are intentionally indistinguishable.

## Response `200`

OK

- Card
  - `id` string, uuid, required
  - `projectId` string, uuid, required
  - `column` string, required
  - `title` string, required
  - `description` string: Full body on GET /cards/{id}, PATCH, create, and /detail. Omitted from GET /projects/{id}/cards and lean SSE card.updated events (position-only moves).
  - `position` number, required
  - `dueDate` string, date-time, nullable
  - `assignedUserId` string, uuid, nullable
  - `assignedUserName` string, nullable
  - `size` integer, nullable: Optional integer size estimate; null when unset
  - `priority` 'low' | 'medium' | 'high' | 'urgent' | 'null', nullable
  - `createdBy` string, uuid, nullable
  - `createdByName` string, nullable
  - `updatedBy` string, uuid, nullable
  - `updatedByName` string, nullable
  - `attachmentCount` integer
  - `checklistDone` integer: Completed checklist items (denormalized count)
  - `checklistTotal` integer: Total checklist items (denormalized count)
  - `tags` string[]
  - `following` boolean: Whether the authenticated caller follows this card
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `401`: Missing or invalid token
- `404`: Resource doesn't exist or caller isn't a member of its workspace

---

[API](https://skmtc.dev/craaft/apis/craaft-api.md) · [All operations](https://skmtc.dev/craaft/apis/craaft-api/llms.txt) · [OpenAPI document](https://skmtc.dev/craaft/apis/craaft-api/revisions/3a1e9d30d7dc?raw)
