> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cabalspy.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Platform user profile

> GET /v1/platform-users/profile: everything for a profile page of one of your users in one call: wallets, trading stats per chain, recent trades, theses and KOL status.

Everything you need for a profile page of one of your [platform users](https://docs.cabalspy.xyz/cabalspy-id/white-label.md), in one call: the [user object](https://docs.cabalspy.xyz/cabalspy-id/platform-users-get.md#response), trading stats for a period per chain and per wallet, the 20 most recent trades, the latest theses, Trade Feed counts, the KOL status and links to the detail endpoints of each wallet.

Only wallets that count are included: verified wallets and unverified wallets your instance accepts (`wallet_trust`).

## Query Parameters

**external\_id** `string` *required*

Your id of the user. Alternatively pass csid\_id.

**period** `string` (default: 7d)

Window for the trading stats, one of 6h, 1d, 7d or 30d.

**instance** `string`

Your Instance ID. Only needed when your account has several instances.

**api\_key** `string` *required*

Your API key. Alternatively pass it as an Authorization Bearer header.

## Usage Example

```bash cURL theme={null}
curl "https://api-id.cabalspy.xyz/v1/platform-users/profile?external_id=user_8412&period=7d" \
  -H "Authorization: Bearer YOUR_KEY"
```

```python Python theme={null}
import requests

r = requests.get("https://api-id.cabalspy.xyz/v1/platform-users/profile",
                 params={"external_id": "user_8412", "period": "30d"},
                 headers={"Authorization": "Bearer YOUR_KEY"})
p = r.json()["data"]
for t in p["trading"]:
    print(t["blockchain"], t["realized_pnl_usd"], t["win_rate_percentage"], "%")
```

```javascript JavaScript theme={null}
const p = new URLSearchParams({ external_id: "user_8412", period: "7d" });
const res = await fetch(`https://api-id.cabalspy.xyz/v1/platform-users/profile?${p}`, {
  headers: { Authorization: "Bearer YOUR_KEY" },
});
const { data } = await res.json();
console.log(data.display_name, data.trading, data.recent_trades.length);
```

## Response

**data** `object`

The [user object](https://docs.cabalspy.xyz/cabalspy-id/platform-users-get.md#response), plus:

**profile fields**

**period** `string`

The requested window.

**trading** `array`

One entry per chain the user has counting wallets on.

**chain**

**blockchain** `string`

Chain.

**currency** `string`

Native currency of the chain.

**period** `string`

The requested window.

**total\_buy, total\_buy\_usd, total\_sell, total\_sell\_usd** `number`

Bought and sold, native and USD, summed over the user's wallets on this chain.

**total\_volume, total\_volume\_usd** `number`

Buy plus sell volume.

**realized\_pnl, realized\_pnl\_usd** `number`

Realized PnL, native and USD.

**total\_txn, buy\_txn, sell\_txn** `integer`

Trades, buys and sells.

**win\_count, closed\_count, win\_rate\_percentage** `number`

Winning and closed positions, and the win rate over all wallets.

**tokens** `integer`

Tokens traded in the period.

**wallets** `array`

Per wallet with trades in the period: address, verified, the wallet's period stats (the period\_stats fields of the [leaderboard](https://docs.cabalspy.xyz/cabalspy-id/leaderboard.md)) and win\_rate\_percentage.

**recent\_trades** `array`

The 20 newest trades over all the user's counting wallets and chains, as in [Latest trades](https://docs.cabalspy.xyz/cabalspy-id/latest.md), without `trader`.

**theses** `object`

total (visible theses of the user) and latest (up to 5, as in [List theses](https://docs.cabalspy.xyz/cabalspy-id/theses-list.md#response)).

**trade\_feed** `object`

traders (how many traders are in the user's Trade Feed) and in\_trade\_feeds (how many people have the user in theirs).

**kol** `object`

badge and since, plus application: status, applied\_at and note of the user's KOL application, or null. See [KOL badge](https://docs.cabalspy.xyz/cabalspy-id/platform-users-kol.md).

**links** `array`

Per counting wallet and chain: blockchain, address and the ready-made paths of [tracker](https://docs.cabalspy.xyz/cabalspy-id/tracker.md), [history](https://docs.cabalspy.xyz/cabalspy-id/history.md), [holdings](https://docs.cabalspy.xyz/cabalspy-id/holdings.md) and [pnl\_calendar](https://docs.cabalspy.xyz/cabalspy-id/pnl-calendar.md) for it.

```json Response theme={null}
{
  "success": true,
  "data": {
    "csid_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f60718",
    "external_id": "user_8412",
    "claimed": false,
    "claimed_at": null,
    "managed": true,
    "display_name": "Maze",
    "avatar_url": "https://cdn.example.com/avatars/8412.png",
    "limited": false,
    "x": null,
    "telegram": null,
    "kol": {
      "badge": false,
      "since": null,
      "application": null
    },
    "wallets": [
      {
        "address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "family": "solana",
        "chains": ["solana"],
        "verified": false,
        "verified_chains": [],
        "status": "active",
        "counts": true,
        "source": "privy",
        "verified_at": null,
        "added_at": "2026-10-24T09:12:40Z"
      }
    ],
    "pending_verifications": [],
    "created_at": "2026-10-24T09:12:40Z",
    "period": "7d",
    "trading": [
      {
        "blockchain": "solana",
        "currency": "SOL",
        "period": "7d",
        "total_buy": 180.25,
        "total_buy_usd": 14840.6,
        "total_sell": 228.45,
        "total_sell_usd": 18809.2,
        "total_volume": 408.7,
        "total_volume_usd": 33649.8,
        "realized_pnl": 48.2,
        "realized_pnl_usd": 3968.6,
        "total_txn": 40,
        "buy_txn": 22,
        "sell_txn": 18,
        "win_count": 14,
        "closed_count": 18,
        "win_rate_percentage": 77.78,
        "tokens": 21,
        "wallets": [
          {
            "address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
            "verified": false,
            "period": "7d",
            "total_buy": 180.25,
            "total_buy_usd": 14840.6,
            "total_sell": 228.45,
            "total_sell_usd": 18809.2,
            "total_volume": 408.7,
            "total_volume_usd": 33649.8,
            "realized_pnl": 48.2,
            "realized_pnl_usd": 3968.6,
            "realized_pnl_percentage": 26.74,
            "avg_hold_time_minutes": 84.5,
            "total_txn": 40,
            "buy_txn": 22,
            "sell_txn": 18,
            "win_rate_percentage": 77.78
          }
        ]
      }
    ],
    "recent_trades": [
      {
        "signature": "5xr8abc...",
        "blockchain": "solana",
        "wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
        "transaction_type": "buy",
        "token_symbol": "invisibull",
        "token_name": "invisibull",
        "token_logo": "https://...",
        "token_amount": 22113972.03,
        "value": 1.66,
        "value_usd": 137.44,
        "currency": "SOL",
        "timestamp": "2026-10-26T08:03:58Z"
      }
    ],
    "theses": { "total": 0, "latest": [] },
    "trade_feed": { "traders": 3, "in_trade_feeds": 12 },
    "links": [
      {
        "blockchain": "solana",
        "address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "tracker": "/v1/wallets/tracker?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW&period=7d",
        "history": "/v1/wallets/history?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "holdings": "/v1/wallets/holdings?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "pnl_calendar": "/v1/wallets/pnl_calendar?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW"
      }
    ]
  },
  "meta": {
    "request_id": "req_5162c7cf7f87",
    "cached": false,
    "cache_age_seconds": 0,
    "version": "v1",
    "timestamp": "2026-10-26T08:04:11Z"
  }
}
```

## Errors

| Status | Code | Meaning |
| - | - | - |
| 400 | missing\_parameter | external\_id missing. |
| 400 | invalid\_parameter | period, external\_id or csid\_id invalid. |
| 401 | missing\_api\_key | API key missing. |
| 403 | invalid\_api\_key | API key invalid or not enabled for CabalSpy ID. |
| 404 | platform\_user\_not\_found | No user with this id in your instance. |
| 429 | rate\_limit\_exceeded | Rate limit exceeded. |

See [Errors](https://docs.cabalspy.xyz/cabalspy-id/errors.md) for the full list.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.