Krokanti Tasks
REST API

Krokanti Tasks API

Automate your task management workflow. Integrate Krokanti Tasks with your tools using personal API tokens and a simple REST API.

Base URL:https://tasks.krokanti.com/api
Rate limit:100 req/min per token

Pro or Team plan required

API access is available on Pro and Team plans. Generate your tokens in Settings → API Tokens.

Upgrade your plan →

Authentication

All API requests must include an Authorization header with a personal API token. Generate tokens in Settings → API Tokens. Tokens start with kt_ and are shown once on creation.

curl https://tasks.krokanti.com/api/spaces 
  -H "Authorization: Bearer kt_your_token_here" 
  -H "Content-Type: application/json"
Security note: Tokens cannot manage other tokens (session authentication required). Store tokens securely — treat them like passwords.

Spaces

GET/api/spaces

List all spaces the authenticated user belongs to.

  • Returns an array of space objects including personal space.
POST/api/spaces

Create a new team space.

ParameterTypeDescription
namerequiredstringSpace display name.
slugrequiredstringUnique URL-friendly identifier (3-50 chars, a-z 0-9 -).
descriptionstringOptional description.
colorstringHex color for the space icon.
  • The authenticated user becomes the space owner with Owner role.
  • A default General project with statuses is created automatically.

Projects

GET/api/projects

List all projects in a space.

ParameterTypeDescription
spaceIdrequiredstring (UUID)The space ID to list projects for.
POST/api/projects

Create a new project in a space.

ParameterTypeDescription
spaceIdrequiredstring (UUID)The space to create the project in.
namerequiredstringProject display name.
slugrequiredstringURL-friendly identifier, unique within the space.
descriptionstringOptional description.
defaultViewkanban | list | calendar | ganttDefault view mode.
colorstringHex color.
  • Requires Owner, Admin, or Member role in the space.
  • Default Kanban statuses are created automatically.
PATCH/api/projects/:id

Update project settings.

ParameterTypeDescription
idrequiredstring (UUID)Project ID.
namestringNew display name.
slugstringNew slug (must be unique within space).
descriptionstring | nullProject description.
defaultViewkanban | list | calendar | ganttDefault view.
  • Requires Owner or Admin role in the space.
DELETE/api/projects/:id

Archive a project (soft delete). Requires Owner or Admin role.

ParameterTypeDescription
idrequiredstring (UUID)Project ID.

Tasks

GET/api/tasks

List all active tasks in a project.

ParameterTypeDescription
projectIdrequiredstring (UUID)The project ID to list tasks for.
archivedbooleanSet to true to list archived tasks instead.
POST/api/tasks

Create a new task in a project.

ParameterTypeDescription
projectIdrequiredstring (UUID)Project to create the task in.
titlerequiredstringTask title.
statusIdstring (UUID) | nullStatus column for the task.
prioritynone | low | medium | high | urgentTask priority.
dueDatestring (ISO 8601)Due date.
parentTaskIdstring (UUID) | nullParent task for subtasks.
  • Requires at least Member role in the space (not Viewer).
  • Position is assigned automatically at the end of the status column.
PATCH/api/tasks/:id

Update a task. All fields optional — only provided fields are changed.

ParameterTypeDescription
idrequiredstring (UUID)Task ID.
titlestringNew title.
statusIdstring (UUID) | nullMove to a different status column.
prioritynone | low | medium | high | urgentPriority.
dueDatestring (ISO 8601) | nullDue date.
completedAtstring (ISO 8601) | nullMark done (ISO date) or reopen (null).
isArchivedbooleanArchive or restore the task.
estimatedHoursnumber | nullTime estimate in hours.
  • Requires at least Member role (not Viewer).
  • Setting completedAt to an ISO date marks the task as done.
DELETE/api/tasks/:id

Permanently delete a task. Requires Owner, Admin, or task creator.

ParameterTypeDescription
idrequiredstring (UUID)Task ID.

Error codes

Error responses include an error field. Some errors also include a machine-readable code field.

StatusMeaningCommon cause
400Bad RequestMissing or invalid fields in the request body.
401UnauthorizedMissing or invalid API token.
402Payment RequiredAPI access requires a Pro or Team plan.
403ForbiddenInsufficient role (Viewer trying to write, non-owner deleting, etc.).
404Not FoundThe requested resource does not exist.
409ConflictSlug already taken within this space.
429Too Many RequestsExceeded 100 requests per minute per token.
// Error response body
{ "error": "Unauthorized" }

// With machine-readable subcode
{ "error": "API access requires a Pro or Team plan", "code": "pro_required" }

Rate limits

API token requests are limited to 100 requests per minute per token. Session-based requests (from the web app) are not rate limited.

When you exceed the limit you receive 429 Too Many Requests. The response includes a Retry-After header indicating how many seconds to wait before retrying.

HTTP/1.1 429 Too Many Requests
Retry-After: 42
Content-Type: application/json

{ "error": "Rate limit exceeded" }

Code examples

Replace kt_your_token_here with your actual token.

cURL

# List your spaces
curl "https://tasks.krokanti.com/api/spaces" 
  -H "Authorization: Bearer kt_your_token_here"

# List projects in a space
curl "https://tasks.krokanti.com/api/projects?spaceId=SPACE_ID" 
  -H "Authorization: Bearer kt_your_token_here"

