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>"
]
}
}
]
}
}
'{
"result": {
"status": "success",
"message": "Comment Annotation(s) added successfully.",
"data": {
"-O0mpUziLcBwzREvZKs6": {
"success": true,
"annotationId": "-O0mpUziLcBwzREvZKs6",
"commentIds": [
126535
],
"message": "Added Successfully"
}
}
}
}
Comments Annotations
Add Comment Annotations
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>"
]
}
}
]
}
}
'{
"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.
In this example,
To attach a finding from an agent run through your own framework, use
- 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
Your API key.
Your Auth Token.
Body
Params
Show properties
Show properties
Organization ID
Document ID
If set to true, a new organization will be created (if it doesn’t exist) before the annotation is added.
If set to true, a new document will be created (if it doesn’t exist) before the annotation is added.
When enabled, verifies the user has access to the document before creating comment annotations.
This ensures annotations respect document access permissions configured via Access Control or Permission Provider.Default:
falseShow properties
Show properties
Custom Annotation ID. If not provided, Velt will generate a unique ID for the annotation.
Target Element
Show properties
Show properties
Element DOM Id. When used with
targetText, defines the text search boundaries for locating text comments within the specified element.Target Text. Provide this if you want to add comment annotation on the provided text content.
Occurrence. Provide this if you want to add comment annotation on a text content.
Select All Content. Provide this if you want to select and add comment annotation on the entire text content of the target elementId.
Array of Comment Data
Show properties
Show properties
Custom Comment ID. If not provided, Velt will generate a unique ID for the comment.
Comment content in plain text string. To tag users, wrap their userId in double curly braces like
{{userId}}. The frontend will replace this with the user’s name.Comment content in HTML string. To tag users, wrap their userId in double curly braces like
{{userId}}. The frontend will replace this with the user’s name.Custom key/value metadata object. This is used to store any additional information about the comment.
Use this for self-hosting comments data. Set this as true if you are comments resolver data provider in the SDK.
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.
When enabled, adding comments via the REST API will trigger in-app notifications, email notifications to relevant users and also trigger webhooks matching the SDK’s native notification behavior. Default: false.
When enabled, adding comments via the REST API will create activity log records matching the SDK’s native activity log behavior. Default: false.
User object from whom the comment is added
Created At timestamp (in milliseconds since epoch).
Last Updated timestamp (in milliseconds since epoch).
Array of tagged user contacts. Use this field to provide information about users tagged in the comment. Each userId wrapped in
{{userId}} in commentText or commentHtml should have a corresponding entry here so the frontend can replace it with the user’s name.Show properties
Show properties
User ID of the tagged user. This should match the userId used in
{{userId}} syntax within commentText or commentHtml.Marks this comment as agent-authored (an agent finding or an agent reply). V2 only. When set, the server stamps
sourceType: "agent" on the comment. When set on the root comment (commentData[0]), the server also generates the annotation-level agent block and stamps sourceType: "agent" on the annotation. Discriminated on agentSource.Show properties
Show properties
Origin of the agent. Must be one of:
velt or external.Agent ID. Required when
agentSource is velt (a built-in agent like spell-check, or a custom agent ID that is verified server-side). Optional and opaque (never validated) when agentSource is external.Execution / run ID for this agent invocation.
Display name for the agent. Required when
agentSource is external (the only source of truth for an external agent’s name). Not used for velt agents (their name is resolved server-side).Page URL associated with the finding.
Finding details produced by the agent. Additional custom fields are preserved.
Show properties
Show properties
Short finding title.
Finding description.
Severity of the finding. Must be one of:
critical, high, medium, low, or info.Unique identifier for the finding.
Type of finding. Must be one of:
text, pin, or page.Custom issue classification.
Confidence score for the finding. Integer between 0 and 100.
Suggested change in plain text.
Suggested fix for the finding.
Relevant HTML snippet for the finding.
CSS/HTML selector pointing to the finding location.
Provenance of the rule that triggered the finding. Must be one of:
instructions or knowledge.Knowledge section that triggered the finding.
Status
Show properties
Show properties
Status ID
Status Name
Type. Must be one of:
default, ongoing, or terminal.Text and comment pin color
Background color on the status indicator
Raw SVG of the icon. Either
svg or iconUrl is required.Icon URL. Either
svg or iconUrl is required.User object to whom the comment is assigned
Custom key/value metadata object
Created At timestamp (in milliseconds since epoch).
Last Updated timestamp (in milliseconds since epoch).
Annotation kind. Must be one of:
comment or suggestion. This is the source of truth for the suggestion classification; agent-produced findings should set suggestion. Defaults to comment when omitted.Caller-driven comment classification. Must be one of:
manual or chart. Defaults to manual when omitted.The legacy value
commentType: "suggestion" is still accepted and preserved for backward compatibility, but it no longer drives the suggestion classification. Use the annotation-level type: "suggestion" field instead.Controls who can see the annotation. Discriminated on
type. When omitted, the annotation defaults to public.Show properties
Show properties
Visibility type. Must be one of:
public, organizationPrivate, or restricted.public: Visible to everyone.organizationPrivate: Visible only to users in the specified organization. RequiresorganizationId.restricted: Visible only to the specified users (private comment). RequiresuserIds.
Organization ID whose users can see the annotation. Required when
type is organizationPrivate.User IDs allowed to see the annotation. Required (non-empty) when
type is restricted.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"
}
}
]
}
]
}
]
}
}
{{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)
Settype: "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"
}
}
}
]
}
]
}
}
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
Usevisibility 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"
}
}
}
}
Was this page helpful?
⌘I

