Skip to content

Tasks ​

The Tasks API manages tasks inside a board: listing and filtering, creating, updating single properties, moving, pinning, cloning, archiving, bulk operations and cover images. Task dependencies and recurring tasks (Pro) are documented at the end of this page. Plugin source: free (dependencies and recurring tasks: Pro).

All routes on this page use the board-level permission check: any board member can read, and board members who are not "viewer only" can write. Exceptions are noted per endpoint.

Subtasks, comments and attachments have their own pages: Subtasks, Comments, Attachments. Cross-board task utilities (dashboard lists, task tabs, global search) are on Dashboard & Global Utilities.

Endpoints ​

MethodEndpointDescription
GET/projects/{board_id}/tasksList all tasks of a board
GET/projects/{board_id}/tasks/by-stageFirst page of tasks for every stage
GET/projects/{board_id}/tasks/stage-pageCursor-paginated tasks of one stage
GET/projects/{board_id}/tasks/filteredFiltered board tasks
GET/projects/{board_id}/tasks/tablePaginated, sortable table view
GET/projects/{board_id}/archived-tasksList archived tasks
GET/projects/{board_id}/tasks/archivedList archived tasks (alias)
GET/projects/{board_id}/tasks/{task_id}Get a single task
POST/projects/{board_id}/tasksCreate a task
POST/projects/{board_id}/tasks/create-task-from-imageCreate a task from an uploaded image
PUT/projects/{board_id}/tasks/{task_id}Update one task property
POST/projects/{board_id}/tasks/{task_id}/datesUpdate start/due/reminder dates
PUT/projects/{board_id}/tasks/{task_id}/move-taskMove a task to a stage, position or board
PUT/projects/{board_id}/tasks/{task_id}/move-to-next-stageMove a task to the next stage
PUT/projects/{board_id}/tasks/{task_id}/pinPin or unpin a task
POST/projects/{board_id}/tasks/{task_id}/clone-taskClone a task
POST/projects/{board_id}/tasks/{task_id}/assign-yourselfToggle yourself as assignee
POST/projects/{board_id}/tasks/{task_id}/detach-yourselfToggle yourself as assignee
POST/projects/{board_id}/tasks/bulk-actionsRun a bulk action on tasks
PUT/projects/{board_id}/bulk-restore-tasksRestore archived tasks in bulk
DELETE/projects/{board_id}/bulk-delete-tasksDelete tasks in bulk
DELETE/projects/{board_id}/tasks/{task_id}Delete a task
POST/projects/{board_id}/tasks/{task_id}/task-cover-image-uploadUpload a cover image
POST/projects/{board_id}/tasks/{task_id}/remove-task-coverRemove the cover
POST/projects/{board_id}/tasks/update-cover-photo/{task_id}Set the task logo (settings.logo)
POST/projects/{board_id}/tasks/status-update/{task_id}Set settings.integration_type
POST/projects/{board_id}/tasks/{task_id}/wp-editor-media-file-uploadUpload a file for the description editor
DELETE/projects/{board_id}/tasks/{task_id}/support-ticketUnlink a Fluent Support ticket
GET/projects/{board_id}/tasks/{task_id}/activitiesTask activity log
GET/projects/{board_id}/dependenciesAll dependencies of a board (Pro)
GET/projects/{board_id}/tasks/{task_id}/dependenciesPredecessors and successors of a task (Pro)
POST/projects/{board_id}/tasks/{task_id}/dependenciesAdd a dependency (Pro)
DELETE/projects/{board_id}/tasks/{task_id}/dependencies/{related_task_id}Remove a dependency (Pro)
POST/projects/{board_id}/tasks/{task_id}/create-repeat-taskCreate or update a recurring rule (Pro)
DELETE/projects/{board_id}/tasks/{task_id}/remove-repeat-taskStop a recurring task (Pro)

Task Object ​

Tasks are rows of fbs_tasks. Key fields:

