Skip to main content

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:

ParameterTypeDescription
idstringIntegration 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".

List sharesGET /api/integrations/00000000-0000-4000-8000-000000000001/shares
A flat array, each share enriched with the principal’s display details (a user carries username/email/initials/avatarColor; a team carries name/icon and type "Team").
Response · 200
[
{
"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"
}
]
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/integrations/{id}/shares/{principalId}

Get a specific principal's share.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringIntegration id or slug
principalIdstringA username or a team id

Response:

The raw IntegrationShare row, or 404 if the principal has no share.

Get a single shareGET /api/integrations/00000000-0000-4000-8000-000000000001/shares/annie.larson
The raw IntegrationShare row (404 if the principal has no share).
Response · 200
{
"_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"
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/integrations/{id}/shares/{principalId}

Share an integration with a user or team (upsert).

Authentication: Required

Permissions: Requires integration:share

Path Parameters:

ParameterTypeDescription
idstringIntegration id or slug
principalIdstringA username or a team id

Request Body:

FieldTypeDefaultDescription
accessLevelinteger1Must be > 0. Use DELETE to revoke

Response:

Responds 200 with the upserted share.

Share with a user or teamPUT /api/integrations/00000000-0000-4000-8000-000000000001/shares/annie.larson
principalId is a username or a team id. accessLevel must be > 0 (defaults to 1). PUT upserts; use DELETE to revoke.
Request body
{
"accessLevel": 1
}
Response · 200
{
"_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"
}
Captured from the API examples test suite; ids and timestamps are normalized.

DELETE /api/integrations/{id}/shares/{principalId}

Revoke a principal's share.

Authentication: Required

Permissions: Requires integration:share

Response:

Responds 200 with an empty body.

Remove a shareDELETE /api/integrations/00000000-0000-4000-8000-000000000001/shares/annie.larson
Revokes the principal’s access. Responds 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/integrations/{id}/owner

Get the integration's owner principal (user or team), with the user or team embedded.

Authentication: Required

Response:

Get an integration’s ownerGET /api/integrations/00000000-0000-4000-8000-000000000001/owner
The owning principal (user or team), with the user or team embedded.
Response · 200
{
"_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
}
}
}
Captured from the API examples test suite; ids and timestamps are normalized.

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.

Reassign an integration’s ownerPUT /api/integrations/00000000-0000-4000-8000-000000000001/owner
Body is a principal lookup: { userId } or { teamId } (not ownerId). Responds 200 with a Location header.
Request body
{
"userId": "admin"
}
Response · 200
{
"_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
}
Captured from the API examples test suite; ids and timestamps are normalized.

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.

Check whether an integration is favoritedGET /api/integrations/00000000-0000-4000-8000-000000000001/favorite
Returns the favorite record (200) when favorited, or 404 when it is not.
Response · 200
{
"_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"
}
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/integrations/{id}/favorite

Add the integration to the caller's favorites.

Authentication: Required

Response:

Responds 200 with the favorite record.

Favorite an integrationPUT /api/integrations/00000000-0000-4000-8000-000000000001/favorite
Adds the integration to the caller’s favorites. Responds 200 with the favorite record.
Response · 200
{
"_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
}
Captured from the API examples test suite; ids and timestamps are normalized.

DELETE /api/integrations/{id}/favorite

Remove the integration from the caller's favorites.

Authentication: Required

Response:

Responds 200 with an empty body.

Unfavorite an integrationDELETE /api/integrations/00000000-0000-4000-8000-000000000001/favorite
Responds 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.