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:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID |
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
sort | string | -createdAt | Sort order (prefix with - for descending) |
limit | integer | - | 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.
{
"_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
}
}
}
]
}
}
Response Fields:
| Field | Type | Description |
|---|---|---|
id | string | Comment UUID |
message | string | Comment text |
userId | string | Username of commenter |
reportId | string | Associated report ID |
parentId | string | Parent comment ID (null for top-level) |
createdAt | string | Creation timestamp |
updatedAt | string | Last 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:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID |
Request Body:
{
"message": "This is a great report! Can we add more visualizations?"
}
Required Fields:
| Field | Type | Description |
|---|---|---|
message | string | Comment text |
Response:
Responds 201 Created with the new comment and a Location header.
{
"message": "Numbers look great this quarter."
}
{
"_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
}
Behavior:
- Comment is associated with the authenticated user
- Creates a
reportAddedCommentactivity 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 commentPUT /api/comments/\{id\}- Update comment textDELETE /api/comments/\{id\}- Delete a commentGET /api/comments/\{id\}/replies- Get nested replies
See the Comment API documentation for full details.