FieldTypeDescription
idintegerTask ID
parent_idinteger|nullParent task ID (set for subtasks)
board_idintegerBoard ID
stage_idinteger|nullStage ID (null for subtasks)
crm_contact_idinteger|nullLinked FluentCRM contact
title, slugstringTitle and slug
typestringtask, or roadmap on roadmap boards
statusstringopen or closed
prioritystringlow, medium, high, urgent, or empty
descriptionstringDescription (HTML)
positionnumberSort position inside the stage
started_at, due_at, remind_atstring|nullDates (Y-m-d H:i:s)
reminder_typestring|nullReminder preset (Pro)
last_completed_at, archived_atstring|nullCompletion / archive timestamps
source, source_idstring|nullOrigin of the task (for example a Fluent Support ticket)
settingsobjectCover, counters (subtask_count, attachment_count, subtask_completed_count) and integration data
metaobjectAppended task meta (for example is_template, subtask_group_id)
repeat_task_metaobject|nullAppended recurring rule (Pro)
is_pinnedbooleanAppended pin state

List endpoints also add computed keys such as isOverdue, isUpcoming, is_watching, notifications (unread count), assignees, labels and watchers.

List Tasks ​

Returns every top-level task (no subtasks) in the board's active stages, ordered by due_at. synced_at is the server time captured before the read; pass it later as last_boards_updated to Move a Task to fetch incremental changes.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks

Parameters

ParameterTypeRequiredDescription
include_archivedbooleanNoInclude archived tasks and archived stages (default false)

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "tasks": [
    {
      "id": 1,
      "title": "Design Homepage",
      "slug": "design-homepage",
      "board_id": 3,
      "stage_id": 30,
      "status": "closed",
      "priority": "low",
      "position": "17.00",
      "created_by": 1,
      "meta": {
        "is_template": "no"
      },
      "isOverdue": false,
      "isUpcoming": false,
      "is_watching": true,
      "notifications": 0,
      "assignees": [],
      "labels": [],
      "watchers": []
    }
  ],
  "synced_at": "2025-08-06 09:36:40"
}

List Tasks by Stage ​

Returns the first 20 tasks of every active stage plus per-stage cursor information. Use Get a Stage Page to load more.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/by-stage

Parameters

ParameterTypeRequiredDescription
include_archivedbooleanNoInclude archived tasks and stages

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/by-stage" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "tasks": [
    { "id": 12, "title": "Write copy", "stage_id": 25, "position": "1.00" }
  ],
  "pagination_by_stage": {
    "25": {
      "stage_id": 25,
      "total_count": 34,
      "limit": 20,
      "direction": "next",
      "cursor": null,
      "has_more": true,
      "has_more_before": false,
      "has_more_after": true,
      "start_cursor": 1,
      "end_cursor": 20
    }
  },
  "synced_at": "2025-08-06 09:36:40"
}

Get a Stage Page ​

Cursor-based pagination of the tasks in a single stage. The cursor is a task position.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/stage-page

Parameters

ParameterTypeRequiredDescription
stage_idintegerYesStage to read (must belong to the board)
limitintegerNoPage size, 1–100 (default 20)
directionstringNonext (positions after the cursor, default) or prev
cursornumberNoPosition to page from; omit for the first page
include_archivedbooleanNoInclude archived tasks

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/stage-page?stage_id=25&cursor=20&limit=20" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "tasks": [
    { "id": 40, "title": "Review copy", "stage_id": 25, "position": "21.00" }
  ],
  "pagination": {
    "stage_id": 25,
    "limit": 20,
    "direction": "next",
    "cursor": 20,
    "has_more": false,
    "has_more_before": true,
    "has_more_after": false,
    "start_cursor": 21,
    "end_cursor": 34
  }
}

Errors: 400 "Invalid Stage" when stage_id is missing, 400 "Invalid direction", 404 "Stage not found".

Filter Board Tasks ​

Returns all top-level tasks that match the filters, ordered by stage and position. Array filters accept either an array or a single value.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/filtered

Parameters

