curl --request PATCH \
--url https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "Make this button match the footer color.",
"mentioned_emails": [
"dana@acme.com"
]
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}"
payload = {
"content": "Make this button match the footer color.",
"mentioned_emails": ["dana@acme.com"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content: 'Make this button match the footer color.',
mentioned_emails: ['dana@acme.com']
})
};
fetch('https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'Make this button match the footer color.',
'mentioned_emails' => [
'dana@acme.com'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}"
payload := strings.NewReader("{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "68e2b7c4d4f0a9001c3e5a1c",
"content": "Make this button match the header color.",
"sender_id": "6820f41be7b91d003c45a20a",
"sender_name": "Dana Levi",
"sender_avatar_url": "https://lh3.googleusercontent.com/a/ACg8ocJ2",
"created_date": "2026-10-05T09:14:22.512000Z",
"edited_at": "2026-10-05T09:14:22.512000Z",
"reactions": {
"👍": [
"6820f41be7b91d003c45a20a"
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Edit comment
Replaces the text of a comment you wrote and sets its edited_at. Only the author can edit a comment, so replies from the builder agent can’t be edited.
mentioned_emails records who the comment mentions. Only emails that List mentionable users returns are kept, and the rest are dropped without an error. Mentioning someone sends them no email or notification, and responses never return the list. The list you send replaces the comment’s previous mentions.
The response’s reactions is always empty, even when the comment has reactions. Read them from List comments. Anyone with the app open in the builder sees the change right away.
This is limited to 120 requests per minute per app, shared by every other comments endpoint. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit. Every request that counts against the limit gets X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix time in seconds) headers, and a 429 also gets Retry-After in seconds. If the limiter itself is unavailable, requests go through without these headers.
curl --request PATCH \
--url https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "Make this button match the footer color.",
"mentioned_emails": [
"dana@acme.com"
]
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}"
payload = {
"content": "Make this button match the footer color.",
"mentioned_emails": ["dana@acme.com"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content: 'Make this button match the footer color.',
mentioned_emails: ['dana@acme.com']
})
};
fetch('https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'Make this button match the footer color.',
'mentioned_emails' => [
'dana@acme.com'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}"
payload := strings.NewReader("{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/comments/threads/{thread_id}/messages/{message_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"Make this button match the footer color.\",\n \"mentioned_emails\": [\n \"dana@acme.com\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "68e2b7c4d4f0a9001c3e5a1c",
"content": "Make this button match the header color.",
"sender_id": "6820f41be7b91d003c45a20a",
"sender_name": "Dana Levi",
"sender_avatar_url": "https://lh3.googleusercontent.com/a/ACg8ocJ2",
"created_date": "2026-10-05T09:14:22.512000Z",
"edited_at": "2026-10-05T09:14:22.512000Z",
"reactions": {
"👍": [
"6820f41be7b91d003c45a20a"
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app.
ID of the comment thread, from thread.id in List comments.
ID of a comment in the thread: comment.id for the first comment or a replies[].id, from List comments.
Body
The new text of a comment.
Response
The edited comment.
One comment: the first comment of a thread or a reply.
ID of the comment.
"68e2b7c4d4f0a9001c3e5a1c"
Text of the comment.
"Make this button match the header color."
ID of the Base44 user who wrote it, or base44 for a reply from the builder agent.
"6820f41be7b91d003c45a20a"
Name of the author when they wrote it, or their email when they had no name. Base44 for the builder agent.
"Dana Levi"
URL of the author's profile image, or null when they have none.
"https://lh3.googleusercontent.com/a/ACg8ocJ2"
When the comment was posted, in UTC.
"2026-10-05T09:14:22.512000Z"
When the comment was last edited, in UTC, or null when it never was.
"2026-10-05T09:14:22.512000Z"
Each emoji reacted with, mapped to the IDs of the users who reacted with it.
Show child attributes
Show child attributes
{ "👍": ["6820f41be7b91d003c45a20a"] }
Was this page helpful?