Ownership & Favorites
Manage report ownership and user favorites.
Ownership
See Core CRUD - Owner Management for ownership endpoints:
GET /api/reports/\{id\}/owner- Get report ownerPUT /api/reports/\{id\}/owner- Change report owner
Favorites
Users can mark reports as favorites for quick access.
GET /api/reports/{id}/favorite
Check if a report is favorited by the current user.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID |
Response:
Whether the calling user has favorited this report.
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Asales-overview/favorite"
}
},
"permissions": {},
"id": "00000000-0000-4000-8000-000000000001",
"principalId": "admin",
"reportId": "00000000-0000-4000-8000-000000000002",
"datasetId": null,
"queryId": null,
"datasourceId": null,
"jobId": null,
"assistantId": null,
"templateId": null,
"libraryId": null,
"appId": null,
"integrationId": null,
"toolkitId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tenant": "acme"
}
PUT /api/reports/{id}/favorite
Mark a report as a favorite.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID |
Request Body:
Empty body or {}
Response:
Responds 200. Marks the report as a favorite for the calling user.
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Asales-overview/favorite"
}
},
"permissions": {},
"id": "00000000-0000-4000-8000-000000000001",
"tenant": "acme",
"reportId": "00000000-0000-4000-8000-000000000002",
"principalId": "admin",
"datasetId": null,
"queryId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"datasourceId": null,
"jobId": null,
"templateId": null,
"assistantId": null,
"libraryId": null,
"appId": null,
"integrationId": null,
"toolkitId": null
}
Behavior:
- Creates a favorite entry for the current user
- Idempotent - safe to call multiple times
- Favorites are user-specific (other users' favorites are not affected)
Use Case:
Allow users to bookmark frequently accessed reports.
DELETE /api/reports/{id}/favorite
Remove a report from favorites.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID |
Response:
Responds 200 on success.
Behavior:
- Removes the favorite entry for the current user
- Does not affect other users' favorites
- Safe to call even if not currently favorited
Use Case:
Remove a report from the user's favorites list.
Favorite Workflow
Add to favorites
// Check if already favorited
GET /api/reports/team:sales-dashboard/favorite
// Returns 404 if not favorited
// Add to favorites
PUT /api/reports/team:sales-dashboard/favorite
// Returns 200
Remove from favorites
DELETE /api/reports/team:sales-dashboard/favorite
// Returns 200
List user's favorites
// Use the search endpoint with a favorites filter
GET /api/reports-list
// Filter client-side for reports with favorite status
Copy Operation
POST /api/reports/{id}/_copy
Create a copy of a report.
Authentication: Required
Permissions: report:copy and reports:create
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Report ID to copy |
Request Body:
{
"name": "Copy of Sales Dashboard",
"progress": "progress-monitor-id"
}
Optional Fields:
| Field | Type | Description |
|---|---|---|
name | string | Name for the copied report (defaults to "Copy of [original name]") |
progress | string | Progress monitor ID for tracking |
Response:
Responds 201 Created with the copied report and a Location header.
{
"name": "Copy of Sales Overview"
}
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview"
},
"inf:owner": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/owner"
},
"inf:draft": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/draft"
},
"inf:user-settings": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/settings"
},
"inf:comments": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/comments{?sort,limit}",
"templated": true
},
"inf:report-shares": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/shares"
},
"inf:report-datasets": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/dataset-refs"
},
"inf:report-template": {
"href": "https://informer.example.com/api/reports/template"
},
"inf:report-templates": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/templates"
},
"inf:input-templates": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/input-templates"
},
"inf:visual-templates": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/visual-templates"
},
"inf:input-filter-templates": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/input-filter-templates"
},
"inf:report-tags": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/tags"
},
"inf:favorite": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/favorite"
},
"inf:report-tag": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/tags/{tagId}",
"templated": true
},
"inf:export-bundle": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_export"
},
"view": {
"href": "https://informer.example.com/v/report.html?id=00000000-0000-4000-8000-000000000001"
},
"inf:cloud-publish": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_cloud-publish"
},
"inf:cloud-unpublish": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_cloud-unpublish"
},
"inf:copy": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_copy"
},
"edit": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_edit"
},
"inf:report-share": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/shares/{principalId}",
"templated": true
},
"inf:report-run": {
"href": "https://informer.example.com/api/reports/admin%3Acopy-of-sales-overview/_run{?progress}",
"templated": true
}
},
"naturalId": "admin:copy-of-sales-overview",
"permissions": {
"assignTags": true,
"changeOwner": true,
"cloudPublish": false,
"copy": true,
"dataset": true,
"delete": true,
"edit": true,
"filter": true,
"license": true,
"rename": true,
"run": true,
"share": true,
"variable": true,
"visual": true,
"write": true
},
"id": "00000000-0000-4000-8000-000000000001",
"type": "dashboard",
"name": "Copy of Sales Overview",
"tenant": "acme",
"ownerId": "admin",
"slug": "copy-of-sales-overview",
"description": null,
"defn": {
"layout": {},
"visuals": [],
"layoutOptions": {
"showVisualOptions": true
}
},
"settings": {
"overallFilter": {}
},
"source": null,
"sourceId": null,
"shared": false,
"defnUpdatedAt": null,
"enableFilter": false,
"libraryId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"editingId": null,
"datasourceId": null,
"queryId": null,
"templateId": null,
"folderId": null,
"datasets": [],
"_embedded": {
"inf:report-type": {
"_links": {
"self": {
"href": "https://informer.example.com/api/report-types/dashboard"
}
},
"id": "dashboard",
"name": "common:dashboard",
"description": "reports:dashboard.description",
"image": "/assets/reports/images/dashboard.svg",
"color": "teal",
"mappingRequired": false,
"viewComponent": "dashboardView",
"editComponent": "dashboardEdit",
"previewComponent": "dashboardPreview",
"openInNewTab": false,
"datasets": "none",
"hasApiWhitelist": false
}
}
}
Behavior:
- Copy report structure - All fields except
id,editingId,slug, timestamps - Copy dataset references - All
ReportDatasetentries with their configurations - Copy snapshot settings - Snapshot configurations and dataset associations
- Copy library - If the report has an associated library, it is also copied
- Set owner - New report is owned by the current user
- Generate new slug - Unique identifier is created
Notes:
- Copy operation runs in a database transaction
- Report drivers can customize copy behavior
- Copied report is independent - changes don't affect the original
- Sharing and comments are NOT copied
Use Case:
Create a personal version of a shared report for customization.
Ownership Transfer
To transfer report ownership:
// Change owner to a different user
PUT /api/reports/team:sales-dashboard/owner
{
"userId": "jane.smith"
}
// Change owner to a team
PUT /api/reports/team:sales-dashboard/owner
{
"teamId": "marketing"
}
Requirements:
report:writepermission on the reportreport:changeOwnerToTeampermission (if changing to team owner)- New owner (user or team) must exist
- Creates a
reportAssignedactivity entry