ParameterTypeRequiredDescription
searchstringNoTitle search. id:123 searches by task ID
include_archivedbooleanNoInclude archived tasks
stagearrayNoStage IDs; archived matches tasks in archived stages
task_statusarrayNoopen, closed, archived
priorityarrayNolow, medium, high, urgent; an empty string matches "no priority"
assigneearrayNoUser IDs; no-assignee matches unassigned tasks
labelsarrayNoLabel IDs; no-label matches tasks without labels
watchersarrayNoUser IDs
contactarrayNoFluentCRM contact IDs
custom_fieldsarrayNoCustom field IDs (tasks that have a value); no-custom-field
due_datearrayNooverdue, no-dates, today, this-week, next-week, this-month, upcoming

Example Request

bash
curl -G "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/filtered" \
  --data-urlencode "priority[]=high" \
  --data-urlencode "due_date[]=overdue" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "tasks": [
    { "id": 85, "title": "Fix login bug", "priority": "high", "isOverdue": true }
  ]
}

List Table Tasks ​

Paginated, sortable variant of Filter Board Tasks used by the table view. Accepts every filter of that endpoint plus the parameters below.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/table

Parameters

ParameterTypeRequiredDescription
pageintegerNoPage number (default 1)
per_pageintegerNoItems per page, 1–150 (default 20)
sort_bystringNotitle, status, stage_id, priority, due_at, created_at, updated_at, position (default); vote_statistics on roadmap boards
sort_directionstringNoasc (default) or desc

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/table?page=1&per_page=20&sort_by=due_at&sort_direction=desc" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "items": [
    { "id": 85, "title": "Fix login bug", "status": "open", "due_at": "2025-08-10 17:00:00" }
  ],
  "pagination": {
    "total": 42,
    "current_page": 1,
    "per_page": 20,
    "last_page": 3
  }
}

List Archived Tasks ​

Returns archived tasks of the board, newest first, with who archived them. Both paths run the same handler.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/archived-tasks
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/archived

Parameters

ParameterTypeRequiredDescription
pageintegerNoPage number (default 1)
per_pageintegerNoItems per page, 1–50 (default 20)
searchInputstringNoTitle search; id:123 searches by ID

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/archived-tasks?page=1&per_page=20" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "tasks": {
    "current_page": 1,
    "data": [
      {
        "id": 77,
        "title": "Old campaign",
        "archived_at": "2025-07-01 10:00:00",
        "archived_by_id": 1,
        "archived_by": { "ID": 1, "display_name": "John Doe", "photo": "https://..." },
        "assignees": []
      }
    ],
    "per_page": 20,
    "total": 1,
    "last_page": 1
  }
}

Get a Task ​

Returns one task with its board (including board.stages), stage, labels, assignees, watchers, CRM contact and, with Pro, attachments. If task_id is a subtask, the parent task is returned.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/1" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "task": {
    "id": 1,
    "title": "Design Homepage",
    "slug": "design-homepage",
    "board_id": 3,
    "stage_id": 25,
    "status": "open",
    "priority": "low",
    "description": "<p>Create new homepage design</p>",
    "created_by": 1,
    "position": "23.00",
    "settings": {
      "subtask_count": 5,
      "attachment_count": 1,
      "subtask_completed_count": 2
    },
    "due_at": "2025-07-04 23:45:00",
    "isOverdue": true,
    "is_watching": true,
    "contact": null,
    "nextStage": "In Progress",
    "meta": {
      "is_template": "no"
    },
    "assignees": [
      { "ID": 1, "display_name": "John Doe", "photo": "https://..." }
    ],
    "watchers": [],
    "attachments": [
      { "id": 24, "title": "document.csv", "file_size": "2 KB" }
    ],
    "board": {
      "id": 3,
      "title": "Sample Board",
      "type": "to-do",
      "stages": []
    },
    "stage": {
      "id": 25,
      "title": "Planned"
    },
    "labels": [
      { "id": 38, "title": "later", "bg_color": "#658ca5" }
    ]
  }
}

On roadmap boards the task also has vote_statistics.

Create a Task ​

