Skip to main content

Ownership & Favorites

Manage report ownership and user favorites.

Ownership

See Core CRUD - Owner Management for ownership endpoints:

  • GET /api/reports/\{id\}/owner - Get report owner
  • PUT /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:

ParameterTypeDescription
idstringReport ID

Response:

Whether the calling user has favorited this report.

Check favorite statusGET /api/reports/admin:sales-overview/favorite
Whether the calling user has favorited this report.
Response · 200
{
"_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"
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/reports/{id}/favorite

Mark a report as a favorite.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringReport ID

Request Body:

Empty body or {}

Response:

Responds 200. Marks the report as a favorite for the calling user.

Favorite a reportPUT /api/reports/admin:sales-overview/favorite
Marks the report as a favorite for the calling user.
Response · 200
{
"_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
}
Captured from the API examples test suite; ids and timestamps are normalized.

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:

ParameterTypeDescription
idstringReport ID

Response:

Responds 200 on success.

Remove a favoriteDELETE /api/reports/admin:sales-overview/favorite
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

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:

ParameterTypeDescription
idstringReport ID to copy

Request Body:

{
"name": "Copy of Sales Dashboard",
"progress": "progress-monitor-id"
}

Optional Fields:

FieldTypeDescription
namestringName for the copied report (defaults to "Copy of [original name]")
progressstringProgress monitor ID for tracking

Response:

Responds 201 Created with the copied report and a Location header.

Copy a reportPOST /api/reports/admin:sales-overview/_copy
Creates an independent copy owned by the caller (datasets and snapshot settings are copied; shares and comments are not). Responds 201 with a Location header.
Request body
{
"name": "Copy of Sales Overview"
}
Response · 201
{
"_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
}
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  1. Copy report structure - All fields except id, editingId, slug, timestamps
  2. Copy dataset references - All ReportDataset entries with their configurations
  3. Copy snapshot settings - Snapshot configurations and dataset associations
  4. Copy library - If the report has an associated library, it is also copied
  5. Set owner - New report is owned by the current user
  6. 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:write permission on the report
  • report:changeOwnerToTeam permission (if changing to team owner)
  • New owner (user or team) must exist
  • Creates a reportAssigned activity entry