---
title: "Get a Solana wallet's class from rolling PnL and holdings"
method: GET
path: "/v1/wallet/{address}"
tags: ["paid"]
---

# Get a Solana wallet's class from rolling PnL and holdings

`GET /v1/wallet/{address}`

## Request

- Base URL: `https://api.loopholetape.com`
- URL: `https://api.loopholetape.com/v1/wallet/{address}`
- Auth: none required

Use to classify a wallet buying a pump.fun memecoin (insider, latency_bot or skilled) and read its realised PnL when it ranks on our leaderboard; it describes the wallet, not a mint's rug risk (use GET /v1/check/mint). An unranked wallet gets a null class and no PnL. A ranked wallet carries its class and rank with stats (realised PnL in SOL, win rate, positions) from our realised-PnL leaderboard over the pump.fun trades we captured (window and build time in the response); every wallet gets its holdings among the last 3000 mints (token share, first-buy slot, curve SOL now), creator stats if it ever launched, and its recent funding source. Use it to weight the buyers on a curve.

## Path parameters

- `address` string, required

## Response `200`

Paid response (header PAYMENT-RESPONSE carries the settlement)

- Envelope
  - `ok` boolean, required
  - `schema_version` '2.0', required
  - `generated_at` string, date-time, required
  - `t` number, required: unix seconds at generation
  - `coverage` 'full' | 'thin', required: the mint is inside our live window (created while our captur / thin = the mint is not in the live window (older than ~2 h of silen
  - `data` object, required
  - `meta` object, required
    - `source` string
    - `version` string
    - `feed_lag_s` number, nullable: seconds between the newest event in our tape and now (the age of the newest event we ingested; it does not say whether the capture runs behind the chain, see chain_lag_s)
    - `is_stale` boolean: the ingest age (feed_lag_s) exceeds the route's freshness limit (5 s for compact risk checks, 30 s otherwise); a paid or keyed pump.fun request is also refused above 5 s of estimated chain lag when the gate enforces (see chain_lag_s, tape_behind), which this flag does not show
    - `chain_lag_s` number, nullable: estimated seconds the newest slot in our pump.fun tape is behind the Solana RPC's processed tip (slots_behind x the measured slot time, to 0.1 s); null when the tip is unknown; absent on Robinhood Chain answers
    - `slots_behind` integer, nullable: estimated slots between the newest slot in our pump.fun tape and the Solana RPC's processed tip (a tip read every 30 s, carried forward by the wall time since at the slot rate our own reads measure); 0 when the tape is at or ahead of the estimate; null when the tip is unknown
    - `tape_behind` boolean, nullable: true when the estimated chain_lag_s is above 5 s, false within 5 s, null when there is no tip to compare; on pump.fun answers only
    - `last_slot` integer, nullable
    - `price_usd` number, nullable
    - `next` object: related resources worth calling next (paths relative to base_url)
    - `disclaimer` string

## Other responses

- `402`: Payment required (x402 v2): header PAYMENT-REQUIRED = base64 of the body
- `404`: not found or invalid: address is not base58 wallet address ({ok:false, error, hint})
- `422`: Validation Error

---

[API](https://skmtc.dev/loopholetape/apis/loophole-tape.md) · [All operations](https://skmtc.dev/loopholetape/apis/loophole-tape/llms.txt) · [OpenAPI document](https://skmtc.dev/loopholetape/apis/loophole-tape/revisions/eea099d70151?raw)
