Sharing & Ownership
Manage integration access control: user/team sharing, ownership transfer, and favorites.
GET /api/integrations/{id}/shares
List all shares for an integration.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Integration id or slug |
Response:
A flat array (not a paginated collection). Each entry is the share joined with the principal's display details: a user carries username, email, initials, and avatarColor; a team carries name/icon and type: "Team".
[
{
"integrationId": "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",
"avatarUrl": "https://www.gravatar.com/avatar/6d6ce8dcdb7bc2c16a192770de1e00f3?d=identicon",
"avatarColor": {
"background": "#81C784",
"text": "#1B5E20"
},
"colorIndex": 4,
"initials": "AL"
},
{
"integrationId": "00000000-0000-4000-8000-000000000001",
"principalId": "00000000-0000-4000-8000-000000000002",
"accessLevel": 1,
"id": "00000000-0000-4000-8000-000000000002",
"teamId": "00000000-0000-4000-8000-000000000002",
"name": "Engineering",
"materialIcon": null,
"icon": null,
"color": null,
"username": null,
"displayName": null,
"email": null,
"avatarUpdatedAt": null,
"type": "Team"
}
]
GET /api/integrations/{id}/shares/{principalId}
Get a specific principal's share.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Integration id or slug |
principalId | string | A username or a team id |
Response:
The raw IntegrationShare row, or 404 if the principal has no share.
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/shares/annie.larson"
}
},
"id": "00000000-0000-4000-8000-000000000002",
"tenant": "acme",
"integrationId": "00000000-0000-4000-8000-000000000001",
"principalId": "annie.larson",
"accessLevel": 1,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
PUT /api/integrations/{id}/shares/{principalId}
Share an integration with a user or team (upsert).
Authentication: Required
Permissions: Requires integration:share
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Integration id or slug |
principalId | string | A username or a team id |
Request Body:
| Field | Type | Default | Description |
|---|---|---|---|
accessLevel | integer | 1 | Must be > 0. Use DELETE to revoke |
Response:
Responds 200 with the upserted share.
{
"accessLevel": 1
}
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/shares/annie.larson"
}
},
"id": "00000000-0000-4000-8000-000000000002",
"tenant": "acme",
"integrationId": "00000000-0000-4000-8000-000000000001",
"principalId": "annie.larson",
"accessLevel": 1,
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z"
}
DELETE /api/integrations/{id}/shares/{principalId}
Revoke a principal's share.
Authentication: Required
Permissions: Requires integration:share
Response:
Responds 200 with an empty body.
GET /api/integrations/{id}/owner
Get the integration's owner principal (user or team), with the user or team embedded.
Authentication: Required
Response:
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/owner"
}
},
"id": "admin",
"userId": "admin",
"teamId": null,
"tenant": "acme",
"_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
}
}
}
PUT /api/integrations/{id}/owner
Transfer ownership to a different user or team.
Authentication: Required
Permissions: Requires integration:changeOwner. Transferring to a team also requires integration:changeOwnerToTeam (Data Wizard in the target team).
Request Body:
A principal lookup: { "userId": "<username>" } or { "teamId": "<team-id>" }.
Response:
Responds 200 with the updated integration and a Location header.
{
"userId": "admin"
}
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001"
},
"inf:integration-share": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/shares/{principalId}",
"templated": true
},
"inf:icon": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/icon"
},
"inf:connect": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/connect"
},
"inf:connection": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/connection"
},
"inf:request": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/request"
},
"inf:favorite": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/favorite"
},
"inf:integration-owner": {
"href": "https://informer.example.com/api/integrations/admin%3Aacme-crm/owner"
},
"inf:integration-shares": {
"href": "https://informer.example.com/api/integrations/admin%3Aacme-crm/shares"
}
},
"naturalId": "admin:acme-crm",
"driver": {
"id": "api",
"editorComponent": "apiIntegrationEditor",
"extraAuthUriParams": {},
"supportsUpload": false
},
"iconUrl": "/images/icons/plug.svg",
"permissions": {
"write": true,
"edit": true,
"delete": true,
"share": true,
"assignTags": true,
"changeOwner": true
},
"id": "00000000-0000-4000-8000-000000000001",
"name": "Acme CRM",
"slug": "acme-crm",
"description": "Acme CRM REST API (v1)",
"category": "crm",
"type": "api",
"mode": "per-user",
"authType": "apiKey",
"basicTokenAuth": null,
"data": null,
"embedded": false,
"clientId": null,
"clientSecret": null,
"apiKey": "encrypted:iv:0000000000000000",
"apiKeyLocation": "header",
"apiKeyName": "X-API-Key",
"headers": {},
"scope": null,
"apiBaseUri": "https://api.acme.example.com/v1",
"authUri": null,
"tokenUri": null,
"revocationUri": null,
"imageUrl": null,
"libraryId": null,
"mailTenantId": null,
"ownerId": "admin",
"shared": false,
"folderId": null,
"source": null,
"sourceId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tenant": "acme",
"icon": null
}
GET /api/integrations/{id}/favorite
Check whether the caller has favorited the integration.
Authentication: Required
Response:
Returns the favorite record (200) when favorited, or 404 when it is not.
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/favorite"
}
},
"permissions": {},
"id": "00000000-0000-4000-8000-000000000002",
"principalId": "admin",
"reportId": null,
"datasetId": null,
"queryId": null,
"datasourceId": null,
"jobId": null,
"assistantId": null,
"templateId": null,
"libraryId": null,
"appId": null,
"integrationId": "00000000-0000-4000-8000-000000000001",
"toolkitId": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"tenant": "acme"
}
PUT /api/integrations/{id}/favorite
Add the integration to the caller's favorites.
Authentication: Required
Response:
Responds 200 with the favorite record.
{
"_links": {
"self": {
"href": "https://informer.example.com/api/integrations/00000000-0000-4000-8000-000000000001/favorite"
}
},
"permissions": {},
"id": "00000000-0000-4000-8000-000000000002",
"tenant": "acme",
"integrationId": "00000000-0000-4000-8000-000000000001",
"principalId": "admin",
"reportId": null,
"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,
"toolkitId": null
}
DELETE /api/integrations/{id}/favorite
Remove the integration from the caller's favorites.
Authentication: Required
Response:
Responds 200 with an empty body.