Update Comments
curl --request POST \
--url https://api.velt.dev/v2/commentannotations/comments/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"organizationId": "<string>",
"documentId": "<string>",
"annotationId": "<string>",
"commentIds": [
123
],
"triggerNotification": true,
"updatedData": {
"commentText": "<string>",
"commentHtml": "<string>",
"context": {},
"isCommentResolverUsed": true,
"isCommentTextAvailable": true,
"progress": {},
"actions": [
{}
],
"from": {},
"taggedUserContacts": [
{
"text": "<string>",
"userId": "<string>",
"contact": {
"email": "<string>",
"name": "<string>",
"userId": "<string>"
}
}
],
"attachments": [
{
"attachmentId": 123,
"name": "<string>",
"bucketPath": "<string>",
"size": 123,
"type": "<string>",
"url": "<string>",
"thumbnail": "<string>",
"mimeType": "<string>",
"metadata": {}
}
]
}
}
}
'import requests
url = "https://api.velt.dev/v2/commentannotations/comments/update"
payload = { "data": {
"organizationId": "<string>",
"documentId": "<string>",
"annotationId": "<string>",
"commentIds": [123],
"triggerNotification": True,
"updatedData": {
"commentText": "<string>",
"commentHtml": "<string>",
"context": {},
"isCommentResolverUsed": True,
"isCommentTextAvailable": True,
"progress": {},
"actions": [{}],
"from": {},
"taggedUserContacts": [
{
"text": "<string>",
"userId": "<string>",
"contact": {
"email": "<string>",
"name": "<string>",
"userId": "<string>"
}
}
],
"attachments": [
{
"attachmentId": 123,
"name": "<string>",
"bucketPath": "<string>",
"size": 123,
"type": "<string>",
"url": "<string>",
"thumbnail": "<string>",
"mimeType": "<string>",
"metadata": {}
}
]
}
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
organizationId: '<string>',
documentId: '<string>',
annotationId: '<string>',
commentIds: [123],
triggerNotification: true,
updatedData: {
commentText: '<string>',
commentHtml: '<string>',
context: {},
isCommentResolverUsed: true,
isCommentTextAvailable: true,
progress: {},
actions: [{}],
from: {},
taggedUserContacts: [
{
text: '<string>',
userId: '<string>',
contact: {email: '<string>', name: '<string>', userId: '<string>'}
}
],
attachments: [
{
attachmentId: 123,
name: '<string>',
bucketPath: '<string>',
size: 123,
type: '<string>',
url: '<string>',
thumbnail: '<string>',
mimeType: '<string>',
metadata: {}
}
]
}
}
})
};
fetch('https://api.velt.dev/v2/commentannotations/comments/update', 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://api.velt.dev/v2/commentannotations/comments/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'organizationId' => '<string>',
'documentId' => '<string>',
'annotationId' => '<string>',
'commentIds' => [
123
],
'triggerNotification' => true,
'updatedData' => [
'commentText' => '<string>',
'commentHtml' => '<string>',
'context' => [
],
'isCommentResolverUsed' => true,
'isCommentTextAvailable' => true,
'progress' => [
],
'actions' => [
[
]
],
'from' => [
],
'taggedUserContacts' => [
[
'text' => '<string>',
'userId' => '<string>',
'contact' => [
'email' => '<string>',
'name' => '<string>',
'userId' => '<string>'
]
]
],
'attachments' => [
[
'attachmentId' => 123,
'name' => '<string>',
'bucketPath' => '<string>',
'size' => 123,
'type' => '<string>',
'url' => '<string>',
'thumbnail' => '<string>',
'mimeType' => '<string>',
'metadata' => [
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$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://api.velt.dev/v2/commentannotations/comments/update"
payload := strings.NewReader("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-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.post("https://api.velt.dev/v2/commentannotations/comments/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/commentannotations/comments/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "Comment updated successfully.",
"data": {
"607395": {
"success": true,
"id": 607395,
"message": "Updated successfully"
}
}
}
}
Comments
Update Comments
POST
/
v2
/
commentannotations
/
comments
/
update
Update Comments
curl --request POST \
--url https://api.velt.dev/v2/commentannotations/comments/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"organizationId": "<string>",
"documentId": "<string>",
"annotationId": "<string>",
"commentIds": [
123
],
"triggerNotification": true,
"updatedData": {
"commentText": "<string>",
"commentHtml": "<string>",
"context": {},
"isCommentResolverUsed": true,
"isCommentTextAvailable": true,
"progress": {},
"actions": [
{}
],
"from": {},
"taggedUserContacts": [
{
"text": "<string>",
"userId": "<string>",
"contact": {
"email": "<string>",
"name": "<string>",
"userId": "<string>"
}
}
],
"attachments": [
{
"attachmentId": 123,
"name": "<string>",
"bucketPath": "<string>",
"size": 123,
"type": "<string>",
"url": "<string>",
"thumbnail": "<string>",
"mimeType": "<string>",
"metadata": {}
}
]
}
}
}
'import requests
url = "https://api.velt.dev/v2/commentannotations/comments/update"
payload = { "data": {
"organizationId": "<string>",
"documentId": "<string>",
"annotationId": "<string>",
"commentIds": [123],
"triggerNotification": True,
"updatedData": {
"commentText": "<string>",
"commentHtml": "<string>",
"context": {},
"isCommentResolverUsed": True,
"isCommentTextAvailable": True,
"progress": {},
"actions": [{}],
"from": {},
"taggedUserContacts": [
{
"text": "<string>",
"userId": "<string>",
"contact": {
"email": "<string>",
"name": "<string>",
"userId": "<string>"
}
}
],
"attachments": [
{
"attachmentId": 123,
"name": "<string>",
"bucketPath": "<string>",
"size": 123,
"type": "<string>",
"url": "<string>",
"thumbnail": "<string>",
"mimeType": "<string>",
"metadata": {}
}
]
}
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
organizationId: '<string>',
documentId: '<string>',
annotationId: '<string>',
commentIds: [123],
triggerNotification: true,
updatedData: {
commentText: '<string>',
commentHtml: '<string>',
context: {},
isCommentResolverUsed: true,
isCommentTextAvailable: true,
progress: {},
actions: [{}],
from: {},
taggedUserContacts: [
{
text: '<string>',
userId: '<string>',
contact: {email: '<string>', name: '<string>', userId: '<string>'}
}
],
attachments: [
{
attachmentId: 123,
name: '<string>',
bucketPath: '<string>',
size: 123,
type: '<string>',
url: '<string>',
thumbnail: '<string>',
mimeType: '<string>',
metadata: {}
}
]
}
}
})
};
fetch('https://api.velt.dev/v2/commentannotations/comments/update', 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://api.velt.dev/v2/commentannotations/comments/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'organizationId' => '<string>',
'documentId' => '<string>',
'annotationId' => '<string>',
'commentIds' => [
123
],
'triggerNotification' => true,
'updatedData' => [
'commentText' => '<string>',
'commentHtml' => '<string>',
'context' => [
],
'isCommentResolverUsed' => true,
'isCommentTextAvailable' => true,
'progress' => [
],
'actions' => [
[
]
],
'from' => [
],
'taggedUserContacts' => [
[
'text' => '<string>',
'userId' => '<string>',
'contact' => [
'email' => '<string>',
'name' => '<string>',
'userId' => '<string>'
]
]
],
'attachments' => [
[
'attachmentId' => 123,
'name' => '<string>',
'bucketPath' => '<string>',
'size' => 123,
'type' => '<string>',
'url' => '<string>',
'thumbnail' => '<string>',
'mimeType' => '<string>',
'metadata' => [
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$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://api.velt.dev/v2/commentannotations/comments/update"
payload := strings.NewReader("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-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.post("https://api.velt.dev/v2/commentannotations/comments/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/commentannotations/comments/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"annotationId\": \"<string>\",\n \"commentIds\": [\n 123\n ],\n \"triggerNotification\": true,\n \"updatedData\": {\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"progress\": {},\n \"actions\": [\n {}\n ],\n \"from\": {},\n \"taggedUserContacts\": [\n {\n \"text\": \"<string>\",\n \"userId\": \"<string>\",\n \"contact\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"userId\": \"<string>\"\n }\n }\n ],\n \"attachments\": [\n {\n \"attachmentId\": 123,\n \"name\": \"<string>\",\n \"bucketPath\": \"<string>\",\n \"size\": 123,\n \"type\": \"<string>\",\n \"url\": \"<string>\",\n \"thumbnail\": \"<string>\",\n \"mimeType\": \"<string>\",\n \"metadata\": {}\n }\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "Comment updated successfully.",
"data": {
"607395": {
"success": true,
"id": 607395,
"message": "Updated successfully"
}
}
}
}
Use this API to update comments within a specific CommentAnnotation.
Endpoint
POST https://api.velt.dev/v2/commentannotations/comments/update
Headers
string
required
Your API key.
string
required
Your Auth Token.
Body
Params
object
required
Show properties
Show properties
string
required
Organization ID
string
required
Document ID
string
required
Comment Annotation ID
number[]
required
Comment IDs
boolean
When enabled, this update triggers exactly one notification through the same funnel as a new comment, useful for notifying once when a progress comment finishes. Defaults to
false, is never persisted onto the comment, and must be sent at this root level, not inside updatedData.object
required
Comment data
Show properties
Show properties
string
Comment content in plain text string
string
Comment content in HTML string
object
Custom key/value metadata object. This is used to store any additional information about the comment.
boolean
Use this for self-hosting comments data. Set this as true if you are comments resolver data provider in the SDK.
boolean
Use this for self-hosting comments data. Set this as true if this comment will have text content. Sometimes, comments might only have attachments and in that case, set this as false.
CommentProgress
Replaces the stored
progress object outright; it is not deep-merged, so send the full object you want stored. See CommentProgress for the full shape. steps is capped at 100 entries.CommentAction[]
Replaces the stored
actions array outright. Capped at 20 entries. See CommentAction for the full shape.User
required
User object from whom the comment is added
object[]
object[]
Array of attachments to include with the comment. See Attachment for full schema details.
Show properties
Show properties
number
required
Unique identifier for the attachment
string
File name of the attachment
string
Path to the file in storage bucket
number
File size in bytes
string
File type (e.g., “image”, “video”, “document”)
string
Download URL of the attachment
string
Thumbnail URL of the attachment
string
MIME type of the attachment (e.g., “image/png”, “video/mp4”)
object
Custom metadata for the attachment (e.g., dimensions, timestamps, etc.)
Every update rewrites the entire annotation document, so keep
progress updates to roughly one write per second per comment. Send a step’s final label rather than every intermediate token.Example Requests
1. Update comment in a CommentAnnotation by organizationId, documentId, annotationId and commentId
{
"data": {
"organizationId": "yourOrganizationId",
"documentId": "yourDocumentId",
"annotationId": "yourAnnotationId",
"commentIds": [
153783,
607395
],
"updatedData": {
"commentText": "Sample Updated Comment",
"commentHtml": "<div>Hello Updated</div>"
}
}
}
2. Update comment with attachments
{
"data": {
"organizationId": "yourOrganizationId",
"documentId": "yourDocumentId",
"annotationId": "yourAnnotationId",
"commentIds": [
123456
],
"updatedData": {
"commentText": "Updated comment text with new attachments",
"commentHtml": "<p>Updated comment text with <em>new attachments</em></p>",
"attachments": [
{
"attachmentId": 100001,
"name": "updated-screenshot.png",
"bucketPath": "attachments/org-123/doc-456/updated-screenshot.png",
"size": 1536000,
"type": "image",
"url": "https://storage.googleapis.com/bucket/updated-screenshot.png",
"thumbnail": "https://storage.googleapis.com/bucket/updated-screenshot_thumb.png",
"mimeType": "image/png",
"metadata": {
"width": 1920,
"height": 1080,
"updatedAt": 1696122000000
}
}
]
}
}
}
3. Complete a progress comment and trigger a notification
{
"data": {
"organizationId": "yourOrganizationId",
"documentId": "yourDocumentId",
"annotationId": "yourAnnotationId",
"commentIds": [
153783
],
"triggerNotification": true,
"updatedData": {
"commentText": "Here is the answer.",
"progress": { "state": "completed" },
"actions": [
{ "id": "approve", "label": "Approve" }
]
}
}
}
Response
Success Response
{
"result": {
"status": "success",
"message": "Comment updated successfully.",
"data": {
"607395": {
"success": true,
"id": 607395,
"message": "Updated successfully"
}
}
}
}
Failure Response
{
"error": {
"message": "ERROR_MESSAGE",
"status": "INVALID_ARGUMENT"
}
}
{
"result": {
"status": "success",
"message": "Comment updated successfully.",
"data": {
"607395": {
"success": true,
"id": 607395,
"message": "Updated successfully"
}
}
}
}
Was this page helpful?

