# Comments

The Comments API allows you to manage comments on tasks in Fluent Boards. You can create, read, update, and delete comments, as well as handle threaded replies and file attachments.

# List Task Comments

Retrieve all comments for a specific task.

HTTP Request

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

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments?per_page=10&page=1&include_replies=true&include_images=true" \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD"
1
2

# Parameters

Parameter Type Description
page integer Page number for pagination (default: 1)
per_page integer Number of comments per page (default: 10)
type string Filter by comment type (e.g., 'comment')
privacy string Filter by privacy setting (e.g., 'private', 'public')
include_replies boolean Include threaded replies (default: true)
include_images boolean Include attached images (default: true)

# Example Response

{
  "comments": {
    "current_page": 1,
    "data": [
      {
        "id": 123,
        "board_id": "5",
        "task_id": "456",
        "parent_id": null,
        "type": "comment",
        "privacy": "private",
        "status": "published",
        "author_name": "John Doe",
        "author_email": "[email protected]",
        "author_ip": "192.168.1.100",
        "description": "This is a comment on the task",
        "created_by": "789",
        "settings": {
          "raw_description": "This is a comment on the task",
          "mentioned_id": null
        },
        "created_at": "2024-01-15T10:30:00+00:00",
        "updated_at": "2024-01-15T10:30:00+00:00",
        "replies": [],
        "replies_count": 0,
        "avatar": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g",
        "user": {
          "ID": 789,
          "user_login": "johndoe",
          "user_nicename": "john-doe",
          "user_email": "[email protected]",
          "user_url": "https://example.com",
          "user_registered": "2023-01-15 10:30:00",
          "user_status": "0",
          "display_name": "John Doe",
          "photo": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g"
        },
        "images": []
      }
    ],
    "first_page_url": "https://example.com/wp-json/fluent-boards/v2/projects/5/tasks/456/comments/?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://example.com/wp-json/fluent-boards/v2/projects/5/tasks/456/comments/?page=1",
    "links": [
      {
        "url": null,
        "label": "pagination.previous",
        "active": false
      },
      {
        "url": "https://example.com/wp-json/fluent-boards/v2/projects/5/tasks/456/comments/?page=1",
        "label": "1",
        "active": true
      },
      {
        "url": null,
        "label": "pagination.next",
        "active": false
      }
    ],
    "next_page_url": null,
    "path": "https://example.com/wp-json/fluent-boards/v2/projects/5/tasks/456/comments",
    "per_page": 10,
    "prev_page_url": null,
    "to": 1,
    "total": 1
  },
  "total": 1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

# Create a Comment

Create a new comment on a task.

HTTP Request

POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments
1

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments" \
  -X POST \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "comment": "Hey @johndoe, please review this design...",
    "parent_id": null,
    "comment_type": "comment",
    "comment_by": 789,
    "images": [1, 2],
    "mentionData": [789]
  }'
1
2
3
4
5
6
7
8
9
10
11
12

# Request Body

Parameter Type Required Description
comment string Yes* The comment content (required unless images are provided)
parent_id integer No ID of parent comment for threaded replies
comment_type string Yes Comment type (must be 'comment')
comment_by integer No User ID who created the comment (default: current user)
images array No Array of image IDs to attach to the comment
mentionData array No Array of user IDs to mention in the comment

# Features

  • Auto-linking: URLs in comments are automatically converted to clickable links
  • Mentions: Use mentionData to mention users with @username format
  • Image Attachments: Attach multiple images using image IDs
  • Threaded Replies: Create replies by setting parent_id
  • Email Notifications: Automatic email notifications to task assignees and mentioned users

# Example request data

Request:

{
  "comment": "Hey @johndoe, please review this design at https://figma.com/file/abc123 and also check https://github.com/fluent-boards. I've attached the mockups below.",
  "parent_id": null,
  "comment_type": "comment",
  "comment_by": 789,
  "images": [1, 2],
  "mentionData": [789]
}
1
2
3
4
5
6
7
8

