Documentation Index
Fetch the complete documentation index at: https://docs.polynode.dev/llms.txt
Use this file to discover all available pages before exploring further.
What are split, merge, and convert?
Polymarket positions are ERC-1155 tokens representing outcomes. Three on-chain operations let you manage them directly: Split — Turn USDC into YES + NO tokens for a market. You put in 1 at resolution, the other $0. Merge — The reverse. Put YES + NO tokens back together and get USDC. 100 YES + 100 NO = $100 USDC returned. Convert — Rebalance positions across outcomes in a multi-outcome market (neg-risk only). If you hold NO tokens on certain outcomes, convert them into USDC plus YES tokens on the remaining outcomes.When to use each
| Operation | Use case |
|---|---|
| Split | Mint new outcome tokens without going through the orderbook. Useful for market making or taking positions on illiquid markets. |
| Merge | Exit positions without selling on the orderbook. Redeem paired YES+NO tokens for USDC at any time. |
| Convert | Rebalance across outcomes in multi-outcome markets (e.g. “Who will win the World Cup?”). Swap your NO exposure on some outcomes into YES exposure on others. |
TypeScript (gasless)
The TypeScript SDK executes these operations gaslessly through the Polymarket relayer. No MATIC/POL needed.Split
Merge
Convert
Convert is only available on neg-risk multi-outcome markets (e.g. “Republican Presidential Nominee” with 36 outcomes).- Your NO tokens on outcomes 0 and 1 are burned
- You receive (number of outcomes - 1) x amount in USDC (here: $100)
- You receive YES tokens on all other outcomes (here: outcomes 2 through 35)
outcomeIndices correspond to the position of each outcome in the market. Index 0 is the first outcome, index 1 is the second, etc. You can find these by looking at the questionID field in market data — the last byte of each questionID is the outcome index.
Rust (transaction builder)
The Rust SDK builds transactions that you submit via your own provider or the Polymarket relayer.Python (transaction builder)
Finding market IDs
To use these operations, you need the right identifiers from market data:| Field | Where to find it | Used by |
|---|---|---|
conditionId | Market data from /v1/events/search or Gamma API | split(), merge() |
negRiskMarketID | Market data (only on neg-risk markets) | convert() |
| Outcome index | Last byte of each outcome’s questionID | convert() outcomeIndices |
Neg-risk vs standard markets
| Standard markets | Neg-risk markets | |
|---|---|---|
| Outcomes | 2 (binary YES/NO) | Many (e.g. 36 candidates) |
| Split/Merge | Via CTF contract | Via NegRiskAdapter |
| Convert | Not available | Available |
| Auto-detection | TypeScript SDK handles this | TypeScript SDK handles this |
neg_risk=False for standard binary markets.
Convert operations are gasless in the TypeScript SDK. Rust and Python SDKs return pre-built transactions — submit them via the Polymarket relayer or your own provider.

