List users, cursor-paginated newest-first (admin only).
GET
/api/admin/users
const url = 'https://api.tradr.cloud/api/admin/users?limit=25';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.tradr.cloud/api/admin/users?limit=25'Admin-gated (403 ADMIN_REQUIRED). Cursor-paginated over (created_at, id) descending — new signups on page one. cursor is the opaque base64 cursor from a prior page; absent/invalid ⇒ first page. limit defaults to 25, clamped to [1, 100]; a non-numeric limit is a 400 VALIDATION_ERROR. Response { items, nextCursor }; lastActiveAt is the last recorded session activity (nullable, may be arbitrarily old); emailVerified is the stored verified flag — a read-only signal, nothing is gated on it in v1. No secret fields are returned (REQ-3.6).
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”cursor
string
limit
integer
Responses
Section titled “Responses”{ items: AdminUserListItem[], nextCursor: string | null }.
VALIDATION_ERROR — malformed limit.
Not authenticated.
ADMIN_REQUIRED — authenticated but not an admin.
Admin rate limit reached (60 / 60 s per user).