Read the User 360
The User 360 (/users/[id]) is the single-page view every support agent lives in. It’s split into tabs so you can drill into the specific dimension you need.
Header (always visible)
Section titled “Header (always visible)”- Display name / email / phone
- Avatar if uploaded
- Status badge: active / suspended / banned / deleted; hover shows
banReasonorsuspendedUntil - Country + language
- Guest / Registered
- Balance total: coins (derived from ledger)
- Total spend: USD, sum of completed purchases
Right side: Actions menu: Suspend, Ban, Reactivate, Adjust coins, Comp subscription, Anonymize (each gated by the appropriate permission and by the user’s current status).
Overview tab
Section titled “Overview tab”- Wallet summary: balance total, split into
paidandbonus. - Unlocks count: how many episodes this user has permanent access to.
- Streak: current, longest, last claim date.
- Push preferences: categories toggled off (marketing, drops, moderation).
Wallet & ledger tab
Section titled “Wallet & ledger tab”Requires wallet:read.
- Full ledger view: one row per
coin_ledgerentry, most recent first. - Columns:
created_at,reason(e.g.unlock,refund,promo_grant,iap,subscription_bonus),ref_type/ref_id(e.g.episode:xyz),amount(net wallet delta),event_id(double-entry group). - Filter by reason or ref_type.
- Adjust coins button (permission-gated) opens the adjust modal.
Purchases tab
Section titled “Purchases tab”Requires payments:read.
- All
Purchaserows in reverse-chronological order. - Columns: platform (iap/card/dlocal/pawapay/vas), product ID, transaction ID,
amount_cents+currency,region,status(completed / refunded / pending),refund_reasonif set. - Refund action → opens Process a refund.
Watch history tab
Section titled “Watch history tab”Requires users:read.
- Recent watch sessions.
- Columns: series title, episode #, started_at, ended_at,
seconds_watched,completedbool. - Useful for support: “Is this user actually engaged, or a chargeback risk?”
Devices tab
Section titled “Devices tab”Requires users:read.
- All linked devices (
devicerows). - Platform, app version, OS version, model, last IP,
first_seen,last_seen. - Force logout all devices action (
users:banpermission): bumpstoken_versionon the user; all existing sessions die.
Subscriptions tab
Section titled “Subscriptions tab”Requires users:read.
- Every
Subscriptionrow (active + expired). - Platform (Apple / Google / web / dLocal / pawaPay), product ID, status,
auto_renew, current period, trial end, canceled_at,price_cents+currency.
Notes tab
Section titled “Notes tab”Requires users:read.
- Support notes thread. Any support/finance/superadmin/moderator with
users:readcan add a note. - Each note has
body,admin_email,created_at. - Notes are not deleted on user anonymize (kept for audit), but the note author is preserved (not anonymized) since it’s PII about the admin, not the user.
Strikes tab
Section titled “Strikes tab”Visible if the user has strikes.
- Every
user_strikerow (comment or report strike). - 3 strikes = automatic commenting suspension. Handled by the moderation service, not by an admin action.
Gotchas
Section titled “Gotchas”- Guest users don’t have emails/phones/subscriptions. Their tabs render mostly empty except Wallet, Watch history, and Devices.
- Deleted (anonymized) users show tabs but with PII stripped (
email: null,phone: null,display_name: null). Ledger and purchases remain: money doesn’t disappear. suspendedUntilin the past = user is effectively active again on their next request, butstatuscolumn may still saysuspendeduntil they hit a mobile endpoint that triggers the auto-reactivation check.
API calls behind the tabs
Section titled “API calls behind the tabs”| Tab | Endpoint |
|---|---|
| Detail (header + overview) | GET /v1/admin/users/:id |
| Ledger | GET /v1/admin/users/:id/ledger |
| Purchases | GET /v1/admin/users/:id/purchases |
| Watch history | GET /v1/admin/users/:id/watch-history |
| Notes list | GET /v1/admin/users/:id/notes |
| Notes create | POST /v1/admin/users/:id/notes |
| Notes delete | DELETE /v1/admin/users/:id/notes/:noteId |
Devices, subscriptions, strikes are embedded in the detail response.
Full details in API: Users.