Skip to content

Edit a time entry

PATCH
/boards/{board}/cards/{card}/time-tracks/{timeTrack}
curl --request PATCH \
--url https://projects.work.optidata.cloud/api/boards/1/cards/1/time-tracks/1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "start_at": "2026-07-20T09:00:00Z", "end_at": "2026-07-20T10:30:00Z", "description": "Homepage wireframes" }'

Adjusts a finished time entry’s start/end (and optional description). The entry must stay in the past, start before it ends, and must not overlap the caller’s neighbouring entries on the same card — violations return 422.

board
required
integer

Board id.

card
required
integer

Card id (must belong to the board).

timeTrack
required
integer

Time entry id (must belong to the card).

Media typeapplication/json
object
start_at
required
string format: date-time
end_at
required
string format: date-time
description
string | null
<= 255 characters
Example
{
"start_at": "2026-07-20T09:00:00Z",
"end_at": "2026-07-20T10:30:00Z",
"description": "Homepage wireframes"
}

The updated entry plus the card’s recomputed total.

Media typeapplication/json
object
time_track

A time entry on a card. end_at null means the timer is running.

object
id
integer
board_id
integer
card_id
integer
user_id
integer
start_at
string format: date-time
end_at
string | null format: date-time
amount_seconds

Tracked duration in seconds (set when stopped).

integer | null
description
string | null
<= 255 characters
created_at
string format: date-time
updated_at
string format: date-time
total_time_spent

Human-readable total tracked time on the card.

string
Example
{
"time_track": {
"id": 610,
"board_id": 42,
"card_id": 9001,
"user_id": 7,
"start_at": "2026-07-20T09:00:00.000000Z",
"end_at": "2026-07-20T10:30:00.000000Z",
"amount_seconds": 5400,
"description": "Homepage wireframes"
},
"total_time_spent": "1h 30min"
}

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."
]
}
}