Update a client's policy profile.
curl --request PUT \ --url https://auth.example.com/api/admin/clients/example/profile \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "ifMatch": "2", "profile": { "preset": "custom", "clientType": "web", "oauth": { "grantTypes": [ "authorization_code" ] }, "redirect": { "redirectUris": [ "https://app.example.com/callback" ] }, "metadata": { "status": "draft" } } }'Replace Profile in the Clients area. The request body is JSON unless the detailed schema for this operation states otherwise. Successful client profile saves invalidate the tenant authentication-methods cache. profile.guestAuth controls browser guest access for this client: enabled (boolean, default false), allowedScopes (unique OAuth scope strings including openid), allowedUpgradeMethods (unique email/passkey values), preserveSubOnUpgrade (must be true), and allowPromptNone (boolean). New profiles default to openid and account:lifecycle:read as the guest scope allow-list, email/passkey upgrades, and allowPromptNone false. An allowed scope is never granted without being requested and allowed by the regular client authorization policy. Guest retention is controlled by the tenant account-lifecycle settings. A guest-only update (guestAuth as the only profile field) initializes the standard tenant policy when none exists, after validation succeeds. Existing tenant policies remain unchanged and are enforced. Policy read failures return 503 without initializing defaults.
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 ”Replace a client policy profile. ifMatch is required and must match the current profile version.
object
object
object
object
object
object
object
object
object
Example
{ "ifMatch": "2", "profile": { "preset": "custom", "clientType": "web", "oauth": { "grantTypes": [ "authorization_code" ] }, "redirect": { "redirectUris": [ "https://app.example.com/callback" ] }, "metadata": { "status": "draft" } }}Responses
Section titled “ Responses ”Client policy profile update result.
object
object
object
object
object
object
object
object
object
object
Example
{ "profile": { "clientId": "client_123", "version": 3, "tenantContractVersion": 7, "clientType": "web", "preset": "custom", "oauth": { "grantTypes": [ "authorization_code" ] }, "encryption": {}, "scopes": [ "openid" ], "authMethods": [ "authorization_code" ], "consent": {}, "redirect": { "redirectUris": [ "https://app.example.com/callback" ] }, "tokens": {}, "metadata": { "createdAt": "2026-02-01T00:00:00.000Z", "createdBy": "admin_123", "updatedAt": "2026-02-01T00:05:00.000Z", "updatedBy": "admin_123", "status": "draft", "statusHistory": [] } }, "previousVersion": 2, "warnings": [], "_links": { "self": "/api/admin/clients/client_123/profile" }}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}default
Section titled “default ”Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}