Skip to main content
POST
/
v2
/
commentannotations
/
add
Add Comment Annotations
curl --request POST \
  --url https://api.velt.dev/v2/commentannotations/add \
  --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>",
    "createOrganization": true,
    "createDocument": true,
    "verifyUserPermissions": true,
    "commentAnnotations": [
      {
        "annotationId": "<string>",
        "location": {
          "id": "<string>",
          "locationName": "<string>"
        },
        "targetElement": {
          "elementId": "<string>",
          "targetText": "<string>",
          "occurrence": 123,
          "selectAllContent": true
        },
        "commentData": [
          {
            "commentId": 123,
            "commentText": "<string>",
            "commentHtml": "<string>",
            "context": {},
            "isCommentResolverUsed": true,
            "isCommentTextAvailable": true,
            "triggerNotification": true,
            "triggerActivities": true,
            "from": {},
            "createdAt": 123,
            "lastUpdated": 123,
            "taggedUserContacts": [
              {
                "userId": "<string>",
                "contact": {
                  "userId": "<string>",
                  "name": "<string>",
                  "email": "<string>"
                }
              }
            ],
            "agent": {
              "agentSource": "<string>",
              "agentId": "<string>",
              "executionId": "<string>",
              "agentName": "<string>",
              "url": "<string>",
              "reason": {
                "title": "<string>",
                "description": "<string>",
                "severity": "<string>",
                "findingId": "<string>",
                "findingType": "<string>",
                "issueType": "<string>",
                "confidence": 123,
                "suggestion": "<string>",
                "suggestedFix": "<string>",
                "htmlSnippet": "<string>",
                "htmlSelector": "<string>",
                "source": "<string>",
                "knowledgeSection": "<string>"
              }
            }
          }
        ],
        "status": {
          "id": "<string>",
          "name": "<string>",
          "type": "<string>",
          "color": "<string>",
          "lightColor": "<string>",
          "svg": "<string>",
          "iconUrl": "<string>"
        },
        "assignedTo": {},
        "context": {},
        "createdAt": 123,
        "lastUpdated": 123,
        "priority": {
          "id": "<string>",
          "color": "<string>",
          "name": "<string>",
          "lightColor": "<string>"
        },
        "type": "<string>",
        "commentType": "<string>",
        "visibility": {
          "type": "<string>",
          "organizationId": "<string>",
          "userIds": [
            "<string>"
          ]
        }
      }
    ]
  }
}
'
import requests

url = "https://api.velt.dev/v2/commentannotations/add"

payload = { "data": {
"organizationId": "<string>",
"documentId": "<string>",
"createOrganization": True,
"createDocument": True,
"verifyUserPermissions": True,
"commentAnnotations": [
{
"annotationId": "<string>",
"location": {
"id": "<string>",
"locationName": "<string>"
},
"targetElement": {
"elementId": "<string>",
"targetText": "<string>",
"occurrence": 123,
"selectAllContent": True
},
"commentData": [
{
"commentId": 123,
"commentText": "<string>",
"commentHtml": "<string>",
"context": {},
"isCommentResolverUsed": True,
"isCommentTextAvailable": True,
"triggerNotification": True,
"triggerActivities": True,
"from": {},
"createdAt": 123,
"lastUpdated": 123,
"taggedUserContacts": [
{
"userId": "<string>",
"contact": {
"userId": "<string>",
"name": "<string>",
"email": "<string>"
}
}
],
"agent": {
"agentSource": "<string>",
"agentId": "<string>",
"executionId": "<string>",
"agentName": "<string>",
"url": "<string>",
"reason": {
"title": "<string>",
"description": "<string>",
"severity": "<string>",
"findingId": "<string>",
"findingType": "<string>",
"issueType": "<string>",
"confidence": 123,
"suggestion": "<string>",
"suggestedFix": "<string>",
"htmlSnippet": "<string>",
"htmlSelector": "<string>",
"source": "<string>",
"knowledgeSection": "<string>"
}
}
}
],
"status": {
"id": "<string>",
"name": "<string>",
"type": "<string>",
"color": "<string>",
"lightColor": "<string>",
"svg": "<string>",
"iconUrl": "<string>"
},
"assignedTo": {},
"context": {},
"createdAt": 123,
"lastUpdated": 123,
"priority": {
"id": "<string>",
"color": "<string>",
"name": "<string>",
"lightColor": "<string>"
},
"type": "<string>",
"commentType": "<string>",
"visibility": {
"type": "<string>",
"organizationId": "<string>",
"userIds": ["<string>"]
}
}
]
} }
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>',
createOrganization: true,
createDocument: true,
verifyUserPermissions: true,
commentAnnotations: [
{
annotationId: '<string>',
location: {id: '<string>', locationName: '<string>'},
targetElement: {
elementId: '<string>',
targetText: '<string>',
occurrence: 123,
selectAllContent: true
},
commentData: [
{
commentId: 123,
commentText: '<string>',
commentHtml: '<string>',
context: {},
isCommentResolverUsed: true,
isCommentTextAvailable: true,
triggerNotification: true,
triggerActivities: true,
from: {},
createdAt: 123,
lastUpdated: 123,
taggedUserContacts: [
{
userId: '<string>',
contact: {userId: '<string>', name: '<string>', email: '<string>'}
}
],
agent: {
agentSource: '<string>',
agentId: '<string>',
executionId: '<string>',
agentName: '<string>',
url: '<string>',
reason: {
title: '<string>',
description: '<string>',
severity: '<string>',
findingId: '<string>',
findingType: '<string>',
issueType: '<string>',
confidence: 123,
suggestion: '<string>',
suggestedFix: '<string>',
htmlSnippet: '<string>',
htmlSelector: '<string>',
source: '<string>',
knowledgeSection: '<string>'
}
}
}
],
status: {
id: '<string>',
name: '<string>',
type: '<string>',
color: '<string>',
lightColor: '<string>',
svg: '<string>',
iconUrl: '<string>'
},
assignedTo: {},
context: {},
createdAt: 123,
lastUpdated: 123,
priority: {id: '<string>', color: '<string>', name: '<string>', lightColor: '<string>'},
type: '<string>',
commentType: '<string>',
visibility: {type: '<string>', organizationId: '<string>', userIds: ['<string>']}
}
]
}
})
};

