Skip to main content

Sharing

Manage report access and sharing with users and teams.

Overview​

Reports can be shared with individual users or entire teams with different access levels. Sharing controls who can view, edit, or manage a report.

GET /api/reports/{id}/shares​

Get all shares for a report.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringReport ID

Response:

Every principal the report is shared with, each with its user/team identity and access level resolved.

List report sharesGET /api/reports/admin:sales-overview/shares
Every principal the report is shared with, with the user/team identity and access level resolved.
Response · 200
[
{
"reportId": "00000000-0000-4000-8000-000000000001",
"principalId": "annie.larson",
"accessLevel": 1,
"id": "annie.larson",
"teamId": null,
"name": "Annie Larson",
"materialIcon": null,
"icon": null,
"color": null,
"username": "annie.larson",
"displayName": "Annie Larson",
"email": "annie.larson@example.com",
"avatarUpdatedAt": null,
"type": "User",
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"colorIndex": 4,
"initials": "AL"
}
]
Captured from the API examples test suite; ids and timestamps are normalized.

Response Fields:

FieldTypeDescription
principalIdstringUser or team ID being granted access
accessLevelintegerAccess level (0=none, 1=view, 2=edit)
typestringUser or Team
namestringDisplay name

User-specific fields:

  • username, displayName, email, avatarUrl

Team-specific fields:

  • teamId, materialIcon, icon, color

Use Case:

Display all users and teams with access to a report.


GET /api/reports/{id}/shares/{principalId}​

Get a specific share by principal ID.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringReport ID
principalIdstringUser or team ID (e.g., user:john.doe or team:analytics)

Response:

Get a single shareGET /api/reports/admin:sales-overview/shares/annie.larson
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Asales-overview/shares/annie.larson"
}
},
"id": "00000000-0000-4000-8000-000000000001",
"tenant": "acme",
"reportId": "00000000-0000-4000-8000-000000000002",
"principalId": "annie.larson",
"accessLevel": 1,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/reports/{id}/shares/{principalId}​

Grant or update access for a user or team.

Authentication: Required

Permissions: report:share

Path Parameters:

ParameterTypeDescription
idstringReport ID
principalIdstringUser or team ID

Request Body:

{
"accessLevel": 2
}

Access Levels:

LevelPermission
0No access
1View only
2Edit access

Response:

Responds 200. accessLevel must be an integer > 0; to revoke, use DELETE rather than accessLevel: 0.

Share a report with a principalPUT /api/reports/admin:sales-overview/shares/annie.larson
principalId is a username (user) or team id. accessLevel is an integer > 0 (1 Member … 6 Admin). To revoke, use DELETE rather than accessLevel 0.
Request body
{
"accessLevel": 1
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/reports/admin%3Asales-overview/shares/annie.larson"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"reportId": "00000000-0000-4000-8000-000000000002",
"principalId": "annie.larson",
"accessLevel": 1,
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"_altid": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  • Creates a new share if one doesn't exist
  • Updates access level if share already exists

DELETE /api/reports/{id}/shares/{principalId}​

Revoke access for a user or team.

Authentication: Required

Permissions: report:share

Path Parameters:

ParameterTypeDescription
idstringReport ID
principalIdstringUser or team ID

Response:

Responds 200 on success.

Remove a shareDELETE /api/reports/admin:sales-overview/shares/annie.larson
Revokes the principal’s access to the report.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

Behavior:

  • Removes the share entry
  • User/team will no longer have explicit access
  • May still have access via team membership or ownership

Use Case:

Revoke a previously granted share.


Access Control Model​

Report access is determined by:

  1. Ownership - Report owner has full access
  2. Team Membership - Members of the owning team have access based on role
  3. Explicit Shares - Individual shares grant specific access levels
  4. Superuser - Superusers bypass all checks

Team Role Hierarchy​

When a report is owned by a team:

RoleImplicit Access
AdminFull control
PublisherEdit and publish
Data WizardEdit
DesignerView/edit visuals
Member+View with extended features
MemberView

Explicit shares can grant access beyond team membership.


Share Management Tips​

Grant team-wide access:

PUT /api/reports/team:sales-dashboard/shares/team:marketing
{ "accessLevel": 1 }

Grant edit access to individual:

PUT /api/reports/team:sales-dashboard/shares/user:jane.smith
{ "accessLevel": 2 }

Revoke access:

DELETE /api/reports/team:sales-dashboard/shares/user:jane.smith

List all access:

GET /api/reports/team:sales-dashboard/shares