Admin and SCIM reference
The SCIM server and the part of IdRa's /api/admin that an integrator can use, with the authentication and permission each operation needs. Also available as an OpenAPI file.
This page and openapi-admin.json are generated from IdRa's routes. A test fails if a mounted route is neither listed here, in the API reference, nor under what's left out.
17 SCIM operations and 123 /api/admin operations are listed.
What this reference doesn't cover
- Responses aren't described.
- A write with no fields listed has no validated body, or checks it inside the handler. The JSON file has the full schemas.
/api/adminpaths aren't versioned. They serve IdRa's console and change with it./api/v1is the surface built for compatibility.- Permissions are what the route's gate asks of the caller's role. Handlers can refuse further, for example an admin limited to certain groups or apps, or an action only super admins may take, and that isn't listed.
- SCIM shapes follow RFC 7643. Supported features are what
/ServiceProviderConfiganswers.
SCIM
The base URL is https://<your IdRa address>/api/auth/scim/v2. Send Authorization: Bearer <token>, with a connection's token from Directory → Directory Integrations. Discovery endpoints need no token. See SCIM provisioning.
| Operation | What it does | Authentication | Body fields |
|---|---|---|---|
POST /api/auth/scim/v2/Groups | Create SCIM Group | Bearer token | schemas (required), externalId, displayName (required), members |
DELETE /api/auth/scim/v2/Groups/{groupId} | Delete SCIM Group | Bearer token | |
GET /api/auth/scim/v2/Groups/{groupId} | Get SCIM Group | Bearer token | |
GET /api/auth/scim/v2/Groups | List SCIM Groups | Bearer token | |
PATCH /api/auth/scim/v2/Groups/{groupId} | Patch SCIM Group | Bearer token | schemas (required), Operations (required) |
PUT /api/auth/scim/v2/Groups/{groupId} | Replace SCIM Group | Bearer token | schemas (required), externalId, displayName (required), members |
POST /api/auth/scim/v2/Users | Create SCIM User | Bearer token | schemas (required), userName (required), externalId, displayName, name, emails, title, userType, preferredLanguage, locale, timezone, phoneNumbers, addresses, roles, entitlements, active, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User |
DELETE /api/auth/scim/v2/Users/{userId} | Delete SCIM User | Bearer token | |
GET /api/auth/scim/v2/Users/{userId} | Get SCIM User | Bearer token | |
GET /api/auth/scim/v2/Users | List SCIM Users | Bearer token | |
PATCH /api/auth/scim/v2/Users/{userId} | Patch SCIM User | Bearer token | schemas (required), Operations (required) |
PUT /api/auth/scim/v2/Users/{userId} | Replace SCIM User | Bearer token | schemas (required), userName (required), externalId, displayName, name, emails, title, userType, preferredLanguage, locale, timezone, phoneNumbers, addresses, roles, entitlements, active, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User |
GET /api/auth/scim/v2/ServiceProviderConfig | Get SCIM service provider configuration | None | |
GET /api/auth/scim/v2/Schemas | List SCIM schemas | None | |
GET /api/auth/scim/v2/Schemas/{schemaId} | Get a SCIM schema | None | |
GET /api/auth/scim/v2/ResourceTypes | List SCIM resource types | None | |
GET /api/auth/scim/v2/ResourceTypes/{resourceTypeId} | Get a SCIM resource type | None |
/api/admin
Send one of these:
Authorization: SSWS <token>, with a token from Security → API → Tokens. It acts with its creator's current role, spends the tenant's rate limit and obeys its network zones.- An admin's console session, which must be MFA-verified. Operations marked fresh MFA also need a second factor within the last 15 minutes, or answer
403with"fresh": true. So does resetting another admin's password or authenticators. Tokens are exempt, because they have no second factor to step up with.
A service app's OAuth access token works only on /api/v1, not here. The caller's role must hold every permission listed. Errors are { "error": "…" }: 401 unauthorized, 403 forbidden, 403 mfa_required, or a sentence for a 400.
People
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/directory/people | List people | user:list | |
POST /api/admin/directory/people | Create a person | user:create | firstName (required), lastName (required), email (required), profile, groupIds, activate |
GET /api/admin/directory/people/{id} | Get a person | user:get | |
GET /api/admin/directory/people/{id}/sessions | List a person's sessions | session:list | |
PATCH /api/admin/directory/people/{id} | Update a person's name and profile | person:edit | name, profile (required) |
POST /api/admin/directory/people/{id}/lifecycle/activate | Activate a person | person:edit | |
POST /api/admin/directory/people/{id}/lifecycle/reactivate | Reactivate a deprovisioned person | person:edit, user:ban | |
POST /api/admin/directory/people/{id}/lifecycle/deactivate | Deactivate a person | user:ban, user:delete | |
POST /api/admin/directory/people/{id}/lifecycle/suspend | Suspend a person | user:ban | |
POST /api/admin/directory/people/{id}/lifecycle/unsuspend | Unsuspend a person | user:ban | |
POST /api/admin/directory/people/{id}/lifecycle/reset-password | Send a person a password reset | user:set-password | |
POST /api/admin/directory/people/{id}/lifecycle/reset-authenticators | Reset a person's authenticators | user:set-password | |
POST /api/admin/directory/people/{id}/lifecycle/clear-sessions | End a person's sessions | session:revoke | |
POST /api/admin/directory/people/{id}/lifecycle/delete | Delete a deprovisioned person | user:delete | |
POST /api/admin/directory/people/{id}/lifecycle/unlock | Clear a person's password lockout | user:ban |
People search
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/directory/user-search | Search people by name or email | user:list |
Groups
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/directory/groups | List groups | group:read | |
POST /api/admin/directory/groups | Create a group | group:write | name (required), description |
GET /api/admin/directory/groups/{id} | Get a group | group:read | |
PATCH /api/admin/directory/groups/{id} | Update a group | group:write | name, description |
DELETE /api/admin/directory/groups/{id} | Delete a group | group:write | |
POST /api/admin/directory/groups/{id}/members | Add members | group:members | userIds (required) |
DELETE /api/admin/directory/groups/{id}/members/{userId} | Remove a member | group:members | |
GET /api/admin/directory/groups/{id}/rules | List a group's membership rules | group:read | |
POST /api/admin/directory/groups/{id}/rules | Create a membership rule | group:write | name (required), attribute (required), op (required), value (required) |
PATCH /api/admin/directory/groups/{id}/rules/{ruleId} | Update a membership rule | group:write | name, attribute, op, value, active |
DELETE /api/admin/directory/groups/{id}/rules/{ruleId} | Delete a membership rule | group:write | |
POST /api/admin/directory/groups/{id}/rules/apply | Queue a run of a group's membership rules | group:write |
Profile attributes
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/directory/profile-attributes | List profile attributes | user:list | |
POST /api/admin/directory/profile-attributes | Create a profile attribute | user:update | label (required), enumValues, required, uniqueValues, userPermission, key (required), type (required) |
PATCH /api/admin/directory/profile-attributes/{key} | Update a profile attribute | user:update | label, enumValues, required, uniqueValues, userPermission |
DELETE /api/admin/directory/profile-attributes/{key} | Delete a profile attribute | user:update |
Admin roles
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/directory/admins | List admins and their roles | user:list | |
PUT /api/admin/directory/admins/{userId}/roles/{role}/targets | Set the targets of an admin's role | user:set-role (fresh MFA) | targets (required) |
POST /api/admin/directory/admins | Assign an admin role | user:set-role (fresh MFA) | userId (required), role (required), targets |
DELETE /api/admin/directory/admins/{userId}/roles/{role} | Remove an admin role | user:set-role (fresh MFA) |
Apps
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/apps/catalog | List the app catalog | app:read | |
GET /api/admin/apps | List apps | app:read | |
POST /api/admin/apps | Create an app | app:write | templateKey, type, name (required), description, logoUrl, url, visible, oidc, assignMe |
GET /api/admin/apps/{id} | Get an app | app:read | |
PATCH /api/admin/apps/{id} | Update an app | app:write | name, description, logoUrl, url, visible, status |
DELETE /api/admin/apps/{id} | Delete an app | app:write | |
GET /api/admin/apps/{id}/oidc | Get an app's OIDC settings | app:read | |
PATCH /api/admin/apps/{id}/oidc | Update an app's OIDC settings | app:write | redirectUris, postLogoutRedirectUris, grantTypes, consentRequired, requirePkce, tokenEndpointAuthMethod, jwks, jwksUri, requireDpop, backchannelLogoutUri, clientCredentialsScopes |
POST /api/admin/apps/{id}/oidc/rotate-secret | Rotate an app's client secret | app:write (fresh MFA) | |
GET /api/admin/apps/{id}/assignments | List an app's assignments | app:read | |
GET /api/admin/apps/{id}/users.csv | Download an app's assigned people as CSV | app:read | |
POST /api/admin/apps/{id}/assignments | Assign people and groups to an app | app:write | userIds, groupIds |
DELETE /api/admin/apps/{id}/assignments/{assignmentId} | Remove an assignment | app:write |
SAML apps and signing keys
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/saml/apps/{appId} | Get an app's SAML settings | app:read | |
PUT /api/admin/saml/apps/{appId} | Set an app's SAML settings | app:write | entityId (required), acsUrl (required), acsUrls, audience, defaultRelayState, nameIdFormat (required), nameIdAttribute (required), nameIdExpression, attributes (required), signResponse (required), signatureAlgorithm, spCertificate, requireSignedRequests, honorForceAuthn, honorAuthnContext |
POST /api/admin/saml/apps/{appId}/preview | Preview the assertion for a person | app:read, user:get | config (required), email |
POST /api/admin/saml/apps/{appId}/import | Read SAML settings from service provider metadata XML | app:write | xml (required) |
GET /api/admin/saml/keys | List signing keys | settings:read | |
POST /api/admin/saml/keys/saml/rotate | Rotate the SAML signing key | settings:write (fresh MFA) | |
POST /api/admin/saml/keys/saml/{id}/retire | Retire a SAML signing key | settings:write (fresh MFA) | |
POST /api/admin/saml/keys/oidc/rotate | Rotate the OIDC signing key | settings:write (fresh MFA) |
API tokens and service app grants
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/api-access/tokens/service-apps | List service apps and their grants | app:read | |
PUT /api/admin/api-access/tokens/service-apps/{id} | Set a service app's scope grants | app:write, policy:write (fresh MFA) | scopes (required) |
GET /api/admin/api-access/tokens | List API tokens | settings:read | |
POST /api/admin/api-access/tokens | Create an API token | settings:write (fresh MFA) | name (required), expiresInDays, allowedZoneIds |
DELETE /api/admin/api-access/tokens/{id} | Delete an API token | settings:write (fresh MFA) |
Dynamic client registration
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/api-access/client-registration | Get dynamic client registration settings | settings:read | |
PUT /api/admin/api-access/client-registration | Turn dynamic client registration on or off | settings:write, app:write (fresh MFA) | enabled (required) |
POST /api/admin/api-access/client-registration/tokens | Create a registration token | settings:write, app:write (fresh MFA) | name (required), expiresInDays (required) |
DELETE /api/admin/api-access/client-registration/tokens/{id} | Delete a registration token | settings:write, app:write (fresh MFA) |
Authorization servers
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/api-access/servers | List authorization servers | api_access:read | |
POST /api/admin/api-access/servers | Create an authorization server | api_access:write | name (required), allowedScopes, accessTokenTtl, customClaims, disabled, identifier (required) |
GET /api/admin/api-access/servers/{id} | Get an authorization server | api_access:read | |
PATCH /api/admin/api-access/servers/{id} | Update an authorization server | api_access:write | name, allowedScopes, accessTokenTtl, customClaims, disabled |
DELETE /api/admin/api-access/servers/{id} | Delete an authorization server | api_access:write | |
POST /api/admin/api-access/servers/{id}/clients | Allow a client on an authorization server | api_access:write | clientId (required) |
DELETE /api/admin/api-access/servers/{id}/clients/{clientId} | Remove a client from a server | api_access:write | |
POST /api/admin/api-access/servers/{id}/rules | Create an access rule | api_access:write | name (required), priority (required), enabled (required), conditions (required), action (required) |
PATCH /api/admin/api-access/rules/{ruleId} | Update an access rule | api_access:write | name, priority, enabled, conditions, action |
DELETE /api/admin/api-access/rules/{ruleId} | Delete an access rule | api_access:write | |
POST /api/admin/api-access/servers/{id}/preview | Preview which rule a token request matches | api_access:read | clientId (required), grantType (required), scopes (required), userId |
Outbound provisioning
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/integrations/provisioning/apps/{appId} | Get an app's provisioning settings | app:read | |
PUT /api/admin/integrations/provisioning/apps/{appId} | Set an app's provisioning settings | app:write | enabled (required), baseUrl (required), token, createUsers (required), updateUsers (required), deactivateUsers (required), pushGroups (required), mappings (required) |
POST /api/admin/integrations/provisioning/apps/{appId}/test | Test a SCIM base URL and token | app:write | baseUrl, token |
POST /api/admin/integrations/provisioning/apps/{appId}/push | Push everyone assigned to the app | app:write | |
POST /api/admin/integrations/provisioning/apps/{appId}/users/{userId}/push | Push one person | app:write | |
POST /api/admin/integrations/provisioning/apps/{appId}/groups | Add a pushed group | app:write | groupId (required) |
POST /api/admin/integrations/provisioning/apps/{appId}/groups/{groupId}/push | Push one group | app:write | |
DELETE /api/admin/integrations/provisioning/apps/{appId}/groups/{groupId} | Stop pushing a group | app:write |
Inbound SCIM connections
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/integrations/scim | List inbound SCIM connections | user:list | |
POST /api/admin/integrations/scim | Create a connection and its bearer token | user:create, user:update, user:ban (fresh MFA) | name (required) |
POST /api/admin/integrations/scim/{connectionId}/rotate | Rotate a connection's bearer token | user:create, user:update, user:ban (fresh MFA) | |
POST /api/admin/integrations/scim/{connectionId}/revoke | Revoke a connection's bearer token | user:create, user:update, user:ban (fresh MFA) |
Identity providers
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/integrations/identity-providers/routing-rules | List routing rules | policy:read | |
POST /api/admin/integrations/identity-providers/routing-rules | Create a routing rule | policy:write (fresh MFA) | name (required), priority, enabled, conditions (required), providerId (required) |
PATCH /api/admin/integrations/identity-providers/routing-rules/{id} | Update a routing rule | policy:write (fresh MFA) | name, priority, enabled, conditions, providerId |
DELETE /api/admin/integrations/identity-providers/routing-rules/{id} | Delete a routing rule | policy:write (fresh MFA) | |
GET /api/admin/integrations/identity-providers/domain-proofs | List domain proofs | policy:read | |
POST /api/admin/integrations/identity-providers/domain-proofs | Start proving a domain | policy:write (fresh MFA) | domain (required) |
POST /api/admin/integrations/identity-providers/domain-proofs/{domain}/verify | Check a domain proof | policy:write (fresh MFA) | |
DELETE /api/admin/integrations/identity-providers/domain-proofs/{domain} | Delete a domain proof | policy:write (fresh MFA) | |
GET /api/admin/integrations/identity-providers | List identity providers | policy:read | |
POST /api/admin/integrations/identity-providers | Add an identity provider | policy:write (fresh MFA) | See the JSON file |
GET /api/admin/integrations/identity-providers/{providerId} | Get an identity provider | policy:read | |
PATCH /api/admin/integrations/identity-providers/{providerId} | Update an identity provider | policy:write (fresh MFA) | name, domains, jit, idpInitiated, slo, attributeMap, groupClaim, groupMap |
PUT /api/admin/integrations/identity-providers/{providerId}/linking | Set account linking | policy:write (fresh MFA) | linkExisting (required), linkDomains (required), trustEmail |
DELETE /api/admin/integrations/identity-providers/{providerId} | Delete an identity provider | policy:write (fresh MFA) |
Webhooks
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/integrations/webhooks | List webhooks | settings:read | |
POST /api/admin/integrations/webhooks | Create a webhook | settings:write | name (required), url (required), eventTypes (required), filter, format, headers |
GET /api/admin/integrations/webhooks/{id} | Get a webhook | settings:read | |
PATCH /api/admin/integrations/webhooks/{id} | Update a webhook | settings:write | name, url, eventTypes, filter, format, headers, enabled |
DELETE /api/admin/integrations/webhooks/{id} | Delete a webhook | settings:write | |
POST /api/admin/integrations/webhooks/{id}/test | Send a webhook a test delivery | settings:write |
Log streams
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/logs/streams | List log streams | settings:read | |
POST /api/admin/logs/streams | Create a log stream | settings:write | name (required), type (required), url (required), token (required), header |
PATCH /api/admin/logs/streams/{id} | Update a log stream | settings:write | name, url, token, header, enabled |
DELETE /api/admin/logs/streams/{id} | Delete a log stream | settings:write | |
POST /api/admin/logs/streams/{id}/test | Send a log stream a test event | settings:write |
Inline hooks
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/logs/inline-hooks | List inline hooks | settings:read | |
POST /api/admin/logs/inline-hooks | Create an inline hook | settings:write | name (required), type (required), url (required), keyId (required), onFailure, auth |
PATCH /api/admin/logs/inline-hooks/{id} | Update an inline hook | settings:write | name, url, keyId, onFailure, auth, enabled |
DELETE /api/admin/logs/inline-hooks/{id} | Delete an inline hook | settings:write | |
POST /api/admin/logs/inline-hooks/{id}/test | Call an inline hook with a test request | settings:write |
Hook keys and log integrity
| Operation | What it does | Permission | Body fields |
|---|---|---|---|
GET /api/admin/logs/hook-keys | List hook keys | settings:read | |
POST /api/admin/logs/hook-keys | Create a hook key | settings:write (fresh MFA) | name (required) |
DELETE /api/admin/logs/hook-keys/{id} | Delete a hook key | settings:write (fresh MFA) | |
POST /api/admin/logs/integrity/verify | Verify the System Log's integrity | report:read |
What's left out
Mounted routes that aren't described, by path prefix.
| Prefix | Routes | Why |
|---|---|---|
/api/admin/directory/custom-roles | 4 | Custom admin roles: still changing |
/api/admin/directory/resource-sets | 4 | Resource sets: still changing |
/api/admin/directory/custom-grants | 2 | Custom role grants: still changing |
/api/admin/directory/admins/me | 1 | The console asks about its own session |
/api/admin/directory/impersonation | 2 | The console's impersonated session |
/api/admin/directory/people/import | 5 | CSV import wizard |
/api/admin/directory/people/:id/impersonate | 1 | Sign in as a person, from the console |
/api/admin/directory/okta-import | 4 | Migration wizard, see Okta import |
/api/admin/security | 40 | Console screens, not written up as an integration surface yet |
/api/admin/itp | 33 | Console screens, not written up as an integration surface yet |
/api/admin/posture | 38 | Console screens, not written up as an integration surface yet |
/api/admin/pam | 18 | Console screens, not written up as an integration surface yet |
/api/admin/partners | 20 | Console screens, not written up as an integration surface yet |
/api/admin/reports | 11 | Console screens, not written up as an integration surface yet |
/api/admin/settings | 13 | Console screens, not written up as an integration surface yet |
/api/admin/devices | 17 | Console screens, not written up as an integration surface yet |
/api/admin/privacy | 3 | Console screens, not written up as an integration surface yet |
/api/admin/org-export | 3 | Needs a console session with MFA, so API tokens are refused |
/api/admin/gateway | 2 | Console screens, not written up as an integration surface yet |
/api/admin/factors | 19 | Console screens, not written up as an integration surface yet |
/api/admin/domains | 7 | Console screens, not written up as an integration surface yet |
/api/me | 17 | The signed-in person's own account |
/api/factors | 17 | The signed-in person's own factors |
/api/partner | 17 | Partner portal |
/api/public | 4 | Sign-in page data |
/api/pam | 1 | The PAM command line tool |
/api/platform | 25 | Operating a multi-tenant deployment |
/api/device-remediation | 1 | Device remediation page |
/api/hooks/fleet | 1 | Inbound webhook from Fleet |
/api/auth/.well-known | 1 | OIDC discovery, a standard document |
/.well-known | 3 | OAuth and SSF discovery, standard documents |
/sso/saml | 5 | SAML protocol endpoints |
/gateway | 2 | Access gateway protocol endpoints |
/ssf | 12 | Shared Signals protocol endpoints |
/healthz | 1 | Uptime check |
/readyz | 1 | Uptime check |
/metrics | 1 | Operator metrics |
/robots.txt | 1 | Crawlers |
/* | 1 | The web app |