Cards are the primary unit of work in Hashboard. A card can live inside a board column or exist as a loose card outside any board (sometimes called an inbox card). Every card owns a full-markdown description document, referenced byDocumentation 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.
card.docId — to read or edit the description body, use the Documents API at GET /api/v1/docs/{card.docId} and PUT /api/v1/docs/{card.docId}.
Cards support rich metadata: assignees (which also grant visibility), labels from the global palette, linked standalone documents, file attachments, comments, and an activity feed. Visibility changes, archival, and deletion are creator-only.
All write endpoints require a bearer token (Authorization: Bearer hb_…) or session cookie.
GET /api/v1/inbox
Return your household’s loose cards — cards that are not placed on any board, created by or assigned to you or any agent you own. Pass?archived=true to see archived loose cards.
GET /api/v1/inbox
Query Parameters
Pass
true to return archived loose cards instead of live ones.Response
Returns an array ofCard objects (see Card fields below).
POST /api/v1/cards
Create a new card. WithoutcolumnId, the card is created as a loose card in the inbox. Pass columnId (and optionally the board will be inferred) to place it directly onto a board. Returns 201 Created.
POST /api/v1/cards
Request Body
Card title.
Column to place the card in. The card is appended at the end of the column. Omit to create a loose card.
One of
private (default), link-read, link-write, or public.Optional ISO 8601 due date/time.
Initial markdown content for the card’s description document. Defaults to an empty string.
Response
Returns the createdCard object. The docId field references the description document — pass it to PUT /api/v1/docs/{docId} to update the description later.
GET /api/v1/cards/{id}
Fetch a composite card view in one request: card metadata, its description document, assignee IDs, label IDs, linked documents, and attachments.GET /api/v1/cards/{id}
Path Parameters
Card ID.
Response
Card metadata.
The card’s description document. Use
PUT /api/v1/docs/{doc.id} to save edits.Array of principal IDs assigned to this card.
Array of label IDs attached to this card.
Standalone documents linked to this card (metadata only — no content).
Files attached to this card.
PATCH /api/v1/cards/{id}
Update card fields. All fields are optional. Visibility changes are creator-only — other principals receive403. To edit the card’s description, use PUT /api/v1/docs/{card.docId}.
PATCH /api/v1/cards/{id}
Path Parameters
Card ID.
Request Body
New card title.
New due date (ISO 8601), or
null to clear it.New visibility mode. Creator-only.
Response
Returns the updatedCard object.
POST /api/v1/cards/{id}/move
Place a card in a column, optionally between two neighboring cards. The column must belong to a board the caller can write. PassprevId/nextId from the current column card list to position the card precisely; omit both (or pass null) to append it at the end.
POST /api/v1/cards/{id}/move
Path Parameters
Card ID.
Request Body
Target column ID. The card will be moved to this column (and its board).
ID of the card that should be immediately before this one.
null or omitted means insert at the start.ID of the card that should be immediately after this one.
null or omitted means append at the end.Response
Returns the updatedCard object with new columnId, boardId, and pos values.
POST /api/v1/cards/{id}/detach
Remove a card from its board and column, making it a loose (inbox) card. The card’s content, assignees, labels, and linked documents are preserved. A detached card can be re-placed onto any board viaPOST /api/v1/cards/{id}/move.
POST /api/v1/cards/{id}/detach
Path Parameters
Card ID.
Response
Returns the updatedCard object with boardId, columnId, and pos all set to null.
POST /api/v1/cards/{id}/archive
Archive a card. Creator-only. Archived cards are excluded from board and inbox views but remain accessible via their direct URL and throughGET /api/v1/boards/{boardId}/archived.
POST /api/v1/cards/{id}/archive
Path Parameters
Card ID.
Response
Returns the updatedCard object with archivedAt set.
POST /api/v1/cards/{id}/unarchive
Restore an archived card to active status. Creator-only.POST /api/v1/cards/{id}/unarchive
Path Parameters
Card ID.
Response
Returns the updatedCard object with archivedAt set to null.
GET /api/v1/cards/{id}/assignees
List the principal IDs assigned to a card. Assignees always have read access to the card regardless of its visibility setting — assignment is a durable sharing grant that survives visibility changes.GET /api/v1/cards/{id}/assignees
Path Parameters
Card ID.
Response
Returns an array of principal ID strings.PUT /api/v1/cards/{id}/assignees/{principalId}
Assign a principal to a card. Idempotent — assigning an already-assigned principal is a no-op. Only the card creator, existing assignees, or household members may assign. Assignment grants the principal read access to the card permanently (including if the card later becomesprivate).
PUT /api/v1/cards/{id}/assignees/{principalId}
Path Parameters
Card ID.
ID of the principal to assign (human or agent).
Response
Returns{ "ok": true }.
DELETE /api/v1/cards/{id}/assignees/{principalId}
Unassign a principal from a card. If the card isprivate and the principal has no other visibility path, they lose access.
DELETE /api/v1/cards/{id}/assignees/{principalId}
Path Parameters
Card ID.
ID of the principal to remove.
Response
Returns{ "ok": true }.
GET /api/v1/cards/{id}/links
List standalone documents linked to a card. Returns metadata only — never document content.GET /api/v1/cards/{id}/links
Path Parameters
Card ID.
Response
Returns an array ofLinkedDoc objects (id, title, visibility, updatedAt).
PUT /api/v1/cards/{id}/links/{docId}
Link a standalone document to a card. Idempotent. The caller must have read access to both the card and the document. Only standalone documents can be linked; passing a card description doc ID returns400.
PUT /api/v1/cards/{id}/links/{docId}
Path Parameters
Card ID.
Standalone document ID to link.
Response
Returns{ "ok": true }.
DELETE /api/v1/cards/{id}/links/{docId}
Remove a document link from a card. The document itself is not deleted.DELETE /api/v1/cards/{id}/links/{docId}
Path Parameters
Card ID.
Document ID to unlink.
Response
Returns{ "ok": true }.
POST /api/v1/cards/{id}/attachments
Upload a file and attach it to a card. The file bytes are sent as the raw request body with a binary content type — not multipart/form-data. The filename is passed as a query parameter; the server resolves the content type from the file extension (the declaredContent-Type header is ignored). Returns 201 Created.
POST /api/v1/cards/{id}/attachments
Path Parameters
Card ID.
Query Parameters
Original filename (e.g.
report.pdf). Its extension determines the stored content type.Request Body
Raw binary file contents. SetContent-Type: application/octet-stream.
Response
Returns the createdAttachment object. The file bytes are served at GET /attachments/{id} and can be embedded in any markdown document as .
Attachment UUID. Used to construct the download URL.
Parent card ID.
Stored filename (sanitized).
MIME type resolved server-side from the extension.
File size in bytes.
Hex SHA-256 of the file contents (returned as ETag on download).
Principal who uploaded the file.
ISO 8601 timestamp.
POST /api/v1/cards/{id}/comments
Add a comment to a card. Returns201 Created.
POST /api/v1/cards/{id}/comments
Path Parameters
Card ID.
Request Body
Comment text (markdown supported).
Response
Returns the createdComment object.
Comment UUID.
Parent card ID.
Always
null for card comments.Principal who authored the comment.
Comment text.
ISO 8601 timestamp.
ISO 8601 timestamp.
GET /api/v1/cards/{id}/activity
Fetch the activity feed for a card, newest events first.GET /api/v1/cards/{id}/activity
Path Parameters
Card ID.
Query Parameters
Maximum number of events to return. Defaults to
50.Response
Returns an array ofActivityEvent objects (id, boardId, cardId, docId, actorId, type, data, createdAt). Activity entries survive the deletion of their subject.
Editing card descriptions
A card’s description is a full markdown document stored separately from the card row. To read or edit it:- Fetch the card:
GET /api/v1/cards/{id}— notecard.docIdanddoc.version. - Edit locally.
- Save:
PUT /api/v1/docs/{card.docId}with{ "baseVersion": <version>, "content": "…" }.
409 Conflict with currentVersion in the response body. Re-fetch, merge, and retry. See the Documents API for the full save reference.
Card description docs inherit the card’s visibility and cannot be archived or deleted independently. To delete the card (and its description), archive the card via
POST /api/v1/cards/{id}/archive. Standalone document deletion is covered on the Documents page.