Get the threat overview (admin)
Docs version v1 (main)Nauthera is pre-1.0, in a design-partner program
/v1/admin/orgs/{slug}/threatsReturns every signal of the threat catalog counted over the window: the
failed sign-ins, locks and throttles that show credentials being
guessed, the second-factor failures and locks, the grants and tokens
refused at the protocol endpoints, the clients that failed to prove who
they are, the registrations and names that look built to mislead, the
privileged calls refused, and the malformed traffic turned away at the
edge. Each signal carries its count, the count of the equal window
before, its counts per bucket, the status that judges them against the
signal's recommended threshold, the audit list filters that list exactly
the records it counted, and the frameworks that describe the threat.
The shape of the window's failed sign-ins is read apart, at
/threats/sign-ins, so the signals are served while it is counted.
Everything is an aggregate: no address, account or client is named. The drill-down is the audit list, under its own permissions.
bucket is one of the audit counts' fixed list, each allowed up to a
window: 1m up to 2 hours, 10m up to 2 days, 1h up to 31 days and
1d up to the 90-day maximum x-window declares. Omitted, it is the
finest the window allows, and the window is widened to whole buckets
and echoed. A window longer than the bucket asked for allows is refused
with window_too_large.
Answers are cached per organization, bucket and window for at least the
dashboard's shortest refresh interval, longer in proportion to the
window up to a few minutes, and replicas sharing a cache compute each
one once. An aggregate runs under a deadline and a per-server
concurrency cap; past either it is answered 503 busy with Retry-After
rather than queued.
Requires the nauthera.threats:read scope and the threats.read
permission. A caller is confined to its own org unless a platform role
held in the main org admits it to every org. Reading the overview is
recorded at the trace level only, so polling adds nothing to the audit
log at the levels a deployment usually runs.
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
- bucketenum
The bucket length. Omitted, the finest the window allows.
Possible values4 values1m10m1h1d
- fromstring · date-time
Inclusive start of the window (RFC3339). Defaults to 30 days before
to.The window from
fromtotomay span at most 90 days. - tostring · date-time
Exclusive end of the window (RFC3339). Defaults to now.
The window from
fromtotomay span at most 90 days.
- 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/jsonEvery signal over the window, judged.
Every signal over the window, judged.
Headers
Cache-Controlno-store
Body
Every signal of the threat catalog counted over one window, each judged against its threshold and the equal window before. The window is the one asked for widened to whole buckets, and is echoed with the bucket, so a sparkline labels exactly the buckets it was given.
Show moreShow less
The overview counts audit records, so it sees what the deployment's audit level records: a refusal is recorded at the refusal level whatever its action's own, and the records the edge coalesces count once per summary. An answer is cached per organization for at least the dashboard's shortest refresh interval, and longer over a longer window.
The first bucket's start.
The last bucket's end.
A bucket length counts are grouped by, each allowed up to a window:
1mup to 2 hours,10mup to 2 days,1hup to 31 days and1dup to the 90-day maximum. Buckets are UTC, a day's included.Possible values4 values1m10m1h1d
The start of the equal window before, which ends at
from.Every signal of the catalog, in its display order.
Each item:One signal over the window: how many records it counted, how many the equal window before held, the counts per bucket for a sparkline, the status that judges them, and the threshold and references that explain the judgement.
filteris absent when no filter lists what the signal counts: a signal counted in the zones the second-factor policy spares counts nothing for an organization whose policy spares none.at most 64 items
Show item attributesHide item attributes
One signal of the threat overview: a closed set of audit actions and outcomes counted over the window. Translated under
threats.signal.<value>.Compatibility: closed. A client should render a kind it does not know by its count and status alone.
Possible values16 valuessign_in_failuresspared_zone_sign_in_failuresaccount_lockssign_in_throttlesrecovery_refusalsregistration_refusalssecond_factor_failuressecond_factor_lockstoken_grant_refusalsaccess_token_refusalsclient_authentication_failuresauthorization_refusalsdevice_code_guessessuspicious_clientsadmin_access_denialsrequest_screening_refusals
The group a signal is shown under: guessing credentials, guessing the second factor, misusing tokens and clients at the protocol endpoints, registering clients, probing the privileged API, and malformed traffic turned away at the edge.
Possible values6 valuescredentialssecond_factortokensclientsadminedge
How much an event matters, lowest first. Assigned per action, and an occurrence may raise it but never lower it. A refusal or a server fault is raised to at least
warningwhatever its action's default, soseverity >= warningselects everything that did not go as asked; a protocol step that only looks like a failure (authorization_pending,use_dpop_nonce,mfa_required,passkey_offered,login_required,interaction_required,consent_required,account_selection_required) keeps its action's default.Possible values4 valuesinfonoticewarningcritical
The records counted in the window.
at least 0
The records counted in the equal window ending where this one starts.
at least 0
One count per bucket from
fromtoto, zero where nothing matched.each item: at least 0
How a signal's count reads against its threshold:
quietwhen nothing was counted,normalunder every threshold,elevatedat or over the elevated rate or several times the window before,criticalat or over the critical rate.Possible values4 valuesquietnormalelevatedcritical
Which part of the threshold decided the status:
critical_rateorelevated_ratewhen the rate per hour over the whole window reached that rate,baselinewhen the count reachedbaseline_floorandbaseline_ratiotimes the window before,under_thresholdwhen it was counted and no rule was met, andnonewhen nothing was counted.Possible values5 valuesnonecritical_rateelevated_ratebaselineunder_threshold
The count as a rate per hour over the whole window: what the threshold's rates are read against.
at least 0
The recommended measurement a signal is judged by. The rates are per hour over the whole window, so one threshold means the same over a quarter of an hour and over a month; the baseline rule raises the status to
elevatedwhen the count is at leastbaseline_ratiotimes the count of the equal window before, once it reachesbaseline_floor.Show child attributesHide child attributes
at least 0
at least 0
at least 1
at least 0
No other properties are accepted.
Where the threat a signal counts is described.
at most 8 items
- filterobject
The audit list's filters that list exactly the records the signal counted, for the drill-down from a tile to the log: values of its
action,outcomeandnetwork_zoneparameters. An emptyoutcomemeans every outcome.network_zoneis present on a signal counted in the zones the organization's second-factor policy spares, and names them.Show child attributesHide child attributes
The event type — what was attempted. Append-only: an action is never renamed once shipped, because a rename orphans every stored record and every SIEM rule matching on it.
Show moreShow less
The outcome is deliberately NOT part of the name.
auth.sign_in.completedwithoutcome: failureis a failed sign-in; there is noauth.sign_in.failed. Encoding it would double this list, the catalog and every translation file.Translation key: the action verbatim in the
auditEventsnamespace —auditEvents:user.password.changed. Because i18next splits keys on., a locale file nests naturally by segment. The catalog endpoint publishes the same key asi18n_keyso a client need not re-derive it.Compatibility: this is a CLOSED enum, and that has a cost worth stating plainly. A client generated against one version of this document will reject an entire audit page — not merely one record — the first time the server emits an action added after that client was built. Regenerate on upgrade, or decode the field as a plain string. It is enumerated anyway because the alternative left every consumer unable to know the translatable vocabulary without calling the catalog endpoint at runtime.
Possible values146 valuesadmin.access.deniedaudit.counts.readaudit.log.readaudit.ranking.readauth.account.lockedauth.email_verification.completedauth.email_verification.requestedauth.invitation.acceptedauth.password_reset.completedauth.password_reset.requestedauth.rate_limit.triggeredauth.registration.completedauth.sign_in.alertedauth.sign_in.completedauth.sign_out.completedbranding.appliedbranding.deletedbroker_membership.acceptedbroker_membership.clients_setbroker_membership.endedbroker_membership.invitedbroker_membership.listedclient.adoptedclient.appliedclient.configuration.readclient.configuredclient.deletedclient.deregisteredclient.listedclient.name.suspiciousclient.provisionedclient.readclient.registeredclient.registration.attemptedclient.secret.issuedclient.usage.reademail_domain.claimedemail_domain.listedemail_domain.lostemail_domain.removedemail_domain.verifiedhttp.cleartext_credential.receivedhttp.forwarding.ignoredhttp.header.repeatedhttp.request.screenedhttp.request.servedidentity_provider.appliedidentity_provider.deletedidentity_provider.listedldap_directory.appliedldap_directory.deletedmfa.email.activatedmfa.email.challenge_startedmfa.email.enrollment_startedmfa.email.revokedmfa.email.verifiedmfa.factor.lockedmfa.passkey.challenge_startedmfa.passkey.enrollment_startedmfa.passkey.offer_declinedmfa.passkey.registeredmfa.passkey.verifiedmfa.recovery_code.consumedmfa.recovery_codes.acknowledgedmfa.recovery_codes.regeneratedmfa.request.authenticatedmfa.status.readmfa.totp.activatedmfa.totp.disabledmfa.totp.enrollment_startedmfa.totp.verifiedoauth.authorization.requestedoauth.client_authentication.attemptedoauth.consent.decidedoauth.consent.revokedoauth.device.decidedoauth.device.redeemedoauth.device.requestedoauth.device.user_code.attemptedoauth.token.introspectedoauth.token.issuedoauth.token.presentedoauth.token.refreshedoauth.token.revokedoidc.logout.frontchannel.renderedoidc.logout.initiatedoidc.logout.participant.addedoidc.logout.participant.skippedoidc.logout.token.deliveredoidc.userinfo.readorganization.createdorganization.deletedorganization.listedorganization.mail.testedorganization.readorganization.route.attemptedorganization.snapshot.readorganization.updatedresource_problem.listedresource_problem.readresource_status.reportedrole.grantedrole.revokedsession.createdsession.history.listedsession.listedsession.presentedsession.revokedsystem.admin.bootstrappedsystem.audit.checkpointsystem.audit.configuredsystem.audit.degradedsystem.audit.overflowsystem.audit.partition_createdsystem.audit.partition_droppedsystem.audit.recoveredsystem.audit.write_delayedsystem.audit.write_failedsystem.debug.accessedsystem.dependency.degradedsystem.dependency.recoveredsystem.keys.loadedsystem.migration.appliedsystem.session.reapedsystem.signing_key.createdsystem.signing_key.droppedsystem.startedsystem.stoppedsystem.transport.configuredthreats.overview.readuser.blockeduser.createduser.deleteduser.devices.listeduser.identities.listeduser.invitation.sentuser.listeduser.password.changeduser.password_change.requireduser.password_reset.sentuser.reactivateduser.readuser.remembered_browsers.forgottenuser.suspendeduser.unlockeduser.updated
at most 16 items
How an attempt ended.
deniedis separated fromfailurebecause "you were not allowed" and "you got it wrong" are different security signals — a cluster of the former is what a SIEM alerts on.errormarks a failure attributable to the server, so an operator can tell "users are getting it wrong" from "we are broken". The server enforces the pairing:erroralways carries the reasoninternal_errororunavailable, and those two reasons never appear under any other outcome.Possible values4 valuessuccessfailuredeniederror
at most 4 items
- network_zonearray of strings
at most 64 items · each item: at most 63 characters
No other properties are accepted.
No other properties are accepted.
400 Bad Requestapplication/problem+jsonThe query was invalid — a time window that ends before it starts or spans more than 90 days, or longer than the bucket asked for allows (
window_too_large).The query was invalid — a time window that ends before it starts or spans more than 90 days, or longer than the bucket asked for allows (
window_too_large).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]"
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]"
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]"
503 Service Unavailableapplication/problem+jsonThe server is computing as many aggregates as it allows at once, or this one did not finish within its deadline (
busy); retry after Retry-After. Also answered when audit logging is not enabled (unavailable).The server is computing as many aggregates as it allows at once, or this one did not finish within its deadline (
busy); retry after Retry-After. Also answered when audit logging is not enabled (unavailable).Headers
Retry-Afterstring
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]"