Grant Types

Every Inbound App obtains tokens from Descope's shared token endpoint by sending a grant_type and the parameters that grant requires.

The grants below are authentication grants: they control how a client obtains its first token. Enable them under Grant Types when you create the Inbound App. The same toggles apply to Agentic Clients.

After a client holds a token, it may call the same endpoint with token exchange (RFC 8693) to retarget that credential to a specific Resource or Connection. Token exchange is not toggled per app — it is always available at the project level and gated only by Policies.

ClientBrowser / UserDescoperedirect to /authorizeGET /authorizeauth (+ consent)redirect with codecallback with codePOST /token (code)issues tokensaccess (+ id / refresh)

Interactive login where the user authenticates in a browser, then the client exchanges a short-lived code for tokens.

1 / 6

Authentication grants (per-app toggles)

Grantgrant_type valueUser involved?Configured per app?
Authorization codeauthorization_codeYes — login + consentYes (default for most apps)
Refresh tokenrefresh_tokenNo — follows an earlier user grantIssued with authorization code / CIBA
Client credentialsclient_credentialsNo — M2M / autonomousYes (confidential clients)
JWT bearerurn:ietf:params:oauth:grant-type:jwt-bearerOptional — external JWT may represent a userYes (confidential clients)
CIBACIBA backchannel + pollYes — out-of-band approvalYes (confidential clients)

After you have a token

Capabilitygrant_type valueUser involved?Configured per app?
Token exchangeurn:ietf:params:oauth:grant-type:token-exchangeDepends on subject tokenNo — Policy only

Device authorization

Device authorization (device_code) is documented for Federated OIDC Apps, not Inbound Apps. Inbound Apps use CIBA for similar headless approval scenarios.

Policies and Resources

Grant type decides how a client authenticates. Policies and Resources decide what it receives:

  • Register each API or MCP server as a Resource with OAuth scopes.
  • Add a Policy whose subject is the Inbound App and whose target is the Resource and allowed scopes.
  • For user-delegated grants (authorization code, CIBA), consent can only approve scopes a policy already permits.

Token exchange is governed entirely by policy: the client trades a subject token it already holds for a new token scoped to a downstream Resource or Connection. See the dedicated page for setup and examples.

Choosing a grant

ScenarioGrant
Partner app or AI agent acting for a signed-in userAuthorization code
Headless client — user approves on another deviceCIBA
Backend service or autonomous agent with no userClient credentials
Partner IdP already issued a JWT you trustJWT bearer
Client already has a Descope token and needs one for a specific Resource or ConnectionToken exchange
Extend a user session without re-consentRefresh token
Was this helpful?

On this page