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

# Objects and ids

> Every answer is built from one envelope, the same on every platform.

Every object is an envelope:

```json theme={null}
{
  "kind": "trader",
  "id": "tdr_01jbst8pvcfp79y0938nkrkayd",
  "canonical": {
    "display": { "handle": "nightowl", "name": "Night Owl", "avatarUrl": "…" },
    "platforms": ["fomo", "pump"],
    "walletAvailable": true
  },
  "sources": {
    "fomo": {
      "profile": { "handle": "nightowl", "xHandle": "nightowl_sol", "observedAt": "2026-11-01T08:42:10.250Z" },
      "followGraph": { "followers": 18450, "following": 312, "observedAt": "2026-11-01T08:42:10.250Z" }
    },
    "pump": {
      "profile": { "handle": "nightowl", "observedAt": "2026-11-01T08:40:02.118Z" }
    }
  }
}
```

| Field | Meaning |
| - | - |
| `kind` | `trader`, `wallet`, `post`, `trade`, `token` or `group`. The only field to switch on. Skip kinds you do not know. |
| `id` | Our id of the object. Store it. |
| `canonical` | Fields that mean the same on every platform. Read these first. |
| `sources` | Blocks keyed by platform. A block has the same shape on every platform that fills it, and carries its own `observedAt`. |

> [!TIP]
>
> Show `canonical`. Reach into `sources` for what one platform adds, such as its
> follower count or a post's position.

## Reading `sources`

| On the wire | Meaning |
| - | - |
| `sources.<platform>` absent | The object has no side on that platform. |
| `sources.<platform>.<block>` absent | The platform does not fill that block (`GET /v3/capabilities` lists which do), or we have not read it yet. |
| A block field is `null` | The platform left it empty at `observedAt`, or never fills it. |
| `{ "status": "unavailable", "retryable": true }` in place of a block | We could not read the block for this call. The rest of the object is current. |

PnL, boards, rankings, follow lists, the key and the capability table are
documents about a subject. A document holds envelopes wherever a subject appears.

## Ids

| Kind | Id |
| - | - |
| `trader` | `tdr_` and 26 lowercase base32 characters |
| `wallet` | `wal_<family>_<address>`, family `svm` or `evm` |
| `post` | `pst_` and 26 lowercase base32 characters |
| `trade` | `trd_` and 26 lowercase base32 characters |
| `token` | `tok_<network>_<address>` |
| `group` | `grp_` and 26 lowercase base32 characters |

* Find a trader once, by handle (`GET /v3/traders/lookup`) or by wallet
  (`GET /v3/wallets/{family}/{address}`), then keep our id. A platform's own ids
  never appear in a response.
* An id merged into another trader answers `200` with the trader that absorbed
  it, whose `canonical.mergedFrom` lists the old id.
* A malformed id or a wrong prefix answers `400 INVALID_ARGUMENT` and costs nothing.
* List cursors start with `c_`, stream cursors with `s_`. Neither works in the
  place of the other.


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