Skip to main content

Admin API: Clients

Operations on clients in the Odudu admin API, one section each. Every request carries a bearer token; the index says which audience it needs and how a refusal is shaped.

GET /admin/tenants/{tenant}/clients​

Requires the "manage-clients" capability.

service_account_admin_reach is what the client’s service account holds of the admin capabilities, which every write on the client is judged against; derived on every read and outside the ETag, empty for a client with no service account. client_id_exact finds the one client whose client_id is exactly that, through the unique index.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.

Query parameters​

NameTypeRequiredDetails
cursorstringnoThe next value of the previous page, to continue after it.
limitintegernoHow many items to return. A value over 200 is treated as 200; the default is 50. Constraints: at least 1.
client_idstringnoOnly clients whose client_id starts with this. Constraints: at least 1 character.
client_id_exactstringnoThe one client with exactly this client_id. Constraints: at least 1 character.
namestringnoOnly clients whose name starts with this. Constraints: at least 1 character.
typestringnoOnly clients of this type. Constraints: one of public, confidential.
enabledstringnotrue for enabled clients only. Constraints: one of true, false.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
itemsarray of objectyesThe entries of this answer.
items[]objectyes
items[].idstringyesThe client's internal identifier, a UUID. It names the client in admin API paths such as /clients/{id}; it is not the OAuth client_id.
items[].client_idstringyesThe client_id the application sends to the authorization and token endpoints. Chosen when the client is created and unique within the tenant.
items[].namestringyesA display name for people, shown for example on the consent screen.
items[].descriptionstring or nullyesFree text for administrators, or null when none was set.
items[].typestringyespublic for an application that cannot keep a secret (a single-page or native app), which must use PKCE; confidential for one that authenticates at the token endpoint. Constraints: one of public, confidential.
items[].enabledbooleanyesA disabled client cannot start a sign-in or obtain tokens, and tokens already issued to it stop being accepted.
items[].full_scope_allowedbooleanyesWhen true the client's tokens carry every role the user holds. When false, a role reaches a token only through a scope the client is assigned.
items[].registration_originstringyesHow the client came to exist: seeded by odudu seed or odudu init, anonymous or token through dynamic registration, or operator through the admin API. Constraints: one of seeded, anonymous, token, operator.
items[].created_atstringyesWhen the client was created, as an ISO 8601 date and time.
items[].redirect_urisarray of stringyesThe addresses the authorization server may send the user back to after sign-in. A request naming any other address is refused.
items[].grant_typesarray of stringyesThe grants the client may use at the token endpoint, such as authorization_code, refresh_token, client_credentials.
items[].token_endpoint_auth_methodstringyesHow a confidential client authenticates at the token endpoint, for example client_secret_basic, client_secret_post or private_key_jwt.
items[].audiencesarray of stringyesThe audiences (aud) added to the access tokens issued to this client, besides the issuer.
items[].access_token_ttl_secondsinteger or nullyesHow long this client's access tokens live, in seconds. Null uses the tenant's setting of the same name.
items[].id_token_ttl_secondsinteger or nullyesHow long this client's ID tokens live, in seconds. Null uses the tenant's setting of the same name.
items[].refresh_token_ttl_secondsinteger or nullyesHow long this client's refresh tokens live, in seconds. Null uses the tenant's setting of the same name.
items[].client_credentials_scopesarray of stringyesThe scopes the client may request with the client_credentials grant, where it acts as itself.
items[].web_originsarray of stringyesThe browser origins allowed to call the token and UserInfo endpoints from JavaScript (CORS).
items[].post_logout_redirect_urisarray of stringyesThe addresses the user may be sent to after a logout the client started.
items[].jwksany or nullyesThe public keys the client authenticates with when its method is private_key_jwt, as a JWK Set. Null when it uses jwks_uri or a secret.
items[].jwks_uristring or nullyesThe address the server fetches the client public keys from, instead of holding them in jwks.
items[].frontchannel_logout_uristring or nullyesThe client page the user agent loads to tell the client the user signed out (front-channel logout).
items[].backchannel_logout_uristring or nullyesThe client endpoint the server posts a logout token to when a session ends (back-channel logout).
items[].frontchannel_logout_session_requiredbooleanyesWhether the front-channel logout request carries the session id (sid) and issuer.
items[].backchannel_logout_session_requiredbooleanyesWhether the back-channel logout token carries the session id (sid).
items[].consent_requiredbooleanyesWhether the user must approve what the client asks for on a consent screen before tokens are issued.
items[].token_exchange_impersonation_allowedbooleanyesWhether the client may use token exchange (RFC 8693) to act as a user rather than on behalf of one.
items[].userinfo_signed_response_algstring or nullyesThe algorithm that signs this client’s UserInfo responses. Null returns plain JSON.
items[].userinfo_encrypted_response_algstring or nullyesThe key-management algorithm that encrypts this client’s UserInfo responses, or null.
items[].userinfo_encrypted_response_encstring or nullyesThe content-encryption algorithm for encrypted UserInfo responses, or null.
items[].tls_client_auth_subject_dnstring or nullyesThe certificate subject a client using tls_client_auth must present, or null.
items[].client_uristring or nullyesA web page about the client application, shown to users.
items[].policy_uristring or nullyesThe client privacy policy page, shown to users.
items[].tos_uristring or nullyesThe client terms of service page, shown to users.
items[].id_token_signed_response_algstring or nullyesThe algorithm that signs this client’s ID tokens. Null uses the tenant’s default.
items[].default_max_ageinteger or nullyesThe longest age in seconds a sign-in may have before the user must sign in again, when the request does not say. Null sets none.
items[].require_auth_timebooleanyesWhether ID tokens always carry the auth_time claim.
items[].previous_secret_expires_atstring or nullyesWhen the secret that a rotation replaced stops authenticating, or null when no rotation kept one. The secret itself is never shown.
items[].builtin_adminbooleanyesTrue for the tenant’s built-in admin console client, which cannot be deleted and is limited in what can be amended.
items[].service_subject_idstring or nullyesThe service account a confidential client authenticates as, or null when it has none. Constraints: a UUID.
items[].scopesarray of objectyesThe scopes assigned to the client and whether each is default (always requested) or optional (only when asked for).
items[].scopes[]objectyes
items[].scopes[].idstringyesThe scope’s identifier.
items[].scopes[].namestringyesThe scope name.
items[].scopes[].assignmentstringyesdefault is requested for the client without being asked for, optional only when the request names it. Constraints: one of default, optional.
items[].service_account_admin_reacharray of stringyes
nextstringnoAn opaque cursor for the next page; absent on the last page.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

