Skip to content

Find a user

Users → List (/users/list) is the master search. Every row is one user (registered or guest).

The search box accepts any of:

InputMatches
alice@twistcue.devusers.email (exact-insensitive)
+201123456789users.phone_e164 (exact)
0193… UUIDusers.id (exact)
device:9d3b… prefixdevices.id starts-with
dbg:1234analytics debug id (fingerprint)

Bare text (no : prefix, not a UUID or email) matches email, display_name, and phone_e164 via ILIKE.

Side panel on the list page:

FilterValuesNotes
Statusactive / suspended / banned / deletedDeleted = GDPR-anonymized (email nulled, PII stripped).
Typeguest / registeredGuests are device-keyed only.
CountryISO-2 codeBased on the user’s most recent device country.
Created betweendate rangeUTC.
Sortcreated_at / last_seen_at / balance / spend
Orderasc / desc

Every filter lives in the URL query string: copy the URL to share the exact view.

ColumnMeaning
UserDisplay name (if set), else email or phone. Avatar thumbnail if uploaded.
CountryMost-recent device country.
Statusactive / suspended / banned / deleted. Suspended rows show suspended_until on hover.
BalanceDerived from coin_ledger. Total (paid + bonus).
SpendSum of completed Purchase.amount_cents (USD-normalized).
Last seenusers.last_seen_at. Guests without recent activity look “cold”.
CreatedSignup date (or first device event for guests).

Click any row to open the User 360.

Guests have no email or phone, they’re keyed by device.fingerprint and get a synthetic user row. When they sign up, guest data (saves, coins, streaks, watch history) is preserved and merged into the registered user, higher wallet balance wins on merge conflict (per CONSTANTS).

Filter by type=guest to audit guest activity or plan a reactivation push segment.

Cursor-based. The list page loads 50 rows; scroll to load more. Copy the URL after scrolling: the cursor is in the query string.

  • Email lookup is case-insensitive. Uppercase or lowercase both find the row.
  • Phone must be E.164 (+201234567890), not local format. The mobile app normalizes on signup, but hand-entered phones can be off.
  • Deleted (anonymized) users don’t return via email search: their email is nulled. You can still find them by user ID from an audit log entry.
ActionEndpoint
List usersGET /v1/admin/users (query params: q, status, guest, country, createdFrom, createdTo, sort, order, cursor, limit)
Get detailGET /v1/admin/users/:id

Full details in API: Users, wallet, support.