---
title: "Get board item"
method: GET
path: "/board-items/{item_id}"
tags: ["board-items"]
---

# Get board item

`GET /board-items/{item_id}`

## Request

- Base URL: `https://api.cogram.com/v1`
- URL: `https://api.cogram.com/v1/board-items/{item_id}`
- Auth: HTTP bearer

Get a single board item by id, with its full history timeline.

`history` is ordered oldest-first. Each entry may represent a status
transition, an assignee change, a comment, or any combination — see
the schema reference for details on how to distinguish the cases.

Returns 404 if the item doesn't exist or belongs to another organization.

## Path parameters

- `item_id` string, required

## Response `200`

Successful Response

- BoardItemDetailV1: Single board item with its full history embedded. ``history`` is ordered oldest-first, matching the internal history endpoint so external consumers see the same timeline ordering.
  - `id` string, required
  - `project_id` string, required
  - `project_name` string, required
  - `title` string, required
  - `body` string, nullable, required: Markdown.
  - `status` 'TODO' | 'IN_PROGRESS' | 'DONE' | 'DISMISSED', required
  - `priority` 'URGENT' | 'HIGH' | 'NORMAL' | 'LOW', nullable, required
  - `due_date` string, date, nullable, required: Calendar date, no time component.
  - `assignee` string, nullable, required: Free-text name; may differ from the linked user's name.
  - `assignee_user_id` string, uuid, nullable, required: Set only when the assignee name matched a Cogram user.
  - `source_meeting_id` string, nullable, required
  - `source_meeting_name` string, nullable, required
  - `meeting_series_uid` string, nullable, required
  - `archived` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, nullable, required: Null if never updated.
  - `last_status_changed_at` string, date-time, nullable, required: Timestamp of the newest history entry.
  - `history` BoardItemHistoryEntryV1[], required: Oldest first.
    - `id` string, required
    - `changed_at` string, date-time, required
    - `changed_by_user_id` string, uuid, nullable, required: Null for automated (LLM) changes, and also for a user-made change whose user has since been deleted. Null plus a set `triggered_by_meeting_id` is what identifies an automated change.
    - `changed_by_user_name` string, nullable, required
    - `triggered_by_meeting_id` string, nullable, required
    - `triggered_by_meeting_name` string, nullable, required
    - `previous_status` 'TODO' | 'IN_PROGRESS' | 'DONE' | 'DISMISSED', nullable, required: Null on the creation entry and on non-status rows.
    - `new_status` 'TODO' | 'IN_PROGRESS' | 'DONE' | 'DISMISSED', nullable, required: Null on non-status rows.
    - `previous_assignee` string, nullable, required
    - `new_assignee` string, nullable, required
    - `previous_assignee_user_id` string, uuid, nullable, required
    - `new_assignee_user_id` string, uuid, nullable, required
    - `previous_priority` 'URGENT' | 'HIGH' | 'NORMAL' | 'LOW', nullable, required
    - `new_priority` 'URGENT' | 'HIGH' | 'NORMAL' | 'LOW', nullable, required
    - `previous_due_date` string, date, nullable, required
    - `new_due_date` string, date, nullable, required
    - `reason` string, nullable, required: LLM-authored; only on reconciliation-triggered rows.
    - `comment` string, nullable, required: User-authored; null on pure status/assignee rows.

## Other responses

- `401`: Unauthorized
- `404`: Not found
- `422`: Validation error
- `429`: Rate limit exceeded
- `500`: Internal server error

---

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