API REFERENCE
Add Task Comment
On this page
/api/projects/{projectId}/tasks/{taskId}/commentsPost a comment on a task, attributed to the authenticated account. Comments are append-only plain text: there is no edit and no delete.
Authentication
x-api-key in header
bearerAuth bearer
Request
curl --request POST \
--url 'https://api.recoupable.dev/api/projects/YOUR_PROJECT_ID/tasks/YOUR_TASK_ID/comments' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"body": "Got it. Sending the login over this week."
}'Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.
Parameters
Path parameters
projectIdstringrequiredThe project's UUID.
taskIdstringrequiredThe task's UUID.
Request body required
The comment to post.
application/json
bodystringrequiredPlain text. No markdown, no mentions, no attachments. Comments are append-only: there is no edit or delete.
minLength: 1 · maxLength: 4000
A client reply
{
"body": "Got it. Sending the login over this week."
}Responses
201Comment posted.+
application/json
statusstringrequiredcommentobjectrequiredProperties for comment
idstringrequiredformat: uuid
task_idstringrequiredformat: uuid
account_idstringrequiredformat: uuid
author_namestringnullableThe author's accounts.name, resolved server-side. Frequently null; render a fallback.
bodystringrequiredcreated_atstringrequiredformat: date-time
400Bad request — invalid path parameter or request body.+
application/json
statusstring · enumrequiredAlways "error" for error responses.
Values: "error"
errorstringrequiredHuman-readable error message.
messagestringCarries the message in place of error when the failure comes from the authentication layer, so a 401 raised while verifying the credential reads message and every other error reads error.
401Unauthorized — missing or invalid credentials.+
application/json
statusstring · enumrequiredAlways "error" for error responses.
Values: "error"
errorstringrequiredHuman-readable error message.
messagestringCarries the message in place of error when the failure comes from the authentication layer, so a 401 raised while verifying the credential reads message and every other error reads error.
404Not found — either no project or task with this id exists, or the authenticated account is not a collaborator on it. The two cases are deliberately indistinguishable so the response cannot be used to discover which project ids are real.+
application/json
statusstring · enumrequiredAlways "error" for error responses.
Values: "error"
errorstringrequiredHuman-readable error message.
messagestringCarries the message in place of error when the failure comes from the authentication layer, so a 401 raised while verifying the credential reads message and every other error reads error.
500Internal server error.+
application/json
statusstring · enumrequiredAlways "error" for error responses.
Values: "error"
errorstringrequiredHuman-readable error message.
messagestringCarries the message in place of error when the failure comes from the authentication layer, so a 401 raised while verifying the credential reads message and every other error reads error.
Full specification
Download the OpenAPI file for complete schemas, constraints, and examples.
Download projects.jsonView operation source
{
"summary": "Add task comment",
"description": "Post a comment on a task, attributed to the authenticated account. Comments are append-only plain text: there is no edit and no delete.",
"security": [
{
"apiKeyAuth": []
},
{
"bearerAuth": []
}
],
"parameters": [
{
"name": "projectId",
"in": "path",
"required": true,
"description": "The project's UUID.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "taskId",
"in": "path",
"required": true,
"description": "The task's UUID.",
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"description": "The comment to post.",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateProjectCommentRequest"
},
"examples": {
"comment": {
"summary": "A client reply",
"value": {
"body": "Got it. Sending the login over this week."
}
}
}
}
}
},
"responses": {
"201": {
"description": "Comment posted.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectCommentResponse"
}
}
}
},
"400": {
"description": "Bad request — invalid path parameter or request body.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"401": {
"description": "Unauthorized — missing or invalid credentials.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"404": {
"description": "Not found — either no project or task with this id exists, or the authenticated account is not a collaborator on it. The two cases are deliberately indistinguishable so the response cannot be used to discover which project ids are real.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"500": {
"description": "Internal server error.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}