# NFT transfers stream | API reference | Femtos

> The transfers of a collection, of a wallet, or both, as each block is indexed (mints and burns included). WebSocket channels elysium.nfts.transfers | hyperevm.nfts.transfers on Elysium and HyperEVM: parameters, response fields and a live call per layer.

- Base URL: `https://api.femtos.xyz/v1` (REST) · `wss://api.femtos.xyz/v1/ws` (WebSocket) · MCP: `https://api.femtos.xyz/mcp`
- Auth: `Authorization: Bearer $FEMTOS_KEY`. Free key: https://dashboard.femtos.xyz/signup (browser), or with
  no browser: `GET https://femtos.xyz/accounts/agent/challenge`, solve its proof of work, then `POST https://femtos.xyz/accounts/agent/signup`
  (https://femtos.xyz/agents.md#agent-onboarding)
- Decimals are exact strings, times Unix milliseconds, addresses lowercase `0x`
- Whole API in one file: https://femtos.xyz/agents.md · OpenAPI: https://api.femtos.xyz/v1/openapi.json · Index: https://femtos.xyz/llms.txt
- Page with live calls: https://femtos.xyz/reference/ws/nft-transfers

WebSocket: get a ticket (`POST https://api.femtos.xyz/v1/ws-ticket` with your key), connect to `wss://api.femtos.xyz/v1/ws?ticket=$TICKET`, send the frame below; the first message has `"snapshot": true`. Details: https://femtos.xyz/agents.md#websocket

## NFT transfers stream — WS `elysium.nfts.transfers | hyperevm.nfts.transfers`

The transfers of a collection, of a wallet, or both, as each block is indexed (mints and burns included).

Layers: Elysium, HyperEVM. Not on HyperCore: a channel of Elysium and HyperEVM only.
Page with live calls: https://femtos.xyz/reference/ws/nft-transfers?layer=<elysium|hyperevm>

| Param | In | Example or values | Meaning |
|---|---|---|---|
| `collection` | filter | `<collection>` | Collection contract (0x…) |
| `owner` | filter | (optional) | Sender or recipient: 0x address or a named wallet's handle |

Elysium:

```json
{"op":"subscribe","channel":"elysium.nfts.transfers","filter":{"collection":"<collection>"}}
```

HyperEVM:

```json
{"op":"subscribe","channel":"hyperevm.nfts.transfers","filter":{"collection":"<collection>"}}
```

| Field | Type | Meaning |
|---|---|---|
| `snapshot: true` | NftTransfer[] | the last 50 transfers matching (mints and burns included), oldest first; no filter: every collection of the layer |
| `data` | NftTransfer | one transfer (the GET /v1/nfts/transfers row), pushed when the indexer commits its block; with `"batch":"block"`, the block's transfers in one message: {block, t, tx, logIndex, batchIndex, collection, standard, kind, tokenId, amount, from, to, …} |

## Related (NFTs)

- [Active NFT collections](https://femtos.xyz/reference/nft-collections.md) `GET /v1/nfts/collections`: Collections with the most transfers over the last 1 h or 24 h. (Elysium, HyperEVM)
- [NFT collection](https://femtos.xyz/reference/nft-collection.md) `GET /v1/nfts/collections/{address}`: Metadata, tokens seen and 24 h activity of one collection. (Elysium, HyperEVM)
- [Collection tokens](https://femtos.xyz/reference/nft-tokens.md) `GET /v1/nfts/tokens`: Tokens of a collection by id, with their owner and metadata URI. (Elysium, HyperEVM)
- [NFTs of a wallet](https://femtos.xyz/reference/nft-owned.md) `GET /v1/nfts/owned`: ERC-721 tokens owned and ERC-1155 balances of one address. (Elysium, HyperEVM)
- [NFT transfers](https://femtos.xyz/reference/nft-transfers.md) `GET /v1/nfts/transfers`: Transfers of a collection or one token, newest first. While HyperEVM syncs: the last 24 h or 7 d of indexed blocks. (Elysium, HyperEVM)

Every page: https://femtos.xyz/reference.md