Creates a top-level task. All fields go inside a task object. The task status is taken from the target stage's default status, and the task is added at the end of the stage.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks

Parameters

ParameterTypeRequiredDescription
task[title]stringYesTask title
task[board_id]integerYesMust equal {board_id} in the path
task[stage_id]integerYesStage ID on this board
task[priority]stringNolow, medium, high, urgent (empty by default)
task[crm_contact_id]integerNoFluentCRM contact ID
task[is_template]stringNoyes to mark the task as a template
task[description]stringNoDescription (HTML or Markdown)
task[assignees]arrayNoUser IDs to assign (they also become watchers)
task[labels]arrayNoLabel IDs
task[due_at]stringNoDue date Y-m-d H:i:s
task[started_at]stringNoStart date Y-m-d H:i:s
task[settings][cover][backgroundColor]stringNoHex cover color
task[position]integerNoPosition to move the new task to

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/10/tasks" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "task": {
      "title": "New Task",
      "board_id": 10,
      "stage_id": 104,
      "priority": "high",
      "assignees": [1],
      "is_template": "no"
    }
  }'

Example Response (201)

json
{
  "task": {
    "id": 281,
    "title": "New Task",
    "slug": "new-task",
    "board_id": 10,
    "stage_id": 104,
    "status": "open",
    "priority": "high",
    "position": 1,
    "created_by": 1,
    "type": "task",
    "settings": null,
    "meta": [],
    "repeat_task_meta": null,
    "assignees": [],
    "labels": [],
    "board": {}
  },
  "message": "Task has been successfully created",
  "updatedTasks": []
}

updatedTasks contains tasks on the board that changed in the last minute. On roadmap boards the message is "Idea has been successfully created".

Create a Task from an Image ​

Uploads an image and creates a task from it in the given stage.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/create-task-from-image

Parameters

ParameterTypeRequiredDescription
stage_idintegerYesStage on this board
filefileYesImage file (multipart)

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/create-task-from-image" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -F "stage_id=25" \
  -F "file=@/path/to/screenshot.png"

Example Response

json
{
  "task": { "id": 290, "title": "screenshot.png", "stage_id": 25 },
  "updatedTasks": [],
  "message": "Task has been created"
}

Update a Task Property ​

Updates one property per request. Send the property name in property and the new value in value.

http
PUT /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}

Parameters

ParameterTypeRequiredDescription
propertystringYesName of the property to change (see table below)
valuemixedDependsNew value; format depends on property

Accepted properties

Any other property returns an "Invalid property" error.

propertyvalueBehavior
titlestring (required)Renames the task
descriptionstringReplaces the description (HTML/Markdown, sanitized)
statusopen | closedclosed completes the task; any other value reopens it
last_completed_at"true" | "false""true" completes the task, anything else reopens it
prioritystringlow, medium, high, urgent or empty
due_atY-m-d H:i:s | nullSets or clears the due date. Changing it reopens a closed task
started_atY-m-d H:i:s | nullSets or clears the start date (always null for subtasks)
remind_atY-m-d H:i:s | nullReminder time
reminder_typestringPro only. One of 30_minutes_before, 1_hour_before, 2_hours_before, 1_day_before, 2_days_before, 1_week_before; unknown values clear it
assigneesinteger or integer[]Toggles each user ID: adds it if not assigned, removes it if already assigned
is_watchingstart | stop, or { "userId": 5, "action": "start" }Starts/stops watching for the current user, or for userId
crm_contact_idinteger | nullLinks or unlinks a FluentCRM contact
archived_atany non-empty value | nullNon-empty archives the task (timestamp set by the server); null/empty restores it (fails if its stage is archived)
parent_idintegerMakes the task a subtask of another task on the same board
is_templateyes | noPro only. Marks the task as a template
settingsobjectReplaces the whole settings object. Setting cover.backgroundColor removes any cover image
typestringSets the task type
sourcestringSets the source column
log_minutesintegerSets the logged minutes column
board_idintegerMust equal the current board; it cannot move the task (use Move a Task)
stage_idintegerValidated (must be a stage on this board) but not applied; use Move a Task
lead_value, scope, start_at, last_completed—Accepted by validation but ignored

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/10/tasks/281" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "property": "title",
    "value": "Updated Task Title"
  }'

