Layer 2 — Wallet Intelligence
FIFO cost-basis PnL, multi-dimensional behavior profiling, wallet similarity search, enriched labels (45+ fields), and provenance chain resolution tracing funding origins across curated CEX hot wallets.
Includes all Layer 1 endpoints.
Rate limits: 300 REST req/min, 20 WebSocket connections, 500 tracked wallets, 1,000 similarity queries/day, full PnL history.
WebSocket Streams
events.wallet.{addr}.pnl
Channel: wallet:{addr}:pnl
Real-time realized PnL events, published on every sell.
- Rich event payload: entry/exit timestamps, signatures, slots, prices, amounts
- Fee allocation: entry fees (pro-rata) + exit fees
- PnL in both USD and SOL, percentage gain, position type (Full/DCA)
- Exit classification: Full/Partial, exit number, remaining cost basis
- Bot detection flags, DEX info
events.wallet.{addr}.position
Channel: wallet:{addr}:positions
Live position deltas — every open/close/partial-exit as it happens.
- FIFO cost-basis accounting: buys create entries, sells pop from front of queue
- Handles partial exits with pro-rata fee allocation
- Transfer-out detection: inventory consumed without PnL attribution
events.wallet.{addr}.labels
Channel: wallet:{addr}:labels
Enriched wallet label payload with 45+ fields, published on state change.
- Deduplicated — only publishes on actual state change
- Rate limited to prevent flooding
- Fields include: trader_type, performance_level, badges, activity metrics
REST Endpoints
GET /v1/wallet/{addr}/profile
Multi-dimensional behavior vector breakdown with raw and normalized values.
Feature Groups
| Group | Covers |
|---|---|
| Hold timing | Exit timing patterns and hold duration |
| Exit discipline | Win rate, exit behavior, DCA patterns |
| Performance | Return metrics, risk-adjusted performance |
| Velocity & sizing | Trading frequency, position sizing, diversification |
| Infrastructure | DEX usage, automation level, tool patterns |
| Provenance | Funding origin, account history |
Gating
A wallet must meet minimum activity thresholds to have a profile (minimum closed positions, activity span, and trade count).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
addr | path | string | yes | Solana wallet address |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../profile"Response
{
"wallet": "7xKXtg...",
"has_vector": true,
"trader_type": "DAY_TRADER",
"performance_level": "PROFITABLE",
"features": {
"hold_first_exit_p50": { "raw": 1200.0, "normalized": 0.45 },
"win_rate": { "raw": 0.63, "normalized": 0.72 },
"profit_factor": { "raw": 2.1, "normalized": 0.68 },
"trade_frequency": { "raw": 12.5, "normalized": 0.55 },
"bot_share": { "raw": 0.05, "normalized": 0.05 },
"is_cex_funded": { "raw": 1.0, "normalized": 1.0 }
},
"trade_badges": ["CONSISTENT_WINNER", "RUNNER_KEEPER"],
"identity_badges": ["ROOT_CEX"]
}Features are normalized to a 0-1 scale for comparability. Cache TTL: 60 seconds.
GET /v1/wallet/{addr}/similar
k-NN wallet similarity search powered by Qdrant.
Parameters
| Parameter | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
addr | path | string | yes | — | Solana wallet address |
limit | query | integer | no | 20 | Max results (max 100) |
min_trades | query | integer | no | — | Minimum trade count filter |
performance_level | query | string | no | — | Filter: PROFITABLE, BREAK_EVEN, etc. |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../similar?limit=10&performance_level=PROFITABLE"Response
{
"query_wallet": "7xKXtg...",
"results": [
{
"wallet": "4mNqR...",
"similarity": 0.94,
"trader_type": "DAY_TRADER",
"performance_level": "PROFITABLE",
"total_pnl_usd": 45000.0,
"win_rate": 0.65,
"shared_traits": ["high win rate", "runner keeper", "quick exit timing"],
"key_differences": ["larger position sizing", "more DEX diversity"]
}
],
"count": 10
}Returns similar wallets ranked by behavioral similarity. Includes explainability: top shared traits and key differences.
GET /v1/wallet/{addr}/provenance
Funding chain resolution — where did this wallet’s SOL come from?
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
addr | path | string | yes | Solana wallet address |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../provenance"Response
{
"wallet": "7xKXtg...",
"root_entity": "Binance",
"root_source": "5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9",
"hops": 3,
"direct_funder": "9aBcD...",
"last_funded_ts": "2026-03-01T08:30:00Z"
}- Traces funding chain back to originating CEX or known entity
- Curated root wallet database covering major exchanges
- Returns
nullfor root_entity if no known source found
Cache TTL: 300 seconds.
GET /v1/wallet/{addr}/pnl
Historical realized PnL records for a wallet.
Parameters
| Parameter | In | Type | Required | Default | Constraints |
|---|---|---|---|---|---|
addr | path | string | yes | — | — |
limit | query | integer | no | 50 | Max 200 |
offset | query | integer | no | 0 | — |
token | query | string | no | — | Filter by token mint |
from | query | integer | no | — | Unix ms start |
to | query | integer | no | — | Unix ms end |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../pnl?limit=20&token=EPjFWd..."Response
{
"trades": [
{
"wallet_address": "7xKXtg...",
"token_mint": "EPjFWd...",
"entry_signature": "5vGk...",
"exit_signature": "3mPq...",
"entry_timestamp": "2026-03-05 14:30:00",
"exit_timestamp": "2026-03-05 15:45:00",
"hold_time_seconds": 4500,
"entry_price_usd": 0.00234,
"exit_price_usd": 0.00312,
"realized_pnl_usd": 78.50,
"realized_pnl_sol": 0.52,
"percentage_gain": 33.33,
"position_type": "FULL_POSITION",
"exit_type": "FULL",
"exit_dex": "raydium",
"entry_dex": "raydium"
}
],
"limit": 20,
"offset": 0
}Full FIFO cost-basis accounting. Includes entry/exit signatures for on-chain verification.
GET /v1/wallet/{addr}/positions
Current open positions with cost basis and unrealized PnL.
Parameters
| Parameter | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
addr | path | string | yes | — | Solana wallet address |
status | query | string | no | all | open, closed, or all |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../positions?status=open"Response
{
"positions": [
{
"wallet_address": "7xKXtg...",
"token_mint": "EPjFWd...",
"entry_signature": "5vGk...",
"entry_timestamp": 1709654400,
"entry_price_usd": 0.00234,
"original_amount": 1000000.0,
"remaining_amount": 500000.0,
"price_per_token": 0.00000234,
"status": "PARTIAL",
"exit_count": 2,
"entry_dex": "pumpfun"
}
]
}FIFO-ordered position entries with entry price, fees, and current value. Aggregated by token mint.
GET /v1/wallet/{addr}/labels
Full enriched label set with 45+ fields.
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
addr | path | string | yes | Solana wallet address |
Example
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/wallet/7xKXtg.../labels"Response
{
"wallet": "7xKXtg...",
"trader_type": "DAY_TRADER",
"performance_level": "PROFITABLE",
"size_class": "SHARK",
"exit_style": "DCA_OUT",
"automation_label": "ORGANIC",
"bot_share": 0.05,
"primary_terminal": "photon",
"primary_tool": "photon",
"primary_tool_pct": 0.85,
"primary_dex": "raydium",
"primary_dex_pct": 0.72,
"funded_by_farm": false,
"root_source": "Binance",
"provenance_hops": 3,
"trade_badges": ["CONSISTENT_WINNER", "RUNNER_KEEPER", "STOP_LOSS_USER"],
"identity_badges": ["ROOT_CEX", "TOOL_PHOTON"],
"total_trades": 342,
"win_rate_pct": 63.0,
"total_pnl": 12450.32,
"sharpe_ratio": 1.8,
"profit_factor": 2.1
}Cache TTL: 60 seconds.
GET /v1/token/{mint}/buyer-quality (Extended)
Same as Free tier but with per-tier volume breakdown, individual wallet details, smart money signal with confidence interval, and configurable lookback window.
See Free Tier → Buyer Quality for base response schema. Layer 2 adds wallet-level detail in the response.