POST /admin/tenants/{tenant}/clients​

Requires the "manage-clients" capability.

A list on the client (redirect_uris, web_origins, post_logout_redirect_uris, audiences, client_credentials_scopes) holds at most 200 entries, refused with 400 naming the field, how many it held and how many it may. A write refuses only a list it changes: a client stored over the limit is amended in its other fields as it is.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.

Request body​

Body: application/json

FieldTypeRequiredDetails
client_idstringyesConstraints: no bidirectional control characters, at least 1 character.
{
"client_id": "web-app",
"name": "Web app",
"redirect_uris": [
"https://app.example.com/callback"
],
"grant_types": [
"authorization_code",
"refresh_token"
],
"token_endpoint_auth_method": "none"
}

Responses​

201 Created​

Body: application/json

FieldTypeRequiredDetails
idstringyesThe client's internal identifier, a UUID. It names the client in admin API paths such as /clients/{id}; it is not the OAuth client_id.
client_idstringyesThe client_id the application sends to the authorization and token endpoints. Chosen when the client is created and unique within the tenant.
namestringyesA display name for people, shown for example on the consent screen.
descriptionstring or nullyesFree text for administrators, or null when none was set.
typestringyespublic for an application that cannot keep a secret (a single-page or native app), which must use PKCE; confidential for one that authenticates at the token endpoint. Constraints: one of public, confidential.
enabledbooleanyesA disabled client cannot start a sign-in or obtain tokens, and tokens already issued to it stop being accepted.
full_scope_allowedbooleanyesWhen true the client's tokens carry every role the user holds. When false, a role reaches a token only through a scope the client is assigned.
registration_originstringyesHow the client came to exist: seeded by odudu seed or odudu init, anonymous or token through dynamic registration, or operator through the admin API. Constraints: one of seeded, anonymous, token, operator.
created_atstringyesWhen the client was created, as an ISO 8601 date and time.
redirect_urisarray of stringyesThe addresses the authorization server may send the user back to after sign-in. A request naming any other address is refused.
grant_typesarray of stringyesThe grants the client may use at the token endpoint, such as authorization_code, refresh_token, client_credentials.
token_endpoint_auth_methodstringyesHow a confidential client authenticates at the token endpoint, for example client_secret_basic, client_secret_post or private_key_jwt.
audiencesarray of stringyesThe audiences (aud) added to the access tokens issued to this client, besides the issuer.
access_token_ttl_secondsinteger or nullyesHow long this client's access tokens live, in seconds. Null uses the tenant's setting of the same name.
id_token_ttl_secondsinteger or nullyesHow long this client's ID tokens live, in seconds. Null uses the tenant's setting of the same name.
refresh_token_ttl_secondsinteger or nullyesHow long this client's refresh tokens live, in seconds. Null uses the tenant's setting of the same name.
client_credentials_scopesarray of stringyesThe scopes the client may request with the client_credentials grant, where it acts as itself.
web_originsarray of stringyesThe browser origins allowed to call the token and UserInfo endpoints from JavaScript (CORS).
post_logout_redirect_urisarray of stringyesThe addresses the user may be sent to after a logout the client started.
jwksany or nullyesThe public keys the client authenticates with when its method is private_key_jwt, as a JWK Set. Null when it uses jwks_uri or a secret.
jwks_uristring or nullyesThe address the server fetches the client public keys from, instead of holding them in jwks.
frontchannel_logout_uristring or nullyesThe client page the user agent loads to tell the client the user signed out (front-channel logout).
backchannel_logout_uristring or nullyesThe client endpoint the server posts a logout token to when a session ends (back-channel logout).
frontchannel_logout_session_requiredbooleanyesWhether the front-channel logout request carries the session id (sid) and issuer.
backchannel_logout_session_requiredbooleanyesWhether the back-channel logout token carries the session id (sid).
consent_requiredbooleanyesWhether the user must approve what the client asks for on a consent screen before tokens are issued.
token_exchange_impersonation_allowedbooleanyesWhether the client may use token exchange (RFC 8693) to act as a user rather than on behalf of one.
userinfo_signed_response_algstring or nullyesThe algorithm that signs this client’s UserInfo responses. Null returns plain JSON.
userinfo_encrypted_response_algstring or nullyesThe key-management algorithm that encrypts this client’s UserInfo responses, or null.
userinfo_encrypted_response_encstring or nullyesThe content-encryption algorithm for encrypted UserInfo responses, or null.
tls_client_auth_subject_dnstring or nullyesThe certificate subject a client using tls_client_auth must present, or null.
client_uristring or nullyesA web page about the client application, shown to users.
policy_uristring or nullyesThe client privacy policy page, shown to users.
tos_uristring or nullyesThe client terms of service page, shown to users.
id_token_signed_response_algstring or nullyesThe algorithm that signs this client’s ID tokens. Null uses the tenant’s default.
default_max_ageinteger or nullyesThe longest age in seconds a sign-in may have before the user must sign in again, when the request does not say. Null sets none.
require_auth_timebooleanyesWhether ID tokens always carry the auth_time claim.
previous_secret_expires_atstring or nullyesWhen the secret that a rotation replaced stops authenticating, or null when no rotation kept one. The secret itself is never shown.
builtin_adminbooleanyesTrue for the tenant’s built-in admin console client, which cannot be deleted and is limited in what can be amended.
service_subject_idstring or nullyesThe service account a confidential client authenticates as, or null when it has none. Constraints: a UUID.
scopesarray of objectyesThe scopes assigned to the client and whether each is default (always requested) or optional (only when asked for).
scopes[]objectyes
scopes[].idstringyesThe scope’s identifier.
scopes[].namestringyesThe scope name.
scopes[].assignmentstringyesdefault is requested for the client without being asked for, optional only when the request names it. Constraints: one of default, optional.
service_account_admin_reacharray of stringyes
client_secretstringnoThe new secret. Shown only in this response.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/count​

