Members
Invite people, set roles and limit a member to clients.
/v1/membersList team members + pending invites + seat usage (filterable)
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| status | query | "active" | "invited" | "disabled" | |
| role | query | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| q | query | string | Search over name + email. |
| Status | Body | When |
|---|---|---|
| 200 | MembersResponseDto |
| Field | Type | What it is |
|---|---|---|
| seats required | SeatUsageDto | |
| seats.used required | number | |
| seats.limit required | number | |
| members required | MemberDto[] | |
| members[].id required | string | userId for members; invitation id for pending invites. |
| members[].email required | string | |
| members[].name required | string | null | |
| members[].role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| members[].status required | "disabled" | "active" | "invited" | |
| members[].joinedAt required | string | null | |
| members[].isYou required | boolean | True for the caller's own row. |
| members[].disabledAt required | string | null | When this member's access to the workspace was disabled; null while active. |
| members[].scope required | MemberScopeDto[] | null | The clients this member is limited to, or null for access to the whole workspace. |
| facets required | MemberFacetsDto | Counts for the status filter tabs, over every member whatever the filters. |
| facets.status required | MemberStatusFacetsDto | |
| facets.role required | MemberRoleFacetsDto | |
| activeAdmins required | number | Accepted members who can administer the workspace (owner or admin). Counted over the whole workspace whatever the filters, so it is safe to use for a "last admin" check before removing or demoting someone. |
/v1/members/invitations/{id}Revoke a pending invitation
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| id required | path | string |
| Status | Body | When |
|---|---|---|
| 204 | — |
/v1/members/inviteInvite a member by email
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Field | Type | What it is |
|---|---|---|
| email required | string (email) | |
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| scope | MemberScopeGrantDto[] | |
| scope[].groupId required | string (uuid) | |
| scope[].mayPublish | boolean |
| Status | Body | When |
|---|---|---|
| 201 | InvitationCreatedDto |
| Field | Type | What it is |
|---|---|---|
| id required | string | |
| email required | string | |
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| expiresAt required | string |
/v1/members/rolesEvery role, and exactly what it may do
These are the rules the API enforces, so what the members screen shows is exactly what each role can do.
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Status | Body | When |
|---|---|---|
| 200 | RoleDescriptionDto[] |
| Field | Type | What it is |
|---|---|---|
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| label required | string | |
| summary required | string | One sentence on who this role is for, in a customer's words. |
| isOwner required | boolean | True for the role that owns the workspace. There is exactly one, and it cannot be assigned from the members screen. |
| permissions required | PermissionsDto | What each role may do. These are the rules the API enforces. |
| permissions.domains required | DomainsPermissions | |
| permissions.consent required | ConsentPermissions | |
| permissions.compliance required | CompliancePermissions | |
| permissions.banner required | BannerPermissions | |
| permissions.integrations required | IntegrationsPermissions | |
| permissions.analytics required | AnalyticsPermissions | |
| permissions.users required | UsersPermissions | |
| permissions.settings required | SettingsPermissions | |
| permissions.billing required | BillingPermissions |
/v1/members/{userId}Remove a member
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| userId required | path | string |
| Status | Body | When |
|---|---|---|
| 204 | — |
/v1/members/{userId}Change a member's role, and which clients they may see
An omitted scope leaves their client access as it is; [] clears it and gives them the whole workspace; a list limits them to exactly those domain groups. An owner cannot be limited to clients.
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| userId required | path | string |
| Field | Type | What it is |
|---|---|---|
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| scope | MemberScopeGrantDto[] | |
| scope[].groupId required | string (uuid) | |
| scope[].mayPublish | boolean |
| Status | Body | When |
|---|---|---|
| 200 | MemberDto |
| Field | Type | What it is |
|---|---|---|
| id required | string | userId for members; invitation id for pending invites. |
| email required | string | |
| name required | string | null | |
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| status required | "disabled" | "active" | "invited" | |
| joinedAt required | string | null | |
| isYou required | boolean | True for the caller's own row. |
| disabledAt required | string | null | When this member's access to the workspace was disabled; null while active. |
| scope required | MemberScopeDto[] | null | The clients this member is limited to, or null for access to the whole workspace. |
| scope.groupId required | string | |
| scope.groupName required | string | |
| scope.mayPublish required | boolean |
/v1/members/{userId}/disableSuspend a member's access to this workspace, without removing them
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| userId required | path | string |
| Status | Body | When |
|---|---|---|
| 200 | MemberDto |
| Field | Type | What it is |
|---|---|---|
| id required | string | userId for members; invitation id for pending invites. |
| email required | string | |
| name required | string | null | |
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| status required | "disabled" | "active" | "invited" | |
| joinedAt required | string | null | |
| isYou required | boolean | True for the caller's own row. |
| disabledAt required | string | null | When this member's access to the workspace was disabled; null while active. |
| scope required | MemberScopeDto[] | null | The clients this member is limited to, or null for access to the whole workspace. |
| scope.groupId required | string | |
| scope.groupName required | string | |
| scope.mayPublish required | boolean |
/v1/members/{userId}/enableRestore a suspended member's access to this workspace
Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.
| Name | Where | Type | What it is |
|---|---|---|---|
| userId required | path | string |
| Status | Body | When |
|---|---|---|
| 200 | MemberDto |
| Field | Type | What it is |
|---|---|---|
| id required | string | userId for members; invitation id for pending invites. |
| email required | string | |
| name required | string | null | |
| role required | "owner" | "admin" | "editor" | "analyst" | "viewer" | |
| status required | "disabled" | "active" | "invited" | |
| joinedAt required | string | null | |
| isYou required | boolean | True for the caller's own row. |
| disabledAt required | string | null | When this member's access to the workspace was disabled; null while active. |
| scope required | MemberScopeDto[] | null | The clients this member is limited to, or null for access to the whole workspace. |
| scope.groupId required | string | |
| scope.groupName required | string | |
| scope.mayPublish required | boolean |
Next groupWorkspace