Menu

API reference · Knowledge Base

Comments

knowledge_base · comments · 4 operations

GET/v1/knowledge-base/items/{item_id}/comments

List the comments of an article

knowledge_base.comments.list

ReadIdempotentSince 2026-11-01

Lists the comments of a Knowledge Base article, oldest first, paginated by cursor: content (sanitized HTML, or plain text in old comments), content_text (plain text), mentioned user ids, author and dates (edited_at when the author edited it). Not found (kb_item_not_found) if the article does not exist or the caller cannot see it. Requires view access to the Knowledge Base.

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

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

Parameters

item_idstringpathrequired

The article's id (from knowledge_base.items.list).

limitintegerqueryoptional

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

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/knowledge-base/items/{item_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/knowledge-base/items/{item_id}/comments" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/knowledge-base/items/{item_id}/comments

Comment on an article

knowledge_base.comments.create

WriteSince 2026-11-01

Adds a comment to a Knowledge Base article 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 to notify in the app: only people with access to the organization who can also see the article get the notice (the others are ignored, so a private article never leaks to someone who cannot open it). Returns the new comment. Requires full access to the Knowledge Base.

Scope
knowledge_base:write
Permission
Edit in the module
MCP tool
knowledge_base_comments_createOn the full surface; on the compact one, mb_execute_operation with id: "knowledge_base.comments.create".

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

Parameters

item_idstringpathrequired

The article's id (from knowledge_base.items.list).

contentstringbodyrequired

The comment: HTML (sanitized) or plain text.

mentionsarray<string>bodyoptional

People mentioned (user ids of members.members.list): each one gets a notification.

Response

comment_idstring
commentobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/knowledge-base/items/{item_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/knowledge-base/items/{item_id}/comments" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "content": "CONTENT"
}'
PATCH/v1/knowledge-base/items/{item_id}/comments/{comment_id}

Edit a comment

knowledge_base.comments.update

WriteIdempotentSince 2026-11-01

Replaces the content of a comment on a Knowledge Base article; it is marked as edited. Only its author can edit it (403 comment_author_only). mentions replaces the mentioned ids (without it, the previous ones stay); only newly added mentions are notified, and only to people who can see the article. Returns the comment. Requires full access.

Scope
knowledge_base:write
Permission
Edit in the module
MCP tool
knowledge_base_comments_updateOn the full surface; on the compact one, mb_execute_operation with id: "knowledge_base.comments.update".

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

Parameters

item_idstringpathrequired

The article's id (from knowledge_base.items.list).

comment_idstringpathrequired

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

contentstringbodyrequired

The comment: HTML (sanitized) or plain text.

mentionsarray<string>bodyoptional

People mentioned (replaces them); without it, the ones it had stay.

Response

commentobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/knowledge-base/items/{item_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/knowledge-base/items/{item_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "content": "CONTENT"
}'
DELETE/v1/knowledge-base/items/{item_id}/comments/{comment_id}

Delete a comment

knowledge_base.comments.delete

IrreversibleSince 2026-11-01

Deletes a comment of a Knowledge Base article. 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
knowledge_base:write and “Allow deletions” (knowledge_base:delete in OAuth)
Permission
Edit in the module
MCP tool
knowledge_base_comments_deleteOn the full surface; on the compact one, mb_execute_operation with id: "knowledge_base.comments.delete".

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

Parameters

item_idstringpathrequired

The article's id (from knowledge_base.items.list).

comment_idstringpathrequired

The comment's id (from knowledge_base.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/knowledge-base/items/{item_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/knowledge-base/items/{item_id}/comments/{comment_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"