Date: 2026-06-19 Changes: - Fixed 98 empty .md files that had failed to scrape - Updated changelog with latest entries (Jun 15, 2026: CLOB DELETE /orders limit reduced to 1000) - Refreshed FAQ, Polymarket Learn, Developers, and other sections Notable updates: - Jun 15, 2026: CLOB DELETE /orders maximum batch size reduced to 1000 - Jun 1, 2026: Increased CLOB order rate limits - May 18, 2026: builderCode added to builders endpoints - May 14, 2026: GET /markets/keyset limit reduced to 100
5.9 KiB
Documentation Index
Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt Use this file to discover all available pages before exploring further.
Conditional Token Framework
Onchain token mechanics powering Polymarket positions
All outcomes on Polymarket are tokenized using the Conditional Token Framework (CTF), an open standard developed by Gnosis. Understanding CTF operations enables advanced trading strategies, market making, and direct smart contract interactions.
What is CTF
The Conditional Token Framework creates ERC1155 tokens representing outcomes of prediction markets. Each binary market has two tokens:
| Token | Redeems for | Condition |
|---|---|---|
| Yes | $1.00 pUSD | Event occurs |
| No | $1.00 pUSD | Event does not occur |
These tokens are always fully collateralized — every Yes/No pair is backed by exactly $1.00 pUSD locked in the CTF contract.
Core Operations
CTF provides three fundamental operations:
Convert pUSD into Yes + No token pairs Convert Yes + No pairs back to pUSD Exchange winning tokens for pUSD after resolutionToken Flow
Token Identifiers
Each outcome token has a unique position ID (also called token ID or asset ID), computed onchain in three steps.
Step 1 - Condition ID
getConditionId(oracle, questionId, outcomeSlotCount)
| Parameter | Type | Value |
|---|---|---|
oracle |
address |
UMA CTF Adapter |
questionId |
bytes32 |
Hash of the UMA ancillary data |
outcomeSlotCount |
uint |
2 for all binary markets |
Step 2 - Collection IDs
getCollectionId(parentCollectionId, conditionId, indexSet)
| Parameter | Type | Value |
|---|---|---|
parentCollectionId |
bytes32 |
bytes32(0) — always zero for top-level positions |
conditionId |
bytes32 |
The condition ID from step 1 |
indexSet |
uint |
1 (0b01) for the first outcome, 2 (0b10) for the second |
The indexSet is a bitmask denoting which outcome slots belong to a collection. It must be a nonempty proper subset of the condition's outcome slots. Binary markets always have exactly two collections — one per outcome.
Step 3 - Position IDs
getPositionId(collateralToken, collectionId)
| Parameter | Type | Value |
|---|---|---|
collateralToken |
IERC20 |
pUSD contract address on Polygon |
collectionId |
bytes32 |
One of the two collection IDs from step 2 |
The two resulting position IDs are the ERC1155 token IDs for the Yes and No outcomes of the market.
You can look up token IDs directly via the Gamma API (`GET /markets` or `GET /events` — the `tokens` array on each market contains both outcome token IDs). Computing them manually is only necessary for direct smart contract integration.Standard vs Neg Risk Markets
Polymarket has two market types with different CTF configurations:
| Feature | Standard Markets | Neg Risk Markets |
|---|---|---|
| CTF Contract | ConditionalTokens | ConditionalTokens |
| Exchange Contract | CTF Exchange | Neg Risk CTF Exchange |
| Multi-outcome | Independent markets | Linked via conversion |
negRisk flag |
false |
true |
For neg risk markets, an additional conversion operation allows exchanging a No token for Yes tokens in all other outcomes. See Negative Risk Markets for details.
Contract Addresses
See Contracts for all Polymarket smart contract addresses on Polygon.