List your sign-in activity
The users.sign_ins.list operation: GET /api/v1/users/me/sign_ins in the REST API and the users_sign_ins_list tool in the MCP server.
/api/v1/users/me/sign_insLists the security events of your account, newest first: sign-ins (auth.signed_in, with the method), fresh
sign-ins before a sensitive action (auth.reauthenticated), sign-outs, sign-ins that were refused
(auth.sign_in_refused, with the reason: a disabled account, too many sign-in links, …), Google or Microsoft
accounts added as a way to sign in (auth.identity_linked), the security emails sent to you about a sign-in from
a network, country or browser your account hadn't used in 90 days or an added sign-in method (auth.notice_sent,
with new_sign_in or identity_linked as the reason) and changes to your account such as ending your other
sessions. Each shows the country, the network (the client address shortened to /24 or /48) and the browser. If
you see a sign-in that wasn't you, end your other sessions (users.sessions.revoke) and tell your
organization's owner and Ownrecord support.
Who can call it: the signed-in user, for their own account.
At a glance
- REST:
GET /api/v1/users/me/sign_ins - MCP tool:
users_sign_ins_list - Operation ID:
users.sign_ins.list - Scope: Platform
- Permission:
account:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Authentication: API key with the
account:readscope - Since: M13
Request
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer (1 to 100) | No | How many events, at most 100. |
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of object | |
data[].object | "security_event" | |
data[].id | aud_… ID | |
data[].at | date-time | |
data[].action | string | auth.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). |
data[].by | one of you, staff, system | Who did it: you, Ownrecord staff, or the platform. |
data[].method | string or null | How you signed in: email (a sign-in link), google, microsoft-entra-id, or dev. |
data[].reason | string or null | Why a sign-in was refused (an error code), how a session ended, or what a security email was about (new_sign_in, identity_linked). |
data[].country | string or null | |
data[].network | string or null | The client address shortened to its network (/24 for IPv4, /48 for IPv6). |
data[].userAgent | string or null |
Examples
A sign-in and a refused one
GET /api/v1/users/me/sign_ins?limit=50
Authorization: Bearer or_test_…
Response (200):
{
"object": "list",
"data": [
{
"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
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | limit is out of range. | Fix the fields listed in details.issues and send the request again. |
permission_denied | 403 | The caller isn't a signed-in user. | 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, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.