# List tasks in a project
curl "https://tasks.krokanti.com/api/tasks?projectId=PROJECT_ID" 
  -H "Authorization: Bearer kt_your_token_here"

# Create a task
curl -X POST "https://tasks.krokanti.com/api/tasks" 
  -H "Authorization: Bearer kt_your_token_here" 
  -H "Content-Type: application/json" 
  -d '{ "projectId": "PROJECT_ID", "title": "My new task", "priority": "high" }'

# Complete a task
curl -X PATCH "https://tasks.krokanti.com/api/tasks/TASK_ID" 
  -H "Authorization: Bearer kt_your_token_here" 
  -H "Content-Type: application/json" 
  -d '{ "completedAt": "2026-02-22T10:00:00.000Z" }'

JavaScript / Node

const BASE = "https://tasks.krokanti.com/api";
const TOKEN = "kt_your_token_here";
const headers = {
  Authorization: `Bearer ${TOKEN}`,
  "Content-Type": "application/json",
};

// List spaces
const spaces = await fetch(`${BASE}/spaces`, { headers }).then(r => r.json());

// List projects in first space
const projects = await fetch(
  `${BASE}/projects?spaceId=${spaces[0].id}`,
  { headers }
).then(r => r.json());

// Create a task
const { task } = await fetch(`${BASE}/tasks`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    projectId: projects[0].id,
    title: "Review pull request",
    priority: "high",
    dueDate: new Date(Date.now() + 86400000).toISOString(),
  }),
}).then(r => r.json());

// Mark it done
await fetch(`${BASE}/tasks/${task.id}`, {
  method: "PATCH",
  headers,
  body: JSON.stringify({ completedAt: new Date().toISOString() }),
});

Python

import requests
from datetime import datetime, timedelta, timezone

BASE = "https://tasks.krokanti.com/api"
TOKEN = "kt_your_token_here"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

# List spaces
spaces = requests.get(f"{BASE}/spaces", headers=HEADERS).json()

# List projects
projects = requests.get(
    f"{BASE}/projects", headers=HEADERS,
    params={"spaceId": spaces[0]["id"]}
).json()

# Create a task
tomorrow = (datetime.now(timezone.utc) + timedelta(days=1)).isoformat()
resp = requests.post(f"{BASE}/tasks", headers=HEADERS, json={
    "projectId": projects[0]["id"],
    "title": "Deploy new release",
    "priority": "urgent",
    "dueDate": tomorrow,
})
task = resp.json()["task"]
print(f"Created task: {task['id']}")

# Complete the task
requests.patch(f"{BASE}/tasks/{task['id']}", headers=HEADERS, json={
    "completedAt": datetime.now(timezone.utc).isoformat()
})

MCP — AI Integration

Krokanti Tasks ships with a built-in MCP (Model Context Protocol) server. Connect Claude Code, Claude Desktop, or Cursor to your tasks and let AI create, update, and query tasks on your behalf — using the same API token.

Claude Code

Create a .mcp.json file in the root of your project (or add to an existing one):

// .mcp.json (project root)
{
  "mcpServers": {
    "krokanti-tasks": {
      "type": "http",
      "url": "https://tasks.krokanti.com/api/mcp",
      "headers": {
        "Authorization": "Bearer kt_your_token_here"
      }
    }
  }
}

Claude Code also needs the server enabled. Create .claude/settings.local.json in the same directory:

// .claude/settings.local.json
{
  "enableAllProjectMcpServers": true,
  "enabledMcpjsonServers": ["krokanti-tasks"]
}

Claude Desktop

Add to your Claude Desktop configuration file. On macOS the file is at ~/Library/Application Support/Claude/claude_desktop_config.json. On Windows: %APPDATA%\Claude\claude_desktop_config.json.

// claude_desktop_config.json
{
  "mcpServers": {
    "krokanti-tasks": {
      "command": "npx",
      "args": [
        "mcp-remote@latest",
        "https://tasks.krokanti.com/api/mcp",
        "--header",
        "Authorization: Bearer kt_your_token_here"
      ]
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root (project-level) or ~/.cursor/mcp.json for global access:

// .cursor/mcp.json  (or ~/.cursor/mcp.json for global)
{
  "mcpServers": {
    "krokanti-tasks": {
      "type": "http",
      "url": "https://tasks.krokanti.com/api/mcp",
      "headers": {
        "Authorization": "Bearer kt_your_token_here"
      }
    }
  }
}

Available tools

ToolDescriptionKey inputs
list_spacesList all spaces the user belongs to
list_projectsList projects in a spacespaceId
list_statusesList status columns in a projectprojectId
list_tasksList tasks in a project (lean summary)projectId
get_taskFull task detail including commentstaskId
create_taskCreate a new taskprojectId, title, statusId?, priority?, dueDate?
update_taskUpdate title, status, priority, due date, hourstaskId + fields to change
complete_taskMark done or reopen a tasktaskId, reopen?
add_commentAdd a comment to a tasktaskId, content
assign_taskAssign a space member to a tasktaskId, userId

All write operations (create, update, complete, add_comment, assign) require at least Member role in the space. Viewer role is read-only.

Built-in prompts

PromptDescriptionInputs
plan_sprintReview a project and suggest a prioritized sprint planprojectId, goal?
daily_standupGenerate a done/in-progress/next/blockers reportprojectId, userName?

Prompts guide the AI to use multiple tools together for common workflows.