fetch('https://api.velt.dev/v2/commentannotations/add', 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/add",
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>',
'createOrganization' => true,
'createDocument' => true,
'verifyUserPermissions' => true,
'commentAnnotations' => [
[
'annotationId' => '<string>',
'location' => [
'id' => '<string>',
'locationName' => '<string>'
],
'targetElement' => [
'elementId' => '<string>',
'targetText' => '<string>',
'occurrence' => 123,
'selectAllContent' => true
],
'commentData' => [
[
'commentId' => 123,
'commentText' => '<string>',
'commentHtml' => '<string>',
'context' => [

],
'isCommentResolverUsed' => true,
'isCommentTextAvailable' => true,
'triggerNotification' => true,
'triggerActivities' => true,
'from' => [

],
'createdAt' => 123,
'lastUpdated' => 123,
'taggedUserContacts' => [
[
'userId' => '<string>',
'contact' => [
'userId' => '<string>',
'name' => '<string>',
'email' => '<string>'
]
]
],
'agent' => [
'agentSource' => '<string>',
'agentId' => '<string>',
'executionId' => '<string>',
'agentName' => '<string>',
'url' => '<string>',
'reason' => [
'title' => '<string>',
'description' => '<string>',
'severity' => '<string>',
'findingId' => '<string>',
'findingType' => '<string>',
'issueType' => '<string>',
'confidence' => 123,
'suggestion' => '<string>',
'suggestedFix' => '<string>',
'htmlSnippet' => '<string>',
'htmlSelector' => '<string>',
'source' => '<string>',
'knowledgeSection' => '<string>'
]
]
]
],
'status' => [
'id' => '<string>',
'name' => '<string>',
'type' => '<string>',
'color' => '<string>',
'lightColor' => '<string>',
'svg' => '<string>',
'iconUrl' => '<string>'
],
'assignedTo' => [

],
'context' => [

],
'createdAt' => 123,
'lastUpdated' => 123,
'priority' => [
'id' => '<string>',
'color' => '<string>',
'name' => '<string>',
'lightColor' => '<string>'
],
'type' => '<string>',
'commentType' => '<string>',
'visibility' => [
'type' => '<string>',
'organizationId' => '<string>',
'userIds' => [
'<string>'
]
]
]
]
]
]),
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/add"