Toggle two assignees:

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/10/tasks/281" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "property": "assignees", "value": [2, 5] }'

Example Response

json
{
  "message": "Task has been updated",
  "task": {
    "id": 281,
    "title": "Updated Task Title",
    "slug": "new-task",
    "board_id": 10,
    "stage_id": 104,
    "status": "open",
    "priority": "low",
    "isOverdue": false,
    "isUpcoming": false,
    "contact": null,
    "is_watching": true,
    "assignees": [],
    "labels": [],
    "board": {},
    "updated_at": "2025-08-06T08:29:04+00:00"
  },
  "updatedTasks": []
}

For subtasks the returned task also has subtask_group_id; for is_watching it includes watchers.

Update Task Dates ​

Updates start date, due date and reminder fields in one call. Only the keys present in the body are changed. For top-level tasks, if started_at is after due_at, the start date is moved to the start of the due day. Subtasks never keep a start date.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/dates

Parameters

ParameterTypeRequiredDescription
started_atstring|nullNoStart date Y-m-d H:i:s
due_atstring|nullNoDue date Y-m-d H:i:s
reminder_typestring|nullNoReminder preset (see Update a Task Property)
remind_atstring|nullNoReminder time

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/dates" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "started_at": "2025-08-01 00:00:00", "due_at": "2025-08-10 17:00:00" }'

Example Response

json
{
  "task": { "id": 85, "started_at": "2025-08-01 00:00:00", "due_at": "2025-08-10 17:00:00" },
  "message": "Dates have been updated",
  "updatedTasks": []
}

Move a Task ​

Moves a task to another stage, another position, or another board. Position the task either with neighbour IDs (prevTaskId / nextTaskId, preferred) or with a 1-based newIndex.

http
PUT /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/move-task

Parameters

ParameterTypeRequiredDescription
newStageIdintegerYesTarget stage (must belong to the target board)
newIndexintegerConditional1-based position; required when no neighbour IDs are sent
prevTaskIdintegerNoTask that should end up just before the moved task
nextTaskIdintegerNoTask that should end up just after the moved task
newBoardIdintegerNoTarget board for a cross-board move; you need write access to it
last_boards_updatedstringNoTimestamp (for example a previous synced_at / last_updated) for the updatedTasks window

Moving to a stage whose default status is closed completes the task, and the stage's default assignees are applied.

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/282/move-task" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "newStageId": 96,
    "newIndex": 1,
    "newBoardId": 9
  }'

Example Response

json
{
  "message": "Task has been updated",
  "task": {
    "id": 282,
    "parent_id": null,
    "board_id": 9,
    "title": "New task",
    "slug": "new-task",
    "type": "task",
    "status": "open",
    "stage_id": 96,
    "position": 1
  },
  "updatedTasks": [],
  "last_updated": "2025-08-06 09:36:40"
}

Move a Task to the Next Stage ​

Moves the task to the stage with the next higher position. If the next stage closes tasks by default, the task is completed. Nothing changes when the task is already in the last stage.

http
PUT /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/move-to-next-stage

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/move-to-next-stage" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "task": {
    "id": 85,
    "stage_id": 26,
    "nextStage": "Done",
    "board": {},
    "stage": {},
    "attachments": []
  }
}

Pin or Unpin a Task ​

Pins or unpins a top-level task. Subtasks cannot be pinned (400).

http
PUT /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/pin

Parameters

ParameterTypeRequiredDescription
pinnedbooleanNotrue / "1" to pin, false / "0" to unpin. Not validated: omitting it is treated as false and unpins the task

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/pin" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "pinned": true }'

Example Response

json
{
  "task": { "id": 85, "is_pinned": true },
  "message": "Task has been pinned",
  "updatedTasks": []
}

Clone a Task ​

