Skip to main content

kanboard-sdk

Python SDK for the Kanboard JSON-RPC API — typed models, structured exceptions, and complete coverage of all 158 API methods.

Python 3.11+ License: MIT

Installation

pip install kanboard-sdk

Quick Start

from kanboard import KanboardClient

with KanboardClient(url="https://kanboard.example.com/jsonrpc.php",
                     token="your-api-token") as kb:
    # Create a project
    project_id = kb.projects.create_project(name="My Project")

    # Create a task
    task_id = kb.tasks.create_task(
        title="Implement feature X",
        project_id=project_id,
        color_id="green",
        priority=2,
    )

    # Get all active tasks
    tasks = kb.tasks.get_all_tasks(project_id, status_id=1)
    for task in tasks:
        print(f"#{task.id} [{task.color_id}] {task.title}")

Features

  • Complete API coverage — All 158 Kanboard JSON-RPC methods across 24 resource categories
  • Typed models — Dataclass response models with from_api() factory methods that handle Kanboard's type inconsistencies
  • Structured exceptions — KanboardAuthError, KanboardNotFoundError, KanboardAPIError, etc. with rich context
  • Resource-based access — client.tasks, client.projects, client.columns, etc.
  • Context manager — KanboardClient supports with statements for clean resource management
  • Batch calls — client.batch() for sending multiple JSON-RPC requests in one HTTP round-trip
  • Cross-project orchestration — Portfolio management, milestones, dependency analysis, and critical-path computation via kanboard.orchestration
  • Minimal dependencies — Only httpx

Resource Categories

Accessor Methods Description
client.tasks 14 Task CRUD, search, move, duplicate
client.projects 14 Project CRUD, enable/disable, activity
client.board 1 Full board view (columns → swimlanes → tasks)
client.columns 6 Column management and positioning
client.swimlanes 11 Swimlane management
client.comments 5 Task comments
client.categories 5 Project categories
client.tags 7 Global and project tags
client.subtasks 5 Subtask management
client.users 10 User administration
client.links 7 Link type definitions
client.task_links 5 Internal task-to-task links
client.external_task_links 7 External URL links on tasks
client.groups 5 Group management
client.group_members 5 Group membership
client.actions 6 Automatic action configuration
client.project_files 6 Project file attachments
client.task_files 6 Task file attachments
client.project_metadata 4 Project key-value metadata
client.task_metadata 4 Task key-value metadata
client.project_permissions 9 Project user/group permissions
client.subtask_time_tracking 4 Subtask time tracking
client.me 7 Current user (requires user auth)
client.application 7 Application info (version, colors, roles)
client.portfolios 18 Portfolio plugin — portfolio CRUD, project membership, dependency queries (requires plugin)
client.milestones 10 Portfolio plugin — milestone CRUD, task membership, progress (requires plugin)

Exception Hierarchy

KanboardError (base)
├── KanboardConfigError          # Missing/invalid configuration
├── KanboardConnectionError      # Network/connection failures
├── KanboardAuthError            # HTTP 401/403, invalid credentials
├── KanboardAPIError             # JSON-RPC error responses
│   ├── KanboardNotFoundError    # Resource not found (null response)
│   └── KanboardValidationError  # Invalid parameters
└── KanboardResponseError        # Malformed/unparseable responses

Configuration

KanboardClient accepts URL and token directly, or use KanboardConfig.resolve() for layered config resolution (TOML file → environment variables → explicit args):

from kanboard import KanboardClient, KanboardConfig

# Direct
client = KanboardClient(url="...", token="...")

# From config file / env vars
config = KanboardConfig.resolve()
client = KanboardClient(url=config.url, token=config.token)

Environment Variables

Variable Purpose
KANBOARD_URL JSON-RPC endpoint
KANBOARD_TOKEN API token
KANBOARD_PROFILE Active config profile
KANBOARD_OUTPUT_FORMAT Default output format
KANBOARD_AUTH_MODE app (token) or user (username/password)
KANBOARD_USERNAME Username (user auth mode)
KANBOARD_PASSWORD Password (user auth mode)
KANBOARD_PORTFOLIO_BACKEND local (JSON file) or remote (plugin API)

Portfolio Backend (Orchestration)

The orchestration layer (PortfolioManager, DependencyAnalyzer) supports two storage backends. Select via KanboardConfig or the create_backend() factory:

from kanboard import KanboardClient, KanboardConfig, create_backend
from kanboard.orchestration import PortfolioManager

config = KanboardConfig.resolve()  # reads portfolio_backend from env/config file

with KanboardClient(url=config.url, token=config.token) as kb:
    backend = create_backend(config.portfolio_backend, client=kb)
    manager = PortfolioManager(kb, backend)
    tasks = manager.get_portfolio_tasks("My Portfolio")
  • "local" (default) — data stored in ~/.config/kanboard/portfolios.json; no plugin required; machine-local only
  • "remote" — data stored server-side via the Kanboard Portfolio plugin; shared across all users

CLI Companion

For a full command-line interface built on this SDK, install kanboard-cli:

pip install kanboard-cli

Documentation

  • SDK Guide — Full usage guide with examples for every resource
  • Configuration — Config file, env vars, and profiles
  • API Reference — Complete Kanboard JSON-RPC method signatures

License

MIT

Metadata

Release files for kanboard-sdk 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kanboard-sdk 1.2.1
File Size Uploaded
kanboard_sdk-1.2.1.tar.gz 4.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for kanboard-sdk 1.2.1
File Interpreter ABI Platform
kanboard_sdk-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 85.3 kB

Release files / kanboard_sdk-1.2.1.tar.gz

Download URL kanboard_sdk-1.2.1.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
fc0180df5e8a337801f12b5070e061c201c8ee1abf32b05b751a44733e43f5e3
BLAKE2b-256 checksum
How to use checksums
8f3e7b1cebb89769e96fd984f7e93cf057989182382789938defc584938aaab8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 24, 2026.

Transparency log

Release files / kanboard_sdk-1.2.1-py3-none-any.whl

Download URL kanboard_sdk-1.2.1-py3-none-any.whl
Size 80.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0470d2b7c7379ae05e212325cca9ef226980a33423dbf20e89b216eb5f3603ca
BLAKE2b-256 checksum
How to use checksums
62aba24ca5a5ea36512c6e5b240a798809afdd298148732d73e18e83a9b8113b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page