The card, its attachments, its reminders and its labels — each of the latter
an id and a name — and assignees, everyone on it as id, name,
image and type. assignee and assigneeName are the first of them, for
integrations that know only one person per card; repeatEvery is how it
repeats, or null.
Updates a card. This is a replacement, not a patch: name, content,
status and dueDate are all written from what you send, so read the card
first and send it back with your change applied. Ticking one box means
sending the whole content with that one - [ ] turned into - [x].
Everyone who should be on the card, by user id — a card can be on several people. Sending the array replaces them; [] takes everybody off; leaving it out leaves them alone. Only the board's owner and the people invited to it can be put on a card — anyone else is ignored. People put on by somebody else get a notification.
assignee
string | null
no
The older single-person form: one user id puts exactly that person on the card, null takes everybody off. Ignored when assignees is sent.
reminders
integer
no
Minutes before the due date to send a reminder, e.g. [60, 1440]. Sending the array replaces the set; a changed due date makes them all fire again.
labelIds
integer
no
The labels this card wears, by id. Sending the array replaces them; leaving it out leaves them alone. Ids come from GET /api/data/labels, and only labels belonging to this card's own board are accepted — the rest are ignored. A label no card wears any more is removed from the board.
repeatEvery
string | null
no
How the card repeats once it is done: day, week, twoWeeks, month or year; null stops it. Leaving it out leaves it alone. Needs a due date — clearing dueDate stops it too. Anything else is refused with 400.
files
object
no
Attachments to add, each { filename, filetype, filesize, filedata } with filedata base64.
Setting status to 1 on a repeating card puts the next one on the board, and
the answer carries it as next (otherwise next is null): the same card with
its checklist unticked, open, due at the next date in the series after today, at
the bottom of the area the series was set up in. The card you sent keeps
status: 1 and no longer repeats — the series has moved on to next. See
Repeating cards for the rules.
curl -X PUT "https://boards.example.com/api/data/card" \
-H "X-API-Key: $LOKALBOARDS_KEY" \
-H "Content-Type: application/json" \
-d '{
"cardID": 501,
"name": "Redesign the logo",
"content": "Refresh the brand mark for the 2.0 launch.\n\n- [x] Collect references\n- [ ] First round of concepts",
"status": 0,
"dueDate": "2026-08-21T19:31:00.000Z",
"assignees": ["8f3c1e2a-5b7d-4a91-9c8e-2d6f0b4a7e13"],
"reminders": [
60,
1440
]
}'
const response = await fetch("https://boards.example.com/api/data/card", {
method: "PUT",
headers: {
"X-API-Key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
cardID: 501,
name: "Redesign the logo",
content: "Refresh the brand mark for the 2.0 launch.\n\n- [x] Collect references\n- [ ] First round of concepts",
status: 0,
dueDate: "2026-08-21T19:31:00.000Z",
assignees: ["8f3c1e2a-5b7d-4a91-9c8e-2d6f0b4a7e13"],
reminders: [60, 1440],
}),
});
if (!response.ok) throw new Error(await response.text());
const data = await response.json();
Archives a card. It leaves the board keeping its comments, attachments, labels
and history, and can be restored from the board's archive.
This archives rather than deletes. Since v0.36.0 the row stays, everything
hanging off it stays, and it disappears from every list — the board, the
dashboard, search and the reminders — until it is restored. Pass permanent for
the old, irreversible behaviour.
Copies a card into the same area, directly below the original.
The copy takes the title, the description with whatever checklist it holds, the
due date and its reminders and how it repeats, the people on it, the done state and the attachments.
Comments are not copied. A stored attachment's file is copied on disk under a
new name, so the two cards own two files and deleting one card's attachment
never touches the other's.
Returns the new card in the shape GET /api/data/cards returns, and the number
of attachments that were copied.