Back to API overview

Admin Portal

15 endpoints

Self-serve IT admin portal for SSO, SCIM, and domains.

admin_portal.read
admin_portal.write
sub_orgs.read
sub_orgs.write
apps_config.read
apps_config.write
members.read
members.write

Branding, custom domains, and org administration. Org-scoped routes do not require subOrgId.

Authenticate with your organization API key. Include subOrgId as a query parameter or in the request body when using an org-wide key. Sub-org-scoped keys automatically target their sub-organization.

Admin portal

GET
/v1/admin-portal

Get admin portal overview including branding, domains, and setup checklist. Requires admin_portal.read.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Response — 200

{ "overview": { /* branding, domains, checklist */ } }
PATCH
/v1/admin-portal

Update branding settings. Requires admin_portal.write.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Request Body

ParamTypeRequiredDescription
brand_namestringNoDisplay name shown in the admin portal
logo_urlstringNoURL of the organization logo
support_emailstringNoSupport contact email
subOrgIdstringYesSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Response — 200

{ "overview": { /* updated */ } }
POST
/v1/admin-portal

Manage custom domains (add_domain, verify_domain, remove_domain). Requires admin_portal.write.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Request Body

ParamTypeRequiredDescription
actionstringYesDomain action: add_domain, verify_domain, or remove_domain
domainstringNoDomain name to add
domainIdstringNoDomain ID for verify or remove actions
subOrgIdstringYesSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Response — 200

{ "success": true }

Sub-organizations

GET
/v1/sub-organizations

List all sub-organizations in the organization. Requires sub_orgs.read.

Response — 200

{ "subOrganizations": [ /* sub-org objects */ ] }
POST
/v1/sub-organizations

Create a sub-organization. Requires sub_orgs.write.

Request Body

ParamTypeRequiredDescription
namestringYesSub-organization display name
slugstringYesURL-safe slug (unique within the org)
descriptionstringNoOptional description

Response — 200

{ "subOrganization": { /* created */ } }
GET
/v1/sub-organizations/{subOrgId}

Get a sub-organization by ID. Requires sub_orgs.read.

Response — 200

{ "subOrganization": { /* sub-org */ } }
PATCH
/v1/sub-organizations/{subOrgId}

Update sub-organization name, description, or status. Requires sub_orgs.write.

Request Body

ParamTypeRequiredDescription
namestringNoSub-organization display name
descriptionstringNoOptional description
statusstringNoactive, suspended, or archived

Response — 200

{ "subOrganization": { /* updated */ } }
DELETE
/v1/sub-organizations/{subOrgId}

Archive a sub-organization. Requires sub_orgs.write.

Response — 200

{ "success": true }
GET
/v1/sub-organizations/{subOrgId}/members

List members assigned to a sub-organization. Requires sub_orgs.read.

Response — 200

{ "members": [ /* roster */ ] }
PUT
/v1/sub-organizations/{subOrgId}/members

Replace the sub-organization member roster. Requires sub_orgs.write.

Request Body

ParamTypeRequiredDescription
membersobject[]YesArray of { membershipId, role? } objects

Response — 200

{ "members": [ /* updated roster */ ] }

Team members

GET
/v1/members

List organization team members. Requires members.read.

Response — 200

{ "members": [ /* org members */ ] }
PATCH
/v1/members/{membershipId}

Change an organization member's role. Requires members.write.

Request Body

ParamTypeRequiredDescription
newRolestringYesOrganization role: owner, admin, member, or developer

Response — 200

{ "member": { /* updated */ } }
DELETE
/v1/members/{membershipId}

Remove a member from the organization. Requires members.write.

Response — 200

{ "success": true }

App configuration

GET
/v1/organization-apps

Get enabled apps and sidebar layout for a sub-organization. Requires apps_config.read.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Response — 200

{ "enabledAppIds": [], "appGroups": [], "sidebarGroupsCollapsible": true }
PUT
/v1/organization-apps

Save enabled apps and sidebar configuration. Requires apps_config.write.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Request Body

ParamTypeRequiredDescription
enabledAppIdsstring[]NoArray of enabled OS app IDs
appGroupsobject[]NoSidebar group layout configuration
sidebarGroupsCollapsiblebooleanNoWhether sidebar groups can be collapsed
subOrgIdstringYesSub-organization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one sub-org.

Response — 200

{ "enabledAppIds": [], "appGroups": [] }