Creates a copy of a task. Boolean flags accept true/false or "true"/"false".

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/clone-task

Parameters

ParameterTypeRequiredDescription
titlestringYesTitle for the cloned task
stage_idintegerYesTarget stage ID
assigneebooleanYesCopy assignees
subtaskbooleanYesCopy subtasks (Pro)
labelbooleanYesCopy labels
attachmentbooleanYesCopy attachments (Pro)
commentbooleanYesCopy comments

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/1/clone-task" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Design Homepage (Cloned)",
    "stage_id": 29,
    "assignee": true,
    "subtask": false,
    "label": true,
    "attachment": false,
    "comment": true
  }'

Example Response

json
{
  "message": "Task has been cloned successfully",
  "task": { "id": 283, "title": "Design Homepage (Cloned)", "stage_id": 29 },
  "updatedTasks": []
}

Assign Yourself ​

Toggles the current user as an assignee: adds you (and makes you a board member if needed, plus a watcher) when you are not assigned, removes you when you are.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/assign-yourself

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/assign-yourself" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "task": {
    "id": 85,
    "is_watching": true,
    "assignees": [{ "ID": 1, "display_name": "John Doe" }]
  }
}

Detach Yourself ​

Toggles the current user's assignment off (it uses the same toggle as Assign Yourself, so calling it when you are not assigned adds you).

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/detach-yourself

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/detach-yourself" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "task": { "id": 85, "is_watching": false, "assignees": [] }
}

Bulk Actions ​

Runs one action on up to 150 tasks of the board. Extra body keys (everything except task_ids and action) are passed to the action.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/bulk-actions

Parameters

ParameterTypeRequiredDescription
task_idsinteger[]YesTask IDs on this board (max 150)
actionstringYesmove_tasks (alias move_to_stage), archive_tasks, change_priority, assign_members, add_labels
target_stage_idintegerFor move_tasksTarget stage
target_board_idintegerNoFor move_tasks: move to another board (needs write access; not archived)
prioritystringFor change_prioritylow, medium, high, urgent or empty
user_idsinteger[]For assign_membersUsers to assign (must be board members)
label_idsinteger[]For add_labelsLabels to add

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/bulk-actions" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "task_ids": [85, 86, 87],
    "action": "change_priority",
    "priority": "high"
  }'

Example Response

json
{
  "successful_tasks": [
    { "id": 85, "priority": "high" }
  ],
  "failed_tasks": [],
  "message": "3 task priorities updated successfully"
}

move_tasks responses also include moved_to_another_board.

Bulk Restore Tasks ​

Restores archived tasks. Each task is restored independently; failures are reported per task.

http
PUT /wp-json/fluent-boards/v2/projects/{board_id}/bulk-restore-tasks

Parameters

ParameterTypeRequiredDescription
task_idsinteger[]YesArchived task IDs on this board

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/bulk-restore-tasks" \
  -X PUT \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "task_ids": [77, 78] }'

Example Response

json
{
  "restored_count": 1,
  "failed_count": 1,
  "updatedTasks": [],
  "failed_tasks": [
    { "id": 78, "title": "Old task", "error": "This task cannot be restored because its stage \"Backlog\" is archived. Please restore the stage first." }
  ],
  "message": "1 task restored successfully, 1 task failed"
}

failed_tasks is only present when something failed. Errors: 400 "No task IDs provided", 404 "No archived tasks found with provided IDs".

Bulk Delete Tasks ​

Permanently deletes tasks, including their subtasks, relations, notifications and attachments. Requires board manager (or FluentBoards admin).

http
DELETE /wp-json/fluent-boards/v2/projects/{board_id}/bulk-delete-tasks

Parameters

ParameterTypeRequiredDescription
task_idsinteger[]YesTask IDs on this board

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/bulk-delete-tasks" \
  -X DELETE \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "task_ids": [77, 78] }'

Example Response

json
{
  "deleted_count": 2,
  "failed_count": 0,
  "updatedTasks": [],
  "message": "2 tasks deleted successfully"
}