Requires the "manage-clients" capability.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.

Query parameters​

NameTypeRequiredDetails
client_idstringnoOnly clients whose client_id starts with this. Constraints: at least 1 character.
client_id_exactstringnoThe one client with exactly this client_id. Constraints: at least 1 character.
namestringnoOnly clients whose name starts with this. Constraints: at least 1 character.
typestringnoOnly clients of this type. Constraints: one of public, confidential.
enabledstringnotrue for enabled clients only. Constraints: one of true, false.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
countintegeryesHow many items match, up to a cap.
cappedbooleanyesTrue when more match than count says, because counting stops at the cap.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/{id}​

Requires the "manage-clients" capability.

service_account_admin_reach is what the client’s service account holds of the admin capabilities, which every write on the client is judged against; derived on every read and outside the ETag, empty for a client with no service account.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
idstringyesThe client's internal identifier, a UUID. It names the client in admin API paths such as /clients/{id}; it is not the OAuth client_id.
client_idstringyesThe client_id the application sends to the authorization and token endpoints. Chosen when the client is created and unique within the tenant.
namestringyesA display name for people, shown for example on the consent screen.
descriptionstring or nullyesFree text for administrators, or null when none was set.
typestringyespublic for an application that cannot keep a secret (a single-page or native app), which must use PKCE; confidential for one that authenticates at the token endpoint. Constraints: one of public, confidential.
enabledbooleanyesA disabled client cannot start a sign-in or obtain tokens, and tokens already issued to it stop being accepted.
full_scope_allowedbooleanyesWhen true the client's tokens carry every role the user holds. When false, a role reaches a token only through a scope the client is assigned.
registration_originstringyesHow the client came to exist: seeded by odudu seed or odudu init, anonymous or token through dynamic registration, or operator through the admin API. Constraints: one of seeded, anonymous, token, operator.
created_atstringyesWhen the client was created, as an ISO 8601 date and time.
redirect_urisarray of stringyesThe addresses the authorization server may send the user back to after sign-in. A request naming any other address is refused.
grant_typesarray of stringyesThe grants the client may use at the token endpoint, such as authorization_code, refresh_token, client_credentials.
token_endpoint_auth_methodstringyesHow a confidential client authenticates at the token endpoint, for example client_secret_basic, client_secret_post or private_key_jwt.
audiencesarray of stringyesThe audiences (aud) added to the access tokens issued to this client, besides the issuer.
access_token_ttl_secondsinteger or nullyesHow long this client's access tokens live, in seconds. Null uses the tenant's setting of the same name.
id_token_ttl_secondsinteger or nullyesHow long this client's ID tokens live, in seconds. Null uses the tenant's setting of the same name.
refresh_token_ttl_secondsinteger or nullyesHow long this client's refresh tokens live, in seconds. Null uses the tenant's setting of the same name.
client_credentials_scopesarray of stringyesThe scopes the client may request with the client_credentials grant, where it acts as itself.
web_originsarray of stringyesThe browser origins allowed to call the token and UserInfo endpoints from JavaScript (CORS).
post_logout_redirect_urisarray of stringyesThe addresses the user may be sent to after a logout the client started.
jwksany or nullyesThe public keys the client authenticates with when its method is private_key_jwt, as a JWK Set. Null when it uses jwks_uri or a secret.
jwks_uristring or nullyesThe address the server fetches the client public keys from, instead of holding them in jwks.
frontchannel_logout_uristring or nullyesThe client page the user agent loads to tell the client the user signed out (front-channel logout).
backchannel_logout_uristring or nullyesThe client endpoint the server posts a logout token to when a session ends (back-channel logout).
frontchannel_logout_session_requiredbooleanyesWhether the front-channel logout request carries the session id (sid) and issuer.
backchannel_logout_session_requiredbooleanyesWhether the back-channel logout token carries the session id (sid).
consent_requiredbooleanyesWhether the user must approve what the client asks for on a consent screen before tokens are issued.
token_exchange_impersonation_allowedbooleanyesWhether the client may use token exchange (RFC 8693) to act as a user rather than on behalf of one.
userinfo_signed_response_algstring or nullyesThe algorithm that signs this client’s UserInfo responses. Null returns plain JSON.
userinfo_encrypted_response_algstring or nullyesThe key-management algorithm that encrypts this client’s UserInfo responses, or null.
userinfo_encrypted_response_encstring or nullyesThe content-encryption algorithm for encrypted UserInfo responses, or null.
tls_client_auth_subject_dnstring or nullyesThe certificate subject a client using tls_client_auth must present, or null.
client_uristring or nullyesA web page about the client application, shown to users.
policy_uristring or nullyesThe client privacy policy page, shown to users.
tos_uristring or nullyesThe client terms of service page, shown to users.
id_token_signed_response_algstring or nullyesThe algorithm that signs this client’s ID tokens. Null uses the tenant’s default.
default_max_ageinteger or nullyesThe longest age in seconds a sign-in may have before the user must sign in again, when the request does not say. Null sets none.
require_auth_timebooleanyesWhether ID tokens always carry the auth_time claim.
previous_secret_expires_atstring or nullyesWhen the secret that a rotation replaced stops authenticating, or null when no rotation kept one. The secret itself is never shown.
builtin_adminbooleanyesTrue for the tenant’s built-in admin console client, which cannot be deleted and is limited in what can be amended.
service_subject_idstring or nullyesThe service account a confidential client authenticates as, or null when it has none. Constraints: a UUID.
scopesarray of objectyesThe scopes assigned to the client and whether each is default (always requested) or optional (only when asked for).
scopes[]objectyes
scopes[].idstringyesThe scope’s identifier.
scopes[].namestringyesThe scope name.
scopes[].assignmentstringyesdefault is requested for the client without being asked for, optional only when the request names it. Constraints: one of default, optional.
service_account_admin_reacharray of stringyes

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

