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

# transfers

> ERC-1155 outcome-token transfers from the Polymarket PositionManager contract.

The `transfers` channel sends every ERC-1155 outcome-token transfer from the Polymarket PositionManager contract. Every time conditional-token positions move between wallets, one of these events fires. We decode each one and send it after the transaction is confirmed on-chain.

<Note>
  These events used to stream on the old `combos` channel. They now have their
  own channel.
</Note>

## Subscribe

```json theme={null}
{
  "action": "subscribe",
  "id": "s1",
  "channel": "transfers"
}
```

With no filters, you get every confirmed transfer from all tokens.

## Filters

| Filter      | Type       | Required | Description                                                                      |
| ----------- | ---------- | -------- | -------------------------------------------------------------------------------- |
| `wallets`   | `string[]` | No       | Hex addresses (`0x…`). Keeps transfers where a listed address is `from` or `to`. |
| `token_ids` | `string[]` | No       | Token IDs as decimal strings. Keeps transfers of the listed position tokens.     |

This channel ignores `market_ids` and `min_usd`. See [Filters](/websockets/filters) for the combination rule.

## Events

This channel sends both ERC-1155 transfer events.

| Event            | `data.type`       | Description                                                                                     |
| ---------------- | ----------------- | ----------------------------------------------------------------------------------------------- |
| `TransferSingle` | `transfer_single` | One ERC-1155 conditional-token transfer. Tracks a single position token moving between wallets. |
| `TransferBatch`  | `transfer_batch`  | Many ERC-1155 transfers in one transaction. Used when positions move together as a batch.       |

## Payloads

Every frame wraps the event in the standard envelope (`type`, `id`, `channel`, `confirmed`, `data`) shown on [Frames](/websockets/frames). Below, each block is the `data` object for one event — its `type` discriminator plus every field the ABI decodes. A full frame looks like:

```json theme={null}
{
  "type": "event",
  "id": "s1",
  "channel": "transfers",
  "confirmed": true,
  "data": {
    "type": "transfer_single",
    "operator": "0x…",
    "from": "0x…",
    "…": "…"
  }
}
```

### `transfer_single`

`TransferSingle` (ERC-1155). One conditional-token position moving between wallets.

```json theme={null}
{
  "type": "transfer_single",
  "operator": "0x…",
  "from": "0x…",
  "to": "0x…",
  "id": "0x…",
  "amount": "0x…"
}
```

| Field      | Solidity type   | Description                                                |
| ---------- | --------------- | ---------------------------------------------------------- |
| `type`     | string          | `transfer_single`.                                         |
| `operator` | `address` (hex) | Address that made the transfer for the token owner.        |
| `from`     | `address` (hex) | Sender of the position tokens (zero address for mints).    |
| `to`       | `address` (hex) | Recipient of the position tokens (zero address for burns). |
| `id`       | `uint256` (hex) | ERC-1155 token id of the position moved.                   |
| `amount`   | `uint256` (hex) | Number of position tokens moved.                           |

### `transfer_batch`

`TransferBatch` (ERC-1155). Many position tokens moving in one transaction. The parallel `ids` and `amounts` arrays line up index for index.

```json theme={null}
{
  "type": "transfer_batch",
  "operator": "0x…",
  "from": "0x…",
  "to": "0x…",
  "ids": ["0x…", "0x…"],
  "amounts": ["0x…", "0x…"]
}
```

| Field      | Solidity type     | Description                                                |
| ---------- | ----------------- | ---------------------------------------------------------- |
| `type`     | string            | `transfer_batch`.                                          |
| `operator` | `address` (hex)   | Address that made the transfer for the token owner.        |
| `from`     | `address` (hex)   | Sender of the position tokens (zero address for mints).    |
| `to`       | `address` (hex)   | Recipient of the position tokens (zero address for burns). |
| `ids`      | `uint256[]` (hex) | ERC-1155 token ids of the positions moved.                 |
| `amounts`  | `uint256[]` (hex) | Amount moved for each id, in the same order as `ids`.      |

## Pending feed

Set `confirmed: false` on your subscribe to get the pending feed of this channel — the same payload shape for pending transactions sent to the PositionManager contract, before they are in a block. Pending events are guesses. A transaction can be dropped, replaced, or reverted. See [Mempool](/websockets/mempool) for the full frame shape and how to handle it.

```json theme={null}
{
  "action": "subscribe",
  "id": "pending",
  "channel": "transfers",
  "confirmed": false
}
```
