For the complete documentation index, see llms.txt. This page is also available as Markdown.

End Users

End users are people who consume an account's MCP servers without getting workspace access — they sign in through MCP OAuth, optionally via an external IdP. Use these endpoints to invite end users (singly or in bulk), list and revoke them, and inspect the effective MCP tool access compiled from their grants, groups, and roles.

End user schema

List end users

get
/v1/endusers

Returns the account's end users with identity fields (email, name, lastSignIn) joined from each user record, plus a computed hasWorkspaceShare flag indicating whether the same person also holds a workspace access record. Requires account owner or administrator access.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
provisionedBystring · enumOptional

Return only end users created by the given provisioning source.

Possible values:
Responses
200

List of end users.

application/json

An end user's access record in the account. End users authenticate through MCP OAuth (optionally via an external IdP) to use MCP servers; they do not get workspace access. The _id is the access-record id, not the user's own id — the user's identity is in _sharedWithUserId.

_idstring · objectIdRead-onlyRequired

Access-record id for this end user in the account.

Example: 68b1c2d3e4f5a6b7c8d9e0f1
_userIdstring · objectIdRead-onlyOptional

Account owner's user id.

Example: 5f8d43a1b9e5a80011a35f2c
_sharedWithUserIdstring · objectIdRead-onlyOptional

The end user's own user id.

Example: 624774a6a7574d3ed9f9a5cc
userTypestring · enumOptional

Distinguishes end-user access records from workspace access records.

Possible values:
provisionedBystring · enumOptional

How this end-user record was created.

Possible values:
acceptedbooleanOptional

When true, the end user has completed invite setup (or was JIT-provisioned).

dismissedbooleanOptional

When true, the end user has declined the invitation.

disabledbooleanOptional

When true, the end user's access is suspended without deleting the record.

_roleIdsstring · objectId[]Optional

Roles assigned directly to this end user.

emailstring · emailRead-onlyOptional

Email address of the end user, joined from the user record.

Example: enduser@example.com
namestringRead-onlyOptional

Display name of the end user, joined from the user record.

Example: Ana Enduser
lastSignInstring · nullableRead-onlyOptional

When the end user last signed in. Null when they have never signed in.

Example: 2026-08-02T17:02:59.370Z
hasWorkspaceSharebooleanRead-onlyOptional

When true, the same person also has an active workspace access record on this account.

createdAtstring · date-timeRead-onlyOptional

Timestamp when the end-user record was created.

Example: 2026-07-01T09:15:32Z
lastModifiedstring · date-timeRead-onlyOptional

Timestamp when the end-user record was last updated.

Example: 2026-08-15T14:30:15Z
get/v1/endusers
GET /v1/endusers HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "_id": "68b1c2d3e4f5a6b7c8d9e0f1",
    "_userId": "5f8d43a1b9e5a80011a35f2c",
    "_sharedWithUserId": "624774a6a7574d3ed9f9a5cc",
    "userType": "end-user",
    "provisionedBy": "invite",
    "accepted": true,
    "dismissed": false,
    "disabled": false,
    "groupMemberships": [
      {
        "_groupId": "68a1b2c3d4e5f6a7b8c9d0e1",
        "source": "manual"
      }
    ],
    "resourceGrants": [
      {
        "resourceType": "mcpServer",
        "_resourceId": "6a1b2c3d4e5f6a7b8c9d0e1f",
        "capabilities": [
          "tool:all"
        ]
      }
    ],
    "_roleIds": [],
    "email": "enduser@example.com",
    "name": "Ana Enduser",
    "lastSignIn": "2026-08-02T17:02:59.370Z",
    "hasWorkspaceShare": false,
    "createdAt": "2026-07-01T09:15:32Z",
    "lastModified": "2026-08-15T14:30:15Z"
  }
]

Invite an end user

post
/v1/endusers/invite

Finds or creates the user by email, creates an end-user access record, applies the requested group memberships and direct grants, and sends an invite email. Account owners cannot be invited as end users. Requires account owner or administrator access.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body

Invitation details for a single end user.

emailstring · emailRequired

Email address to invite. Normalized to lowercase and trimmed.

Example: enduser@example.com
namestringOptional

Display name for the invited user. Defaults to the email local-part when omitted.

Example: Ana Enduser
groupIdsstring · objectId[]Optional

Groups to add the end user to as manual memberships.

Responses
201

End user invited.

application/json

Result of a successful single invite.

_userIdstring · objectIdOptional

Account owner's user id.

Example: 5f8d43a1b9e5a80011a35f2c
_ashareIdstring · objectIdOptional

Access-record id of the newly created end user.

Example: 68b1c2d3e4f5a6b7c8d9e0f1
statusstring · enumOptional