Delete a Task ​

Permanently deletes a task. Requires board manager (or FluentBoards admin).

http
DELETE /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85" \
  -X DELETE \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "updatedTasks": [],
  "message": "Task has been deleted"
}

Upload a Cover Image ​

Uploads an image and sets it as the task cover (settings.cover.imageId and settings.cover.backgroundImage). Any previous cover image is deleted.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/task-cover-image-upload

Parameters

ParameterTypeRequiredDescription
filefileYesImage file (multipart)

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/task-cover-image-upload" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -F "file=@/path/to/cover.jpg"

Example Response

json
{
  "message": "Image has been uploaded",
  "public_url": "https://yourdomain.com/index.php?fbs=1&fbs_type=public_url&fbs_comment_image=aaaaaaaa"
}

Remove the Cover ​

Removes settings.cover and deletes the cover image file.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/remove-task-cover

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/remove-task-cover" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "task": { "id": 85, "settings": { "subtask_count": 0 } },
  "message": "Task Cover removed successfully"
}

Stores an image URL/path in settings.logo (used by roadmap ideas).

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/update-cover-photo/{task_id}

Parameters

ParameterTypeRequiredDescription
thumbnailstringYesImage URL or path

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/update-cover-photo/85" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "thumbnail": "https://yourdomain.com/wp-content/uploads/logo.png" }'

Example Response

json
{
  "message": "Task cover photo has been updated",
  "task": { "id": 85, "settings": { "logo": "https://yourdomain.com/wp-content/uploads/logo.png" } }
}

Update the Integration Type ​

Stores a value in settings.integration_type (roadmap ideas use values such as feature).

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/status-update/{task_id}

Parameters

ParameterTypeRequiredDescription
integrationTypestringYesValue to store

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/status-update/85" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "integrationType": "feature" }'

Example Response

json
{
  "message": "Task status has been updated",
  "task": { "id": 85, "settings": { "integration_type": "feature" } }
}

Upload Description Media ​

Uploads a file for use inside the task description editor and returns the stored file record with a public_url.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/wp-editor-media-file-upload

Parameters

ParameterTypeRequiredDescription
filefileYesFile to upload (multipart)

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/wp-editor-media-file-upload" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -F "file=@/path/to/diagram.png"

Example Response

json
{
  "message": "Image has been uploaded",
  "file": {
    "id": 31,
    "object_id": 85,
    "object_type": "task_description",
    "title": "diagram.png",
    "public_url": "https://yourdomain.com/index.php?fbs=1&fbs_type=public_url&fbs_comment_image=aaaaaaaa"
  }
}

Removes the Fluent Support ticket link (source / source_id) from a task without deleting the ticket. Tasks without a ticket link are returned unchanged.

http
DELETE /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/support-ticket

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/support-ticket" \
  -X DELETE \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "message": "Support ticket link has been removed",
  "task": { "id": 85, "source": null, "source_id": null },
  "updatedTasks": [{ "id": 85 }]
}

Get Task Activities ​

Returns the task's activity log, 15 per page.

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/activities

Parameters

ParameterTypeRequiredDescription
filterstringNoSort order (newest or oldest)
pageintegerNoPage number (read by the paginator)

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/activities" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "activities": {
    "current_page": 1,
    "data": [
      {
        "id": 120,
        "object_id": 85,
        "object_type": "task_activity",
        "action": "created",
        "column": "task",
        "old_value": null,
        "new_value": "Sample Task Title",
        "created_at": "2024-12-24T08:43:52+00:00",
        "user": {
          "ID": 1,
          "display_name": "John Doe"
        }
      }
    ],
    "per_page": 15,
    "total": 13,
    "last_page": 1
  }
}

Comments on a task are documented in Comments.

Get Board Dependencies Pro ​

Returns every finish-to-start dependency where both tasks are on the board (used by the Gantt chart).

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/dependencies

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/dependencies" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "dependencies": [
    { "predecessor_id": 85, "successor_id": 86 }
  ]
}

