Sharing & Permissions
Sharing grants other users and teams read access to a Dataset, optionally limited to filtered rows. Editing rights are not part of shares; they come from team roles (see the overview).
A share is one row per principal:
| Property | Description |
|---|---|
principalId | A username or team id |
accessLevel | 2: sees the full data. 1: rows are limited to the share's saved filter when datasetFilterId is set |
datasetFilterId | A saved filter whose query limits what level-1 principals see |
restrictFields | When true, hides the Dataset's field definitions from the shared principal (used with the tenant's field-level security setting) |
GET /api/datasets/{id}/shares
List shares for a Dataset. The response is a plain array; each entry combines
the share with display info for the user or team (name/displayName,
icon/color or email/avatar, and type: User or Team).
Authentication: Required
[
{
"datasetId": "00000000-0000-4000-8000-000000000001",
"principalId": "marketing",
"accessLevel": 2,
"datasetFilterId": null,
"restrictFields": false,
"id": "marketing",
"teamId": "marketing",
"name": "Marketing",
"materialIcon": null,
"icon": "fa-bullhorn",
"color": "red",
"username": null,
"displayName": null,
"email": null,
"avatarUpdatedAt": null,
"type": "Team"
}
]
GET /api/datasets/{id}/shares/{principalId}
Get a single share. Answers 404 when the principal has no share.
Authentication: Required
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/shares/everett"
}
},
"id": "00000000-0000-4000-8000-000000000001",
"tenant": "acme",
"datasetId": "00000000-0000-4000-8000-000000000002",
"principalId": "everett",
"datasetFilterId": "00000000-0000-4000-8000-000000000003",
"restrictFields": false,
"accessLevel": 1,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
PUT /api/datasets/{id}/shares/{principalId}
Create or update a share (upsert).
Authentication: Required
Permission: dataset:share (superuser, or Publisher and above on the
owning team; user-owned Datasets can only be shared by a superuser)
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
accessLevel | integer | No | Minimum 1 (default). 2 = full data, 1 = filtered by datasetFilterId. To remove access use DELETE |
datasetFilterId | string | No | Saved filter id limiting rows for level-1 access; null clears it |
restrictFields | boolean | No | Hide field definitions from this principal |
{
"accessLevel": 2
}
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/shares/marketing"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"datasetId": "00000000-0000-4000-8000-000000000002",
"principalId": "marketing",
"accessLevel": 2,
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"_altid": null,
"datasetFilterId": null,
"restrictFields": false
}
{
"accessLevel": 1,
"datasetFilterId": "00000000-0000-4000-8000-000000000001"
}
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/shares/everett"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000002",
"datasetId": "00000000-0000-4000-8000-000000000003",
"principalId": "everett",
"accessLevel": 1,
"datasetFilterId": "00000000-0000-4000-8000-000000000001",
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"_altid": null,
"restrictFields": false
}
A share also notifies the recipient via the activity feed.
DELETE /api/datasets/{id}/shares/{principalId}
Revoke a share.
Authentication: Required
Permission: dataset:share (same rule as PUT)
Behavior:
- Removes the share row; the principal keeps any access they have through ownership or team membership
- Responds
200with an empty body
GET /api/datasets/{id}/permissions
Get your resolved permission flags for the Dataset: the same permissions
object every Dataset response embeds, as a standalone call.
Authentication: Required
{
"_links": {
"self": {
"href": "https://informer.example.com/api/datasets/admin%3Anorthwind-orders/permissions"
}
},
"edit": true,
"share": true,
"delete": true,
"write": true,
"addVisual": true,
"deleteVisual": true,
"changeOwner": true,
"copy": true,
"rename": true,
"refresh": true,
"modifyFlows": true,
"replaceFile": true,
"modifySettings": true,
"createDataView": true,
"assignTags": true,
"createFilter": true,
"scriptFields": true,
"setIndex": false
}
There is no read flag: if you can address the Dataset at all, you can read
it; otherwise every route answers 404.
Share filters are enforced in every search the server runs for the shared
user. Don't rely on client-side filtering for sensitive rows, but do note
that a level-1 share without a datasetFilterId behaves like level 2.