Skip to content

The v1 docs follow nauthera-server's main branch and its 0.x releases on the way to 1.0, so fields and APIs can still change.

v1

Read one session, active or ended (admin)

Docs version v1 (main)Nauthera is pre-1.0, in a design-partner program

GET/v1/admin/orgs/{slug}/sessions/{sid}

Returns the session whose public id is sid: whose it is, when it began and was last used, how its user authenticated, the clients that took part in it, and whether it is still active. A session that has ended is read from the session history, with when and why it ended, for as long as the deployment keeps it (auth.session.history_retention). A session that has timed out but was not yet swept reads as ended when its idle timeout or absolute lifetime ran out; the read changes nothing.

What happened in the session is the audit log filtered by session_id (adminListAuditEvents), which this read does not repeat.

The user's display name, and the address, user agent and device the session was established from, are personal data: a caller without the users.pii.read permission receives none of them, and withheld names what was left out. A sid that names no session of slug's organization is answered 404, whether another organization holds it or not. Reading a session is audited. Requires the nauthera.sessions:read scope and the sessions.read permission.

The access token must carry the scope shown.

Send it in the Authorization header:

The access token, as Bearer <token> (RFC 6750 §2.1) or, for a sender-constrained token, DPoP <token> (RFC 9449 §7.1). A token minted with a cnf.jkt confirmation is only accepted together with a DPoP proof signed by that key, whichever of the two schemes carries it.

