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

# PnL V2: SNS Primary Domain

> How PnL V2 enriches wallet identity with each wallet's primary .sol domain via Ridge, including the sns tag and identity.sns field.

PnL V2 enriches wallet `identity` with each wallet's **primary `.sol` domain** (same concept as Solscan's domain label), resolved via Ridge.

SNS appears as an optional tag and object on any endpoint that returns `identity`: wallet summaries, positions, token traders, leaderboards, batch lookups, and holder enrichment.

<Info>
  Higher-priority labels (KOL, exchange, bot, and so on) keep `identity.name`. SNS is attached alongside when a primary domain exists. See [Solana Wallet Tags](/guides/pnl-v2/wallet-tags) for the full tag list.
</Info>

## What clients see

### Wallet with only a primary domain

When no curated label exists, the primary domain becomes `identity.name` and `identity.type` is `sns`:

```json theme={null}
{
  "wallet": "9aoUCn5J4sxhvYERCVwVnakPQxyXTHQVXe86CUJYxY8p",
  "identity": {
    "name": "solanatracker.sol",
    "sns": { "domain": "solanatracker.sol" },
    "tags": ["sns"],
    "type": "sns"
  }
}
```

### Wallet that already has a label

Higher-priority labels **keep** `identity.name`. SNS is still attached when a primary domain exists:

```json theme={null}
{
  "identity": {
    "name": "SomeKolName",
    "sns": { "domain": "solanatracker.sol" },
    "tags": ["kol", "sns"],
    "type": "kol"
  }
}
```

### No primary domain set

`identity` is unchanged by SNS: no `sns` field and no `sns` tag. Other tags (platforms, KOL, pool, developer, and so on) still apply as before.

## Fields

| Field                 | Description                                                                                   |
| --------------------- | --------------------------------------------------------------------------------------------- |
| `identity.sns.domain` | Primary `.sol` domain for the wallet                                                          |
| `identity.tags`       | Includes `"sns"` when a primary domain is resolved                                            |
| `identity.type`       | `"sns"` when SNS is the highest-priority label; otherwise the primary tag (e.g. `kol`, `bot`) |
| `identity.name`       | Curated label when present; otherwise the primary domain                                      |

## Where it appears

SNS enrichment is returned anywhere PnL V2 resolves wallet `identity`:

* `GET /v2/pnl/wallets/:wallet` and related wallet endpoints
* `GET /v2/pnl/tokens/:token/traders` and `/first-buyers`
* Leaderboard and KOL endpoints
* `POST /v2/pnl/wallets/batch` and position batch endpoints
* `GET /tokens/:tokenAddress/holders?enrich=identity` (and `?enrich=all`)

## UI tips

* Show `identity.sns.domain` as a secondary label when `identity.type` is not `sns` (e.g. display KOL name with `.sol` domain underneath).
* When `identity.type` is `sns`, treat `identity.name` as the human-readable wallet label.
* Always read `identity.tags` as an array. A wallet can be both `kol` and `sns`.

<CardGroup cols={2}>
  <Card title="getPrimaryDomain RPC" href="/solana-rpc/http/getprimarydomain">
    Resolve a wallet's primary `.sol` domain directly via RPC.
  </Card>

  <Card title="Solana Wallet Tags" href="/guides/pnl-v2/wallet-tags">
    Full supported tag list, platform filters, and FAQ.
  </Card>

  <Card title="PnL V2 Overview" href="/guides/pnl-v2/overview">
    Endpoint groups, identity tags, and enrichment on holders.
  </Card>
</CardGroup>
