Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/cryguy/hashboard/llms.txt

Use this file to discover all available pages before exploring further.

Labels are a global, instance-wide palette of named, colored tags that can be applied to any card. Because label membership is a property of the card itself — not of its position on a board — labels survive moves, detaches, and visibility changes without any reconciliation. A loose card in the inbox carries the same label objects as one sitting in a column on a board. Label names are unique across the entire instance. Attempting to create or rename a label to a name that already exists returns 409.

Label palette endpoints

List all labels

GET /api/v1/labels
Returns the complete label palette for the instance, ordered by creation time. Response — array of Label objects:
id
string
UUID of the label.
name
string
Display name. Unique instance-wide.
color
string
Color value (e.g. a hex string). Interpretation is up to the UI.
createdAt
string
ISO 8601 creation timestamp.

Create a label

POST /api/v1/labels
Request body:
name
string
required
Display name for the label. Must be unique across the instance.
color
string
required
Color value for the label (e.g. "#e11d48").
Returns 201 with the created Label object. Returns 409 if a label with the same name already exists.
curl -X POST https://hashboard.example.com/api/v1/labels \
  -H 'Authorization: Bearer hb_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"name": "urgent", "color": "#e11d48"}'

Update a label

PATCH /api/v1/labels/{id}
id
string
required
The label ID.
Request body (all fields optional):
name
string
New display name. Must be unique instance-wide if provided.
color
string
New color value.
Returns the updated Label. Returns 409 if the new name is already taken by another label.

Delete a label

DELETE /api/v1/labels/{id}
id
string
required
The label ID.
Deletes the label from the palette and removes it from every card it is currently attached to (cascade). Returns { "ok": true }.
Deleting a label is irreversible and removes it from all cards simultaneously. There is no undo. If you only want to stop using a label going forward, remove it from cards individually instead.

Card label endpoints

Labels are applied to and removed from cards through a pair of idempotent endpoints. Both require write access to the card and the ability to see the label.

Add a label to a card

PUT /api/v1/cards/{id}/labels/{labelId}
id
string
required
The card ID.
labelId
string
required
The label ID from the global palette.
Idempotent — calling this when the label is already on the card is a no-op. Returns { "ok": true }.
curl -X PUT https://hashboard.example.com/api/v1/cards/CARD_ID/labels/LABEL_ID \
  -H 'Authorization: Bearer hb_TOKEN'

Remove a label from a card

DELETE /api/v1/cards/{id}/labels/{labelId}
id
string
required
The card ID.
labelId
string
required
The label ID to detach.
Returns { "ok": true }. Returns 404 if the label is not on the card or either resource does not exist.

Design notes

Labels are intentionally not scoped to a board. Card metadata must not depend on placement — moving a card to a different board, detaching it to the inbox, or archiving it never invalidates its labels. This is a structural decision in the data model: card_labels references cards and labels directly, with no board column.
A card’s current label IDs are included in the composite GET /api/v1/cards/{id} response under labelIds. To display label details (name, color) alongside a card, fetch the full label palette once with GET /api/v1/labels and join locally — the palette is small and rarely changes.

Build docs developers (and LLMs) love