Get Task Dependencies Pro ​

Returns the tasks that block this task (predecessors) and the tasks it blocks (successors).

http
GET /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/dependencies

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/86/dependencies" \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "predecessors": [
    { "id": 85, "title": "Design", "stage_id": 25, "status": "closed", "board_id": 3 }
  ],
  "successors": [
    { "id": 87, "title": "Launch", "stage_id": 26, "status": "open", "board_id": 3 }
  ]
}

Add a Dependency Pro ​

Adds a finish-to-start dependency: predecessor_task_id must finish before successor_task_id. Both tasks must be on the board. The relationship is taken from the body; {task_id} in the path is not used to build it.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/dependencies

Parameters

ParameterTypeRequiredDescription
predecessor_task_idintegerYesBlocking task
successor_task_idintegerYesBlocked task

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/86/dependencies" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{ "predecessor_task_id": 85, "successor_task_id": 86 }'

Example Response

json
{
  "message": "Dependency added successfully."
}

Errors: 422 when a task would depend on itself, the dependency already exists, or it would create a cycle; 404 when either task is not on the board.

Remove a Dependency Pro ​

Removes the dependency between {task_id} and {related_task_id}, in either direction.

http
DELETE /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/dependencies/{related_task_id}

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/86/dependencies/85" \
  -X DELETE \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "message": "Dependency removed successfully."
}

If no dependency exists the response is still 200 with the message "Dependency not found.".

Create or Update a Recurring Task Pro ​

Sets the repeat rule of a task. If the task already has a rule it is replaced. The whole request body is stored as the rule, and the next run is next_repeat_date + time in time_zone, converted to server time.

http
POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/create-repeat-task

Parameters

ParameterTypeRequiredDescription
create_newintegerYes1 creates a new task on each repeat; 0 reuses the task and moves its dates
repeat_when_completeintegerYes1 repeats only after the current task is completed
repeat_typestringYesdaily, weekly, monthly, yearly
repeat_inintegerYesInterval (every N days/weeks/months/years)
selected_monthstringYesJan … Dec (used by yearly rules)
repeat_in_month_typestringYesMonthly mode, for example firstDay or lastDay
selected_repeat_week_daysstring[]NoWeekly days: Sun, Mon, Tue, Wed, Thu, Fri, Sat
selected_month_daysinteger[]NoMonthly days of month, 1–31
next_repeat_datestringYesDate of the next repeat (Y-m-d)
timestringYesTime of day (H:i:s)
time_zonestringYesPHP time zone name, for example Asia/Dhaka
selected_stageintegerYesStage on this board where repeated tasks go

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/create-repeat-task" \
  -X POST \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "create_new": 1,
    "repeat_when_complete": 0,
    "repeat_type": "weekly",
    "repeat_in": 1,
    "selected_repeat_week_days": ["Mon", "Thu"],
    "selected_month": "Jan",
    "repeat_in_month_type": "firstDay",
    "next_repeat_date": "2025-08-11",
    "time": "09:00:00",
    "time_zone": "UTC",
    "selected_stage": 25
  }'

Example Response

json
{
  "task": { "id": 85, "repeat_task_meta": null },
  "message": "Repeat task created successfully"
}

When a rule already existed the message is "Repeat task update successfully". 422 is returned for an invalid repeat_type or selected_month.

Stop a Recurring Task Pro ​

Deletes the repeat rule of a task.

http
DELETE /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/remove-repeat-task

Example Request

bash
curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/3/tasks/85/remove-repeat-task" \
  -X DELETE \
  -u "USERNAME:APPLICATION_PASSWORD"

Example Response

json
{
  "message": "Task repeat stopped successfully"
}

Returns 404 "Repeat task meta not found" when the task has no rule.

Error Responses ​

See Common Error Responses for standard error formats.

Common task errors:

  • 400 — task not found on this board, invalid stage, invalid property, or other validation failure reported by the controller
  • 403 — no access to the board, or a viewer-only member tried to write
  • 422 — request validation failed (missing required fields)