payload := strings.NewReader("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"createOrganization\": true,\n \"createDocument\": true,\n \"verifyUserPermissions\": true,\n \"commentAnnotations\": [\n {\n \"annotationId\": \"<string>\",\n \"location\": {\n \"id\": \"<string>\",\n \"locationName\": \"<string>\"\n },\n \"targetElement\": {\n \"elementId\": \"<string>\",\n \"targetText\": \"<string>\",\n \"occurrence\": 123,\n \"selectAllContent\": true\n },\n \"commentData\": [\n {\n \"commentId\": 123,\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"triggerNotification\": true,\n \"triggerActivities\": true,\n \"from\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"taggedUserContacts\": [\n {\n \"userId\": \"<string>\",\n \"contact\": {\n \"userId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n }\n }\n ],\n \"agent\": {\n \"agentSource\": \"<string>\",\n \"agentId\": \"<string>\",\n \"executionId\": \"<string>\",\n \"agentName\": \"<string>\",\n \"url\": \"<string>\",\n \"reason\": {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"severity\": \"<string>\",\n \"findingId\": \"<string>\",\n \"findingType\": \"<string>\",\n \"issueType\": \"<string>\",\n \"confidence\": 123,\n \"suggestion\": \"<string>\",\n \"suggestedFix\": \"<string>\",\n \"htmlSnippet\": \"<string>\",\n \"htmlSelector\": \"<string>\",\n \"source\": \"<string>\",\n \"knowledgeSection\": \"<string>\"\n }\n }\n }\n ],\n \"status\": {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"color\": \"<string>\",\n \"lightColor\": \"<string>\",\n \"svg\": \"<string>\",\n \"iconUrl\": \"<string>\"\n },\n \"assignedTo\": {},\n \"context\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"priority\": {\n \"id\": \"<string>\",\n \"color\": \"<string>\",\n \"name\": \"<string>\",\n \"lightColor\": \"<string>\"\n },\n \"type\": \"<string>\",\n \"commentType\": \"<string>\",\n \"visibility\": {\n \"type\": \"<string>\",\n \"organizationId\": \"<string>\",\n \"userIds\": [\n \"<string>\"\n ]\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/add")
.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 \"createOrganization\": true,\n \"createDocument\": true,\n \"verifyUserPermissions\": true,\n \"commentAnnotations\": [\n {\n \"annotationId\": \"<string>\",\n \"location\": {\n \"id\": \"<string>\",\n \"locationName\": \"<string>\"\n },\n \"targetElement\": {\n \"elementId\": \"<string>\",\n \"targetText\": \"<string>\",\n \"occurrence\": 123,\n \"selectAllContent\": true\n },\n \"commentData\": [\n {\n \"commentId\": 123,\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"triggerNotification\": true,\n \"triggerActivities\": true,\n \"from\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"taggedUserContacts\": [\n {\n \"userId\": \"<string>\",\n \"contact\": {\n \"userId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n }\n }\n ],\n \"agent\": {\n \"agentSource\": \"<string>\",\n \"agentId\": \"<string>\",\n \"executionId\": \"<string>\",\n \"agentName\": \"<string>\",\n \"url\": \"<string>\",\n \"reason\": {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"severity\": \"<string>\",\n \"findingId\": \"<string>\",\n \"findingType\": \"<string>\",\n \"issueType\": \"<string>\",\n \"confidence\": 123,\n \"suggestion\": \"<string>\",\n \"suggestedFix\": \"<string>\",\n \"htmlSnippet\": \"<string>\",\n \"htmlSelector\": \"<string>\",\n \"source\": \"<string>\",\n \"knowledgeSection\": \"<string>\"\n }\n }\n }\n ],\n \"status\": {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"color\": \"<string>\",\n \"lightColor\": \"<string>\",\n \"svg\": \"<string>\",\n \"iconUrl\": \"<string>\"\n },\n \"assignedTo\": {},\n \"context\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"priority\": {\n \"id\": \"<string>\",\n \"color\": \"<string>\",\n \"name\": \"<string>\",\n \"lightColor\": \"<string>\"\n },\n \"type\": \"<string>\",\n \"commentType\": \"<string>\",\n \"visibility\": {\n \"type\": \"<string>\",\n \"organizationId\": \"<string>\",\n \"userIds\": [\n \"<string>\"\n ]\n }\n }\n ]\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.velt.dev/v2/commentannotations/add")

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 \"createOrganization\": true,\n \"createDocument\": true,\n \"verifyUserPermissions\": true,\n \"commentAnnotations\": [\n {\n \"annotationId\": \"<string>\",\n \"location\": {\n \"id\": \"<string>\",\n \"locationName\": \"<string>\"\n },\n \"targetElement\": {\n \"elementId\": \"<string>\",\n \"targetText\": \"<string>\",\n \"occurrence\": 123,\n \"selectAllContent\": true\n },\n \"commentData\": [\n {\n \"commentId\": 123,\n \"commentText\": \"<string>\",\n \"commentHtml\": \"<string>\",\n \"context\": {},\n \"isCommentResolverUsed\": true,\n \"isCommentTextAvailable\": true,\n \"triggerNotification\": true,\n \"triggerActivities\": true,\n \"from\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"taggedUserContacts\": [\n {\n \"userId\": \"<string>\",\n \"contact\": {\n \"userId\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n }\n }\n ],\n \"agent\": {\n \"agentSource\": \"<string>\",\n \"agentId\": \"<string>\",\n \"executionId\": \"<string>\",\n \"agentName\": \"<string>\",\n \"url\": \"<string>\",\n \"reason\": {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"severity\": \"<string>\",\n \"findingId\": \"<string>\",\n \"findingType\": \"<string>\",\n \"issueType\": \"<string>\",\n \"confidence\": 123,\n \"suggestion\": \"<string>\",\n \"suggestedFix\": \"<string>\",\n \"htmlSnippet\": \"<string>\",\n \"htmlSelector\": \"<string>\",\n \"source\": \"<string>\",\n \"knowledgeSection\": \"<string>\"\n }\n }\n }\n ],\n \"status\": {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"color\": \"<string>\",\n \"lightColor\": \"<string>\",\n \"svg\": \"<string>\",\n \"iconUrl\": \"<string>\"\n },\n \"assignedTo\": {},\n \"context\": {},\n \"createdAt\": 123,\n \"lastUpdated\": 123,\n \"priority\": {\n \"id\": \"<string>\",\n \"color\": \"<string>\",\n \"name\": \"<string>\",\n \"lightColor\": \"<string>\"\n },\n \"type\": \"<string>\",\n \"commentType\": \"<string>\",\n \"visibility\": {\n \"type\": \"<string>\",\n \"organizationId\": \"<string>\",\n \"userIds\": [\n \"<string>\"\n ]\n }\n }\n ]\n }\n}"

