Block a user (admin)
Docs version v1 (main)Nauthera is pre-1.0, in a design-partner program
/v1/admin/orgs/{slug}/users/{id}/blockBlocks the user until an administrator reactivates them. A blocked user
can neither sign in nor obtain or renew a token.
Every session the user holds ends, their refresh grants are retired,
device-flow ones included, and each relying party that took part in a
session is told over the back channel. Refused 409
last_role_administrator when the user is the organization's last
active holder of a role that grants roles.
The id must belong to slug's organization; one that belongs to
another is answered 404, exactly like an id that does not exist.
Requires the users.lifecycle permission, a recent sign-in and a
reason, recorded on the audit event whatever the configured audit
level. Refused 403 protected_account for the caller's own account
and for an account that is more privileged than the caller; a
privileged account needs a caller holding roles.assign as well.
The organization slug. It names the TENANT OF RECORD for the operation: the rows it reads and writes, the policy its secrets are derived under, and the organization its audit record is filed against all come from this organization. A token is admitted only through its own slug, except a main-org token, which may be admitted through any — so cross-tenant administration is performed through the TARGET tenant's slug, never by naming its resources through another. A token reaching for a slug it may not be admitted through is refused identically whether that organization exists or not.
1–64 characters
The user id (UUID).
1–64 characters
Why the administrator is doing this, in their words. It is recorded on the audit event and nowhere else. A query parameter because a DELETE has no body and the server's request logs carry the path only.
1–200 characters
- DPoPstring
DPoP proof JWT (RFC 9449 §4). REQUIRED on a request presenting a DPoP-bound access token, and it must be signed by the key named in the token's
cnf.jktand cover this request's method and URI. The proof is read from the request itself rather than from this decoded parameter, so every protected operation is covered whether or not it declares it.
200 OKapplication/jsonThe user, as the change left them.
The user, as the change left them.
Headers
Cache-Controlno-store
Body
A local user as seen by the admin API. The argon2id password hash is NEVER included.
attributesis the free-form string map stored on the identity (e.g. the display "name"). The nullable timestamps (locked_until, last_login_at) are omitted when unset. Admin access is not a property of the user: it follows the roles the user is granted in an organization (e.g. org-user-admin), which are resolved on every admin request.The user id (UUID).
Example"3f1a5b2c-8d4e-4f6a-9b0c-1d2e3f4a5b6c"- Example
"alice@example.com" - Example
"alice@example.com" The methods of the user's active second factors, in method order; empty when they hold none. A factor still being enrolled is not one.
Possible values3 valuestotppasskeyemail
at most 3 items
Whether the user has a password. An invited user has none until they accept the invitation, and an account an identity provider created has none at all.
Whether the user's next password sign-in, once its password and any second factor are proven, ends on the page that sets a new password instead of in a session. It clears when the user sets one.
Whether the user still waits on an invitation: they have no password and no linked identity provider account to sign in with.
Consecutive failed password verifications since the last success.
What an administrator decided about an account, separate from the automatic lock after repeated wrong passwords.
activemay sign in;suspendedmay not until it is reactivated or itssuspended_untilpasses, after which it readsactiveagain with no write in between;blockedmay not until it is reactivated. A suspended or blocked account can neither sign in nor obtain or renew a token through any grant. Translated undervocabulary.UserAccountStatus.<value>. Compatibility: closed. A client should render a value it does not know as unavailable rather than active.Possible values3 valuesactivesuspendedblocked
- email_verified_atstring · date-time
When
emailwas proven to be the user's (RFC3339); omitted while it has not been. It is released as theemail_verifiedclaim, and a change of address clears it. - attributesmap of strings
Free-form string attributes stored on the identity.
- locked_untilstring · date-time
Soft-lock deadline (RFC3339); omitted when the account is not locked.
- last_login_atstring · date-time
Last successful sign-in (RFC3339); omitted when the user has never signed in.
- status_reasonstring
The administrator's note on the current status; omitted when there is none.
- suspended_untilstring · date-time
When a suspension lifts by itself (RFC3339); omitted when the account is not suspended or the suspension has no end.
- status_changed_atstring · date-time
When the status last changed (RFC3339); omitted when it never has.
401 Unauthorizedapplication/problem+jsonProblem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.
Headers
Cache-Controlno-storeWWW-AuthenticatestringDPoP-Noncestring
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"
403 Forbiddenapplication/problem+jsonProblem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.
Headers
Cache-Controlno-storeWWW-AuthenticatestringDPoP-Noncestring
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"
404 Not Foundapplication/problem+jsonProblem details (RFC 9457).
Problem details (RFC 9457).
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"
409 Conflictapplication/problem+jsonProblem details (RFC 9457).
Problem details (RFC 9457).
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"
429 Too Many Requestsapplication/problem+jsonToo many requests.
Too many requests.
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"
Errorapplication/problem+jsonProblem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.
Headers
Cache-Controlno-storeWWW-AuthenticatestringDPoP-Noncestring
Body
RFC 9457 (formerly RFC 7807) problem details (application/problem+json).
codeis a stable machine-readable slug for the problem kind (it mirrors the last path segment oftype), so consumers can branch on it without parsing prose.typeishttps://nauthera.io/problems/<code>, which resolves to the code's runbook: why it happened, who is affected and what to do (RFC 9457 §3.1.1). A problem without a code hasabout:blank.errorsis present on validation failures and lists every offending field.- Example
"Request validation failed" - Example
400 - typestring · uriExample
"https://nauthera.io/problems/validation_error" - detailstringExample
"One or more fields did not satisfy the API schema." - codeenum
The kind of problem, as a stable machine-readable slug a client branches on and translates rather than parsing
titleordetail, which are English prose for logs. A problem whose status says everything the server knows carries nocode.Show moreShow less
validation_erroris the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are theerrorslist — one entry per offending field — which a form renders on those fields.requiredandmalformedare spelled like two of the per-field violation codes (FieldError.code) but mean something else; the two vocabularies are told apart by position, never by spelling.Compatibility: this is a CLOSED enum, with the same cost as
AuditAction: a client generated against an older version of this document rejects a problem carrying a code added after it was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway so that what a client must translate is knowable from the contract alone.Possible values43 valuesinvalid_requestinvalid_credentialsforbiddenunauthorizedinsufficient_user_authenticationprotected_accountpassword_held_by_directorylast_role_administratorinvalid_codetoo_many_requeststoo_many_attemptsaccount_lockedaccount_unavailablealready_enrolledregistration_disabledregistration_conflictcaptcha_failedinvalid_reset_linkpassword_reusedpassword_too_shortpassword_too_longpassword_compromisedinvalid_verification_linkinvalid_invitation_linkmail_relay_missingemail_unverifiednot_foundconflictunavailablebusywindow_too_largetoo_many_seriesinternal_errorrate_limitedmalformedbody_too_largerequiredvalidation_errorunknown_orginvalid_tokeninvalid_dpop_proofuse_dpop_nonceserver_error
- instancestringExample
"/introspect" - request_idstringExample
"8d94ed49-1caf-4ab3-9594-557142f2d023" - trace_idstring
Distributed-trace id (hex) for correlating this response with traces and logs. Present only when tracing is enabled and the request was recorded. Opaque and safe to log/share.
Example"4bf92f3577b34da6a3ce929d0e0e4736" - errorsarray of objects
Field-level violations (present for validation errors).
Each item:A single field-level validation violation.
Show item attributesHide item attributes
Offending field, dotted for nested bodies (e.g. child.id).
Example"token_type_hint"Machine-readable violation code: required, too_short, too_long, pattern, invalid_format, not_allowed, minimum, maximum, multiple_of, too_few, too_many, not_unique, malformed.
Example"not_allowed"- Example
"field token_type_hint must be one of [access_token, refresh_token]"