Menu

API reference · Tasks

Comments

task_management · comments · 4 operations

GET/v1/tasks/{task_id}/comments

List the comments of a task

task_management.comments.list

ReadIdempotentSince 2026-11-01

Lists the comments of a task, oldest first, paginated by cursor: content (sanitized HTML, or plain text in old comments), content_text (plain text), mentions, author and dates (edited_at when the author edited it). Not found if the task does not exist or the caller cannot see it.

Scope
task_management:read
Permission
View the module
MCP tool
task_management_comments_listOn the full surface; on the compact one, mb_execute_operation with id: "task_management.comments.list".

Declared cost: up to 204 reads and 0 writes per call (they count against the daily quota).

Parameters

task_idstringpathrequired

The task's id (from task_management.tasks.list, or the task_id that tasks.create returns).

limitintegerqueryoptional

Rows per page (1 to 200; default 50).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, to continue the list; omit it for the first page.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/tasks/{task_id}/comments" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/tasks/{task_id}/comments" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/tasks/{task_id}/comments

Comment on a task

task_management.comments.add

WriteSince 2026-11-01

Adds a comment to a task as the caller. content is HTML (sanitized: formatting, links and mention chips survive, scripts do not) or plain text, up to 10,000 characters. mentions are user ids of people with access to the organization: each one gets an in-app notification linking to the task (other ids are ignored). Returns the new comment.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_comments_addOn the full surface; on the compact one, mb_execute_operation with id: "task_management.comments.add".

Declared cost: up to 6 reads and 2 writes per call (they count against the daily quota).

Parameters

task_idstringpathrequired

The task's id (from task_management.tasks.list, or the task_id that tasks.create returns).

contentstringbodyrequired

HTML (sanitized) or plain text, up to 10,000 characters.

mentionsarray<string>bodyoptional

People mentioned (uids of members, members.members.list): each gets a notice in the app.

Response

comment_idstring
commentobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/{task_id}/comments" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "content": "CONTENT"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/{task_id}/comments" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "content": "CONTENT"
}'
PATCH/v1/tasks/{task_id}/comments/{comment_id}

Edit a comment

task_management.comments.edit

WriteSince 2026-11-01

Replaces the content (and mentions) of a comment; it is marked as edited. Only its author can edit it (403 comment_author_only otherwise). Only newly added mentions are notified. Returns the edited comment.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_comments_editOn the full surface; on the compact one, mb_execute_operation with id: "task_management.comments.edit".

Declared cost: up to 6 reads and 1 writes per call (they count against the daily quota).

Parameters

task_idstringpathrequired

The task's id (from task_management.tasks.list, or the task_id that tasks.create returns).

comment_idstringpathrequired

The comment's id (from task_management.comments.list).

contentstringbodyrequired

HTML (sanitized) or plain text, up to 10,000 characters.

mentionsarray<string>bodyoptional

People mentioned (uids of members, members.members.list): each gets a notice in the app.

Response

commentobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/tasks/{task_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "content": "CONTENT"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X PATCH "https://api.mb-suite.com/v1/tasks/{task_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "content": "CONTENT"
}'
DELETE/v1/tasks/{task_id}/comments/{comment_id}

Delete a comment

task_management.comments.delete

IrreversibleSince 2026-11-01

Deletes a comment of a task. Its author can always delete it; an owner or admin can delete anyone's (403 comment_delete_denied otherwise). It stays 30 days in the trash. Outside the app it needs a dry run and a confirm_token, except a REST DELETE with a key allowed to delete.

With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.

Scope
task_management:write and “Allow deletions” (task_management:delete in OAuth)
Permission
Edit in the module
MCP tool
task_management_comments_deleteOn the full surface; on the compact one, mb_execute_operation with id: "task_management.comments.delete".

Declared cost: up to 4 reads and 2 writes per call (they count against the daily quota).

Parameters

task_idstringpathrequired

The task's id (from task_management.tasks.list, or the task_id that tasks.create returns).

comment_idstringpathrequired

The comment's id (from task_management.comments.list).

Response

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/tasks/{task_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/tasks/{task_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"