response = http.request(request)
puts response.read_body
{
   "result": {
       "status": "success",
       "message": "Comment Annotation(s) added successfully.",
       "data": {
           "-O0mpUziLcBwzREvZKs6": {
               "success": true,
               "annotationId": "-O0mpUziLcBwzREvZKs6",
               "commentIds": [
                   126535
               ],
               "message": "Added Successfully"
           }
       }
   }
}
Use this API to add comment annotations to a document within an organization.
  • You can add comments on an elemement, text or page.
  • You can provide HTML or text content.
  • Additional filters can be applied using location IDs.

Endpoint

POST https://api.velt.dev/v2/commentannotations/add

Headers

x-velt-api-key
string
required
Your API key.
x-velt-auth-token
string
required

Body

Params

data
object
required

Example Requests

Add comment annotation by organizationId, documentId and location

{
  "data": {
    "organizationId": "yourOrganizationId",
    "documentId": "yourDocumentId",
    "commentAnnotations": [
      {
        "location": {
          "id": "yourLocationId",
          "locationName": "yourLocationName"
        },
        "targetElement": {
          "elementId": "yourElementId",
          "targetText": "Your Target Text",
          "occurrence": 1,
          "selectAllContent": false
        },
        "commentData": [
          {
            "commentText": "Sample Comment",
            "commentHtml": "<div>Sample Comment</div>",
            "from": {
              "userId": "yourUserId",
              "name": "yourUserName",
              "email": "yourUserEmail",
            }
          }
        ]
      }
    ]
  }
}

Add comment annotation with user tagging