PATCH /admin/tenants/{tenant}/clients/{id}​

Requires the "manage-clients" capability.

Refused with 403 when the client’s service account holds an admin capability the caller does not (the target ceiling). A list on the client (redirect_uris, web_origins, post_logout_redirect_uris, audiences, client_credentials_scopes) holds at most 200 entries, refused with 400 naming the field, how many it held and how many it may. A write refuses only a list it changes: a client stored over the limit is amended in its other fields as it is.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Request body​

Body: application/json

FieldTypeRequiredDetails
(body)objectyesConstraints: other fields accepted.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
idstringyesThe client's internal identifier, a UUID. It names the client in admin API paths such as /clients/{id}; it is not the OAuth client_id.
client_idstringyesThe client_id the application sends to the authorization and token endpoints. Chosen when the client is created and unique within the tenant.
namestringyesA display name for people, shown for example on the consent screen.
descriptionstring or nullyesFree text for administrators, or null when none was set.
typestringyespublic for an application that cannot keep a secret (a single-page or native app), which must use PKCE; confidential for one that authenticates at the token endpoint. Constraints: one of public, confidential.
enabledbooleanyesA disabled client cannot start a sign-in or obtain tokens, and tokens already issued to it stop being accepted.
full_scope_allowedbooleanyesWhen true the client's tokens carry every role the user holds. When false, a role reaches a token only through a scope the client is assigned.
registration_originstringyesHow the client came to exist: seeded by odudu seed or odudu init, anonymous or token through dynamic registration, or operator through the admin API. Constraints: one of seeded, anonymous, token, operator.
created_atstringyesWhen the client was created, as an ISO 8601 date and time.
redirect_urisarray of stringyesThe addresses the authorization server may send the user back to after sign-in. A request naming any other address is refused.
grant_typesarray of stringyesThe grants the client may use at the token endpoint, such as authorization_code, refresh_token, client_credentials.
token_endpoint_auth_methodstringyesHow a confidential client authenticates at the token endpoint, for example client_secret_basic, client_secret_post or private_key_jwt.
audiencesarray of stringyesThe audiences (aud) added to the access tokens issued to this client, besides the issuer.
access_token_ttl_secondsinteger or nullyesHow long this client's access tokens live, in seconds. Null uses the tenant's setting of the same name.
id_token_ttl_secondsinteger or nullyesHow long this client's ID tokens live, in seconds. Null uses the tenant's setting of the same name.
refresh_token_ttl_secondsinteger or nullyesHow long this client's refresh tokens live, in seconds. Null uses the tenant's setting of the same name.
client_credentials_scopesarray of stringyesThe scopes the client may request with the client_credentials grant, where it acts as itself.
web_originsarray of stringyesThe browser origins allowed to call the token and UserInfo endpoints from JavaScript (CORS).
post_logout_redirect_urisarray of stringyesThe addresses the user may be sent to after a logout the client started.
jwksany or nullyesThe public keys the client authenticates with when its method is private_key_jwt, as a JWK Set. Null when it uses jwks_uri or a secret.
jwks_uristring or nullyesThe address the server fetches the client public keys from, instead of holding them in jwks.
frontchannel_logout_uristring or nullyesThe client page the user agent loads to tell the client the user signed out (front-channel logout).
backchannel_logout_uristring or nullyesThe client endpoint the server posts a logout token to when a session ends (back-channel logout).
frontchannel_logout_session_requiredbooleanyesWhether the front-channel logout request carries the session id (sid) and issuer.
backchannel_logout_session_requiredbooleanyesWhether the back-channel logout token carries the session id (sid).
consent_requiredbooleanyesWhether the user must approve what the client asks for on a consent screen before tokens are issued.
token_exchange_impersonation_allowedbooleanyesWhether the client may use token exchange (RFC 8693) to act as a user rather than on behalf of one.
userinfo_signed_response_algstring or nullyesThe algorithm that signs this client’s UserInfo responses. Null returns plain JSON.
userinfo_encrypted_response_algstring or nullyesThe key-management algorithm that encrypts this client’s UserInfo responses, or null.
userinfo_encrypted_response_encstring or nullyesThe content-encryption algorithm for encrypted UserInfo responses, or null.
tls_client_auth_subject_dnstring or nullyesThe certificate subject a client using tls_client_auth must present, or null.
client_uristring or nullyesA web page about the client application, shown to users.
policy_uristring or nullyesThe client privacy policy page, shown to users.
tos_uristring or nullyesThe client terms of service page, shown to users.
id_token_signed_response_algstring or nullyesThe algorithm that signs this client’s ID tokens. Null uses the tenant’s default.
default_max_ageinteger or nullyesThe longest age in seconds a sign-in may have before the user must sign in again, when the request does not say. Null sets none.
require_auth_timebooleanyesWhether ID tokens always carry the auth_time claim.
previous_secret_expires_atstring or nullyesWhen the secret that a rotation replaced stops authenticating, or null when no rotation kept one. The secret itself is never shown.
builtin_adminbooleanyesTrue for the tenant’s built-in admin console client, which cannot be deleted and is limited in what can be amended.
service_subject_idstring or nullyesThe service account a confidential client authenticates as, or null when it has none. Constraints: a UUID.
scopesarray of objectyesThe scopes assigned to the client and whether each is default (always requested) or optional (only when asked for).
scopes[]objectyes
scopes[].idstringyesThe scope’s identifier.
scopes[].namestringyesThe scope name.
scopes[].assignmentstringyesdefault is requested for the client without being asked for, optional only when the request names it. Constraints: one of default, optional.
service_account_admin_reacharray of stringyes

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

