| name | whale-deep-dive |
| description | Use this skill when the user wants everything known about a single invitee — lifetime totals, recent activity, KYC details, deposit/withdrawal history, and what to do next. Triggers: "pull up UID X", "give me everything on user Y", "deep dive on Z", "prep me to DM user A", "what's user B's history", "show me X's last 30 days". The user usually provides a UID inline. Do NOT use for multi-user lists (use `high-potential-invitees` or `churn-rescue` instead).
|
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 through
region, level, inviteeLevel, inviteeRebateRate
joinTime, kycTime, firstTradeTime
depAmt, wdAmt — lifetime deposits and withdrawals
totalVol, totalCommission, accFee — lifetime trading
volMonth — current calendar-month volume
volPeriod — volume in a chosen window, only when you pass periodType (see Step 2)
Tip: add "periodType": "last_30d" to this same call to get volPeriod (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-trends filtered by
affiliateCode
- "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-rescue step 5 (probe backward in 30-day
windows; expensive)
Gotchas
invitee-detail now takes periodType for a period-scoped volPeriod (volume only);
all its other totals stay lifetime. For period rebate, use invitee-list filtered by the
exact-match uid parameter (a single row — no client-side pagination needed). The old
keyword substring filter is broken in the current MCP — use uid instead.
volMonth resets 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
volMonth
before concluding.
accFee (lifetime fees paid by user) is roughly 3× totalCommission at default
rebate rates. If the ratio is off, the user is on a non-standard rebate split — pull
inviteeRebateRate to see.