Method names follow each language's convention:
- TypeScript/JS:
camelCase - Python:
snake_case
Returns token owner and metadata.
Returns all boards reachable by the token.
Fetches a single board including its full data (lists, cards, presets).
Replaces the entire board data object. Optionally pass the current revision to guard against concurrent writes.
Creates a new list at the end of the board.
| Option | Type | Description |
|---|---|---|
id |
string | Custom list ID (optional) |
revision |
number | Optimistic concurrency guard |
Creates a card. Returns { id, ticket, createdAt, title, categoryId }.
| Option | Type | Description |
|---|---|---|
categoryId |
string | Priority category (e.g. P1) |
description |
string | Card description (max 8,000 chars) |
descriptionMode |
plain | markdown | fields |
|
descriptionSize |
small | normal | large |
|
labels |
Label[] | Up to 50 labels per card |
assignees |
string[] | Roblox user IDs |
due |
{ iso: string } |
Due date in ISO 8601 |
checklist |
{ items: [...] } |
Up to 200 checklist items |
attachments |
{ name, url }[] |
Up to 100 attachments |
revision |
number |
Partially update a card. Only include fields you want to change. Pass null to clear optional fields. This is a raw PATCH — if you pass a revision, it's on you to have fetched a current one; on a stale revision the call throws RevisionConflictError with no retry. Use patchCard instead when you're reading-then-writing a field (like checklist) to avoid managing revisions by hand.
Setting custom field values:
await client.updateCard('board-id', 'card-id', {
fieldValues: { 'owner-team': 'platform', 'discord-id': '1234567890' },
});Revision-safe card update. Accepts either a plain fields object (same shape as updateCard) or a function (card, list, board) => fields that receives the card's current state and returns the patch to apply. The wrapper fetches the board's current revision, calls your function against it, and retries automatically (up to maxConflictRetries, default 1) if another writer wins the race — no manual revision handling needed. Prefer this over updateCard for read-modify-write patches, especially on fields like checklist where the API requires the whole array on every write.
await client.patchCard('board-id', 'card-id', card => ({
checklist: {
items: card.checklist.items.map(item =>
item.id === 'item-id' ? { ...item, done: true } : item
),
},
}));Move a card to another list or reorder within the current list.
| Option | Type | Description |
|---|---|---|
position |
number | 0 = top, omit = bottom |
revision |
number |
Returns the shareable web URL for a card.
Adds a comment. Regular comments cap at 3,000 chars; pass kind: 'docucomment' for up to 15,000 chars.
Lists soft-deleted cards grouped by source list.
Soft-deletes a card into the vault.
Restores a vaulted card.
| Option | Type | Description |
|---|---|---|
toListId |
string | Destination list (defaults to source list) |
position |
number | Position in the list |
revision |
number |
Permanently deletes a vaulted card. This action is irreversible.
listBoardTokens(boardId)/list_board_tokens(board_id)createBoardToken(boardId, name, type)/create_board_token(board_id, name, type)—type:programmatic|plugindeleteBoardToken(boardId, tokenId)/delete_board_token(board_id, token_id)
listProfileTokens()/list_profile_tokens()createProfileToken(name)/create_profile_token(name)deleteProfileToken(tokenId)/delete_profile_token(token_id)
listOrgTokens(orgId)/list_org_tokens(org_id)createOrgToken(orgId, name)/create_org_token(org_id, name)deleteOrgToken(orgId, tokenId)/delete_org_token(org_id, token_id)configureOrgBotToken(orgId, tokenId, config)/configure_org_bot_token(org_id, token_id, *, name, avatar)
Bot config:
name— display name (max 32 chars), passnullto remove bot identityavatar— WebP data URL (max 16 KiB), passnullto remove avatar only
Requires a token with plugin:checklist scope. Org-owned tokens are not supported.
Returns board/list/card/checklist structure only.
Toggles a checklist item's done state.
Probes the plugin access level for the current token.
| Option | TypeScript/JS | Python | Default |
|---|---|---|---|
| API token | token |
token |
required |
| Base URL | baseUrl |
base_url |
https://api.jokelboard.com/api/v1 |
| Timeout | timeout (ms) |
timeout (seconds) |
10s |
| Auto-retry on 429 | retryOnRateLimit |
retry_on_rate_limit |
true |
| Max retries | maxRetries |
max_retries |
3 |