Update an OAuth/OIDC client.
curl --request PUT \ --url https://auth.example.com/api/admin/clients/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "client_name": "example", "description": "example", "redirect_uris": [ "https://example.com" ], "grant_types": [ "authorization_code" ], "response_types": [ "code" ], "scope": "example", "logo_uri": "https://example.com", "client_uri": "https://example.com", "policy_uri": "https://example.com", "tos_uri": "https://example.com", "contacts": [ "example" ], "token_endpoint_auth_method": "none", "subject_type": "public", "sector_identifier_uri": "https://example.com", "is_trusted": true, "skip_consent": true, "allow_claims_without_scope": true, "identity_mapping": { "fieldMappingSetId": "example", "fieldMappingVersionId": "example", "destinationNamespace": "example", "sourceProfileId": "example" }, "attribute_release_consent": { "enabled": true, "mode": "once" }, "allowed_redirect_origins": [ "example" ], "web_origin_registry": "example", "require_pkce": true, "minimum_ial": "IAL1", "application_type": "web", "trust_group": "example", "browser_public_client_mode": "disabled", "browser_refresh_token_policy": "disabled", "native_sso_enabled": true, "native_channel_allowed": true, "allowed_channels": [ "example" ], "token_exchange_allowed": true, "allowed_subject_token_clients": [ "example" ], "allowed_token_exchange_resources": [ "example" ], "delegation_mode": "none", "client_credentials_allowed": true, "allowed_scopes": [ "example" ], "requestable_scopes": [ "example" ], "default_scope": "example", "default_audience": "example", "default_resource": "example", "id_token_signed_response_alg": "RS256", "userinfo_signed_response_alg": "none", "initiate_login_uri": "https://example.com", "login_ui_url": "https://example.com" }'Replace Client in the Clients area. The request body is JSON unless the detailed schema for this operation states otherwise. 404 also answers a client that does not exist. identity_mapping is the app’s own choice: a Mapping Set, or { “mode”: “none” } (the app takes no mapping, whatever the defaults say). Left null or absent, the app follows the tenant’s default Mapping Set, else the platform’s, else no mapping applies; an activation’s scope never binds an app to a set. When identity_mapping names a Mapping Set it is checked the way a default Mapping Set is: the set must be one the tenant owns (a platform-owned set is not accepted for an app yet, because a tenant backup cannot hold the reference; it answers as a set that does not exist, and the tenant’s or the platform’s default Mapping Set names it instead), active, with an active activation that applies and an active compiled snapshot (and, when fieldMappingVersionId is given, that version), and must release into exactly one active OIDC Destination Profile. 404 when the set does not exist or is not available to the tenant (another tenant’s set, and a platform-owned set, answer the same), 400 when it exists but cannot be used (not active, no active compiled snapshot, no single active OIDC Destination Profile), 503 when the Admin database cannot be read to check it. A change to identity_mapping records the level’s before and after choices in history. A concurrent client edit returns 409; a history preparation or confirmation failure returns 503. Other fields keep the ordinary client update validation.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Header Parameters
Section titled “Header Parameters ”Tenant selector for multi-tenant admin requests.
Request Body required
Section titled “Request Body required ”object
The lowest identity assurance level (NIST SP 800-63A) a person must have been proofed at to be authorized by, or issued tokens for, this client. Absent on update: unchanged. Null: removes it (the client sets no minimum of its own). An empty string is refused with 400 invalid_request, never read as null. A person below it is refused (authorization_code, refresh_token and the other user grants: access_denied at authorize, invalid_grant at the token endpoint; device and CIBA: access_denied). It applies whether or not tenant-wide assurance is on. Set here only; dynamic client registration does not accept it.
OAuth scope tokens this client may request. Agent Access connections require explicit agent scopes.
JWS algorithm for this app’s ID Tokens. Null or omitted means the tenant’s oauth.id_token_signing_alg (RS256 by default). Refused (400 invalid_request) when it differs from the tenant’s algorithm while oauth.id_token_signing_alg_client_override is false, and 503 temporarily_unavailable when that policy cannot be read.
JWS algorithm used for signed UserInfo responses. JSON is returned when set to none or omitted.
Responses
Section titled “ Responses ”OAuth/OIDC client mutation response.
object
object
The lowest identity assurance level (NIST SP 800-63A) a person must have been proofed at to be authorized by, or issued tokens for, this client. Absent on update: unchanged. Null: removes it (the client sets no minimum of its own). An empty string is refused with 400 invalid_request, never read as null. A person below it is refused (authorization_code, refresh_token and the other user grants: access_denied at authorize, invalid_grant at the token endpoint; device and CIBA: access_denied). It applies whether or not tenant-wide assurance is on. Set here only; dynamic client registration does not accept it.
OAuth scope tokens this client may request. Agent Access connections require explicit agent scopes.
JWS algorithm for this app’s ID Tokens. Null or omitted means the tenant’s oauth.id_token_signing_alg (RS256 by default). Refused (400 invalid_request) when it differs from the tenant’s algorithm while oauth.id_token_signing_alg_client_override is false, and 503 temporarily_unavailable when that policy cannot be read.
JWS algorithm used for signed UserInfo responses. JSON is returned when set to none or omitted.
Returned only on secret-issuing operations such as confidential client creation or regeneration. Public clients using token_endpoint_auth_method=none do not generate or return a secret.
Returned by create and update when a saved client cannot work as asked until a tenant setting changes. The client is saved either way. Today: a client with token_exchange_allowed whose delegation_mode the tenant has not allowed (tokens.exchange_delegation_enabled, tokens.exchange_impersonation_enabled), which token exchange refuses with unauthorized_client.
object
The tenant setting to turn on.
Example
{ "client": { "grant_types": [ "authorization_code" ], "response_types": [ "code" ], "token_endpoint_auth_method": "none", "subject_type": "public", "identity_mapping": { "mode": "none" }, "attribute_release_consent": { "mode": "once" }, "minimum_ial": "IAL1", "application_type": "web", "browser_public_client_mode": "disabled", "browser_refresh_token_policy": "disabled", "delegation_mode": "none", "id_token_signed_response_alg": "RS256", "userinfo_signed_response_alg": "none" }, "warnings": [ { "code": "token_exchange_not_allowed_by_tenant" } ]}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}A concurrent update prevented saving the Mapping Set choice (conflict).
object
Example
{ "error": "conflict", "reason": "version_conflict"}Storage is unavailable or the change history could not be confirmed. operation_id, when present, identifies a choice update whose completion needs confirmation; read current state before retrying rather than assume the client stayed unchanged.
object
Example generated
{ "error": "example", "error_description": "example", "operation_id": "example"}