# Example response

Response:

{
  "message": "Comment has been added",
  "comment": {
    "parent_id": null,
    "description": "Hey @johndoe, please review this design at <a class=\"fbs_link\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://figma.com/file/abc123\">https://figma.com/file/abc123</a> and also check <a class=\"fbs_link\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fluent-boards.\">https://github.com/fluent-boards.</a> I've attached the mockups below.",
    "created_by": 789,
    "task_id": 456,
    "type": "comment",
    "board_id": 5,
    "settings": {
      "raw_description": "Hey @johndoe, please review this design at https://figma.com/file/abc123 and also check https://github.com/fluent-boards. I've attached the mockups below.",
      "mentioned_id": [789]
    },
    "privacy": "private",
    "author_email": "[email protected]",
    "author_name": "John Doe",
    "updated_at": "2024-01-15T12:00:00+00:00",
    "created_at": "2024-01-15T12:00:00+00:00",
    "id": 123,
    "user": {
      "ID": 789,
      "user_login": "johndoe",
      "user_nicename": "john-doe",
      "user_email": "[email protected]",
      "user_url": "https://example.com",
      "user_registered": "2023-01-15 10:30:00",
      "user_status": "0",
      "display_name": "John Doe",
      "photo": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g"
    },
    "avatar": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g",
    "task": {
      "id": 456,
      "parent_id": null,
      "board_id": "5",
      "crm_contact_id": null,
      "title": "Implement New Dashboard Features",
      "slug": "implement-new-dashboard-features",
      "type": "task",
      "status": "open",
      "stage_id": "25",
      "source": "web",
      "source_id": null,
      "priority": "medium",
      "description": "<p>Add new dashboard features including:</p>\n<ol>\n<li>Custom widgets</li>\n<li>Analytics charts</li>\n<li>User preferences</li>\n<li>Real-time updates</li>\n</ol>",
      "lead_value": "0.00",
      "created_by": "789",
      "position": "15.00",
      "comments_count": 3,
      "issue_number": null,
      "reminder_type": "none",
      "settings": {
        "subtask_count": 4,
        "attachment_count": 2,
        "subtask_completed_count": 1
      },
      "remind_at": null,
      "started_at": null,
      "due_at": "2024-02-15 23:59:00",
      "last_completed_at": null,
      "archived_at": null,
      "created_at": "2024-01-10T10:00:00+00:00",
      "updated_at": "2024-01-15T12:00:00+00:00",
      "meta": {
        "is_template": "no",
        "group_name": "Development Tasks"
      },
      "repeat_task_meta": null
    },
    "images": [
      {
        "id": 1,
        "object_id": "123",
        "object_type": "comment_image",
        "attachment_type": "image/png",
        "file_path": "/var/www/example.com/wp-content/uploads/fluent-boards/board_5/1705312800-design-mockup-1.png",
        "full_url": "https://example.com/wp-content/uploads/fluent-boards/board_5/1705312800-design-mockup-1.png",
        "settings": "",
        "title": "design-mockup-1.png",
        "file_hash": "abc123def456789ghi012jkl345mno678",
        "driver": "local",
        "status": "ACTIVE",
        "file_size": "512 KB",
        "created_at": "2024-01-15T11:55:00+00:00",
        "updated_at": "2024-01-15T12:00:00+00:00",
        "secure_url": "https://example.com/index.php?fbs=1&fbs_comment_image=abc123def456789ghi012jkl345mno678&secure_sign=def456ghi789012jkl345mno678pqr901"
      },
      {
        "id": 2,
        "object_id": "123",
        "object_type": "comment_image",
        "attachment_type": "image/png",
        "file_path": "/var/www/example.com/wp-content/uploads/fluent-boards/board_5/1705312860-design-mockup-2.png",
        "full_url": "https://example.com/wp-content/uploads/fluent-boards/board_5/1705312860-design-mockup-2.png",
        "settings": "",
        "title": "design-mockup-2.png",
        "file_hash": "def456ghi789012jkl345mno678pqr901",
        "driver": "local",
        "status": "ACTIVE",
        "file_size": "384 KB",
        "created_at": "2024-01-15T11:56:00+00:00",
        "updated_at": "2024-01-15T12:00:00+00:00",
        "secure_url": "https://example.com/index.php?fbs=1&fbs_comment_image=def456ghi789012jkl345mno678pqr901&secure_sign=ghi789jkl012345mno678pqr901stu234"
      }
    ],
    "replies": []
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

# Features Demonstrated

  • Text Content: Comment with multiple lines and context
  • User Mentions: @johndoe and @janesmith with mentionData array
  • URL Auto-linking: Multiple URLs automatically converted to clickable links
  • Image Attachments: Multiple images with different file types
  • Threaded Comments: parent_id for replies
  • Comment Type: Specified as "comment" for top-level comments or "reply" for threaded replies
  • User Assignment: Explicit comment_by parameter

# Update a Comment

Update an existing comment. Only the comment author can update their own comments.

HTTP Request

PUT /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments/{comment_id}
1

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments/{comment_id}" \
  -X PUT \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "comment": "This is the updated comment content with https://example.com link",
    "images": [1, 2],
    "mentionData": [789]
  }'
1
2
3
4
5
6
7
8
9

# Request Body

Parameter Type Required Description
comment string Yes* The updated comment content (required unless images are provided)
images array No Array of image IDs to attach to the comment
mentionData array No Array of user IDs to mention in the comment

# Example Request Data

{
  "comment": "This is the updated comment content with https://example.com link",
  "images": [1, 2],
  "mentionData": [789]
}
1
2
3
4
5

# Example Response

{
  "message": "Comment has been updated",
  "comment": {
    "id": 4,
    "board_id": "3",
    "task_id": "85",
    "parent_id": null,
    "type": "comment",
    "privacy": "private",
    "status": "published",
    "author_name": "John Doe",
    "author_email": "[email protected]",
    "author_ip": "",
    "description": "Hey <a class=\"fbs_mention\" href=\"https://example.com/projects#/member/789/tasks\">John Doe</a> , please review this design at <a class=\"fbs_link\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://figma.com/file/abc123\">https://figma.com/file/abc123</a> and also check <a class=\"fbs_link\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/fluent-boards.\">https://github.com/fluent-boards.</a> I've attached the mockups below.",
    "created_by": "789",
    "settings": {
      "raw_description": "Hey @johndoe , please review this design at https://figma.com/file/abc123 and also check https://github.com/fluent-boards. I've attached the mockups below.",
      "mentioned_id": ["789"]
    },
    "created_at": "2024-01-15T12:00:00+00:00",
    "updated_at": "2024-01-15T13:00:00+00:00",
    "avatar": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g",
    "images": [
      {
        "id": 28,
        "object_id": "4",
        "object_type": "comment_image",
        "attachment_type": "image/png",
        "file_path": "/var/www/example.com/wp-content/uploads/fluent-boards/board_3/1705312800-updated-image.png",
        "full_url": "https://example.com/wp-content/uploads/fluent-boards/board_3/1705312800-updated-image.png",
        "settings": "",
        "title": "updated-image.png",
        "file_hash": "abc123def456789ghi012jkl345mno678",
        "driver": "local",
        "status": "ACTIVE",
        "file_size": "484 KB",
        "created_at": "2024-01-15T13:00:00+00:00",
        "updated_at": "2024-01-15T13:00:00+00:00",
        "secure_url": "https://example.com/index.php?fbs=1&fbs_comment_image=abc123def456789ghi012jkl345mno678&secure_sign=def456ghi789012jkl345mno678pqr901"
      }
    ],
    "replies": [],
    "user": {
      "ID": 789,
      "user_login": "johndoe",
      "user_nicename": "john-doe",
      "user_email": "[email protected]",
      "user_url": "https://example.com",
      "user_registered": "2023-01-15 10:30:00",
      "user_status": "0",
      "display_name": "John Doe",
      "photo": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

# Features

  • Authorization: Only the comment author can update their own comments
  • Auto-linking: URLs are automatically converted to clickable links
  • Mentions: Support for user mentions with notifications
  • Image Attachments: Can update or add new images to the comment
  • Settings Preservation: Maintains existing settings while updating content

# Delete a Comment

Delete a comment. Only the comment author can delete their own comments.

HTTP Request

DELETE /wp-json/fluent-boards/v2/projects/{board_id}/tasks/comments/{comment_id}
1

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/comments/{comment_id}" \
  -X DELETE \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD"
1
2
3

# Example Response

{
  "message": "Comment has been deleted"
}
1
2
3

# Features

  • Authorization: Only the comment author can delete their own comments
  • Cascade Deletion: Automatically deletes related replies and attached images
  • Task Counter: Updates the task's comment count
  • Cleanup: Removes all associated data and triggers cleanup actions

# Add Reply to Comment

Create a threaded reply to an existing comment. Replies use the same endpoint as creating comments, but with a parent_id parameter.

HTTP Request

POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments
1

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comments" \
  -X POST \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{
    "comment": "This is a reply to the comment",
    "parent_id": 3,
    "comment_type": "reply",
    "comment_by": 789,
    "images": [],
    "mentionData": []
  }'
1
2
3
4
5
6
7
8
9
10
11
12

# Request Body

Parameter Type Required Description
comment string Yes* The reply content (required unless images are provided)
parent_id integer Yes ID of the parent comment to reply to
comment_type string Yes Comment type (must be 'reply')
comment_by integer No User ID who created the reply (default: current user)
images array No Array of image IDs to attach to the reply
mentionData array No Array of user IDs to mention in the reply

# Example Request Data

{
  "comment": "This is a reply to the comment",
  "parent_id": 3,
  "comment_type": "reply",
  "comment_by": 789,
  "images": [],
  "mentionData": []
}
1
2
3
4
5
6
7
8

# Example Response

{
  "message": "Comment has been added",
  "comment": {
    "parent_id": 3,
    "description": "This is a reply to the comment",
    "created_by": 789,
    "task_id": 456,
    "type": "reply",
    "board_id": 5,
    "settings": {
      "raw_description": "This is a reply to the comment",
      "mentioned_id": null
    },
    "privacy": "private",
    "author_email": "[email protected]",
    "author_name": "John Doe",
    "updated_at": "2024-01-15T14:00:00+00:00",
    "created_at": "2024-01-15T14:00:00+00:00",
    "id": 8,
    "user": {
      "ID": 789,
      "user_login": "johndoe",
      "user_nicename": "john-doe",
      "user_email": "[email protected]",
      "user_url": "https://example.com",
      "user_registered": "2023-01-15 10:30:00",
      "user_status": "0",
      "display_name": "John Doe",
      "photo": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g"
    },
    "avatar": "https://secure.gravatar.com/avatar/abc123def456?s=128&d=mm&r=g",
    "task": {
      "id": 456,
      "parent_id": null,
      "board_id": "5",
      "crm_contact_id": null,
      "title": "Implement New Dashboard Features",
      "slug": "implement-new-dashboard-features",
      "type": "task",
      "status": "open",
      "stage_id": "25",
      "source": "web",
      "source_id": null,
      "priority": "medium",
      "description": "<p>Add new dashboard features including:</p>\n<ol>\n<li>Custom widgets</li>\n<li>Analytics charts</li>\n<li>User preferences</li>\n<li>Real-time updates</li>\n</ol>",
      "lead_value": "0.00",
      "created_by": "789",
      "position": "15.00",
      "comments_count": "3",
      "issue_number": null,
      "reminder_type": "none",
      "settings": {
        "subtask_count": 4,
        "attachment_count": 2,
        "subtask_completed_count": 1
      },
      "remind_at": null,
      "started_at": null,
      "due_at": "2024-02-15 23:59:00",
      "last_completed_at": null,
      "archived_at": null,
      "created_at": "2024-01-10T10:00:00+00:00",
      "updated_at": "2024-01-15T14:00:00+00:00",
      "meta": {
        "is_template": "no",
        "group_name": "Development Tasks"
      },
      "repeat_task_meta": null
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

# Key Differences from Regular Comments

  • Parent ID: Required parent_id parameter to specify which comment to reply to
  • Comment Type: Automatically set to "reply" type
  • Threading: Creates a parent-child relationship between comments
  • Notifications: Sends notifications to the parent comment author
  • Same Endpoint: Uses the same endpoint as creating comments

# Upload Images to Comment

Upload images that can be attached to comments. This endpoint uploads the image file and returns the image attachment data that can be used in comment creation.

HTTP Request

POST /wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comment-image-upload
1

# Example Request

curl "https://yourdomain.com/wp-json/fluent-boards/v2/projects/{board_id}/tasks/{task_id}/comment-image-upload" \
  -X POST \
  -H "Authorization: Basic API_USERNAME:API_PASSWORD" \
  -F "file=@/path/to/unnamed-3.png"
1
2
3
4

# Request Body

Parameter Type Required Description
file file Yes Image file to upload (supports: JPEG, GIF, PNG, BMP, TIFF, WebP, AVIF, ICO, HEIC)

# Example Response

{
  "message": "attachment has been added",
  "imageAttachment": {
    "object_id": 0,
    "object_type": "comment_image",
    "attachment_type": "image/png",
    "title": "unnamed-3.png",
    "file_path": "1711111111-unnamed-3.png",
    "full_url": "https://yourdomain.com/wp-content/uploads/fluent-boards/board_1/1711111111-unnamed-3.png",
    "file_size": "484 KB",
    "settings": "",
    "driver": "local",
    "file_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "updated_at": "2025-08-08T06:56:07+00:00",
    "created_at": "2025-08-08T06:56:07+00:00",
    "id": 24,
    "public_url": "https://yourdomain.com/index.php?fbs=1&fbs_type=public_url&fbs_bid=1&fbs_comment_image=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "secure_url": "https://yourdomain.com/index.php?fbs=1&fbs_comment_image=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&secure_sign=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# Features

  • File Validation: Validates image file types (JPEG, GIF, PNG, BMP, TIFF, WebP, AVIF, ICO, HEIC)
  • Secure URLs: Provides both public and secure URLs for image access
  • File Metadata: Includes file size, hash, and upload timestamps
  • Comment Integration: Returns image ID that can be used in comment creation
  • Board Organization: Images are organized by board ID in the file system

# Features

  • Threaded Comments: Support for nested replies
  • File Attachments: Upload images to comments
  • Privacy Controls: Public and private comment visibility
  • User Integration: Automatic user data population
  • Avatar Generation: Dynamic avatar URLs based on email
  • Comment Counting: Automatic task comment count updates

# Error Responses

See Common Error Responses for standard error formats.

# Common Comment-Specific Errors

  • 404 Not Found - Comment not found
  • 403 Forbidden - You don't have permission to manage this comment
  • 400 Bad Request - Invalid comment data or missing required fields
  • 413 Payload Too Large - Image file size exceeds limit

# Best Practices

  1. Use descriptive comments - Provide clear, actionable feedback
  2. Respect privacy settings - Be mindful of public vs private comments
  3. Use threading appropriately - Keep replies organized and relevant
  4. Optimize images - Compress images before uploading
  5. Regular cleanup - Remove outdated or irrelevant comments