REST API for automating projects, tasks, and comments. Authenticate with your company API key.
Every request must include your company API key in the X-API-Key header. Keys are scoped to your company — you can only read and write your own data.
X-API-Key: your-api-key-here Content-Type: application/json
Your API key is shown in the welcome email and on the Admin panel. Keep it private — it grants full read/write access to your company's projects and tasks.
Returns all projects for your company, ordered by last updated.
[
{
"id": 11,
"name": "JWN - All",
"description": "Main project board",
"status": "active",
"client": "JWN",
"created_at": "2025-01-10 09:00:00",
"updated_at": "2026-06-01 14:22:00"
}
]
Creates a new project.
| Field | Type | Notes |
|---|---|---|
name required | string | Project name |
description | string | Optional description |
status | string | active · on-hold · completed · archived (default: active) |
client | string | Client label, e.g. JWN |
{
"name": "Q3 Marketing Campaign",
"description": "All tasks for the Q3 push",
"status": "active",
"client": "JWN"
}
{ "id": 14, "message": "Project created" }
Returns all tasks for a project. Omit project_id to get tasks across all projects.
[
{
"id": 42,
"project_id": 11,
"title": "Review contract",
"description": null,
"status": "todo",
"priority": "high",
"due_date": "2026-06-20",
"created_at": "2026-06-10 08:00:00",
"updated_at": "2026-06-10 08:00:00"
}
]
Creates a new task inside a project.
| Field | Type | Notes |
|---|---|---|
project_id required | integer | Parent project ID |
title required | string | Task title |
description | string | Optional detail |
status | string | todo · in-progress · blocked · done (default: todo) |
priority | string | low · normal · high · urgent (default: normal) |
due_date | string | ISO date: YYYY-MM-DD |
{
"project_id": 11,
"title": "Review contract",
"priority": "high",
"status": "todo",
"due_date": "2026-06-20"
}
{ "id": 42, "message": "Task created" }
Updates one or more fields on an existing task. Only include fields you want to change.
| Field | Type | Notes |
|---|---|---|
id required | integer | Task ID to update |
title | string | |
description | string | |
status | string | todo · in-progress · blocked · done |
priority | string | low · normal · high · urgent |
due_date | string | YYYY-MM-DD |
{
"id": 42,
"status": "in-progress",
"priority": "urgent"
}
{ "message": "Task updated" }
Use these prompts with Claude or any AI assistant that has access to the Hub API.
"Create a task called 'Review contract' with priority high in project 11"
"Update task 42 to status 'in-progress'"
"List all blocked tasks in project 11"
"Add comment to task 99: 'Ready for review'"
"Create these 5 tasks in project 11, all priority normal: onboarding docs, schedule kickoff, send contract, set up repo, create Slack channel"
"Give me a summary of all open tasks across all projects, grouped by priority"
| Code | Meaning |
|---|---|
| 200 | Success — request completed, data returned |
| 201 | Created — resource was successfully created |
| 400 | Bad request — missing required field or invalid value |
| 401 | Unauthorized — missing or invalid API key |
| 404 | Not found — resource doesn't exist or belongs to another company |
Error responses always return a JSON object with an error field:
{ "error": "Missing required field: title" }
Comments
Returns all comments on a task, ordered oldest first.
[ { "id": 7, "task_id": 42, "author": "Bill", "body": "Ready for review", "created_at": "2026-06-11 10:30:00" } ]Adds a comment to a task.
task_idrequiredauthorrequiredBillorClaudebodyrequired{ "task_id": 42, "author": "Bill", "body": "Ready for review" }{ "id": 8, "message": "Comment added" }