POST
/v1/mgmt/sso/idp/app/oidc/create

Authorization

Descope Project ID and Management Key
AuthorizationBearer <token>

Project ID:Management Key as bearer token.

In: header

Request Body

application/json

id?string
name*string
Length1 <= length <= 254
description?string
Lengthlength <= 100000
enabled?boolean
logo?string
Lengthlength <= 2097152
loginPageUrl?string
claims?array<string>
string
forceAuthentication?boolean
backChannelLogoutUrl?string
jwtBearerSettings?object
customIdpInitiatedLoginPageUrl?string
sessionSettings?object
clientType?string

How the app authenticates as an OAuth client. 'confidential': a dedicated client ID and client secret, for server-side apps. 'public': a dedicated client ID and PKCE with no secret, for native, mobile and single-page apps. These apps normally use the project-level issuer and discovery endpoints. On create, an empty clientType means the legacy Access Key type (the project ID is the client ID, and the issuer and discovery endpoints are per app); accounts that can't use the legacy type get 'confidential' instead. On update, an empty clientType keeps the app's current type.

approvedRedirectUrls?array<string>
string
authorizationCodeDisabled?boolean
clientCredentialsDisabled?boolean
refreshTokenDisabled?boolean
jwtBearerDisabled?boolean
deviceCodeDisabled?boolean
forcePkce?boolean
clientId?string

Optional: import an existing OIDC client. Both are accepted on create only (immutable afterward); empty means the client_id is computed and the client_secret is generated server-side. The client_id must be unique within the project. The client_secret is returned once on the create response.

Lengthlength <= 200
clientSecret?string
Lengthlength <= 1000
defaultAudience?string

Default audience policy for issued tokens. Applies only to modern apps (non-empty clientType): 'projectId', 'clientId', 'appId', empty (both), or 'empty' (no aud at all). Legacy apps are unaffected. Mirrors third-party apps.

trustedAppIds?array<string>
string

trustedAppIds lists sibling SSO apps whose roles are included in this app's JWT under the trustedApps claim at login time. Apps where the user has no roles are silently omitted.

customAttributes?object

Custom attributes as key-value pairs. Keys must be strings; values can be strings, numbers, booleans, or arrays.

Example{ "attribute-key": "attribute-value" }
trustedAppsAudience?string

Audience policy applied to trusted sibling apps' identifiers when appended to the issued token's aud (see trustedAppIds). Same value set as defaultAudience: 'projectId' / 'clientId' / 'appId' / empty (=both) / 'empty' (add none). Independent of defaultAudience.

serviceAccountRoles?array<SSOAppServiceAccountRole>

serviceAccountRoles assigns this app (when client_credentials is enabled) application-roles in its trusted apps; surfaced in its client_credentials token under the app.trustedApps claim.

mtlsClientAuthMethods?object
darkLogo?string
Lengthlength <= 2097152
wellKnownCustomization?object
assignedRoleIds?array<string>
string

assignedRoleIds lists project-level roles that grant access to this application. A user holding any of them can access it, in addition to users assigned directly or through their tenant. Additive: it never removes access, so it only changes the outcome for projects that deny applications by default. Tenant scoped roles are rejected.

forceDpop?boolean

Require a valid DPoP proof (RFC 9449) at the token endpoint. Applies to Confidential/Public clients; legacy apps (empty clientType) are exempt. Defaults to false.

Create OIDC Application within a project

This endpoint creates an OIDC Application within your Descope project.

See Also

curl -X POST "https://api.descope.com/v1/mgmt/sso/idp/app/oidc/create" \  -H "Content-Type: application/json" \  -d '{    "name": "string"  }'
{  "id": "string"}
export interface Response {id?: string}
Was this helpful?