{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "commentAnnotations": [
      {
        "commentData": [
          {
            "triggerNotification": true,
            "commentText": "Hey {{user_sarah_chen}}, can you review this color scheme? I think we should use a darker shade for better contrast.",
            "commentHtml": "<p>Hey {{user_sarah_chen}}, can you review this color scheme? I think we should use a darker shade for better contrast.</p>",
            "from": {
              "userId": "user_john_smith",
              "name": "John Smith",
              "email": "john.smith@acme-corp.com"
            },
            "taggedUserContacts": [
              {
                "userId": "user_sarah_chen",
                "contact": {
                  "userId": "user_sarah_chen",
                  "name": "Sarah Chen",
                  "email": "sarah.chen@acme-corp.com"
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
In this example, {{user_sarah_chen}} in the commentText will be replaced with “Sarah Chen” on the frontend, displaying as “Hey Sarah Chen, can you review this color scheme? I think we should use a darker shade for better contrast.”

Add comment annotation with permission verification

{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "verifyUserPermissions": true,
    "commentAnnotations": [
      {
        "commentData": [
          {
            "commentText": "Please review this section",
            "from": {
              "userId": "user_john_smith",
              "name": "John Smith",
              "email": "john.smith@acme-corp.com"
            }
          }
        ]
      }
    ]
  }
}
When verifyUserPermissions is enabled, the API verifies the user has access to the document before creating the comment annotation. If verification fails, the request will be rejected.

Add comment annotation with activity tracking

{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "commentAnnotations": [
      {
        "commentData": [
          {
            "commentText": "This needs review",
            "triggerNotification": true,
            "triggerActivities": true,
            "from": {
              "userId": "user-1",
              "email": "user@example.com",
              "name": "User Name"
            }
          }
        ]
      }
    ]
  }
}

Add comment annotation with access context

{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "analytics-dashboard",
    "commentAnnotations": [
      {
        "context": {
          "access": {
            "entityId": "numberOfVisitors",
            "dashboardId": "myDashboard"
          }
        },
        "commentData": [
          {
            "commentText": "Traffic numbers look unusual today",
            "from": {
              "userId": "user_john_smith",
              "name": "John Smith",
              "email": "john.smith@acme-corp.com"
            }
          }
        ]
      }
    ]
  }
}

Add an agent suggestion (finding)

Set type: "suggestion" and attach an agent block to the root comment (commentData[0]). The server generates the annotation-level agent block and stamps sourceType: "agent".
{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "commentAnnotations": [
      {
        "type": "suggestion",
        "commentData": [
          {
            "commentText": "Heading has a spelling mistake: 'Welcom' should be 'Welcome'.",
            "from": {
              "userId": "spell-check",
              "name": "Spell Check Agent"
            },
            "agent": {
              "agentSource": "velt",
              "agentId": "spell-check",
              "executionId": "exec_123",
              "url": "https://example.com/design-mockup-v2",
              "reason": {
                "title": "Spelling error",
                "description": "The word 'Welcom' is misspelled.",
                "severity": "low",
                "findingType": "text",
                "confidence": 98,
                "suggestedFix": "Welcome",
                "source": "instructions"
              }
            }
          }
        ]
      }
    ]
  }
}
To attach a finding from an agent run through your own framework, use agentSource: "external" and supply your own agentName (and optionally agentId / executionId):
{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "commentAnnotations": [
      {
        "type": "suggestion",
        "commentData": [
          {
            "commentText": "This button has insufficient color contrast.",
            "from": {
              "userId": "a11y-bot"
            },
            "agent": {
              "agentSource": "external",
              "agentName": "Accessibility Bot",
              "agentId": "a11y-bot",
              "reason": {
                "title": "Low color contrast",
                "description": "Contrast ratio is 2.1:1, below the 4.5:1 WCAG AA threshold.",
                "severity": "high",
                "findingType": "pin"
              }
            }
          }
        ]
      }
    ]
  }
}

Add a private (restricted) comment annotation

Use visibility to limit who can see the annotation.
{
  "data": {
    "organizationId": "acme-corp",
    "documentId": "design-mockup-v2",
    "commentAnnotations": [
      {
        "visibility": {
          "type": "restricted",
          "userIds": ["user_sarah_chen", "user_john_smith"]
        },
        "commentData": [
          {
            "commentText": "Internal note: don't ship this section yet.",
            "from": {
              "userId": "user_john_smith",
              "name": "John Smith",
              "email": "john.smith@acme-corp.com"
            }
          }
        ]
      }
    ]
  }
}

Response

Success Response

{
   "result": {
       "status": "success",
       "message": "Comment Annotation(s) added successfully.",
       "data": {
           "-O0mpUziLcBwzREvZKs6": {
               "success": true,
               "annotationId": "-O0mpUziLcBwzREvZKs6",
               "commentIds": [
                   126535
               ],
               "message": "Added Successfully"
           }
       }
   }
}

Failure Response

{
  "error": {
    "message": "ERROR_MESSAGE",
    "status": "INVALID_ARGUMENT"
  }
}
{
   "result": {
       "status": "success",
       "message": "Comment Annotation(s) added successfully.",
       "data": {
           "-O0mpUziLcBwzREvZKs6": {
               "success": true,
               "annotationId": "-O0mpUziLcBwzREvZKs6",
               "commentIds": [
                   126535
               ],
               "message": "Added Successfully"
           }
       }
   }
}