Skip to content

Update a card

PATCH
/boards/{board}/cards/{card}
curl --request PATCH \
--url https://projects.work.optidata.cloud/api/boards/1/cards/1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "title": "Draft homepage copy (v2)", "due_date": "2026-08-05T12:00:00Z" }'

Partially updates the card. Moving the card is possible by sending column_id (and board_id for cross-board moves). Setting completed_at marks the card complete. @-mentions added to content trigger notifications.

board
required
integer

Board id.

card
required
integer

Card id (must belong to the board).

Media typeapplication/json
object
title
string
<= 255 characters
content
string | null
board_id

Target board when moving across boards.

integer | null
column_id

Target column when moving.

integer | null
status
string | null
Allowed values: OPEN CLOSED ARCHIVED
icon
string | null
order
integer | null
due_date
string | null format: date-time
completed_at
string | null format: date-time
template_id
integer | null
cover_color
string | null
Allowed values: #ef4444 #f97316 #eab308 #22c55e #06b6d4 #3b82f6 #8b5cf6 #ec4899 #6b7280 #000000
Example
{
"title": "Draft homepage copy (v2)",
"due_date": "2026-08-05T12:00:00Z"
}

The updated card.

Media typeapplication/json

A task. Derived attributes (tags_ids, assignees_ids, *_count, human_*, due_date_status, is_time_tracking) are present on single card reads; list contexts may return a subset of attributes.

object
id
integer
board_id
integer
column_id
integer
user_id

Creator user id.

integer | null
title
string
<= 255 characters
content

Rich-text description (serialized editor document, JSON string).

string | null
type
string
Allowed values: ORDINARY CHECKLIST_ITEM
status
string | null
Allowed values: OPEN CLOSED ARCHIVED
icon
string | null
order

Position within its column.

integer
number

Sequential card number within the board.

integer
due_date
string | null format: date-time
due_date_hash

Opaque id tied to the current due date (used for calendar sync).

string | null
pinned_at
string | null format: date-time
completed_at
string | null format: date-time
archived_at
string | null format: date-time
deleted_at
string | null format: date-time
checklist_id

Owning checklist (checklist-item cards only).

integer | null
checklist_items

Cached count of checklist items on this card.

integer | null
checklist_items_completed
integer | null
card_recurrence_id
integer | null
cover_color
string | null
Allowed values: #ef4444 #f97316 #eab308 #22c55e #06b6d4 #3b82f6 #8b5cf6 #ec4899 #6b7280 #000000
created_at
string format: date-time
updated_at
string format: date-time
tags_ids

Ids of the card’s tags (as strings; may contain null when empty).

Array<string | null> | null
assignees_ids

Ids of the card’s assignees (as strings; may contain null when empty).

Array<string | null> | null
is_time_tracking

Truthy when the caller has a running timer on this card.

boolean | integer | null
comments_count
integer
files_count
integer
custom_fields_count
integer
due_date_status
string | null
Allowed values: OVERDUE NEAR FAR
human_due_date

Localized short due date (e.g. Aug 1, 2026).

string | null
short_locale_date
string | null
human_verbose_due_date
string | null
is_completed
boolean
is_recurrent
boolean
Example
{
"type": "ORDINARY",
"status": "OPEN",
"cover_color": "#ef4444",
"due_date_status": "OVERDUE"
}

Missing, invalid or expired bearer passport.

Media typeapplication/json
object
error
string
Example
{
"error": "JWT passport exception: Missing bearer token in request"
}

The authenticated user lacks the required board permission.

Media typeapplication/json
object
message
string
Example
{
"message": "This action is unauthorized."
}

Resource not found, or a nested resource does not belong to its parent in the path.

Media typeapplication/json
object
message
string
Example
{
"message": "Not found."
}

Validation failed.

Media typeapplication/json
object
message

First validation error message.

string
errors

Map of field name → list of error messages.

object
key
additional properties
Array<string>
Example
{
"message": "The name field is required.",
"errors": {
"name": [
"The name field is required."
]
}
}