The caller must also hold the permission sessions.read: Read users' sessions.

  • slugstringrequired

    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

  • sidstringrequired

    The session's public id, as the session listing names it.

    1–64 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.jkt and 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 session.

    The session.

    Headers

    • Cache-Controlno-store

    Body

    One session read by its public id, active or ended: whose it is, when it began and was last used, how its user authenticated, the clients that took part in it and, once it has ended, when and why.

    Show more

    id is the session's public id, the sid its relying parties receive and the session_id its audit records carry. The credential the browser holds, and anything derived from it, is never returned.

    • idstringrequired

      The public session id (sid).

    • stateenumrequired

      Whether a session would still sign its user in (active) or has ended (ended).

      Possible values2 values
      • active
      • ended
    • user_idstringrequired

      The id of the user the session belongs to.

    • usernamestringrequired

      The user's username within the organization.

    • created_atstring · date-timerequired

      When the user signed in and the session began.

    • auth_timestring · date-timerequired

      When the user last authenticated in this session (OIDC auth_time).

    • last_seen_atstring · date-timerequired

      When the session was last used. Refreshed lazily, so it may trail the most recent use by up to a minute.

    • expires_atstring · date-timerequired

      The absolute lifetime of the session, fixed when it began.

    • amrarray of stringsrequired

      The authentication methods the user satisfied (OIDC amr, RFC 8176).

    • client_idsarray of stringsrequired

      The OAuth client ids of the clients that took part in the session, sorted. Empty when none has.

    • withheldarray of enumsrequired

      The personal fields left out because the caller lacks the users.pii.read permission, in a fixed order; empty when nothing was withheld.

      Each item:

      A personal field of a session that was left out because the caller lacks the users.pii.read permission: the user's display name, the address the session was established from, or its user agent.

      Possible values3 values
      • display_name
      • ip
      • user_agent
    • The user's display name. Absent when they have none, or when it was withheld (see withheld).

    • idle_expires_atstring · date-time

      When an active session ends if it is not used again: last_seen_at plus the idle timeout. Absent once it has ended.

    • ended_atstring · date-time

      When the session ended: when it was ended on purpose, or when its idle timeout or absolute lifetime ran out. Present exactly when state is ended.

    • Why a session ended: the user signed out (logout), an administrator ended it (admin_revoked), set the user's password (password_reset) or changed the account's status (account_status), the user changed their second factor from another session (second_factor_changed), the account's address was proven and the identity provider links made before it were removed (address_proven), a newer sign-in took the user past the organization's cap on concurrent sessions (session_limit), or it went unused for its idle timeout (expired_idle) or reached its absolute lifetime (expired_absolute).

      Possible values9 values
      • logout
      • admin_revoked
      • password_reset
      • account_status
      • second_factor_changed
      • address_proven
      • session_limit
      • expired_idle
      • expired_absolute
    • acrstring

      The authentication context class satisfied (OIDC acr). Absent when none was recorded.

    • ipstring

      The address the session was established from. Absent when it was not recorded, or when it was withheld (see withheld).

    • The ISO 3166-1 alpha-2 code of the country ip is in. Present only when the server has an IP geolocation database (geoip.database) that knows the address; absent whenever ip is.

      Example"CH"

      pattern ^[A-Z]{2}$

    • The user agent the session was established from. Absent when it was not recorded, or when it was withheld (see withheld).

    • devicestring

      The browser and system the user agent names ("Firefox on Linux"). Absent when the user agent names neither, or was withheld.

      Example"Firefox on Linux"
  • 401 Unauthorizedapplication/problem+jsonProblem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.

    Problem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.

    Headers

    • Cache-Controlno-store
    • WWW-Authenticatestring
    • DPoP-Noncestring

    Body

    RFC 9457 (formerly RFC 7807) problem details (application/problem+json). code is a stable machine-readable slug for the problem kind (it mirrors the last path segment of type), so consumers can branch on it without parsing prose. type is https://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 has about:blank. errors is present on validation failures and lists every offending field.

    • titlestringrequired
      Example"Request validation failed"
    • statusintegerrequired
      Example400
    • typestring · uri
      Example"https://nauthera.io/problems/validation_error"
    • detailstring
      Example"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 title or detail, which are English prose for logs. A problem whose status says everything the server knows carries no code.

      Show more

      validation_error is the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are the errors list — one entry per offending field — which a form renders on those fields. required and malformed are 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 values
      • invalid_request
      • invalid_credentials
      • forbidden
      • unauthorized
      • insufficient_user_authentication
      • protected_account
      • password_held_by_directory
      • last_role_administrator
      • invalid_code
      • too_many_requests
      • too_many_attempts
      • account_locked
      • account_unavailable
      • already_enrolled
      • registration_disabled
      • registration_conflict
      • captcha_failed
      • invalid_reset_link
      • password_reused
      • password_too_short
      • password_too_long
      • password_compromised
      • invalid_verification_link
      • invalid_invitation_link
      • mail_relay_missing
      • email_unverified
      • not_found
      • conflict
      • unavailable
      • busy
      • window_too_large
      • too_many_series
      • internal_error
      • rate_limited
      • malformed
      • body_too_large
      • required
      • validation_error
      • unknown_org
      • invalid_token
      • invalid_dpop_proof
      • use_dpop_nonce
      • server_error
    • instancestring
      Example"/introspect"
    • Example"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 attributes
      • fieldstringrequired

        Offending field, dotted for nested bodies (e.g. child.id).

        Example"token_type_hint"
      • codestringrequired

        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"
      • messagestringrequired
        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.

    Problem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.

    Headers

    • Cache-Controlno-store
    • WWW-Authenticatestring
    • DPoP-Noncestring

    Body

    RFC 9457 (formerly RFC 7807) problem details (application/problem+json). code is a stable machine-readable slug for the problem kind (it mirrors the last path segment of type), so consumers can branch on it without parsing prose. type is https://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 has about:blank. errors is present on validation failures and lists every offending field.

    • titlestringrequired
      Example"Request validation failed"
    • statusintegerrequired
      Example400
    • typestring · uri
      Example"https://nauthera.io/problems/validation_error"
    • detailstring
      Example"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 title or detail, which are English prose for logs. A problem whose status says everything the server knows carries no code.

      Show more

      validation_error is the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are the errors list — one entry per offending field — which a form renders on those fields. required and malformed are 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 values
      • invalid_request
      • invalid_credentials
      • forbidden
      • unauthorized
      • insufficient_user_authentication
      • protected_account
      • password_held_by_directory
      • last_role_administrator
      • invalid_code
      • too_many_requests
      • too_many_attempts
      • account_locked
      • account_unavailable
      • already_enrolled
      • registration_disabled
      • registration_conflict
      • captcha_failed
      • invalid_reset_link
      • password_reused
      • password_too_short
      • password_too_long
      • password_compromised
      • invalid_verification_link
      • invalid_invitation_link
      • mail_relay_missing
      • email_unverified
      • not_found
      • conflict
      • unavailable
      • busy
      • window_too_large
      • too_many_series
      • internal_error
      • rate_limited
      • malformed
      • body_too_large
      • required
      • validation_error
      • unknown_org
      • invalid_token
      • invalid_dpop_proof
      • use_dpop_nonce
      • server_error
    • instancestring
      Example"/introspect"
    • Example"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 attributes
      • fieldstringrequired

        Offending field, dotted for nested bodies (e.g. child.id).

        Example"token_type_hint"
      • codestringrequired

        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"
      • messagestringrequired
        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). code is a stable machine-readable slug for the problem kind (it mirrors the last path segment of type), so consumers can branch on it without parsing prose. type is https://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 has about:blank. errors is present on validation failures and lists every offending field.

    • titlestringrequired
      Example"Request validation failed"
    • statusintegerrequired
      Example400
    • typestring · uri
      Example"https://nauthera.io/problems/validation_error"
    • detailstring
      Example"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 title or detail, which are English prose for logs. A problem whose status says everything the server knows carries no code.

      Show more

      validation_error is the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are the errors list — one entry per offending field — which a form renders on those fields. required and malformed are 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 values
      • invalid_request
      • invalid_credentials
      • forbidden
      • unauthorized
      • insufficient_user_authentication
      • protected_account
      • password_held_by_directory
      • last_role_administrator
      • invalid_code
      • too_many_requests
      • too_many_attempts
      • account_locked
      • account_unavailable
      • already_enrolled
      • registration_disabled
      • registration_conflict
      • captcha_failed
      • invalid_reset_link
      • password_reused
      • password_too_short
      • password_too_long
      • password_compromised
      • invalid_verification_link
      • invalid_invitation_link
      • mail_relay_missing
      • email_unverified
      • not_found
      • conflict
      • unavailable
      • busy
      • window_too_large
      • too_many_series
      • internal_error
      • rate_limited
      • malformed
      • body_too_large
      • required
      • validation_error
      • unknown_org
      • invalid_token
      • invalid_dpop_proof
      • use_dpop_nonce
      • server_error
    • instancestring
      Example"/introspect"
    • Example"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 attributes
      • fieldstringrequired

        Offending field, dotted for nested bodies (e.g. child.id).

        Example"token_type_hint"
      • codestringrequired

        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"
      • messagestringrequired
        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). code is a stable machine-readable slug for the problem kind (it mirrors the last path segment of type), so consumers can branch on it without parsing prose. type is https://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 has about:blank. errors is present on validation failures and lists every offending field.

    • titlestringrequired
      Example"Request validation failed"
    • statusintegerrequired
      Example400
    • typestring · uri
      Example"https://nauthera.io/problems/validation_error"
    • detailstring
      Example"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 title or detail, which are English prose for logs. A problem whose status says everything the server knows carries no code.

      Show more

      validation_error is the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are the errors list — one entry per offending field — which a form renders on those fields. required and malformed are 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 values
      • invalid_request
      • invalid_credentials
      • forbidden
      • unauthorized
      • insufficient_user_authentication
      • protected_account
      • password_held_by_directory
      • last_role_administrator
      • invalid_code
      • too_many_requests
      • too_many_attempts
      • account_locked
      • account_unavailable
      • already_enrolled
      • registration_disabled
      • registration_conflict
      • captcha_failed
      • invalid_reset_link
      • password_reused
      • password_too_short
      • password_too_long
      • password_compromised
      • invalid_verification_link
      • invalid_invitation_link
      • mail_relay_missing
      • email_unverified
      • not_found
      • conflict
      • unavailable
      • busy
      • window_too_large
      • too_many_series
      • internal_error
      • rate_limited
      • malformed
      • body_too_large
      • required
      • validation_error
      • unknown_org
      • invalid_token
      • invalid_dpop_proof
      • use_dpop_nonce
      • server_error
    • instancestring
      Example"/introspect"
    • Example"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 attributes
      • fieldstringrequired

        Offending field, dotted for nested bodies (e.g. child.id).

        Example"token_type_hint"
      • codestringrequired

        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"
      • messagestringrequired
        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.

    Problem details (RFC 9457) with an RFC 6750 / RFC 9449 challenge.

    Headers

    • Cache-Controlno-store
    • WWW-Authenticatestring
    • DPoP-Noncestring

    Body

    RFC 9457 (formerly RFC 7807) problem details (application/problem+json). code is a stable machine-readable slug for the problem kind (it mirrors the last path segment of type), so consumers can branch on it without parsing prose. type is https://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 has about:blank. errors is present on validation failures and lists every offending field.

    • titlestringrequired
      Example"Request validation failed"
    • statusintegerrequired
      Example400
    • typestring · uri
      Example"https://nauthera.io/problems/validation_error"
    • detailstring
      Example"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 title or detail, which are English prose for logs. A problem whose status says everything the server knows carries no code.

      Show more

      validation_error is the one code whose message is not a sentence about the code itself: the request failed the schema, and the specifics are the errors list — one entry per offending field — which a form renders on those fields. required and malformed are 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 values
      • invalid_request
      • invalid_credentials
      • forbidden
      • unauthorized
      • insufficient_user_authentication
      • protected_account
      • password_held_by_directory
      • last_role_administrator
      • invalid_code
      • too_many_requests
      • too_many_attempts
      • account_locked
      • account_unavailable
      • already_enrolled
      • registration_disabled
      • registration_conflict
      • captcha_failed
      • invalid_reset_link
      • password_reused
      • password_too_short
      • password_too_long
      • password_compromised
      • invalid_verification_link
      • invalid_invitation_link
      • mail_relay_missing
      • email_unverified
      • not_found
      • conflict
      • unavailable
      • busy
      • window_too_large
      • too_many_series
      • internal_error
      • rate_limited
      • malformed
      • body_too_large
      • required
      • validation_error
      • unknown_org
      • invalid_token
      • invalid_dpop_proof
      • use_dpop_nonce
      • server_error
    • instancestring
      Example"/introspect"
    • Example"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 attributes
      • fieldstringrequired

        Offending field, dotted for nested bodies (e.g. child.id).

        Example"token_type_hint"
      • codestringrequired

        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"
      • messagestringrequired
        Example"field token_type_hint must be one of [access_token, refresh_token]"