Outcome of the invite.

Possible values:
post/v1/endusers/invite
POST /v1/endusers/invite HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 31

{
  "email": "enduser@example.com"
}
{
  "_userId": "5f8d43a1b9e5a80011a35f2c",
  "_ashareId": "68b1c2d3e4f5a6b7c8d9e0f1",
  "status": "invited"
}

Invite end users in bulk

post
/v1/endusers/invite/bulk

Invites 1–100 end users in one request, applying the same optional groupIds and directGrants to every invite. Processing is sequential and partial-success: a failed item never aborts the batch, so the response is HTTP 200 with a per-email result even when some items fail. Only top-level structural errors (missing or non-array emails, more than 100 emails, non-array groupIds/directGrants) return 400. Requires account owner or administrator access.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body

Batch invitation for up to 100 end users. The optional groupIds and directGrants are shared and applied identically to every invite in the batch.

emailsstring · email[] · min: 1 · max: 100Required

Email addresses to invite. Normalized to lowercase, trimmed, and de-duplicated within the batch.

groupIdsstring · objectId[]Optional

Groups added as manual memberships on every created end-user record.

Responses
200

Batch processed, including partial success. One result per input email.

application/json

Batch outcome with one result per input email, in input order. Processing is partial-success — a failed item never aborts the batch.

post/v1/endusers/invite/bulk
POST /v1/endusers/invite/bulk HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 84

{
  "emails": [
    "a@example.com",
    "b@example.com"
  ],
  "groupIds": [
    "68a1b2c3d4e5f6a7b8c9d0e1"
  ]
}
{
  "summary": {
    "total": 2,
    "invited": 1,
    "failed": 1,
    "skipped": 0
  },
  "results": [
    {
      "email": "a@example.com",
      "status": "invited",
      "_userId": "5f8d43a1b9e5a80011a35f2c",
      "_ashareId": "68b1c2d3e4f5a6b7c8d9e0f1"
    },
    {
      "email": "b@example.com",
      "status": "failed",
      "code": "enduser_ashare_exists"
    }
  ]
}

Revoke an end user

delete
/v1/endusers/{_ashareId}

Soft-deletes the end-user access record and clears its group memberships. Any workspace access record the same person holds is unaffected. Requires account owner or administrator access.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_ashareIdstring · objectIdRequired

End-user access-record id (from the end users list).

Responses
204

End user revoked.

No content

delete/v1/endusers/{_ashareId}
DELETE /v1/endusers/{_ashareId} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Get an end user's effective access

get
/v1/endusers/{_ashareId}/effective-access

Compiles the end user's effective MCP server tool access with source attribution — the union of direct grants, group grants, role grants, and permission sets. The result is recomputed on every request rather than cached. Requires account owner or administrator access.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
_ashareIdstring · objectIdRequired

End-user access-record id (from the end users list).

Responses
200

Compiled effective access with attribution.

application/json

The compiled MCP access for one end user, with source attribution. Access is the union of the end user's direct grants, group grants, role grants (direct or via groups), and permission sets on the target servers, recompiled on every request.

_ashareIdstring · objectIdRead-onlyOptional

End-user access-record id this compilation applies to.

Example: 68b1c2d3e4f5a6b7c8d9e0f1
_userIdstring · objectIdRead-onlyOptional

The end user's own user id.

Example: 624774a6a7574d3ed9f9a5cc
userTypestring · enumOptional

Type of the access record the compilation was run for.

Possible values:
provisionedBystring · enumOptional

How the end-user record was created.

Possible values:
get/v1/endusers/{_ashareId}/effective-access
GET /v1/endusers/{_ashareId}/effective-access HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "_ashareId": "68b1c2d3e4f5a6b7c8d9e0f1",
  "_userId": "624774a6a7574d3ed9f9a5cc",
  "userType": "end-user",
  "provisionedBy": "invite",
  "groups": [
    {
      "_id": "68a1b2c3d4e5f6a7b8c9d0e1",
      "name": "Finance",
      "source": "manual"
    }
  ],
  "roles": [
    {
      "_id": "68c1d2e3f4a5b6c7d8e9f0a1",
      "name": "Finance tools",
      "via": [
        "group:Finance"
      ]
    }
  ],
  "access": [
    {
      "resourceType": "mcpServer",
      "_resourceId": "6a1b2c3d4e5f6a7b8c9d0e1f",
      "resourceName": "Finance MCP",
      "tools": [
        {
          "_id": "6b2c3d4e5f6a7b8c9d0e1f2a",
          "name": "lookup-invoice",
          "via": [
            "role:Finance tools (group:Finance)"
          ]
        }
      ],
      "deniedTools": []
    }
  ]
}

Last updated

Was this helpful?