Account sessions

Inspect and revoke the signed-in consumer user's root SSO login sessions. These records represent root logins, not individual application refresh-token sessions. A username such as root is an account label; it does not determine the type of session. One root can have token descendants for several apps.

The Sessions page provides the browser workflow. Click a session card to inspect it; eligible active records show a revocation × with confirmation. Session payloads remain encrypted and are not returned by these endpoints. Public lifecycle metadata can be inspected without asking the original browser to decrypt that payload.

Authentication and endpoints

Send the signed-in consumer user's access token and the required companion headers for a DPoP- or fingerprint-bound token. The API must authorize the corresponding account.me.session.search, account.me.session.view or account.me.session.revoke scope. Machine credentials do not authorize revocation. Ownership is derived from validated credentials; request fields cannot select another user.

Method Route under https://api.user.m7.org/api/v2 Input
POST /account/me/session/search Optional id, status and pagination
POST /account/me/session/view Required id
POST /account/me/session/revoke Required id

id is the local 64-character hexadecimal session record identifier returned by search. It is not the OAuth client ID, a token, or the OIDC sid. Do not send a raw token to these routes.

Search and inspect

curl -sS https://api.user.m7.org/api/v2/account/me/session/search \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"status":"active","limit":20,"page_number":1}'

Search always uses the caller's user ID and scope: user. The default status is active. Supported status filters are reserve, active, logged_out, expired, revoked and any; id is an exact match. Status filtering occurs before pagination. Active means the stored row is active and its expiry is in the future. It does not establish that the browser is online or that a fresh Identity state check would report the root as active.

Search records include id, uid, scope, status, created, modified, accessed, expires, is_expired and decoded public_data. View adds the record's principal type and host. Public metadata may include account label, organization, IP/browser information and termination details. It does not expose the encrypted session payload. A public termination explanation, when present, is public_data.identity_termination_public_reason; a private operator note is not included. Display public text as text, never executable HTML.

Revoke a root login

curl -sS https://api.user.m7.org/api/v2/account/me/session/revoke \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"id":"SESSION_RECORD_ID_FROM_SEARCH"}'

Replace the placeholder with the exact returned 64-character ID. Revocation checks ownership, the configured consumer SSO host, user scope, active/unexpired state and stored root context. A stale legacy record without that root reference cannot be revoked through this operation. Caller-supplied user, host or root references cannot change the target authority.

The operation closes the local record as revoked, then revokes its Identity root and token descendants. After confirmation it sends registered back-channel logout notifications to participating applications. It does not load front-channel iframes: the session's browser may be elsewhere or unavailable. This operation terminates the root family, not just one application's refresh token.

A completed response has this shape (illustrative IDs):

{
  "status": 1,
  "comment": "REVOKED",
  "data": {
    "id": "SESSION_RECORD_ID_FROM_SEARCH",
    "status": "revoked",
    "identity_confirmed": true,
    "identity_attempted": true,
    "pending": false,
    "backchannel": {
      "complete": true,
      "attempted": 1,
      "delivered": 1,
      "failed": 0,
      "results": [{"client_id": "PUBLIC_CLIENT_ID", "ok": true, "status": 200}]
    }
  }
}
Result field Meaning
identity_confirmed Root-family revocation has been confirmed.
identity_attempted This invocation attempted upstream revocation; an already completed request can return false.
pending Identity revocation or back-channel delivery still needs completion.
backchannel Delivery summary, or null before a result exists. Per-client failures may include recognized receiver_reason and receiver_trace_id.

A pending result still has status: 1 and local data.status: revoked, with comment: REVOCATION_PENDING and data.pending: true. It must not be presented as fully completed. The service retains pending work for reconciliation; a completed repeat request is idempotent. A zero-attempt complete summary can mean no applicable back-channel receiver was registered.

Show the actual API comment in action feedback. Treat status: 0 as failure, not as an empty successful search. Failure comments can report an invalid ID, a missing/unowned session, missing root context, or an inactive session. Use data.pending for completed-versus-pending handling rather than inferring it from HTTP success or translating every result into a generic success banner.

Revoking the current root can invalidate the credentials used for the request; a subsequent refresh or list request may require signing in again. The back-channel success count records receiver acceptance, not proof of remote application-session deletion. The current M7 Web/PHP SDK receiver validates and acknowledges only. See the SSO logout guide for the receiving contract and SDK limitation.