Add a comment to a card
POST
/boards/{board}/cards/{card}/comments
const url = 'https://projects.work.optidata.cloud/api/boards/1/cards/1/comments';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"content":"Looks good — ship it 🚀"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://projects.work.optidata.cloud/api/boards/1/cards/1/comments \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "content": "Looks good — ship it 🚀" }'Adds a comment authored by the caller. Requires interact permission
(comment-create policy). Blocked with 422 while the card has
unsatisfied required custom fields.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”board
required
integer
Board id.
card
required
integer
Card id (must belong to the board).
Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
content
required
Comment body (may contain @-mention markup).
string
Example
{ "content": "Looks good — ship it 🚀"}Responses
Section titled “Responses”The created comment.
Media typeapplication/json
object
id
integer
card_id
integer
user_id
Author user id.
integer
content
string
created_at
string format: date-time
updated_at
string format: date-time
Example
{ "id": 7001, "card_id": 9001, "user_id": 7, "content": "Looks good — ship it 🚀", "created_at": "2026-07-20T14:05:00.000000Z", "updated_at": "2026-07-20T14:05:00.000000Z"}Missing, invalid or expired bearer passport.
Media typeapplication/json
object
error
string
Example
{ "error": "JWT passport exception: Missing bearer token in request"}The authenticated user lacks the required board permission.
Media typeapplication/json
object
message
string
Example
{ "message": "This action is unauthorized."}Resource not found, or a nested resource does not belong to its parent in the path.
Media typeapplication/json
object
message
string
Example
{ "message": "Not found."}Validation failed.
Media typeapplication/json
object
message
First validation error message.
string
errors
Map of field name → list of error messages.
object
key
additional properties
Array<string>
Example
{ "message": "The name field is required.", "errors": { "name": [ "The name field is required." ] }}