Skip to content

Look up a user's sign-in activity

The platform.users.sign_ins.list operation: POST /api/v1/platform/users/sign_ins in the REST API and the platform_users_sign_ins_list tool in the MCP server.

POST/api/v1/platform/users/sign_ins

For platform staff: a user's account (ID, address, platform role, whether it's disabled), its active console sessions and its recent security events (sign-ins, fresh sign-ins, refused sign-ins, sign-outs and account changes), as the user sees them on their account page. Use it to investigate a suspected account takeover; end the sessions by disabling the user.

Who can call it: platform staff with read access to the platform console.

At a glance

  • REST: POST /api/v1/platform/users/sign_ins
  • MCP tool: platform_users_sign_ins_list
  • Operation ID: platform.users.sign_ins.list
  • Scope: Platform
  • Permission: platform:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Idempotency-Key required
  • Modes: Test and live
  • Authentication: API key with the platform:read scope
  • Since: M13

Request

Body

A JSON object (Content-Type: application/json):

FieldTypeRequiredDescription
emailstringNoThe user's email address.
userusr_… IDNoOr the user's ID (usr_…).
limitinteger (1 to 100)No

Response

200 OK with a JSON object:

FieldTypeDescription
object"user_security"
userobject
user.idusr_… ID
user.emailstring
user.platformRolestring or null
user.disabledboolean
user.lastLoginAtdate-time or null
sessionsarray of object
sessions[].object"session"
sessions[].idses_… ID
sessions[].createdAtdate-timeWhen the session was created (the sign-in).
sessions[].lastAuthenticatedAtdate-timeWhen you last proved who you are on this session (sign-in or a fresh sign-in).
sessions[].idleExpiresAtdate-timeWhen it ends without activity (2 hours after the last request, moved forward by activity).
sessions[].expiresAtdate-timeWhen it ends at the latest (12 hours after the sign-in).
sessions[].countrystring or nullThe country of the sign-in request, when known.
sessions[].userAgentstring or nullThe browser that signed in.
eventsarray of object
events[].object"security_event"
events[].idaud_… ID
events[].atdate-time
events[].actionstringauth.signed_in, auth.reauthenticated, auth.sign_in_refused, auth.signed_out, auth.identity_linked (a Google or Microsoft account added), auth.notice_sent (a security email sent to you), or the operation that changed the account (e.g. users.sessions.revoke).
events[].byone of you, staff, systemWho did it: you, Ownrecord staff, or the platform.
events[].methodstring or nullHow you signed in: email (a sign-in link), google, microsoft-entra-id, or dev.
events[].reasonstring or nullWhy a sign-in was refused (an error code), how a session ended, or what a security email was about (new_sign_in, identity_linked).
events[].countrystring or null
events[].networkstring or nullThe client address shortened to its network (/24 for IPv4, /48 for IPv6).
events[].userAgentstring or null

Examples

By address

HTTP
POST /api/v1/platform/users/sign_ins
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Content-Type: application/json

{
  "email": "ana@acme.example",
  "limit": 50
}

Response (200):

JSON
{
  "object": "user_security",
  "user": {
    "id": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
    "email": "ana@acme.example",
    "platformRole": null,
    "disabled": false,
    "lastLoginAt": "2026-10-30T08:15:00.000Z"
  },
  "sessions": [
    {
      "object": "session",
      "id": "ses_01m4tx5nj8emwbyf7y9vcf47xc",
      "createdAt": "2026-10-30T08:15:00.000Z",
      "lastAuthenticatedAt": "2026-10-30T08:15:00.000Z",
      "idleExpiresAt": "2026-10-30T10:15:00.000Z",
      "expiresAt": "2026-10-30T20:15:00.000Z",
      "country": "HR",
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_5) AppleWebKit/605.1.15 Version/18.5 Safari/605.1.15"
    }
  ],
  "events": [
    {
      "object": "security_event",
      "id": "aud_01m4tx5nj8emwbyf7y9vcf47xe",
      "at": "2026-10-30T08:15:00.000Z",
      "action": "auth.signed_in",
      "by": "you",
      "method": "google",
      "reason": null,
      "country": "HR",
      "network": "203.0.113.0",
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_5) AppleWebKit/605.1.15 Version/18.5 Safari/605.1.15"
    },
    {
      "object": "security_event",
      "id": "aud_01m4tx5nj8emwbyf7y9vcf47xf",
      "at": "2026-10-29T17:02:00.000Z",
      "action": "auth.sign_in_refused",
      "by": "system",
      "method": "email",
      "reason": "sign_in_link_rate_limited",
      "country": "DE",
      "network": "198.51.100.0",
      "userAgent": null
    }
  ]
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400Neither or both of email and user were passed.Fix the fields listed in details.issues and send the request again.
resource_not_found404No user has this address or ID.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
permission_denied403You aren't platform staff with read access to the platform console.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_required, dry_run_not_supported, rate_limited, internal_error.