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.
These events used to stream on the old combos channel. They now have their
own channel.
Subscribe
{
"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 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. Below, each block is the data object for one event — its type discriminator plus every field the ABI decodes. A full frame looks like:
{
"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.
{
"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.
{
"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 for the full frame shape and how to handle it.
{
"action": "subscribe",
"id": "pending",
"channel": "transfers",
"confirmed": false
}