Whale deep dive — single user history & state
"Pull everything on UID 743072917935893796" / "prep me to DM this user"
A focused, conversational rundown of one invitee with enough context for the user to send a credible outreach message.
When to use this skill
- User provides a specific UID (or unambiguously points to one user from a prior list)
- User asks to "drill into" a user from a list output
- Before sending an outreach DM
- Investigating an anomaly (sudden volume spike or drop on a specific account)
What the agent does
Step 1 — Lifetime detail
{ "name": "okx-affiliate-invitee-detail", "arguments": { "uid": "<UID>" } }
Returns:
affiliateCode— which channel they came throughregion,level,inviteeLevel,inviteeRebateRatejoinTime,kycTime,firstTradeTimedepAmt,wdAmt— lifetime deposits and withdrawalstotalVol,totalCommission,accFee— lifetime tradingvolMonth— current calendar-month volumevolPeriod— volume in a chosen window, only when you passperiodType(see Step 2)
Tip: add
"periodType": "last_30d"to this same call to getvolPeriod(30-day volume) in one shot — no second call needed for period volume.
If the call returns code: 51621 "The user isn't your invitee", stop — either the UID is
typo'd or they aren't yours. Suggest the user double-check.
Step 2 — Period slices
Pull the user's activity in last_30d, last_7d, and today to spot the current trend.
Period volume — call invitee-detail once per window with periodType; volPeriod is
that window's volume:
{ "name": "okx-affiliate-invitee-detail", "arguments": { "uid": "<UID>", "periodType": "last_30d" } }
Repeat with last_7d and (if relevant) today. custom is not supported here — for an
arbitrary range use invitee-list with begin/end instead.
Period rebate — invitee-detail does not scope totalCommission, so for period rebate
query invitee-list and pin the row with the exact-match uid filter (one row, no paging):
{
"name": "okx-affiliate-invitee-list",
"arguments": {
"uid": "<UID>",
"periodType": "last_30d",
"orderBy": "rebate", "orderDir": "desc"
}
}
If the row is absent for last_30d, the user is effectively dormant for that period.
Step 3 — Compute derived signals
| Signal | Formula | Why it matters |
|---|---|---|
| Months since join | (now - joinTime) / 30 days |
Sets the baseline run-rate |
| Avg monthly rebate (lifetime) | totalCommission / months_since_join |
Run-rate to compare current to |
| Activity trend | last_7d_rebate / last_30d_rebate * 4.3 |
>1 = accelerating; <1 = slowing |
| Withdrawal ratio | wdAmt / depAmt |
>0.7 = exiting; <0.1 = parked |
| Current-month engagement | volMonth / (totalVol / months_since_join) |
<0.1 = effectively idle this month |
Step 4 — Find their invite link / channel context
Cross-reference affiliateCode with okx-affiliate-link-list to see how the channel as a
whole is doing — was this user a one-off win or part of a productive cohort?
Insights to extract
- Whale status — lifetime rebate ≥ $5K → whale; $1K–5K → mid-tier; < $1K → retail
- Health — accelerating / steady / slowing / dormant
- Capital intent — actively depositing more / parked / cashing out
- Outreach hook — concrete reason this user matters to the operator (recent fee tier upgrade? big deposit? hit a milestone like first $1M volume?)
Sample output format
🐋 User profile — UID …XXXXXX
📋 Identity
• Region: <country>
• Joined: <YYYY-MM-DD> (<N> months ago)
• Channel: <affiliateCode>
• VIP tier: <level> (rebate rate <X>%)
• KYC verified: <YYYY-MM-DD>
• First trade: <YYYY-MM-DD> — activated <N> days after join
💰 Lifetime totals
• Deposited: $X,XXX,XXX
• Withdrawn: $X,XXX,XXX (X%)
• Capital on platform: $XXX,XXX
• Trading volume: $X.XXM
• Commission to you: $X,XXX (lifetime), avg $XXX/month
📈 Recent activity
• Last 30 days: $X rebate / $XK volume
• Last 7 days: $X rebate / $XK volume
• This month so far: $X rebate
• Trend: <accelerating / steady / slowing / dormant>
🎯 Outreach prep
• Hook: "<specific concrete reason this user matters>"
• Risk: "<bag-sitter? VIP1-ready Regular? possible churn? cash-out signal?>"
• Suggested message angle: <one line>
Recommended follow-ups
- "Draft a DM to this user" — based on outreach prep
- "Pull other users from the same channel" — switch to
acquisition-trendsfiltered byaffiliateCode - "Compare this user to my top 3 whales" — call the skill again for each whale and produce a side-by-side
- "When did they last trade?" — see
churn-rescuestep 5 (probe backward in 30-day windows; expensive)
Gotchas
invitee-detailnow takesperiodTypefor a period-scopedvolPeriod(volume only); all its other totals stay lifetime. For period rebate, useinvitee-listfiltered by the exact-matchuidparameter (a single row — no client-side pagination needed). The oldkeywordsubstring filter is broken in the current MCP — useuidinstead.volMonthresets at UTC start of each calendar month. On the 1st of the month it will be ~$0 for everyone; don't conclude churn from this alone.- Withdrawal ratio is lifetime. A user can have a 70% withdrawal ratio because of one
big cash-out a year ago, then re-deposit and stay active. Cross-check with
volMonthbefore concluding. accFee(lifetime fees paid by user) is roughly 3×totalCommissionat default rebate rates. If the ratio is off, the user is on a non-standard rebate split — pullinviteeRebateRateto see.