Skip to main content

Comments

Add and manage discussion comments on reports.

Overview

Comments allow users to discuss and annotate reports. Comments support threaded replies and are associated with user accounts.

GET /api/reports/{id}/comments

Get all top-level comments for a report.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringReport ID

Query Parameters:

ParameterTypeDefaultDescription
sortstring-createdAtSort order (prefix with - for descending)
limitinteger-Maximum number of comments to return

Response:

A HAL collection under _embedded["inf:comment"], newest first, each comment embedding its author and a replies link.

List report commentsGET /api/reports/admin:sales-overview/comments
Top-level comments (no parent) newest first, each embedding its author and a replies link.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Asales-overview/comments?sort=-createdAt&limit=0"
}
},
"start": 0,
"count": 1,
"total": 1,
"_embedded": {
"inf:comment": [
{
"_links": {
"self": {
"href": "https://informer.example.com/api/comments/00000000-0000-4000-8000-000000000001"
},
"inf:comments": {
"href": "https://informer.example.com/api/comments/00000000-0000-4000-8000-000000000001/replies"
}
},
"permissions": {
"edit": true,
"delete": true
},
"id": "00000000-0000-4000-8000-000000000001",
"message": "Numbers look great this quarter.",
"public": false,
"userId": "admin",
"datasetId": null,
"datasourceId": null,
"reportId": "00000000-0000-4000-8000-000000000002",
"queryId": null,
"teamId": null,
"jobId": null,
"templateId": null,
"assistantId": null,
"libraryId": null,
"mentions": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tenant": "acme",
"parentId": null,
"_embedded": {
"inf:user": {
"_links": {
"self": {
"href": "https://informer.example.com/api/users/admin"
},
"inf:memberships": {
"href": "https://informer.example.com/api/users/admin/memberships"
},
"inf:avatar-upload": {
"href": "https://informer.example.com/api/users/admin/_upload/{uploadId}/avatar-upload",
"templated": true
},
"inf:password": {
"href": "https://informer.example.com/api/users/admin/password"
},
"inf:feed": {
"href": "https://informer.example.com/api/users/admin/feed"
},
"inf:viewed-feed": {
"href": "https://informer.example.com/api/users/admin/_markFeedViewed"
},
"inf:superuser": {
"href": "https://informer.example.com/api/users/admin/superuser"
}
},
"permissions": {
"changeDomain": false,
"changeProfile": true,
"changePassword": true,
"delete": false,
"edit": true,
"reassign": true,
"superuser": true,
"enable": true,
"changeTheme": true,
"lock": true,
"setGlobalPermissions": true,
"manageLogin": true
},
"domain": "local",
"username": "admin",
"displayName": "acme Administrator",
"familyName": "Administrator",
"givenName": "acme",
"middleName": null,
"email": null,
"data": null,
"superuser": true,
"timezone": "America/New_York",
"settings": {
"log": {
"log": false,
"info": false,
"warn": false,
"debug": false,
"error": true,
"remote": false
}
},
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": true,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": true
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"mfaConfig": {},
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"initials": "NA",
"colorIndex": 4,
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"managesPassword": true
}
}
}
]
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

Response Fields:

FieldTypeDescription
idstringComment UUID
messagestringComment text
userIdstringUsername of commenter
reportIdstringAssociated report ID
parentIdstringParent comment ID (null for top-level)
createdAtstringCreation timestamp
updatedAtstringLast update timestamp

HAL Links:

  • inf:comments - Link to nested replies (if this comment has children)

HAL Query Template:

{?sort,limit}


POST /api/reports/{id}/comments

Add a new comment to a report.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringReport ID

Request Body:

{
"message": "This is a great report! Can we add more visualizations?"
}

Required Fields:

FieldTypeDescription
messagestringComment text

Response:

Responds 201 Created with the new comment and a Location header.

Add a report commentPOST /api/reports/admin:sales-overview/comments
Responds 201 with a Location header pointing at the new comment.
Request body
{
"message": "Numbers look great this quarter."
}
Response · 201
{
"_links": {
"self": {
"href": "https://informer.example.com/api/comments/00000000-0000-4000-8000-000000000001"
}
},
"permissions": {
"edit": true,
"delete": true
},
"id": "00000000-0000-4000-8000-000000000001",
"public": false,
"tenant": "acme",
"message": "Numbers look great this quarter.",
"reportId": "00000000-0000-4000-8000-000000000002",
"userId": "admin",
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"mentions": null,
"teamId": null,
"_altid": null,
"datasetId": null,
"datasourceId": null,
"queryId": null,
"jobId": null,
"parentId": null,
"templateId": null,
"assistantId": null,
"libraryId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  • Comment is associated with the authenticated user
  • Creates a reportAddedComment activity entry
  • Executes in a database transaction

Use Case:

Allow users to discuss report findings, request changes, or provide feedback.


Threaded Replies

To reply to an existing comment, use the comment API endpoints (not documented here):

POST /api/comments/{parentId}/replies

This creates a child comment with parentId set to the parent comment's ID.


Comment Management

Comments can be managed via the Comment API endpoints:

  • GET /api/comments/\{id\} - Get a specific comment
  • PUT /api/comments/\{id\} - Update comment text
  • DELETE /api/comments/\{id\} - Delete a comment
  • GET /api/comments/\{id\}/replies - Get nested replies

See the Comment API documentation for full details.