API reference
Comments Public replies on posts, including official team answers and pinned comments.
GET /v1/posts/{id}/commentsPOST /v1/posts/{id}/commentsPATCH /v1/comments/{id}DELETE /v1/comments/{id}POST /v1/comments/{id}/pinSet up the SDK client used in the examples API key or Dashboard session:
import { UpVoiced } from '@upvoiced/sdk';
const apiKey = process.env['UPVOICED_API_KEY']; // uv_live_… (Settings → API keys)
const workspace = process.env['UPVOICED_WORKSPACE_ID']; // sent as X-Workspace
if (!apiKey || !workspace) throw new Error('Set UPVOICED_API_KEY and UPVOICED_WORKSPACE_ID.');
const upvoiced = new UpVoiced({ apiKey, workspace });curl examples read $UPVOICED_API_KEY and $UPVOICED_WORKSPACE_IDfrom your shell. MCP examples are the tools/call request an MCP client sends to the MCP server with the same API key.
Comments oldest first; one reply level; deleted ones as tombstones
Authentication API key or Dashboard session; API key scope read Operation id listCommentsPath parameters Name Type Required idstring (uuid)Yes
Query parameters Name Type Required cursorstringlength 1–512 No limitintegervalue 1–100 default 50 No
Headers Name Type Required x-workspacestring (uuid)Yes
Response 200: 16 fields Response 200 (application/json) Name Type Required itemsarray of objectYes items[].idstring (uuid)Yes items[].post_idstring (uuid)Yes items[].parent_idstring (uuid) | nullYes items[].authorobjectYes items[].author.kind"operator" | "end_user" | "deleted"Yes items[].author.idstring (uuid) | nullYes items[].author.namestring | nulllength ≤ 200 Yes items[].body_mdstringYes items[].is_officialbooleanYes items[].pinnedbooleanYes items[].edited_atstring (date-time) | nullYes items[].deleted_atstring (date-time) | nullYes items[].created_atstring (date-time)Yes items[].updated_atstring (date-time)Yes next_cursorstring | nullYes
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape .
curl curl 'https://api.upvoiced.com/v1/posts/0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d/comments' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID"TypeScript SDK const data = await upvoiced.get('/v1/posts/{id}/comments', { path: { id: '0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' } });MCP No MCP tool for this operation. The MCP server covers the everyday reads and writes.
Reply as the team (optionally official); markdown sanitized
Authentication API key or Dashboard session; API key scope write Operation id createCommentIdempotency Send an Idempotency-Key to make retries safe. Path parameters Name Type Required idstring (uuid)Yes
Headers Name Type Required x-workspacestring (uuid)Yes idempotency-keystringpattern ^[A-Za-z0-9_.:-]{8,128}$ No
Request body (JSON) Name Type Required body_mdstringlength ≤ 10000 Yes parent_idstring (uuid)No officialbooleandefault false No
Response 201: 14 fields Response 201 (application/json) Name Type Required idstring (uuid)Yes post_idstring (uuid)Yes parent_idstring (uuid) | nullYes authorobjectYes author.kind"operator" | "end_user" | "deleted"Yes author.idstring (uuid) | nullYes author.namestring | nulllength ≤ 200 Yes body_mdstringYes is_officialbooleanYes pinnedbooleanYes edited_atstring (date-time) | nullYes deleted_atstring (date-time) | nullYes created_atstring (date-time)Yes updated_atstring (date-time)Yes
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape .
curl curl -X POST 'https://api.upvoiced.com/v1/posts/0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d/comments' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"body_md": "It would help our night shift."
}'TypeScript SDK const data = await upvoiced.post('/v1/posts/{id}/comments', {
path: { id: '0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' },
body: { body_md: 'It would help our night shift.' },
});MCP {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reply_to_post",
"arguments": {
"body_md": "It would help our night shift.",
"id": "0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d"
}
}
}Tool reply_to_post .
Edit your own comment
Authentication API key or Dashboard session; API key scope write Operation id updateCommentPath parameters Name Type Required idstring (uuid)Yes
Headers Name Type Required x-workspacestring (uuid)Yes
Request body (JSON) Name Type Required body_mdstringlength ≤ 10000 Yes
Response 200: 14 fields Response 200 (application/json) Name Type Required idstring (uuid)Yes post_idstring (uuid)Yes parent_idstring (uuid) | nullYes authorobjectYes author.kind"operator" | "end_user" | "deleted"Yes author.idstring (uuid) | nullYes author.namestring | nulllength ≤ 200 Yes body_mdstringYes is_officialbooleanYes pinnedbooleanYes edited_atstring (date-time) | nullYes deleted_atstring (date-time) | nullYes created_atstring (date-time)Yes updated_atstring (date-time)Yes
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape .
curl curl -X PATCH 'https://api.upvoiced.com/v1/comments/0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"body_md": "It would help our night shift."
}'TypeScript SDK const data = await upvoiced.patch('/v1/comments/{id}', {
path: { id: '0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' },
body: { body_md: 'It would help our night shift.' },
});MCP No MCP tool for this operation. The MCP server covers the everyday reads and writes.
Moderate: soft-delete any comment of the workspace (any member)
Authentication API key or Dashboard session; API key scope write Operation id deleteCommentPath parameters Name Type Required idstring (uuid)Yes
Headers Name Type Required x-workspacestring (uuid)Yes
Response 200: 1 fields Response 200 (application/json) Name Type Required oktrueYes
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape .
curl curl -X DELETE 'https://api.upvoiced.com/v1/comments/0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID"TypeScript SDK const data = await upvoiced.delete('/v1/comments/{id}', { path: { id: '0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' } });MCP No MCP tool for this operation. The MCP server covers the everyday reads and writes.
Pin (or unpin with pinned=false) the official reply of its post
Authentication API key or Dashboard session; API key scope write Operation id pinCommentIdempotency Send an Idempotency-Key to make retries safe. Path parameters Name Type Required idstring (uuid)Yes
Headers Name Type Required x-workspacestring (uuid)Yes idempotency-keystringpattern ^[A-Za-z0-9_.:-]{8,128}$ No
Request body (JSON) Name Type Required pinnedbooleandefault true No
Response 200: 14 fields Response 200 (application/json) Name Type Required idstring (uuid)Yes post_idstring (uuid)Yes parent_idstring (uuid) | nullYes authorobjectYes author.kind"operator" | "end_user" | "deleted"Yes author.idstring (uuid) | nullYes author.namestring | nulllength ≤ 200 Yes body_mdstringYes is_officialbooleanYes pinnedbooleanYes edited_atstring (date-time) | nullYes deleted_atstring (date-time) | nullYes created_atstring (date-time)Yes updated_atstring (date-time)Yes
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape .
curl curl -X POST 'https://api.upvoiced.com/v1/comments/0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d/pin' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"pinned": true
}'TypeScript SDK const data = await upvoiced.post('/v1/comments/{id}/pin', {
path: { id: '0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d' },
body: { pinned: true },
});MCP No MCP tool for this operation. The MCP server covers the everyday reads and writes.