Spec revisions
The API version, the Substratal-Version header, changes only for a breaking change. Within a version, openapi.yaml gets a new revision whenever endpoints or fields are added. This page lists every published revision, newest first, with what changed. It's worked out from the specs themselves, and recorded by an hourly sync that opens a pull request for each new revision.
Substratal-Version: 1 · current
The first API version. Until spec 1.0.0-draft.4 (2026-10-21) it was addressed as /v1 in the URL; since then the version is the Substratal-Version header.
1.0.0-draft.9 current · 2026-10-22 · 124 operations · +1 added · 1 changed
openapi.yaml · source b826f2a
Added (1)
- POST
/users/{id}/sessions/revoke-allRevoke every session (self or users.manage)
Changed (1)
- GET
/usersparameters added: query:role_id; description
1.0.0-draft.8 · 2026-10-22 · 123 operations · +2 added · whole API
openapi.yaml · source 2b62498
Whole API
- Schemas added: AuditExportRequest, AuditExport
Added (2)
- POST
/audit-exportsExport Audit Events to a file (asynchronous) - GET
/audit-exports/{id}Fetch an export's status, and its download link once ready
1.0.0-draft.7 · 2026-10-22 · 121 operations · 2 changed
openapi.yaml · source 87741be
Changed (2)
- POST
/applicationsresponses added: 429; summary; description - POST
/auth/app-tokensdescription
1.0.0-draft.6 · 2026-10-22 · 121 operations · 5 changed
openapi.yaml · source db02d07
Changed (5)
- POST
/auth/mfa/verifyresponses added: 403 - POST
/auth/signupschema or examples - POST
/auth/token/refreshresponses added: 403 - POST
/usersschema or examples - PATCH
/users/{id}schema or examples
1.0.0-draft.5 · 2026-10-22 · 121 operations · +3 added · 116 changed · whole API
openapi.yaml · source f66cb8d
Whole API
- Substratal-Version header declared (versions: 1)
- Schemas added: ScimToken
Added (3)
- DELETE
/organizations/{id}/scim-tokenTurn SCIM off for the Organization - GET
/organizations/{id}/scim-tokenShow the Organization's SCIM token (never its secret) - POST
/organizations/{id}/scim-tokenCreate (or rotate) the Organization's SCIM token
Changed (116)
- GET
/api-keysparameters added: $ref:ApiVersion; responses added: 400 - POST
/api-keysparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/api-keys/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/api-keys/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/api-keys/{id}parameters added: $ref:ApiVersion; responses added: 400 - POST
/api-keys/{id}/rotateparameters added: $ref:ApiVersion; responses added: 400 - GET
/applicationsparameters added: $ref:ApiVersion; responses added: 400 - POST
/applicationsparameters added: $ref:ApiVersion; responses added: 400 - GET
/applications/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/applications/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/applications/{id}/push-credentialsparameters added: $ref:ApiVersion; responses added: 400 - POST
/applications/{id}/push-credentialsparameters added: $ref:ApiVersion - DELETE
/applications/{id}/push-credentials/{provider}parameters added: $ref:ApiVersion - GET
/applications/{id}/push-credentials/{provider}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/applications/{id}/push-credentials/{provider}parameters added: $ref:ApiVersion - GET
/audit-eventsparameters added: $ref:ApiVersion; responses added: 400 - GET
/audit-events/{id}parameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/app-tokensparameters added: $ref:ApiVersion - POST
/auth/email/verifyparameters added: $ref:ApiVersion - POST
/auth/email/verify/resendparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/invitations/acceptparameters added: $ref:ApiVersion - POST
/auth/loginparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/logoutparameters added: $ref:ApiVersion - POST
/auth/mfa/verifyparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/oauth/authorization-codesparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/password/forgotparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/password/resetparameters added: $ref:ApiVersion - POST
/auth/signupparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/sso/{provider}/callbackparameters added: $ref:ApiVersion; responses added: 400 - POST
/auth/token/refreshparameters added: $ref:ApiVersion; responses added: 400 - GET
/entitlementsparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/entitlements/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/entitlements/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/entitlements/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/organizationsparameters added: $ref:ApiVersion; responses added: 400 - POST
/organizationsparameters added: $ref:ApiVersion - GET
/organizations/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/organizations/{id}parameters added: $ref:ApiVersion; responses added: 400 - POST
/organizations/{id}/billing/checkout-sessionsparameters added: $ref:ApiVersion - POST
/organizations/{id}/billing/portal-sessionsparameters added: $ref:ApiVersion - GET
/organizations/{id}/entitlementsparameters added: $ref:ApiVersion; responses added: 400 - POST
/organizations/{id}/entitlementsparameters added: $ref:ApiVersion; responses added: 400 - GET
/organizations/{id}/membersparameters added: $ref:ApiVersion; responses added: 400 - POST
/organizations/{id}/membersparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/organizations/{id}/members/{userId}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/organizations/{id}/members/{userId}parameters added: $ref:ApiVersion; responses added: 400 - POST
/organizations/{id}/members/me/acceptparameters added: $ref:ApiVersion - GET
/organizations/{id}/subscriptionparameters added: $ref:ApiVersion; responses added: 400 - PATCH
/organizations/{id}/subscriptionparameters added: $ref:ApiVersion; responses added: 400 - GET
/permissionsparameters added: $ref:ApiVersion; responses added: 400 - GET
/rolesparameters added: $ref:ApiVersion; responses added: 400 - POST
/rolesparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/roles/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/roles/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/roles/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/tenantsparameters added: $ref:ApiVersion; responses added: 400 - GET
/tenants/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/tenants/{id}/tier-change-requestsparameters added: $ref:ApiVersion; responses added: 400 - POST
/tenants/{id}/tier-change-requestsparameters added: $ref:ApiVersion; responses added: 400 - GET
/tenants/{id}/tier-change-requests/{requestId}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/tenants/{id}/tier-change-requests/{requestId}parameters added: $ref:ApiVersion; responses added: 400 - GET
/usersparameters added: $ref:ApiVersion; responses added: 400 - POST
/usersparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/apps/{appId}/effective-permissionsparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/apps/{appId}/profileparameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/apps/{appId}/profileparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/apps/{appId}/settingsparameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/apps/{appId}/settingsparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/devicesparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/devicesparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}/devices/{deviceId}parameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/devices/{deviceId}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/devices/{deviceId}parameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/devices/{deviceId}/testparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/entitlementsparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/entitlementsparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/erasure-requestsparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}/erasure-requests/currentparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/exportparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/invitationparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}/mfa/totpparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/mfa/totpparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/mfa/totp/confirmparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/mfa/totp/disableparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/notificationsparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/notificationsparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/notifications/{notificationId}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/notifications/{notificationId}parameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/notifications/mark-readparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/notifications/unread-countparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/passwordparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/profileparameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/profileparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/rolesparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}/roles/{roleId}parameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/roles/{roleId}parameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/sessionsparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/users/{id}/sessions/{sessionId}parameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/settingsparameters added: $ref:ApiVersion; responses added: 400 - PATCH
/users/{id}/settingsparameters added: $ref:ApiVersion; responses added: 400 - GET
/users/{id}/subscriptionparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/{id}/suspendparameters added: $ref:ApiVersion; responses added: 400 - POST
/users/me/billing/checkout-sessionsparameters added: $ref:ApiVersion - POST
/users/me/billing/portal-sessionsparameters added: $ref:ApiVersion - GET
/webhooksparameters added: $ref:ApiVersion; responses added: 400 - POST
/webhooksparameters added: $ref:ApiVersion; responses added: 400 - DELETE
/webhooks/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/webhooks/{id}parameters added: $ref:ApiVersion; responses added: 400 - PATCH
/webhooks/{id}parameters added: $ref:ApiVersion; responses added: 400 - GET
/webhooks/{id}/deliveriesparameters added: $ref:ApiVersion; responses added: 400 - POST
/webhooks/{id}/deliveries/{deliveryId}/redeliverparameters added: $ref:ApiVersion; responses added: 400 - POST
/webhooks/{id}/rotate-secretparameters added: $ref:ApiVersion; responses added: 400 - POST
/webhooks/{id}/testparameters added: $ref:ApiVersion; responses added: 400
1.0.0-draft.4 · 2026-10-21 · 118 operations · whole API
openapi.yaml · source 1565cd9
Whole API
- Server URL: https://api.substratalapps.com/v1 → https://api.substratalapps.com
1.0.0-draft.3 · 2026-10-20 · 118 operations · +24 added · −4 removed · 6 changed · whole API
openapi.yaml · source 3e6327f
Whole API
- Schemas added: ApplicationAccessTier, Plan, PlanSource, UserSubscription, OrganizationSubscription, CheckoutSessionCreate, PortalSessionCreate, PushProvider, PushCredentialCreate, PushCredentialUpdate, PushCredential, PushCredentialList, DeviceStatus, DeviceInactiveReason, WebPushSubscription, DeviceRegistration, DeviceUpdate, Device, DevicePage, DeviceTestResult, NotificationPriority, NotificationSource, NotificationState, NotificationPushStatus, NotificationSkipReason, NotificationCreate, NotificationPush, Notification, NotificationDelivery, NotificationWithDeliveries, NotificationPage, NotificationUnreadCount
- Schemas removed: TenantPlan, TenantUsage
Added (24)
- GET
/applications/{id}/push-credentialsList the push providers an Application has configured (the owner, the app's own key, or applications.manage) - POST
/applications/{id}/push-credentialsConfigure one push provider (the owner or applications.manage, User token only) - DELETE
/applications/{id}/push-credentials/{provider}Remove a push provider (User token only) - GET
/applications/{id}/push-credentials/{provider}Fetch one provider's configuration - PATCH
/applications/{id}/push-credentials/{provider}Replace key material, change non-secret fields, or re-enable a failed credential (User token only) - POST
/organizations/{id}/billing/checkout-sessionsStart a Stripe Checkout to subscribe the Organization to Standard (org admin, User token) - POST
/organizations/{id}/billing/portal-sessionsOpen the Stripe Customer Portal for the Organization's subscription (org admin or billing.manage, User token) - GET
/organizations/{id}/subscriptionAn Organization's plan and Standard subscription (org admin or billing.manage) - PATCH
/organizations/{id}/subscriptionChoose which members the Organization's subscription covers (org admin) - GET
/users/{id}/devicesList a User's push devices (self, the app's own key, or users.list) - POST
/users/{id}/devicesRegister a push device, or refresh an existing registration (self or the app's own key) - DELETE
/users/{id}/devices/{deviceId}Unregister a device (self, the app's own key, or users.manage) - GET
/users/{id}/devices/{deviceId}Fetch one device - PATCH
/users/{id}/devices/{deviceId}Update a device's name, app version, environment, or rotated token (self or the app's own key) - POST
/users/{id}/devices/{deviceId}/testSend a test push to one device and wait for the provider's answer (self or the app's own key) - GET
/users/{id}/notificationsList a User's notification inbox (self, the app's own key, or users.list) - POST
/users/{id}/notificationsSend one notification to one User (the app's own key with notifications.send, or platform notifications.send) - GET
/users/{id}/notifications/{notificationId}Fetch one notification, with its per-device deliveries - PATCH
/users/{id}/notifications/{notificationId}Mark one notification read, unread, or archived (self or the app's own key) - POST
/users/{id}/notifications/mark-readMark every unread notification matching the filters as read (self or the app's own key) - GET
/users/{id}/notifications/unread-countCount unread notifications, in total and per Application (self or the app's own key) - GET
/users/{id}/subscriptionA User's plan, what covers it, and their own subscription (self or billing.manage) - POST
/users/me/billing/checkout-sessionsStart a Stripe Checkout to subscribe yourself to Standard (User token) - POST
/users/me/billing/portal-sessionsOpen the Stripe Customer Portal for your own subscription (User token)
Removed (4)
- POST
/tenants/{id}/billing/checkout-sessionsStart a Stripe Checkout to subscribe to Team (owner) - POST
/tenants/{id}/billing/portal-sessionsOpen the Stripe Customer Portal (owner or billing.manage) - GET
/tenants/{id}/subscriptionCurrent plan, subscription status, period, and seats - GET
/tenants/{id}/usageUsage against every plan limit
Changed (6)
- GET
/applicationsparameters added: query:access_tier - POST
/applicationsresponses removed: 402 - POST
/organizations/{id}/entitlementsresponses removed: 402 - GET
/tenantsparameters removed: query:plan, query:restricted - POST
/users/{id}/entitlementsresponses removed: 402 - POST
/webhooksresponses removed: 402
1.0.0-draft.2 · 2026-10-07 · 98 operations · +40 added · −1 removed · 57 changed · whole API
openapi.yaml · source ea851ae
Whole API
- Authentication schemes changed
- Schemas added: OAuthError, PageInfo, PageEnvelope, Actor, Region, MfaChallenge, AppToken, AppTokenClaims, OAuthTokenRequest, Session, ErasureRequest, ApplicationPermission, ResolvedEntitlementStatus, RoleCreate, OrganizationMembershipStatus, SubscriptionStatus, Subscription, TenantUsage, RedirectSession, AuditTargetType, AccessEventReason, WebhookEventEnvelope, WebhookDelivery
- Schemas removed: Page, RoleWrite
Added (40)
- GET
/api-keys/{id}Fetch one key (never the secret) - PATCH
/api-keys/{id}Change name, permissions, or restrict_destructive - GET
/audit-events/{id}Fetch one Audit Event - POST
/auth/app-tokensMint a per-app JWT from a platform session (embedded login) - POST
/auth/email/verifyConfirm an email address from an emailed token - POST
/auth/email/verify/resendRe-send a verification email (always 202) - POST
/auth/invitations/acceptSet a password on an invited account, activate it, and sign in - POST
/auth/mfa/verifyComplete a login that returned an MFA challenge - POST
/auth/oauth/authorization-codesMint a one-time authorization code for a hosted launch (PKCE) - POST
/auth/oauth/tokenExchange an authorization code or app refresh token for an app token - POST
/auth/password/forgotSend a password-reset email (always 202) - POST
/auth/password/resetSet a new password from a reset token (revokes every session) - POST
/auth/signupCreate an account with email and password - PATCH
/organizations/{id}/members/{userId}Change a member's role - POST
/organizations/{id}/members/me/acceptAccept a pending membership (the invited User's own token) - DELETE
/roles/{id}Delete an unassigned, non-seed Role - GET
/roles/{id}Fetch one Role - PATCH
/roles/{id}Change a Role's permissions or description - POST
/tenants/{id}/billing/checkout-sessionsStart a Stripe Checkout to subscribe to Team (owner) - POST
/tenants/{id}/billing/portal-sessionsOpen the Stripe Customer Portal (owner or billing.manage) - GET
/tenants/{id}/subscriptionCurrent plan, subscription status, period, and seats - GET
/tenants/{id}/tier-change-requests/{requestId}Fetch one tier-change request - PATCH
/tenants/{id}/tier-change-requests/{requestId}Schedule, start, complete, or cancel a tier-change request (tenants.manage) - GET
/tenants/{id}/usageUsage against every plan limit - GET
/users/{id}/apps/{appId}/effective-permissionsThe live access check (always 200) - POST
/users/{id}/erasure-requestsRequest right-to-erasure (soft-delete now, hard-delete cascade in 7 days) - DELETE
/users/{id}/erasure-requests/currentCancel a scheduled erasure inside its 7-day window (users.manage) - POST
/users/{id}/invitationRe-send the invitation email to an invited user (users.manage) - DELETE
/users/{id}/mfa/totpSupport reset of a user's TOTP (requires users.manage) - POST
/users/{id}/mfa/totp/confirmConfirm TOTP enrollment with a first code; returns recovery codes once - POST
/users/{id}/mfa/totp/disableTurn TOTP off given a current code or recovery code (self only) - POST
/users/{id}/passwordChange password given the current one (self only) - GET
/users/{id}/sessionsList active sessions (self or users.manage) - DELETE
/users/{id}/sessions/{sessionId}Revoke one session - GET
/webhooks/{id}Fetch one subscription - PATCH
/webhooks/{id}Change url, events, description, api_version, or re-enable - GET
/webhooks/{id}/deliveriesRecent delivery attempts (30-day log) - POST
/webhooks/{id}/deliveries/{deliveryId}/redeliverRe-send one past event (same event id) - POST
/webhooks/{id}/rotate-secretIssue a new signing secret (24-hour overlap) - POST
/webhooks/{id}/testSend a webhook.test event now
Removed (1)
- GET
/users/{id}/applications/{appId}/effective-permissionsThe live access check
Changed (57)
- GET
/api-keysparameters added: $ref:Cursor, $ref:Limit, query:include_inactive, query:intended_use, query:mode, query:scope; summary; description - POST
/api-keysresponses added: 403; summary; description - DELETE
/api-keys/{id}responses added: 404; description; destructive: no → always - POST
/api-keys/{id}/rotateresponses added: 404; summary; description; destructive: no → always - GET
/applicationsparameters added: query:owned, query:owner_organization_id, query:owner_user_id, query:review_status, query:tenant_id; summary; description - POST
/applicationsparameters added: $ref:IdempotencyKeyOptional; responses added: 402, 403, 409, 422; summary; description - GET
/applications/{id}responses added: 404 - PATCH
/applications/{id}parameters added: $ref:IfMatch; responses added: 403, 422; summary; description; destructive: no → conditional - GET
/audit-eventsparameters added: query:actor_id, query:actor_type, query:organization_id, query:target_id, query:target_type, query:tenant_id; parameters removed: query:actor_user_id; responses added: 403; summary; description - POST
/auth/loginresponses added: 403, 429; summary - POST
/auth/logoutresponses added: 400, 401; summary; destructive: no → conditional; request body added - POST
/auth/sso/{provider}/callbackresponses added: 501; summary - POST
/auth/token/refreshsummary - GET
/entitlementsparameters added: query:ends_before, query:include_inactive, query:order_id, query:organization_id; responses added: 403; summary; description - DELETE
/entitlements/{id}responses added: 403, 404; summary; description; destructive: no → always - GET
/entitlements/{id}responses added: 404; description - PATCH
/entitlements/{id}parameters added: $ref:IfMatch; responses added: 403, 404, 422; summary; description; destructive: no → conditional - GET
/organizationsparameters added: query:q, query:status; summary; description - POST
/organizationsparameters added: $ref:IdempotencyKeyOptional; responses added: 400, 429; summary; description - GET
/organizations/{id}responses added: 404; description - PATCH
/organizations/{id}parameters added: $ref:IfMatch; responses added: 403; summary; description; destructive: no → conditional - GET
/organizations/{id}/entitlementsparameters added: $ref:Cursor, $ref:Limit, query:application_id, query:ends_before, query:include_inactive, query:order_id, query:status; summary; description - POST
/organizations/{id}/entitlementsresponses added: 402, 403, 409, 422; summary; description - GET
/organizations/{id}/membersparameters added: $ref:Cursor, $ref:Limit, query:membership_status, query:q, query:role; summary - POST
/organizations/{id}/membersresponses added: 403, 404; summary; description - DELETE
/organizations/{id}/members/{userId}responses added: 403, 409; summary; description; destructive: no → always - GET
/permissionsparameters added: query:scope; summary - GET
/rolesschema or examples - POST
/rolesresponses added: 403, 409; summary; description - GET
/tenantsparameters added: query:owner_organization_id, query:owner_user_id, query:plan, query:restricted, query:status, query:tier; summary; description - GET
/tenants/{id}description - GET
/tenants/{id}/tier-change-requestsparameters added: $ref:Cursor, $ref:Limit; description - POST
/tenants/{id}/tier-change-requestsresponses added: 403, 422; summary; description; destructive: no → always - GET
/usersparameters added: query:application_id, query:created_after, query:created_before, query:email, query:organization_id, query:q; summary; description - POST
/usersparameters added: $ref:IdempotencyKeyOptional; responses added: 403, 422; summary; description - DELETE
/users/{id}responses added: 403, 404; summary; description; destructive: no → always - GET
/users/{id}description - PATCH
/users/{id}parameters added: $ref:IfMatch; responses added: 403, 409, 422; summary; description; destructive: no → conditional - GET
/users/{id}/apps/{appId}/profileresponses added: 403; summary; description - PATCH
/users/{id}/apps/{appId}/profileparameters added: $ref:IfMatch; responses added: 403, 409, 422; summary - GET
/users/{id}/apps/{appId}/settingsresponses added: 403, 404; summary - PATCH
/users/{id}/apps/{appId}/settingsparameters added: $ref:IfMatch; responses added: 403, 409; summary; description - GET
/users/{id}/entitlementsparameters added: $ref:Cursor, $ref:Limit, query:application_id, query:include_inactive, query:source, query:status; summary - POST
/users/{id}/entitlementsresponses added: 402, 403, 422; summary; description - GET
/users/{id}/exportresponses added: 429; description - POST
/users/{id}/mfa/totpresponses added: 409; summary; description; request body removed - GET
/users/{id}/profileresponses added: 404; description - PATCH
/users/{id}/profileparameters added: $ref:IfMatch; responses added: 409, 422; summary; description - GET
/users/{id}/rolesparameters added: $ref:Cursor, $ref:Limit, query:application_id; summary - DELETE
/users/{id}/roles/{roleId}responses added: 403, 409; summary; description; destructive: no → always - POST
/users/{id}/roles/{roleId}responses added: 200, 403, 404; responses removed: 409; summary; description - GET
/users/{id}/settingssummary; description - PATCH
/users/{id}/settingsparameters added: $ref:IfMatch; responses added: 409, 422; summary; description - POST
/users/{id}/suspendresponses added: 403, 409; summary; description; destructive: no → always; request body added - GET
/webhooksparameters added: $ref:Cursor, $ref:Limit, query:application_id; summary - POST
/webhooksresponses added: 402, 409; summary - DELETE
/webhooks/{id}responses added: 404; destructive: no → always
1.0.0-draft · 2026-10-05 · 59 operations · +59 added
openapi.yaml · source e7c76a6
Added (59)
- GET
/api-keysList keys in scope for the caller - POST
/api-keysCreate a key - DELETE
/api-keys/{id}Revoke permanently - POST
/api-keys/{id}/rotateIssue a new secret for the same key record - GET
/applicationsList the catalog - POST
/applicationsAdd a catalog entry - GET
/applications/{id}Fetch one Application - PATCH
/applications/{id}Update a catalog entry - GET
/audit-eventsQuery the audit log - POST
/auth/loginExchange credentials for a session - POST
/auth/logoutInvalidate the current session - POST
/auth/sso/{provider}/callbackComplete an SSO login - POST
/auth/token/refreshExchange a refresh token for a new access token - GET
/entitlementsList entitlements across all users (admin/support) - DELETE
/entitlements/{id}Hard-remove a grant made in error - GET
/entitlements/{id}Fetch one entitlement - PATCH
/entitlements/{id}Change status (the on/off toggle), or narrow an org-wide grant's member_scope - GET
/healthHealth check - GET
/organizationsList organizations - POST
/organizationsCreate an organization - GET
/organizations/{id}Fetch one Organization - PATCH
/organizations/{id}Update name, or suspend/reactivate - GET
/organizations/{id}/entitlementsList org-wide (seat) entitlements - POST
/organizations/{id}/entitlementsGrant an app to the whole org - GET
/organizations/{id}/membersList member users - POST
/organizations/{id}/membersAdd a member - DELETE
/organizations/{id}/members/{userId}Remove a member - GET
/permissionsList every known Permission key - GET
/rolesList Roles - POST
/rolesDefine a new Role - GET
/tenantsList Tenants - GET
/tenants/{id}Fetch one Tenant - GET
/tenants/{id}/tier-change-requestsList tier-change requests for a Tenant - POST
/tenants/{id}/tier-change-requestsRequest a tier change on a customer's behalf - GET
/usersList users - POST
/usersCreate a user - DELETE
/users/{id}Soft-delete a user - GET
/users/{id}Fetch one user - PATCH
/users/{id}Update mutable fields - GET
/users/{id}/applications/{appId}/effective-permissionsThe live access check - GET
/users/{id}/apps/{appId}/profileFetch per-app AppProfile - PATCH
/users/{id}/apps/{appId}/profileUpdate per-app AppProfile - GET
/users/{id}/apps/{appId}/settingsFetch fully-resolved per-app settings - PATCH
/users/{id}/apps/{appId}/settingsWrite per-app overrides - GET
/users/{id}/entitlementsList a user's entitlements - POST
/users/{id}/entitlementsGrant access to an app - GET
/users/{id}/exportExport everything this API holds about this user - POST
/users/{id}/mfa/totpEnroll TOTP-based MFA for a password UserIdentity - GET
/users/{id}/profileFetch global Profile - PATCH
/users/{id}/profileUpdate global Profile - GET
/users/{id}/rolesList a user's Role assignments - DELETE
/users/{id}/roles/{roleId}Remove a Role assignment - POST
/users/{id}/roles/{roleId}Assign a Role to a user - GET
/users/{id}/settingsFetch global Settings - PATCH
/users/{id}/settingsUpdate global Settings - POST
/users/{id}/suspendSuspend a user - GET
/webhooksList this caller's webhook subscriptions - POST
/webhooksSubscribe a URL to one or more event types - DELETE
/webhooks/{id}Unsubscribe