List a user's email addresses
GET /v1/users/{user_id}/emails · permission users:read
Lists every email address of the user in one page: the primary address first, then by creation time. A user has at most 10 addresses (including the primary), so the list has no limit, after, before or order, and list_metadata is always null valued. id is the internal UUID of the email row, used by the other email endpoints.
Request
| Parameter | In | Required | Description |
|---|---|---|---|
user_id |
path | yes | User id, prefixed usr_. |
The request takes no body (an empty body or {} is accepted).
Response
200 OK. Without the users:read_pii permission the address is masked (a***@e***.com).
{
"data": [
{
"id": "0191f0a0-3333-7444-8555-666666666661",
"email": "ada@example.com",
"verified": true,
"primary": true,
"created_at": "2026-01-15T09:30:00Z"
},
{
"id": "0191f0a0-3333-7444-8555-666666666666",
"email": "ada.work@example.com",
"verified": false,
"primary": false,
"created_at": "2026-02-01T08:00:00Z"
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Errors
Every error is an application/problem+json body with a stable code.
| HTTP | code |
When |
|---|---|---|
| 404 | not_found |
The user does not exist in this environment, is being deleted, or the id is malformed. |
| 401 | unauthenticated |
The API key is missing, invalid or revoked. |
| 403 | insufficient_permissions |
The key lacks the users:read permission. |
| 429 | rate_limited |
The rate limit was exceeded; honor Retry-After. |
| 503 | service_unavailable |
A dependency is temporarily unavailable; retry later. |
Example
curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/emails \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
Personal data
This endpoint carries personal data: end-user profile. Personal data in the KeenAuth APIs describes what is stored, how long it is kept and how it is deleted. Do not send special categories of personal data (health, biometric data, religion, political opinions, sexual orientation) in any field.