DELETE /admin/tenants/{tenant}/clients/{id}​

Requires the "manage-clients" capability.

Refused with 403 when the client’s service account holds an admin capability the caller does not (the target ceiling). Deletes every role scoped to the client with it, and is refused with 403 too when what those roles reach includes an admin capability the caller does not hold. Refused with 409 (about:blank#last-administrator) when it would leave no enabled subject holding tenant-admin — manage-tenants in the system tenant.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Responses​

204 OK​

Body: application/json

FieldTypeRequiredDetails
(body)anyyes

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

POST /admin/tenants/{tenant}/clients/{id}/secret​

Requires the "manage-clients" capability.

Answers the new secret once. grace_seconds (0 to 604800, default 0) keeps the secret it replaces authenticating that long beside it, and the response states when it stops in previous_secret_expires_at. Refused with 403 when the client’s service account holds an admin capability the caller does not (the target ceiling).

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Query parameters​

NameTypeRequiredDetails
grace_secondsintegernoConstraints: at least 0, at most 604800.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
idstringyesThe client's internal identifier, a UUID. It names the client in admin API paths such as /clients/{id}; it is not the OAuth client_id.
client_idstringyesThe client_id the application sends to the authorization and token endpoints. Chosen when the client is created and unique within the tenant.
namestringyesA display name for people, shown for example on the consent screen.
descriptionstring or nullyesFree text for administrators, or null when none was set.
typestringyespublic for an application that cannot keep a secret (a single-page or native app), which must use PKCE; confidential for one that authenticates at the token endpoint. Constraints: one of public, confidential.
enabledbooleanyesA disabled client cannot start a sign-in or obtain tokens, and tokens already issued to it stop being accepted.
full_scope_allowedbooleanyesWhen true the client's tokens carry every role the user holds. When false, a role reaches a token only through a scope the client is assigned.
registration_originstringyesHow the client came to exist: seeded by odudu seed or odudu init, anonymous or token through dynamic registration, or operator through the admin API. Constraints: one of seeded, anonymous, token, operator.
created_atstringyesWhen the client was created, as an ISO 8601 date and time.
redirect_urisarray of stringyesThe addresses the authorization server may send the user back to after sign-in. A request naming any other address is refused.
grant_typesarray of stringyesThe grants the client may use at the token endpoint, such as authorization_code, refresh_token, client_credentials.
token_endpoint_auth_methodstringyesHow a confidential client authenticates at the token endpoint, for example client_secret_basic, client_secret_post or private_key_jwt.
audiencesarray of stringyesThe audiences (aud) added to the access tokens issued to this client, besides the issuer.
access_token_ttl_secondsinteger or nullyesHow long this client's access tokens live, in seconds. Null uses the tenant's setting of the same name.
id_token_ttl_secondsinteger or nullyesHow long this client's ID tokens live, in seconds. Null uses the tenant's setting of the same name.
refresh_token_ttl_secondsinteger or nullyesHow long this client's refresh tokens live, in seconds. Null uses the tenant's setting of the same name.
client_credentials_scopesarray of stringyesThe scopes the client may request with the client_credentials grant, where it acts as itself.
web_originsarray of stringyesThe browser origins allowed to call the token and UserInfo endpoints from JavaScript (CORS).
post_logout_redirect_urisarray of stringyesThe addresses the user may be sent to after a logout the client started.
jwksany or nullyesThe public keys the client authenticates with when its method is private_key_jwt, as a JWK Set. Null when it uses jwks_uri or a secret.
jwks_uristring or nullyesThe address the server fetches the client public keys from, instead of holding them in jwks.
frontchannel_logout_uristring or nullyesThe client page the user agent loads to tell the client the user signed out (front-channel logout).
backchannel_logout_uristring or nullyesThe client endpoint the server posts a logout token to when a session ends (back-channel logout).
frontchannel_logout_session_requiredbooleanyesWhether the front-channel logout request carries the session id (sid) and issuer.
backchannel_logout_session_requiredbooleanyesWhether the back-channel logout token carries the session id (sid).
consent_requiredbooleanyesWhether the user must approve what the client asks for on a consent screen before tokens are issued.
token_exchange_impersonation_allowedbooleanyesWhether the client may use token exchange (RFC 8693) to act as a user rather than on behalf of one.
userinfo_signed_response_algstring or nullyesThe algorithm that signs this client’s UserInfo responses. Null returns plain JSON.
userinfo_encrypted_response_algstring or nullyesThe key-management algorithm that encrypts this client’s UserInfo responses, or null.
userinfo_encrypted_response_encstring or nullyesThe content-encryption algorithm for encrypted UserInfo responses, or null.
tls_client_auth_subject_dnstring or nullyesThe certificate subject a client using tls_client_auth must present, or null.
client_uristring or nullyesA web page about the client application, shown to users.
policy_uristring or nullyesThe client privacy policy page, shown to users.
tos_uristring or nullyesThe client terms of service page, shown to users.
id_token_signed_response_algstring or nullyesThe algorithm that signs this client’s ID tokens. Null uses the tenant’s default.
default_max_ageinteger or nullyesThe longest age in seconds a sign-in may have before the user must sign in again, when the request does not say. Null sets none.
require_auth_timebooleanyesWhether ID tokens always carry the auth_time claim.
previous_secret_expires_atstring or nullyesWhen the secret that a rotation replaced stops authenticating, or null when no rotation kept one. The secret itself is never shown.
builtin_adminbooleanyesTrue for the tenant’s built-in admin console client, which cannot be deleted and is limited in what can be amended.
service_subject_idstring or nullyesThe service account a confidential client authenticates as, or null when it has none. Constraints: a UUID.
scopesarray of objectyesThe scopes assigned to the client and whether each is default (always requested) or optional (only when asked for).
scopes[]objectyes
scopes[].idstringyesThe scope’s identifier.
scopes[].namestringyesThe scope name.
scopes[].assignmentstringyesdefault is requested for the client without being asked for, optional only when the request names it. Constraints: one of default, optional.
service_account_admin_reacharray of stringyes
client_secretstringyesThe new secret. Shown only in this response.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/{id}/logout-deliveries​

Requires the "manage-clients" capability.

The Back-Channel Logout Tokens queued for the client, most recent first: pending, delivered, or failed once every attempt is spent, with the last error. Never the token itself.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Query parameters​

NameTypeRequiredDetails
cursorstringnoThe next value of the previous page, to continue after it.
limitintegernoHow many items to return. A value over 200 is treated as 200; the default is 50. Constraints: at least 1.
statusstringnoConstraints: one of pending, delivered, failed.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
itemsarray of objectyesThe entries of this answer.
items[]objectyes
items[].idstringyesThe delivery’s identifier.
items[].session_idstringyesThe session whose end the token reports.
items[].endpointstringyesThe client address the token is posted to.
items[].statusstringyespending until delivered, delivered once the client answered, failed after the attempts ran out. Constraints: one of pending, delivered, failed.
items[].attemptsintegeryesHow many times delivery was tried. Constraints: at least 0.
items[].last_errorstring or nullyesWhy the last attempt failed, or null.
items[].created_atstringyesWhen the delivery was queued.
items[].next_attempt_atstringyesWhen the next attempt is due.
items[].delivered_atstring or nullyesWhen the client accepted it, or null.
nextstringnoAn opaque cursor for the next page; absent on the last page.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/{id}/evaluate​

Requires the "manage-clients" capability.

The claims an authorization-code exchange for this client and subject would put in the ID token, the access token and the UserInfo response, computed by the functions issuance calls, with none of the envelope a signer adds. scope is resolved against the client’s assignments, as issuance resolves it; absent, the client’s default scopes. It assumes consent is granted: for a consent_required client a real code carries only the scopes consented to. Signs nothing. Additionally requires view-users, refused with 403 otherwise, since the claims are the subject’s. Audited as client.evaluate.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Query parameters​

NameTypeRequiredDetails
subjectstringyesConstraints: a UUID.
scopestringnoConstraints: at most 2048 characters.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
scopestringyesThe scopes the evaluation used, space-separated.
id_tokenobject or nullyesThe claims the ID token would carry, or null when the scope has no openid. Constraints: other fields accepted.
access_tokenobjectyesThe claims the access token would carry. Constraints: other fields accepted.
userinfoobjectyesThe claims the UserInfo endpoint would return. Constraints: other fields accepted.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/{id}/installation​

Requires the "manage-clients" capability.

What a relying party is configured with: the issuer and its discovery URL, as this request’s host names them, and the client’s own identifier, type, authentication method, URIs, grant types and default scopes. Never the secret.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
issuerstringyesThe issuer identifier the application must trust.
discovery_urlstringyesThe discovery document address; most client libraries need only this.
client_idstringyesThe client_id to configure in the application.
client_typestringyespublic or confidential. Constraints: one of public, confidential.
token_endpoint_auth_methodstringyesHow the application authenticates at the token endpoint.
redirect_urisarray of stringyesThe redirect addresses registered for the client.
post_logout_redirect_urisarray of stringyesThe post-logout addresses registered for the client.
grant_typesarray of stringyesThe grants the client may use.
default_scopestringyesThe scopes requested when the application asks for none, space-separated.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

GET /admin/tenants/{tenant}/clients/{id}/sessions​

Requires the "manage-sessions" capability.

The live sessions holding a grant through the client: GET …/sessions?client={id}, answering 404 for a client that does not exist.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Query parameters​

NameTypeRequiredDetails
cursorstringnoThe next value of the previous page, to continue after it.
limitintegernoHow many items to return. A value over 200 is treated as 200; the default is 50. Constraints: at least 1.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
itemsarray of objectyesThe entries of this answer.
items[]objectyes
items[].idstringyesThe session’s identifier.
items[].created_atstringyesWhen the user signed in.
items[].last_active_atstringyesWhen the session last did anything.
items[].rememberedbooleanyesWhether the user chose to stay signed in, which gives the session the longer remember-me lifetimes.
items[].client_idsarray of stringyesThe clients the session has signed the user in to.
items[].subject_idstringyesThe user the session belongs to.
items[].usernamestring or nullyesThat user’s username, or null.
nextstringnoAn opaque cursor for the next page; absent on the last page.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

DELETE /admin/tenants/{tenant}/clients/{id}/grants​

Requires the "manage-sessions" capability.

Revokes up to 10,000 of the grants issued through the client that nothing has revoked, whoever holds them, so no refresh token the client holds is honoured again; remaining says how many more are left (counted to 10,000), so a caller repeats the call until it is 0 — one call is not every grant. Ends no session. A grant whose subject holds an admin capability the caller does not is left alone and counted under beyond_ceiling.

Path parameters​

NameTypeRequiredDetails
tenantstringyesThe tenant being administered, addressed by name.
idstringyesA row id. Constraints: a UUID.

Responses​

200 OK​

Body: application/json

FieldTypeRequiredDetails
revokedintegeryesConstraints: at least 0.
beyond_ceilingintegeryesHow many belong to users holding an admin capability the caller does not, which are left alone. Constraints: at least 0.
remainingintegeryesHow many are left; repeat the call until it is 0. Constraints: at least 0.

401 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

403 RFC 9457 problem details​

Body: application/problem+json, an RFC 9457 problem document described under problem details.

Documentation coverage: 277 of 288 fields described (96%).