API Documentation

Integrate your tools with FlowBoard using our REST API.

Quick Start

  1. Sign in to FlowBoard and go to Settings → Integrations
  2. Generate an API key with the permissions you need
  3. Include the key in every request as a Bearer token

Authentication

All API requests require a valid API key passed via the Authorization header:

Authorization: Bearer YOUR_API_KEY

Rate limit: 100 requests per minute per API key. Exceeding this returns HTTP 429.

Base URL

https://europe-west3-flowwboard.cloudfunctions.net

Endpoints

POST/submitTask

Permission: Submit Ideas or Submit Bugs

Request Body

{
  "title": "Task title (3-200 characters)",
  "description": "Task description (0-5000 characters)",
  "type": "idea" | "bug" | "feature" | "improvement" | "fix" | "chore",
  "projectId": "optional, required for feature/improvement/fix/chore",
  "tags": ["optional", "array", "of", "tags"],
  "metadata": { "custom": "data" }
}

Response (201 Created)

{
  "id": "task-id",
  "taskNumber": 123,
  "message": "Idea submitted successfully"
}

Example

curl -X POST https://europe-west3-flowwboard.cloudfunctions.net/submitTask \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Add dark mode support",
    "description": "Users want a dark mode option.",
    "type": "idea",
    "tags": ["ui", "feature-request"]
  }'
GET/getTasks

Permission: Search Tasks

Query Parameters

ParameterTypeDescription
boardstring"bugs", "ideas", or "flows"
projectIdstringFilter by project ID
projectNamestringFilter by project name (case-sensitive)
tagsstringComma-separated tags (AND logic)
statusstringopen, in_progress, blocked, ready, done, paused
statusesstringComma-separated statuses (OR logic)
assigneestringFilter by assignee user ID
typestringfeature, improvement, fix, chore, bug
typesstringComma-separated types
limitnumberMax results (default: 100, max: 500)
excludeReleasedbooleanExclude released tasks (default: true)
excludeArchivedbooleanExclude archived tasks (default: true)
includeDeletedbooleanInclude deleted tasks (default: false)

Response (200 OK)

{
  "tasks": [
    {
      "id": "task-id",
      "taskNumber": "123",
      "title": "Task title",
      "status": "open",
      "type": "feature",
      "tags": ["client-acme"],
      "projectId": "proj123",
      "assignee": "user123",
      "createdAt": "2024-01-01T00:00:00.000Z"
    }
  ],
  "count": 1,
  "filters": { ... }
}
GET/getTask?taskId={taskId}

Permission: Search Tasks

Response (200 OK)

{
  "task": {
    "id": "task-id",
    "title": "Task title",
    "description": "Task description",
    "status": "open",
    "type": "feature",
    "tags": ["ui"],
    "taskNumber": "123"
  },
  "comments": [
    {
      "id": "comment-id",
      "text": "Comment text",
      "createdBy": "user123",
      "createdAt": "2024-01-01T00:00:00.000Z"
    }
  ]
}
PATCH/updateTask?taskId={taskId}

Permission: Update Tasks

Request Body (all optional, at least one required)

{
  "status": "open" | "in_progress" | "blocked" | "ready" | "done" | "paused",
  "comment": "Add a comment (1-5000 characters)",
  "assignee": "userId or empty string to clear",
  "branchName": "feature/my-branch (0-200 characters)",
  "externalReference": {
    "type": "github_pr",
    "url": "https://github.com/...",
    "id": "optional",
    "title": "optional"
  }
}

Response (200 OK)

{
  "success": true,
  "taskId": "task-id",
  "message": "Task updated successfully"
}
DELETE/deleteTask?taskId={taskId}

Permission: Update Tasks

Soft-deletes a task. The task can be restored from the Trash.

GET/listProjects

Permission: View Projects

Returns all projects in the workspace with their IDs, names, and descriptions.

GET/getComments?taskId={taskId}

Permission: Manage Comments

Returns all comments for a given task, ordered by creation date.

POST/addComment

Permission: Manage Comments

Request Body

{
  "taskId": "task-id",
  "text": "Comment text (1-5000 characters)"
}
GET/listReleases

Permission: Search Tasks

Returns all releases in the workspace with version, date, and included tasks.

GET/getRelease?releaseId={releaseId}

Permission: Search Tasks

Returns a single release with full details including all associated tasks.

POST/voteIdea

Permission: Submit Ideas

Request Body

{
  "ideaId": "idea-id"
}

MCP Server (AI Tools)

Connect AI tools like Claude Code, Cursor, and Windsurf to FlowBoard via our MCP server. Add this to your tool's MCP configuration:

macOS / Linux:

{
  "mcpServers": {
    "flowboard": {
      "command": "npx",
      "args": ["-y", "@flowboardlabs/mcp-server"],
      "env": { "FLOWBOARD_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Windows:

{
  "mcpServers": {
    "flowboard": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "@flowboardlabs/mcp-server"],
      "env": { "FLOWBOARD_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Error Codes

CodeDescription
400Bad Request — Missing or invalid parameters
401Unauthorized — Missing or invalid API key
403Forbidden — API key lacks the required permission
404Not Found — Task or resource not found
429Too Many Requests — Rate limit exceeded (100 req/min)
500Internal Server Error

Need Help?

Check out the MCP Server guide for AI tool integration, or the GitHub/GitLab integration guide for webhook setup. For questions, contact support@flowboard.dev.