Update Polymarket documentation (2026-02-19)
- Added new documentation URLs from llms.txt index - Updated TARGET.md with 244 total documentation pages - Scraped new pages for trading, concepts, and API reference sections - Updated changelog and new index pages
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -4,56 +4,89 @@
|
||||
|
||||
# Geographic Restrictions
|
||||
|
||||
> Countries and regions where Polymarket is restricted
|
||||
> Check geographic restrictions before placing orders on the Polymarket API
|
||||
|
||||
## Overview
|
||||
Polymarket restricts order placement from certain geographic locations due to regulatory requirements and compliance with international sanctions. Before placing orders, builders should verify the location.
|
||||
|
||||
Polymarket is not available in certain countries and regions due to regulatory requirements and compliance with international sanctions. This page provides a comprehensive list of all geographically restricted locations.
|
||||
<Warning>
|
||||
Orders submitted from blocked regions will be rejected. Implement geoblock
|
||||
checks in your application to provide users with appropriate feedback before
|
||||
they attempt to trade.
|
||||
</Warning>
|
||||
|
||||
## Server Infrastructure
|
||||
***
|
||||
|
||||
* **Primary Servers**: eu-west-2
|
||||
* **Closest Non-Georestricted Region**: eu-west-1
|
||||
## Geoblock Endpoint
|
||||
|
||||
Check the geographic eligibility of the requesting IP address:
|
||||
|
||||
```bash theme={null}
|
||||
GET https://polymarket.com/api/geoblock
|
||||
```
|
||||
|
||||
<Note>This endpoint is on `polymarket.com`, not the API servers.</Note>
|
||||
|
||||
### Response
|
||||
|
||||
```json theme={null}
|
||||
{
|
||||
"blocked": true,
|
||||
"ip": "203.0.113.42",
|
||||
"country": "US",
|
||||
"region": "NY"
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Type | Description |
|
||||
| --------- | ------- | ----------------------------------------------- |
|
||||
| `blocked` | boolean | Whether the user is blocked from placing orders |
|
||||
| `ip` | string | Detected IP address |
|
||||
| `country` | string | ISO 3166-1 alpha-2 country code |
|
||||
| `region` | string | Region/state code |
|
||||
|
||||
***
|
||||
|
||||
## Blocked Countries
|
||||
|
||||
The following **33 countries** are completely restricted from accessing Polymarket:
|
||||
The following countries are restricted from placing orders on Polymarket. Countries marked as **close-only** can close existing positions but cannot open new ones:
|
||||
|
||||
| Country Code | Country Name |
|
||||
| ------------ | ------------------------------------ |
|
||||
| AU | Australia |
|
||||
| BE | Belgium |
|
||||
| BY | Belarus |
|
||||
| BI | Burundi |
|
||||
| CF | Central African Republic |
|
||||
| CD | Congo (Kinshasa) |
|
||||
| CU | Cuba |
|
||||
| DE | Germany |
|
||||
| ET | Ethiopia |
|
||||
| FR | France |
|
||||
| GB | United Kingdom |
|
||||
| IR | Iran |
|
||||
| IQ | Iraq |
|
||||
| IT | Italy |
|
||||
| KP | North Korea |
|
||||
| LB | Lebanon |
|
||||
| LY | Libya |
|
||||
| MM | Myanmar |
|
||||
| NI | Nicaragua |
|
||||
| PL | Poland |
|
||||
| RU | Russia |
|
||||
| SG | Singapore |
|
||||
| SO | Somalia |
|
||||
| SS | South Sudan |
|
||||
| SD | Sudan |
|
||||
| SY | Syria |
|
||||
| TH | Thailand |
|
||||
| TW | Taiwan |
|
||||
| UM | United States Minor Outlying Islands |
|
||||
| US | United States |
|
||||
| VE | Venezuela |
|
||||
| YE | Yemen |
|
||||
| ZW | Zimbabwe |
|
||||
| Country Code | Country Name | Status |
|
||||
| ------------ | ------------------------------------ | ---------- |
|
||||
| AU | Australia | Blocked |
|
||||
| BE | Belgium | Blocked |
|
||||
| BY | Belarus | Blocked |
|
||||
| BI | Burundi | Blocked |
|
||||
| CF | Central African Republic | Blocked |
|
||||
| CD | Congo (Kinshasa) | Blocked |
|
||||
| CU | Cuba | Blocked |
|
||||
| DE | Germany | Blocked |
|
||||
| ET | Ethiopia | Blocked |
|
||||
| FR | France | Blocked |
|
||||
| GB | United Kingdom | Blocked |
|
||||
| IR | Iran | Blocked |
|
||||
| IQ | Iraq | Blocked |
|
||||
| IT | Italy | Blocked |
|
||||
| KP | North Korea | Blocked |
|
||||
| LB | Lebanon | Blocked |
|
||||
| LY | Libya | Blocked |
|
||||
| MM | Myanmar | Blocked |
|
||||
| NI | Nicaragua | Blocked |
|
||||
| PL | Poland | Close-only |
|
||||
| RU | Russia | Blocked |
|
||||
| SG | Singapore | Close-only |
|
||||
| SO | Somalia | Blocked |
|
||||
| SS | South Sudan | Blocked |
|
||||
| SD | Sudan | Blocked |
|
||||
| SY | Syria | Blocked |
|
||||
| TH | Thailand | Close-only |
|
||||
| TW | Taiwan | Close-only |
|
||||
| UM | United States Minor Outlying Islands | Blocked |
|
||||
| US | United States | Blocked |
|
||||
| VE | Venezuela | Blocked |
|
||||
| YE | Yemen | Blocked |
|
||||
| ZW | Zimbabwe | Blocked |
|
||||
|
||||
***
|
||||
|
||||
## Blocked Regions
|
||||
|
||||
@@ -66,6 +99,8 @@ In addition to fully blocked countries, the following specific regions within ot
|
||||
| Ukraine (UA) | Donetsk | 14 |
|
||||
| Ukraine (UA) | Luhansk | 09 |
|
||||
|
||||
***
|
||||
|
||||
## Blocking Logic
|
||||
|
||||
The geoblocking system includes:
|
||||
@@ -73,19 +108,63 @@ The geoblocking system includes:
|
||||
1. **OFAC-Sanctioned Countries**: Countries sanctioned by the U.S. Office of Foreign Assets Control (OFAC)
|
||||
2. **Additional Regulatory Restrictions**: Countries added for specific regulatory compliance reasons
|
||||
|
||||
### Close-Only Countries
|
||||
***
|
||||
|
||||
Some countries have a **"close-only"** restriction status. Users in these countries can:
|
||||
## Server Infrastructure
|
||||
|
||||
* ✅ Close existing positions
|
||||
* ❌ Open new positions
|
||||
* **Primary Servers**: eu-west-2
|
||||
* **Closest Non-Georestricted Region**: eu-west-1
|
||||
|
||||
Countries with close-only status include:
|
||||
***
|
||||
|
||||
* Singapore (SG)
|
||||
* Poland (PL)
|
||||
* Thailand (TH)
|
||||
* Taiwan (TW)
|
||||
## Usage Examples
|
||||
|
||||
<Tabs>
|
||||
<Tab title="TypeScript">
|
||||
```typescript theme={null}
|
||||
interface GeoblockResponse {
|
||||
blocked: boolean;
|
||||
ip: string;
|
||||
country: string;
|
||||
region: string;
|
||||
}
|
||||
|
||||
async function checkGeoblock(): Promise<GeoblockResponse> {
|
||||
const response = await fetch("https://polymarket.com/api/geoblock");
|
||||
return response.json();
|
||||
}
|
||||
|
||||
// Usage
|
||||
const geo = await checkGeoblock();
|
||||
|
||||
if (geo.blocked) {
|
||||
console.log(`Trading not available in ${geo.country}`);
|
||||
} else {
|
||||
console.log("Trading available");
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="Python">
|
||||
```python theme={null}
|
||||
import requests
|
||||
|
||||
def check_geoblock() -> dict:
|
||||
response = requests.get("https://polymarket.com/api/geoblock")
|
||||
return response.json()
|
||||
|
||||
# Usage
|
||||
geo = check_geoblock()
|
||||
|
||||
if geo["blocked"]:
|
||||
print(f"Trading not available in {geo['country']}")
|
||||
else:
|
||||
print("Trading available")
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
***
|
||||
|
||||
## Why These Restrictions?
|
||||
|
||||
@@ -97,6 +176,18 @@ Geographic restrictions are implemented to ensure compliance with:
|
||||
* Anti-money laundering (AML) requirements
|
||||
* Know Your Customer (KYC) regulations
|
||||
|
||||
## Need Help?
|
||||
|
||||
If you believe you are incorrectly restricted or have questions about geographic availability, please contact [Polymarket Support](https://polymarket.com/support).
|
||||
|
||||
***
|
||||
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Authentication" icon="key" href="/api-reference/authentication">
|
||||
Learn how to authenticate trading requests.
|
||||
</Card>
|
||||
|
||||
<Card title="Place Orders" icon="plus" href="/trading/quickstart">
|
||||
Start placing orders (from eligible regions).
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -2,26 +2,104 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Large Cross Chain Deposits
|
||||
# Deposit
|
||||
|
||||
**For deposits over \$50,000 we recommended to use bridges and ensure minimal fee's (slippage).**
|
||||
> Bridge assets from any supported chain to fund your Polymarket account
|
||||
|
||||
## Recommended Bridges
|
||||
Polymarket uses **USDC.e** (Bridged USDC) on Polygon as collateral for all trading. The Bridge API lets you deposit assets from Ethereum, Solana, Bitcoin, and other chains—they're automatically converted to USDC.e on Polygon.
|
||||
|
||||
* [DeBridge](https://app.debridge.finance/?inputChain=1\&outputChain=137\&inputCurrency=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\&outputCurrency=0x3c499c542cef5e3811e1192ce70d8cc03d5c3359\&dlnMode=simple)
|
||||
* [Across](https://app.across.to/bridge?)
|
||||
* [Portal](https://portalbridge.com/)
|
||||
## How It Works
|
||||
|
||||
For large deposits (>\$50,000) originating from a chain other than Polygon, we recommend using one of the aforementioned bridges. Ensure you bridge to your Polymarket USDC (Polygon) [deposit address](https://polymarket.com/wallet) (screenshot below). Please be mindful of potential slippage during the transaction.
|
||||
1. Request deposit addresses for your Polymarket wallet
|
||||
2. Send assets to the appropriate address for your source chain
|
||||
3. Assets are bridged and swapped to USDC.e automatically
|
||||
4. USDC.e is credited to your wallet for trading
|
||||
|
||||
## Create Deposit Addresses
|
||||
|
||||
Generate unique deposit addresses linked to your Polymarket wallet. See the [Bridge API Reference](/api-reference/introduction) for full request and response schemas.
|
||||
|
||||
```bash theme={null}
|
||||
curl -X POST https://bridge.polymarket.com/deposit \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"address": "0x56687bf447db6ffa42ffe2204a05edaa20f55839"}'
|
||||
```
|
||||
|
||||
### Address Types
|
||||
|
||||
| Address | Use For |
|
||||
| ------- | -------------------------------------------------------- |
|
||||
| `evm` | Ethereum, Arbitrum, Base, Optimism, and other EVM chains |
|
||||
| `svm` | Solana |
|
||||
| `btc` | Bitcoin |
|
||||
| `tvm` | Tron |
|
||||
|
||||
<Warning>
|
||||
Polymarket is not affiliated with, responsible for, or makes any guarantees regarding any third-party bridge. Users are advised to review the Terms of Use or other relevant documentation for third-party bridges.
|
||||
Each address is unique to your wallet. Only send assets from supported chains
|
||||
to the correct address type.
|
||||
</Warning>
|
||||
|
||||
## Important Notes
|
||||
## Deposit Flow
|
||||
|
||||
You can deposit USDC or USDC.e to your Polymarket Polygon wallet.
|
||||
<Steps>
|
||||
<Step title="Get Your Deposit Address">
|
||||
Call `POST /deposit` with your Polymarket wallet address to get deposit
|
||||
addresses.
|
||||
</Step>
|
||||
|
||||
If you deposit USDC (native), you will be prompted to "activate funds," which will swap this to USDC.e via the lowest fee Uniswap pool, ensuring slippage of less than 10 basis points (bps).
|
||||
<Step title="Check Supported Assets">
|
||||
Verify your token is supported and meets the minimum deposit amount via
|
||||
`/supported-assets`.
|
||||
</Step>
|
||||
|
||||
If you encounter any issues with the deposit process, please reach out to us on Discord for assistance.
|
||||
<Step title="Send Assets">
|
||||
Transfer tokens to the appropriate deposit address from your source chain.
|
||||
</Step>
|
||||
|
||||
<Step title="Track Status">
|
||||
Monitor your deposit progress using `/status/{address}`.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## USDC vs USDC.e
|
||||
|
||||
You can deposit either USDC (native) or USDC.e (bridged) to your Polymarket wallet. If you deposit native USDC, you will be prompted to "activate funds," which swaps it to USDC.e via the lowest-fee Uniswap pool (less than 10bp slippage).
|
||||
|
||||
## Large Deposits
|
||||
|
||||
For deposits over \$50,000 originating from a chain other than Polygon, we recommend using a third-party bridge to minimize slippage:
|
||||
|
||||
* [DeBridge](https://app.debridge.finance/)
|
||||
* [Across](https://app.across.to/bridge)
|
||||
* [Portal](https://portalbridge.com/)
|
||||
|
||||
Bridge directly to your Polymarket USDC (Polygon) deposit address. Polymarket is not affiliated with or responsible for any third-party bridge.
|
||||
|
||||
## Minimum Deposits
|
||||
|
||||
Each asset has a minimum deposit amount. Deposits below the minimum will not be processed. Check `/supported-assets` for current minimums.
|
||||
|
||||
## Deposit Recovery
|
||||
|
||||
If you deposited the wrong token on Ethereum or Polygon, use these tools to recover your funds:
|
||||
|
||||
* **Ethereum deposits**: [recovery.polymarket.com](https://recovery.polymarket.com/)
|
||||
* **Polygon deposits**: [matic-recovery.polymarket.com](https://matic-recovery.polymarket.com/)
|
||||
|
||||
<Warning>
|
||||
Sending unsupported tokens may cause **irrecoverable loss**. Always verify
|
||||
your token is listed in [Supported Assets](/trading/bridge/supported-assets)
|
||||
before depositing.
|
||||
</Warning>
|
||||
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Supported Assets" icon="coins" href="/trading/bridge/supported-assets">
|
||||
See all supported chains and tokens with minimum amounts.
|
||||
</Card>
|
||||
|
||||
<Card title="Check Status" icon="clock" href="/trading/bridge/status">
|
||||
Track your deposit progress through completion.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2,53 +2,61 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Deposit by Transfering Crypto
|
||||
# Supported Assets
|
||||
|
||||
> Learn what Tokens and Chains are supported for deposit.
|
||||
> Chains and tokens supported for deposits to Polymarket
|
||||
|
||||
## **How do I use Transfer Crypto?**
|
||||
The Bridge API supports deposits from multiple chains and tokens. All deposits are automatically converted to **USDC.e on Polygon**, which is used as collateral for trading on Polymarket.
|
||||
|
||||
The feature was designed to be one of the simplest ways to transfer your tokens into a dApp.
|
||||
## Get Supported Assets
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=b0bfcc917f51f03c422947be7abcc5fc" alt="polymarket.comxd.png" title="polymarket.comxd.png" className="mx-auto" style={{ width:"62%" }} data-og-width="760" width="760" data-og-height="1146" height="1146" data-path="images/polymarket.comxd.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=280&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=0558e8b116d4e7f8698f3ad49ebed3f1 280w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=560&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=610193ec185ccf3697a6fb153084cb9c 560w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=840&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=9c0375436b39cb88b23a68ff1660743f 840w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=1100&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=218f394193340e8cb1dc63b996fac84d 1100w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=1650&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=7d11259b246b32b7214213a1f106a1fc 1650w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.comxd.png?w=2500&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=aa6adbb43af08d1f6e1a23e7556796a1 2500w" />
|
||||
Retrieve the full list of supported chains and tokens with their minimum deposit amounts.
|
||||
|
||||
1. **Click on the Deposit button** and **select Transfer Crypto** as a source option
|
||||
2. **Select which supported token and chain** your assets are on from the dropdown
|
||||
* Depending on your combination, this **may update the deposit address**
|
||||
* Only send **supported token-chain combinations**
|
||||
* Sending non-supported tokens may cause an irrecoverable loss
|
||||
3. **Scan the QR code or copy the deposit address** and paste as the recipient in the withdrawal/transfer page of your exchange/wallet
|
||||
* This is where you'll specify how much crypto you're transferring
|
||||
* You **must send more than the minimum deposit** amount or the funds will not process
|
||||
* Always ensure to **double check the pasted address** versus that is shown on the widget to protect against clickjacking attempts
|
||||
* You can click on the **collapsible section at the bottom of the widget** for estimated price impact, slippage, delivery time, and our help guide
|
||||
4. **Withdraw/transfer the tokens** from your exchange/wallet and wait until they're reflected on the dApp
|
||||
* You will receive notifications on the Fun widget as your withdraw/transfer processes and completes as shown below
|
||||
```bash theme={null}
|
||||
curl https://bridge.polymarket.com/supported-assets
|
||||
```
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=43ea11c20e25e45584d3ab0f1c1f0b4c" alt="polymarket.com_portfolio 1.png" title="polymarket.com_portfolio 1.png" className="mx-auto" style={{ width:"78%" }} data-og-width="760" width="760" data-og-height="500" height="500" data-path="images/polymarket.com_portfolio1.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=280&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=c44d0ee9b9f51028693595529bfe1060 280w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=560&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=0de5f6543688d0429d04b7d60e15731f 560w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=840&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=812b954f39f91b932c546669b1fdae47 840w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=1100&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=2587143a31ecc3f58f94a13c064fd05b 1100w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=1650&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=f09d6918697d145638c21d70bf66161f 1650w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio1.png?w=2500&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=dabc2b27d7408a0b606d07cbdcaefb93 2500w" />
|
||||
## Supported Chains
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=91e6dfeb4bb5cdada8d9b62fef23f487" alt="polymarket.com_portfolio 2.png" title="polymarket.com_portfolio 2.png" className="mx-auto" style={{ width:"78%" }} data-og-width="760" width="760" data-og-height="499" height="499" data-path="images/polymarket.com_portfolio2.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=280&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=c5e94f023a2679e0d84e43ff61f5fcf4 280w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=560&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=8ded25ed35ceb8493e4469bce4b21740 560w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=840&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=bee694bf666c5d86b5d7aaede5798a48 840w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=1100&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=17c84cae3c2fbd48e21a48c6e6f84634 1100w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=1650&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=e2d39c595a4b5a896c55e7cd71c871c9 1650w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/polymarket.com_portfolio2.png?w=2500&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=7696037ce611263ce4eb1be7bd4ba60e 2500w" />
|
||||
The bridge supports deposits from these blockchain networks:
|
||||
|
||||
## **What can I transfer?**
|
||||
| Chain | Address Type | Min Deposit | Example Tokens |
|
||||
| --------------- | ------------ | ----------- | ------------------------------------------- |
|
||||
| Ethereum | EVM | \$7 | ETH, USDC, USDT, WBTC, DAI, LINK, UNI, AAVE |
|
||||
| Polygon | EVM | \$2 | POL, USDC, USDT, DAI, WETH, SAND |
|
||||
| Arbitrum | EVM | \$2 | ETH, ARB, USDC, USDT, DAI, WBTC, USDe |
|
||||
| Base | EVM | \$2 | ETH, USDC, USDT, DAI, cbBTC, AERO, USDS |
|
||||
| Optimism | EVM | \$2 | ETH, OP, USDC, USDT, DAI, USDe |
|
||||
| BNB Smart Chain | EVM | \$2 | BNB, USDC, USDT, DAI, ETH, BTCB, BUSD |
|
||||
| Solana | SVM | \$2 | SOL, USDC, USDT, USDe, TRUMP |
|
||||
| Bitcoin | BTC | \$9 | BTC |
|
||||
| Tron | TVM | \$9 | USDT |
|
||||
| HyperEVM | EVM | \$2 | HYPE, USDC, USDe, stHYPE, UBTC, UETH |
|
||||
| Abstract | EVM | \$2 | ETH, USDC, USDT |
|
||||
| Monad | EVM | \$2 | MON, USDC, USDT |
|
||||
| Ethereal | EVM | \$2 | USDe, WUSDe |
|
||||
| Katana | EVM | \$2 | AUSD |
|
||||
| Lighter | EVM | \$2 | USDC |
|
||||
|
||||
Transfer Crypto is compatible with a range of supported tokens and chains:
|
||||
<Note>
|
||||
Supported assets change over time. Always call `/supported-assets` for the
|
||||
current list before initiating a deposit.
|
||||
</Note>
|
||||
|
||||
| | **Ethereum** | **Polygon** | **Base** | **Arbitrum** | **Solana** |
|
||||
| :--------- | :----------- | :---------- | :------- | :----------- | :--------- |
|
||||
| **USDC** | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| **USDC.e** | | ✅ | | | |
|
||||
| **USDT** | ✅ | ✅ | ✅ | ✅ | |
|
||||
| **DAI** | ✅ | ✅ | ✅ | ✅ | |
|
||||
| **ETH** | ✅ | | ✅ | ✅ | |
|
||||
| **WETH** | ✅ | ✅ | ✅ | ✅ | |
|
||||
| **MATIC** | ✅ | ✅ | | | |
|
||||
| **POL** | ✅ | ✅ | | | |
|
||||
| **SOL** | | | | | ✅ |
|
||||
| **CBBTC** | ✅ | | ✅ | | |
|
||||
| **ARB** | | | | ✅ | |
|
||||
## Minimum Amounts
|
||||
|
||||
## Need help with your deposit?
|
||||
Each asset has a `minCheckoutUsd` value—the minimum deposit amount in USD equivalent. Deposits below this threshold may fail to process.
|
||||
|
||||
Please contact us using the live chat button on the bottom right on [**Polymarket.com**](http://Polymarket.com)\*\* or email us on [support@polymarket.com](mailto:support@polymarket.com)\*\*
|
||||
Most L2 chains (Polygon, Arbitrum, Base, Optimism) have low minimums of $2, while Ethereum deposits require $7 minimum. Bitcoin and Tron have \$9 minimums due to higher bridging costs.
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=e862c32062cd7b8a7198714241c162dd" alt="imagee.png" data-og-width="2556" width="2556" data-og-height="1304" height="1304" data-path="images/imagee.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=280&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=ec7b40dddf3c4de102b2106fe30934aa 280w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=560&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=ca51d6f87f78779815cfaf89422725af 560w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=840&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=cc2bf6d79868b05369f3133bd0ab7a57 840w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=1100&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=b7a40ad1f76cd5d90875291ff948a4f0 1100w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=1650&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=ad31b6cbe24eb83e124df4e9f3cc78f7 1650w, https://mintcdn.com/polymarket-292d1b1b/YUHnSq4JdekVofRY/images/imagee.png?w=2500&fit=max&auto=format&n=YUHnSq4JdekVofRY&q=85&s=9be6c9c4bd2f170b92d33e7bac08dbc4 2500w" />
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Create Deposit" icon="arrow-right-to-bracket" href="/trading/bridge/deposit">
|
||||
Generate deposit addresses for your wallet.
|
||||
</Card>
|
||||
|
||||
<Card title="Check Status" icon="clock" href="/trading/bridge/status">
|
||||
Track your deposit progress.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -2,41 +2,532 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Making Your First Trade
|
||||
# Create Order
|
||||
|
||||
> How to buy shares.
|
||||
> Build, sign, and submit orders
|
||||
|
||||
Once you've [signed up](../get-started/how-to-signup) and [deposited funds](../get-started/how-to-deposit), you're ready to start trading on Polymarket. Here's a step-by-step guide to get you started.
|
||||
All orders on Polymarket are expressed as **limit orders**. Market orders are supported by submitting a limit order with a marketable price — your order executes immediately at the best available price on the book.
|
||||
|
||||
## Video guide
|
||||
<Info>
|
||||
The SDK handles EIP-712 signing and submission for you. If you prefer the REST
|
||||
API directly, see [Authentication](/api-reference/authentication) for constructing the
|
||||
required headers and the [API Reference](/api-reference/introduction) for full endpoint
|
||||
documentation including the raw order object fields and request/response schemas.
|
||||
</Info>
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/1lFgkHLqo28?si=i7e61-roRsOVeRMW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />
|
||||
***
|
||||
|
||||
## Walkthrough
|
||||
## Order Types
|
||||
|
||||
Before trading, you'll have to visit the [markets page](https://polymarket.com/markets) to see all available markets. Use the search, sort, and filter tools to narrow down your options and find a market that interests you.
|
||||
screen shot.
|
||||
| Type | Behavior | Use Case |
|
||||
| ------- | -------------------------------------------------------------------- | ------------------------------- |
|
||||
| **GTC** | Good-Til-Cancelled — rests on the book until filled or cancelled | Default for limit orders |
|
||||
| **GTD** | Good-Til-Date — active until a specified expiration time | Auto-expire before known events |
|
||||
| **FOK** | Fill-Or-Kill — must fill immediately and entirely, or cancel | All-or-nothing market orders |
|
||||
| **FAK** | Fill-And-Kill — fills what's available immediately, cancels the rest | Partial-fill market orders |
|
||||
|
||||
<Steps>
|
||||
<Steps.Step>
|
||||
### Choose a Market
|
||||
* **GTC** and **GTD** are limit order types — they rest on the book at your specified price.
|
||||
* **FOK** and **FAK** are market order types — they execute against resting liquidity immediately.
|
||||
* **BUY**: specify the dollar amount you want to spend
|
||||
* **SELL**: specify the number of shares you want to sell
|
||||
|
||||
Locate the 'buy' modal, on the right side of the screen. Click the outcome you want to buy (usually Yes or No), then enter the dollar amount you wish to invest.
|
||||
</Steps.Step>
|
||||
***
|
||||
|
||||
<Steps.Step>
|
||||
### Buy Shares
|
||||
## Limit Orders
|
||||
|
||||
Click **Buy** and confirm the transaction in your wallet. Once your trade goes through, you'll receive a notification confirming its success.
|
||||
The simplest way to place a limit order — create, sign, and submit in one call:
|
||||
|
||||
<Tip>Congrats, you're officially a Polymarket trader!</Tip>
|
||||
</Steps.Step>
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { ClobClient, Side, OrderType } from "@polymarket/clob-client";
|
||||
|
||||
<Steps.Step>
|
||||
### Share your trade
|
||||
const response = await client.createAndPostOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
},
|
||||
{
|
||||
tickSize: "0.01",
|
||||
negRisk: false,
|
||||
},
|
||||
OrderType.GTC,
|
||||
);
|
||||
|
||||
You'll also see a bet slip to share on social media. We love sending \$\$\$ to traders who post their trades on Twitter and tag us!
|
||||
</Steps.Step>
|
||||
</Steps>
|
||||
console.log("Order ID:", response.orderID);
|
||||
console.log("Status:", response.status);
|
||||
```
|
||||
|
||||
Simple, right? If you think you've got the hang of it, it's time to learn about more advanced trading and order types. [Limit Orders](../trading/limit-orders/).
|
||||
```python Python theme={null}
|
||||
from py_clob_client.clob_types import OrderArgs, OrderType
|
||||
from py_clob_client.order_builder.constants import BUY
|
||||
|
||||
response = client.create_and_post_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
},
|
||||
order_type=OrderType.GTC
|
||||
)
|
||||
|
||||
print("Order ID:", response["orderID"])
|
||||
print("Status:", response["status"])
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Two-Step: Sign Then Submit
|
||||
|
||||
For more control, you can separate signing from submission. This is useful for batch orders or custom submission logic:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
// Step 1: Create and sign locally
|
||||
const signedOrder = await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
|
||||
// Step 2: Submit to the CLOB
|
||||
const response = await client.postOrder(signedOrder, OrderType.GTC);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
# Step 1: Create and sign locally
|
||||
signed_order = client.create_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
}
|
||||
)
|
||||
|
||||
# Step 2: Submit to the CLOB
|
||||
response = client.post_order(signed_order, OrderType.GTC)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## GTD Orders (Expiring)
|
||||
|
||||
GTD orders auto-expire at a specified time. Useful for quoting around known events.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
// Expire in 1 hour (+ 60s security threshold buffer)
|
||||
const expiration = Math.floor(Date.now() / 1000) + 60 + 3600;
|
||||
|
||||
const response = await client.createAndPostOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
expiration,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
OrderType.GTD,
|
||||
);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
import time
|
||||
|
||||
# Expire in 1 hour (+ 60s security threshold buffer)
|
||||
expiration = int(time.time()) + 60 + 3600
|
||||
|
||||
response = client.create_and_post_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
expiration=expiration,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
},
|
||||
order_type=OrderType.GTD
|
||||
)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
<Note>
|
||||
There is a security threshold of one minute on GTD expiration. To set an
|
||||
effective lifetime of N seconds, use `now + 60 + N`. For example, for a
|
||||
30-second effective lifetime, set the expiration to `now + 60 + 30`.
|
||||
</Note>
|
||||
|
||||
***
|
||||
|
||||
## Market Orders
|
||||
|
||||
Market orders execute immediately against resting liquidity using FOK or FAK types:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { Side, OrderType } from "@polymarket/clob-client";
|
||||
|
||||
// FOK BUY: spend exactly $100 or cancel entirely
|
||||
const buyOrder = await client.createMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.BUY,
|
||||
amount: 100, // dollar amount
|
||||
price: 0.5, // worst-price limit (slippage protection)
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
await client.postOrder(buyOrder, OrderType.FOK);
|
||||
|
||||
// FOK SELL: sell exactly 200 shares or cancel entirely
|
||||
const sellOrder = await client.createMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.SELL,
|
||||
amount: 200, // number of shares
|
||||
price: 0.45, // worst-price limit (slippage protection)
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
await client.postOrder(sellOrder, OrderType.FOK);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
from py_clob_client.order_builder.constants import BUY, SELL
|
||||
from py_clob_client.clob_types import OrderType
|
||||
|
||||
# FOK BUY: spend exactly $100 or cancel entirely
|
||||
buy_order = client.create_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=BUY,
|
||||
amount=100, # dollar amount
|
||||
price=0.50, # worst-price limit (slippage protection)
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
)
|
||||
client.post_order(buy_order, OrderType.FOK)
|
||||
|
||||
# FOK SELL: sell exactly 200 shares or cancel entirely
|
||||
sell_order = client.create_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=SELL,
|
||||
amount=200, # number of shares
|
||||
price=0.45, # worst-price limit (slippage protection)
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
)
|
||||
client.post_order(sell_order, OrderType.FOK)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* **FOK** — fill entirely or cancel the whole order
|
||||
* **FAK** — fill what's available, cancel the rest
|
||||
|
||||
The `price` field on market orders acts as a **worst-price limit** (slippage protection), not a target execution price.
|
||||
|
||||
### One-Step Market Order
|
||||
|
||||
For convenience, `createAndPostMarketOrder` handles creation, signing, and submission in one call:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const response = await client.createAndPostMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.BUY,
|
||||
amount: 100,
|
||||
price: 0.5,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
OrderType.FOK,
|
||||
);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
response = client.create_and_post_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=BUY,
|
||||
amount=100,
|
||||
price=0.50,
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
order_type=OrderType.FOK,
|
||||
)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## Post-Only Orders
|
||||
|
||||
Post-only orders guarantee you're always the maker. If the order would match immediately (cross the spread), it's rejected instead of executed.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const response = await client.postOrder(signedOrder, OrderType.GTC, true);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
response = client.post_order(signed_order, OrderType.GTC, post_only=True)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* Only works with **GTC** and **GTD** order types
|
||||
* Rejected if combined with FOK or FAK
|
||||
|
||||
***
|
||||
|
||||
## Batch Orders
|
||||
|
||||
Place up to **15 orders** in a single request:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { OrderType, Side, PostOrdersArgs } from "@polymarket/clob-client";
|
||||
|
||||
const orders: PostOrdersArgs[] = [
|
||||
{
|
||||
order: await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.48,
|
||||
side: Side.BUY,
|
||||
size: 500,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
),
|
||||
orderType: OrderType.GTC,
|
||||
},
|
||||
{
|
||||
order: await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.52,
|
||||
side: Side.SELL,
|
||||
size: 500,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
),
|
||||
orderType: OrderType.GTC,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await client.postOrders(orders);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
from py_clob_client.clob_types import OrderArgs, OrderType, PostOrdersArgs
|
||||
from py_clob_client.order_builder.constants import BUY, SELL
|
||||
|
||||
response = client.post_orders([
|
||||
PostOrdersArgs(
|
||||
order=client.create_order(OrderArgs(
|
||||
price=0.48,
|
||||
size=500,
|
||||
side=BUY,
|
||||
token_id="TOKEN_ID",
|
||||
), options={"tick_size": "0.01", "neg_risk": False}),
|
||||
orderType=OrderType.GTC,
|
||||
),
|
||||
PostOrdersArgs(
|
||||
order=client.create_order(OrderArgs(
|
||||
price=0.52,
|
||||
size=500,
|
||||
side=SELL,
|
||||
token_id="TOKEN_ID",
|
||||
), options={"tick_size": "0.01", "neg_risk": False}),
|
||||
orderType=OrderType.GTC,
|
||||
),
|
||||
])
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## Order Options
|
||||
|
||||
Every order requires two market-specific options: `tickSize` and `negRisk`. For details on signature types (`0` = EOA, `1` = POLY\_PROXY, `2` = GNOSIS\_SAFE), see [Authentication](/api-reference/authentication#signature-types-and-funder).
|
||||
|
||||
### Tick Sizes
|
||||
|
||||
Your order price must conform to the market's tick size, or the order is rejected.
|
||||
|
||||
| Tick Size | Precision | Example Prices |
|
||||
| --------- | ---------- | ---------------------- |
|
||||
| `0.1` | 1 decimal | 0.1, 0.2, 0.5 |
|
||||
| `0.01` | 2 decimals | 0.01, 0.50, 0.99 |
|
||||
| `0.001` | 3 decimals | 0.001, 0.500, 0.999 |
|
||||
| `0.0001` | 4 decimals | 0.0001, 0.5000, 0.9999 |
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const tickSize = await client.getTickSize("TOKEN_ID");
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
tick_size = client.get_tick_size("TOKEN_ID")
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Negative Risk
|
||||
|
||||
Multi-outcome events (3+ outcomes) use the Neg Risk CTF Exchange. Pass `negRisk: true` for these markets.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const isNegRisk = await client.getNegRisk("TOKEN_ID");
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
is_neg_risk = client.get_neg_risk("TOKEN_ID")
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
<Tip>
|
||||
Both values are also available on the market object: `minimum_tick_size` and
|
||||
`neg_risk`.
|
||||
</Tip>
|
||||
|
||||
***
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before placing an order, your funder address must have approved the Exchange contract to spend the relevant tokens:
|
||||
|
||||
* **BUY orders**: USDC.e allowance >= spending amount
|
||||
* **SELL orders**: conditional token allowance >= selling amount
|
||||
|
||||
Order size is limited by your available balance minus amounts reserved by existing open orders:
|
||||
|
||||
$$
|
||||
\text{maxOrderSize} = \text{balance} - \sum(\text{openOrderSize} - \text{filledAmount})
|
||||
$$
|
||||
|
||||
<Warning>
|
||||
Orders are continuously monitored for validity — balances, allowances, and
|
||||
onchain cancellations are tracked in real time. Any maker caught intentionally
|
||||
abusing these checks will be blacklisted.
|
||||
</Warning>
|
||||
|
||||
### Advanced Parameters
|
||||
|
||||
These optional fields can be passed in the `UserOrder` object for fine-grained control:
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| ------------ | ------ | ----------------------------------------------- |
|
||||
| `feeRateBps` | number | Fee rate in basis points (default: market rate) |
|
||||
| `nonce` | number | Custom nonce for order uniqueness |
|
||||
| `taker` | string | Restrict the order to a specific taker address |
|
||||
|
||||
### Sports Markets
|
||||
|
||||
Sports markets have additional behaviors:
|
||||
|
||||
* Outstanding limit orders are **automatically cancelled** once the game begins, clearing the entire order book at the official start time
|
||||
* Marketable orders have a **3-second placement delay** before matching
|
||||
* Game start times can shift — monitor your orders closely, as they may not be cleared if the start time changes unexpectedly
|
||||
|
||||
***
|
||||
|
||||
## Response
|
||||
|
||||
A successful order placement returns:
|
||||
|
||||
```json theme={null}
|
||||
{
|
||||
"success": true,
|
||||
"errorMsg": "",
|
||||
"orderID": "0xabc123...",
|
||||
"takingAmount": "",
|
||||
"makingAmount": "",
|
||||
"status": "live",
|
||||
"transactionsHashes": [],
|
||||
"tradeIDs": []
|
||||
}
|
||||
```
|
||||
|
||||
### Statuses
|
||||
|
||||
| Status | Description |
|
||||
| ----------- | ----------------------------------------------------------- |
|
||||
| `live` | Order resting on the book |
|
||||
| `matched` | Order matched immediately with a resting order |
|
||||
| `delayed` | Marketable order subject to a matching delay |
|
||||
| `unmatched` | Marketable but failed to delay — placement still successful |
|
||||
|
||||
### Error Messages
|
||||
|
||||
| Error | Description |
|
||||
| ---------------------------------- | ----------------------------------------------- |
|
||||
| `INVALID_ORDER_MIN_TICK_SIZE` | Price doesn't conform to the market's tick size |
|
||||
| `INVALID_ORDER_MIN_SIZE` | Order size below the minimum threshold |
|
||||
| `INVALID_ORDER_DUPLICATED` | Identical order already placed |
|
||||
| `INVALID_ORDER_NOT_ENOUGH_BALANCE` | Insufficient balance or allowance |
|
||||
| `INVALID_ORDER_EXPIRATION` | Expiration timestamp is in the past |
|
||||
| `INVALID_POST_ONLY_ORDER_TYPE` | Post-only used with FOK/FAK |
|
||||
| `INVALID_POST_ONLY_ORDER` | Post-only order would cross the book |
|
||||
| `FOK_ORDER_NOT_FILLED_ERROR` | FOK order couldn't be fully filled |
|
||||
| `INVALID_ORDER_ERROR` | System error inserting the order |
|
||||
| `EXECUTION_ERROR` | System error executing the trade |
|
||||
| `ORDER_DELAYED` | Order match delayed due to market conditions |
|
||||
| `DELAYING_ORDER_ERROR` | System error while delaying the order |
|
||||
| `MARKET_NOT_READY` | Market not yet accepting orders |
|
||||
|
||||
***
|
||||
|
||||
## Heartbeat
|
||||
|
||||
The heartbeat endpoint maintains session liveness. If a valid heartbeat is not received within **10 seconds** (with a 5-second buffer), **all open orders are cancelled**.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
let heartbeatId = "";
|
||||
setInterval(async () => {
|
||||
const resp = await client.postHeartbeat(heartbeatId);
|
||||
heartbeatId = resp.heartbeat_id;
|
||||
}, 5000);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
import time
|
||||
|
||||
heartbeat_id = ""
|
||||
while True:
|
||||
resp = client.post_heartbeat(heartbeat_id)
|
||||
heartbeat_id = resp["heartbeat_id"]
|
||||
time.sleep(5)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* Include the most recent `heartbeat_id` in each request. Use an empty string for the first request.
|
||||
* If you send an expired ID, the server responds with `400` and the correct ID. Update and retry.
|
||||
|
||||
***
|
||||
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Cancel Orders" icon="xmark" href="/trading/orders/cancel">
|
||||
Cancel single, multiple, or all open orders
|
||||
</Card>
|
||||
|
||||
<Card title="Order Attribution" icon="tag" href="/trading/orders/attribution">
|
||||
Attribute orders to your builder account for volume credit
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -2,9 +2,13 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Trading Fees
|
||||
# Fees
|
||||
|
||||
Polymarket does not charge fees on most markets. However, certain markets have taker fees enabled to fund the [Maker Rebates Program](/polymarket-learn/trading/maker-rebates-program).
|
||||
> Understanding trading fees on Polymarket
|
||||
|
||||
Polymarket does not charge fees on most markets. However, certain markets have taker fees enabled to fund the [Maker Rebates Program](/market-makers/maker-rebates).
|
||||
|
||||
***
|
||||
|
||||
## Fee-Free Markets
|
||||
|
||||
@@ -13,6 +17,8 @@ The vast majority of Polymarket markets have **no trading fees**:
|
||||
* No fees to deposit or withdraw USDC (though intermediaries like Coinbase or MoonPay may charge their own fees)
|
||||
* No fees to trade shares
|
||||
|
||||
***
|
||||
|
||||
## Markets With Fees
|
||||
|
||||
The following market types charge a small taker fee on each trade. These fees are collected and redistributed daily to market makers as rebates, incentivizing deeper liquidity and tighter spreads.
|
||||
@@ -22,6 +28,194 @@ The following market types charge a small taker fee on each trade. These fees ar
|
||||
* **NCAAB (college basketball) markets** (starting February 18, 2026 for new markets)
|
||||
* **Serie A markets** (starting February 18, 2026 for new markets)
|
||||
|
||||
<Card title="Maker Rebates Program" icon="coins" href="/polymarket-learn/trading/maker-rebates-program">
|
||||
Learn how taker fees fund daily USDC rebates for liquidity providers
|
||||
</Card>
|
||||
### Fee Structure
|
||||
|
||||
Fees are calculated using the following formula:
|
||||
|
||||
```text theme={null}
|
||||
fee = C × p × feeRate × (p × (1 - p))^exponent
|
||||
```
|
||||
|
||||
Where **C** = number of shares traded and **p** = price of the shares. The fee parameters differ by market type:
|
||||
|
||||
| Parameter | Sports (NCAAB, Serie A) | 5-Min & 15-Min Crypto |
|
||||
| -------------- | ----------------------- | --------------------- |
|
||||
| Fee Rate | 0.0175 | 0.25 |
|
||||
| Exponent | 1 | 2 |
|
||||
| Maker Rebate % | 25% | 20% |
|
||||
|
||||
Taker fees are calculated in USDC and vary based on the share price. However, fees are collected in shares on buy orders and USDC on sell orders. The effective rate **peaks at 50%** probability and decreases symmetrically toward the extremes.
|
||||
|
||||
<Frame>
|
||||
<div className="p-3 bg-white rounded-xl">
|
||||
<iframe title="Fee Curves" aria-label="Line chart" id="datawrapper-chart-qTzMH" src="https://datawrapper.dwcdn.net/qTzMH/1/" scrolling="no" frameborder="0" width={700} style={{ width: "0", minWidth: "100% !important", border: "none" }} height="450" data-external="1" />
|
||||
</div>
|
||||
</Frame>
|
||||
|
||||
### Fee Table (100 shares)
|
||||
|
||||
<Tabs>
|
||||
<Tab title="5-Min & 15-Min Crypto">
|
||||
| Price | Trade Value | Fee (USDC) | Effective Rate |
|
||||
| ------ | ----------- | ---------- | -------------- |
|
||||
| \$0.01 | \$1 | \$0.00 | 0.00% |
|
||||
| \$0.05 | \$5 | \$0.003 | 0.06% |
|
||||
| \$0.10 | \$10 | \$0.02 | 0.20% |
|
||||
| \$0.15 | \$15 | \$0.06 | 0.41% |
|
||||
| \$0.20 | \$20 | \$0.13 | 0.64% |
|
||||
| \$0.25 | \$25 | \$0.22 | 0.88% |
|
||||
| \$0.30 | \$30 | \$0.33 | 1.10% |
|
||||
| \$0.35 | \$35 | \$0.45 | 1.29% |
|
||||
| \$0.40 | \$40 | \$0.58 | 1.44% |
|
||||
| \$0.45 | \$45 | \$0.69 | 1.53% |
|
||||
| \$0.50 | \$50 | \$0.78 | **1.56%** |
|
||||
| \$0.55 | \$55 | \$0.84 | 1.53% |
|
||||
| \$0.60 | \$60 | \$0.86 | 1.44% |
|
||||
| \$0.65 | \$65 | \$0.84 | 1.29% |
|
||||
| \$0.70 | \$70 | \$0.77 | 1.10% |
|
||||
| \$0.75 | \$75 | \$0.66 | 0.88% |
|
||||
| \$0.80 | \$80 | \$0.51 | 0.64% |
|
||||
| \$0.85 | \$85 | \$0.35 | 0.41% |
|
||||
| \$0.90 | \$90 | \$0.18 | 0.20% |
|
||||
| \$0.95 | \$95 | \$0.05 | 0.06% |
|
||||
| \$0.99 | \$99 | \$0.00 | 0.00% |
|
||||
|
||||
The maximum effective fee rate is **1.56%** at 50% probability. Fees decrease symmetrically toward both extremes.
|
||||
</Tab>
|
||||
|
||||
<Tab title="Sports (NCAAB, Serie A)">
|
||||
| Price | Trade Value | Fee (USDC) | Effective Rate |
|
||||
| ------ | ----------- | ---------- | -------------- |
|
||||
| \$0.01 | \$1 | \$0.00 | 0.02% |
|
||||
| \$0.05 | \$5 | \$0.00 | 0.08% |
|
||||
| \$0.10 | \$10 | \$0.02 | 0.16% |
|
||||
| \$0.15 | \$15 | \$0.03 | 0.22% |
|
||||
| \$0.20 | \$20 | \$0.06 | 0.28% |
|
||||
| \$0.25 | \$25 | \$0.08 | 0.33% |
|
||||
| \$0.30 | \$30 | \$0.11 | 0.37% |
|
||||
| \$0.35 | \$35 | \$0.14 | 0.40% |
|
||||
| \$0.40 | \$40 | \$0.17 | 0.42% |
|
||||
| \$0.45 | \$45 | \$0.19 | 0.43% |
|
||||
| \$0.50 | \$50 | \$0.22 | **0.44%** |
|
||||
| \$0.55 | \$55 | \$0.24 | 0.43% |
|
||||
| \$0.60 | \$60 | \$0.25 | 0.42% |
|
||||
| \$0.65 | \$65 | \$0.26 | 0.40% |
|
||||
| \$0.70 | \$70 | \$0.26 | 0.37% |
|
||||
| \$0.75 | \$75 | \$0.25 | 0.33% |
|
||||
| \$0.80 | \$80 | \$0.22 | 0.28% |
|
||||
| \$0.85 | \$85 | \$0.19 | 0.22% |
|
||||
| \$0.90 | \$90 | \$0.14 | 0.16% |
|
||||
| \$0.95 | \$95 | \$0.08 | 0.08% |
|
||||
| \$0.99 | \$99 | \$0.02 | 0.02% |
|
||||
|
||||
The maximum effective fee rate is **0.44%** at 50% probability. Fees decrease symmetrically toward both extremes.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Fee Precision
|
||||
|
||||
Fees are rounded to 4 decimal places. The smallest fee charged is **0.0001 USDC**. Anything smaller rounds to zero, so very small trades near the extremes may incur no fee at all.
|
||||
|
||||
***
|
||||
|
||||
## Identifying Fee-Enabled Markets
|
||||
|
||||
The following market types have fees enabled:
|
||||
|
||||
* **15-minute crypto markets**
|
||||
* **5-minute crypto markets**
|
||||
* **NCAAB (college basketball) markets** (starting February 18, 2026 for new markets)
|
||||
* **Serie A markets** (starting February 18, 2026 for new markets)
|
||||
|
||||
Query the fee-rate endpoint to check any specific market. See the [API Reference](/api-reference/introduction) for full endpoint documentation.
|
||||
|
||||
```bash theme={null}
|
||||
GET https://clob.polymarket.com/fee-rate?token_id={token_id}
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## Fee Handling for API Users
|
||||
|
||||
### Using the SDK (Recommended)
|
||||
|
||||
The official CLOB clients **automatically handle fees** for you — they fetch the fee rate and include it in the signed order payload.
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="TypeScript" icon="js" href="https://github.com/Polymarket/clob-client">
|
||||
npm install @polymarket/clob-client\@latest
|
||||
</Card>
|
||||
|
||||
<Card title="Python" icon="python" href="https://github.com/Polymarket/py-clob-client">
|
||||
pip install --upgrade py-clob-client
|
||||
</Card>
|
||||
|
||||
<Card title="Rust" icon="rust" href="https://github.com/Polymarket/rs-clob-client">
|
||||
cargo add polymarket-client-sdk
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
**What the client does automatically:**
|
||||
|
||||
1. Fetches the fee rate for the market's token ID
|
||||
2. Includes `feeRateBps` in the order structure
|
||||
3. Signs the order with the fee rate included
|
||||
|
||||
**You don't need to do anything extra.** Your orders will work on fee-enabled markets.
|
||||
|
||||
### Using the REST API
|
||||
|
||||
If you're calling the REST API directly or building your own order signing, you must manually include the fee rate in your signed order payload.
|
||||
|
||||
**Step 1:** Fetch the fee rate for the token ID before creating your order:
|
||||
|
||||
```bash theme={null}
|
||||
GET https://clob.polymarket.com/fee-rate?token_id={token_id}
|
||||
```
|
||||
|
||||
See the [fee-rate API Reference](/api-reference/introduction) for full response details. Fee-enabled markets return a non-zero value; fee-free markets return `0`.
|
||||
|
||||
**Step 2:** Add the `feeRateBps` field to your order object. This value is part of the signed payload — the CLOB validates your signature against it.
|
||||
|
||||
```json theme={null}
|
||||
{
|
||||
"salt": "12345",
|
||||
"maker": "0x...",
|
||||
"signer": "0x...",
|
||||
"taker": "0x...",
|
||||
"tokenId": "71321045679252212594626385532706912750332728571942532289631379312455583992563",
|
||||
"makerAmount": "50000000",
|
||||
"takerAmount": "100000000",
|
||||
"expiration": "0",
|
||||
"nonce": "0",
|
||||
"feeRateBps": "1000",
|
||||
"side": "0",
|
||||
"signatureType": 2,
|
||||
"signature": "0x..."
|
||||
}
|
||||
```
|
||||
|
||||
**Step 3:** Sign and submit:
|
||||
|
||||
1. Include `feeRateBps` in the order object **before signing**
|
||||
2. Sign the complete order
|
||||
3. POST to the order endpoint
|
||||
|
||||
<Note>
|
||||
Always fetch `fee_rate_bps` dynamically — do not hardcode. The fee rate varies
|
||||
by market type and may change over time. You only need to pass `feeRateBps`.
|
||||
</Note>
|
||||
|
||||
***
|
||||
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Maker Rebates Program" icon="coins" href="/market-makers/maker-rebates">
|
||||
Learn how taker fees fund daily USDC rebates for liquidity providers.
|
||||
</Card>
|
||||
|
||||
<Card title="Place Orders" icon="plus" href="/trading/quickstart">
|
||||
Start placing orders on Polymarket.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -4,24 +4,41 @@
|
||||
|
||||
# Maker Rebates Program
|
||||
|
||||
> Earn daily USDC rebates by providing liquidity on Polymarket
|
||||
|
||||
Polymarket has enabled taker fees on **15-minute crypto markets**, **5-minute crypto markets**, **NCAAB (college basketball)**, and **Serie A** markets. These fees fund a **Maker Rebates** program that pays daily USDC rebates to liquidity providers.
|
||||
|
||||
<Note>
|
||||
Starting **Wednesday, February 18th, 2026 at midnight (UTC)**, taker fees and maker rebates will apply to all **new** NCAAB and Serie A markets created after that time. Existing markets are not affected. The first payout will be on February 19th at midnight (UTC).
|
||||
</Note>
|
||||
***
|
||||
|
||||
## Why Expand Maker Rebates?
|
||||
## Why Maker Rebates?
|
||||
|
||||
Sports markets benefit from the same dynamics as our 15-minute crypto and 5-minute crypto markets. When liquidity is deeper:
|
||||
Sports markets benefit from the same dynamics as crypto markets. When liquidity is deeper:
|
||||
|
||||
* Spreads tend to be tighter
|
||||
* Price impact is lower
|
||||
* Fills are more reliable
|
||||
* Markets are more resilient during volatility
|
||||
|
||||
Maker Rebates incentivize consistent, competitive quoting so everyone gets a better trading experience.
|
||||
Maker Rebates incentivize **consistent, competitive quoting** so everyone gets a better trading experience.
|
||||
|
||||
### Program Funding
|
||||
***
|
||||
|
||||
## How Maker Rebates Work
|
||||
|
||||
* **Paid daily in USDC:** Rebates are calculated and distributed every day.
|
||||
* **Performance-based:** You earn based on the share of liquidity you provided that actually got taken.
|
||||
|
||||
### Eligibility
|
||||
|
||||
Place orders that add liquidity to the book and get filled (i.e., your liquidity is taken by another trader).
|
||||
|
||||
### Payment
|
||||
|
||||
Rebates are paid daily in USDC, directly to your wallet.
|
||||
|
||||
***
|
||||
|
||||
## Funding
|
||||
|
||||
Maker Rebates are funded by taker fees collected in eligible markets. A percentage of these fees are redistributed to makers who keep the markets liquid. The rebate percentage differs by market type.
|
||||
|
||||
@@ -32,15 +49,49 @@ Maker Rebates are funded by taker fees collected in eligible markets. A percenta
|
||||
| Sports (NCAAB, Serie A) | Feb 18, 2026+ | 25% | Fee-curve weighted |
|
||||
|
||||
<Note>
|
||||
Polymarket collects taker fees in eligible markets (15-minute crypto, 5-minute crypto, NCAAB, and Serie A). The rebate percentage is at the sole discretion of Polymarket and may change over time.
|
||||
Polymarket collects taker fees in eligible markets (15-minute crypto, 5-minute
|
||||
crypto, NCAAB, and Serie A). The rebate percentage is at the sole discretion
|
||||
of Polymarket and may change over time.
|
||||
</Note>
|
||||
|
||||
***
|
||||
|
||||
## Fee-Curve Weighted Rebates
|
||||
|
||||
Rebates are distributed using the **same formula as taker fees**. This ensures makers are rewarded proportionally to the fee value their liquidity generates.
|
||||
|
||||
For each filled maker order:
|
||||
|
||||
```text theme={null}
|
||||
fee_equivalent = C × p × feeRate × (p × (1 - p))^exponent
|
||||
```
|
||||
|
||||
Where **C** = number of shares traded and **p** = price of the shares. The fee parameters differ by market type:
|
||||
|
||||
| Parameter | Sports (NCAAB, Serie A) | 5-Min & 15-Min Crypto |
|
||||
| --------- | ----------------------- | --------------------- |
|
||||
| Fee Rate | 0.0175 | 0.25 |
|
||||
| Exponent | 1 | 2 |
|
||||
|
||||
Your daily rebate:
|
||||
|
||||
```text theme={null}
|
||||
rebate = (your_fee_equivalent / total_fee_equivalent) * rebate_pool
|
||||
```
|
||||
|
||||
Totals are calculated per market, so you only compete with other makers in the same market.
|
||||
|
||||
***
|
||||
|
||||
## Taker Fee Structure
|
||||
|
||||
Taker fees are calculated in USDC and vary based on the share price. However, fees are collected in shares on buy orders and USDC on sell orders.
|
||||
Fees are highest at 50% probability and lowest at the extremes (near 0% or 100%).
|
||||
Taker fees are calculated in USDC and vary based on the share price. However, fees are collected in shares on buy orders and USDC on sell orders. Fees are highest at 50% probability and lowest at the extremes (near 0% or 100%).
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=9e5b1d1a262fb6c787af5b6a0fa4d6c2" alt="Fee Curves" data-og-width="1484" width="1484" data-og-height="882" height="882" data-path="polymarket-learn/media/fee_image_review.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=280&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=111b6dc97e2b301501c02e2df5e3df35 280w, https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=560&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=063f99ef8ec728e399a7cd0b27e704a0 560w, https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=840&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=c7d74e4ca10bd953f1f08a9851017f3c 840w, https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=1100&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=bc3dbf551ae32d6c4e7d85558831fb1f 1100w, https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=1650&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=d082a6e2029bc3f4797d758d689e2c37 1650w, https://mintcdn.com/polymarket-292d1b1b/12mKTb6PQ_jJnYbI/polymarket-learn/media/fee_image_review.png?w=2500&fit=max&auto=format&n=12mKTb6PQ_jJnYbI&q=85&s=417d0c9a66a64d31588d15c908cebf39 2500w" />
|
||||
<Frame>
|
||||
<div className="p-3 bg-white rounded-xl">
|
||||
<iframe title="Fee Curves" aria-label="Line chart" id="datawrapper-chart-qTzMH" src="https://datawrapper.dwcdn.net/qTzMH/1/" scrolling="no" frameborder="0" width={700} style={{ width: "0", minWidth: "100% !important", border: "none" }} height="450" data-external="1" />
|
||||
</div>
|
||||
</Frame>
|
||||
|
||||
### Fee Table (100 shares)
|
||||
|
||||
@@ -106,26 +157,63 @@ Fees are highest at 50% probability and lowest at the extremes (near 0% or 100%)
|
||||
|
||||
Fees are rounded to 4 decimal places. The smallest fee charged is 0.0001 USDC. Anything smaller rounds to zero, so very small trades near the extremes may incur no fee at all.
|
||||
|
||||
***
|
||||
|
||||
## Which Markets Are Eligible?
|
||||
|
||||
The following market types have taker fees enabled and are eligible for maker rebates:
|
||||
|
||||
* **15-minute crypto markets**
|
||||
* **5-minute crypto markets**
|
||||
* **NCAAB (college basketball) markets** (starting February 18, 2026 for new markets)
|
||||
* **Serie A markets** (starting February 18, 2026 for new markets)
|
||||
|
||||
All other markets remain fee-free.
|
||||
|
||||
***
|
||||
|
||||
## FAQ
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="How do I qualify for maker rebates?">
|
||||
Place orders that add liquidity to the book and get filled (i.e., your
|
||||
liquidity is taken by another trader).
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="When are rebates paid?">Daily, in USDC.</Accordion>
|
||||
|
||||
<Accordion title="How are rebates calculated?">
|
||||
Rebates are proportional to your share of executed maker liquidity in each eligible market. Totals are calculated per market, so you only compete with other makers in the same market.
|
||||
Rebates are proportional to your share of executed maker liquidity in each
|
||||
eligible market. Totals are calculated per market, so you only compete with
|
||||
other makers in the same market.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Where does the rebate pool come from?">
|
||||
Taker fees collected in eligible markets are allocated to the maker rebate
|
||||
pool and distributed daily.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Which markets have fees enabled?">
|
||||
15-minute crypto markets, 5-minute crypto markets, and starting February 18, 2026, NCAAB and Serie A markets.
|
||||
15-minute crypto markets, 5-minute crypto markets, and starting February 18,
|
||||
2026, NCAAB and Serie A markets.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Is Polymarket charging fees on all markets?">
|
||||
No. Fees apply only to 15-minute crypto, 5-minute crypto, NCAAB, and Serie A markets. All other markets remain fee-free.
|
||||
No. Fees apply only to 15-minute crypto, 5-minute crypto, NCAAB, and Serie A
|
||||
markets. All other markets remain fee-free.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## For API Users
|
||||
***
|
||||
|
||||
If you trade programmatically, you'll need to update your client to handle fees correctly.
|
||||
## Next Steps
|
||||
|
||||
<Card title="Developer Guide: Maker Rebates" icon="code" href="/developers/market-makers/maker-rebates-program">
|
||||
Technical documentation for handling fees in your trading code
|
||||
</Card>
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Fee Structure" icon="receipt" href="/trading/fees">
|
||||
Full fee handling guide for SDK and REST API users.
|
||||
</Card>
|
||||
|
||||
<Card title="Place Orders" icon="plus" href="/trading/quickstart">
|
||||
Start placing orders on Polymarket.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -2,42 +2,532 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Market Orders
|
||||
# Create Order
|
||||
|
||||
> How to buy shares.
|
||||
> Build, sign, and submit orders
|
||||
|
||||
# Market Orders
|
||||
All orders on Polymarket are expressed as **limit orders**. Market orders are supported by submitting a limit order with a marketable price — your order executes immediately at the best available price on the book.
|
||||
|
||||
Once you've [signed up](../get-started/how-to-signup) and [deposited funds](../get-started/how-to-deposit), you're ready to start trading on Polymarket. Here's a step-by-step guide to get you started.
|
||||
<Info>
|
||||
The SDK handles EIP-712 signing and submission for you. If you prefer the REST
|
||||
API directly, see [Authentication](/api-reference/authentication) for constructing the
|
||||
required headers and the [API Reference](/api-reference/introduction) for full endpoint
|
||||
documentation including the raw order object fields and request/response schemas.
|
||||
</Info>
|
||||
|
||||
## Video Walkthrough
|
||||
***
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/1lFgkHLqo28?si=i7e61-roRsOVeRMW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />
|
||||
## Order Types
|
||||
|
||||
## Placing a Market Order
|
||||
| Type | Behavior | Use Case |
|
||||
| ------- | -------------------------------------------------------------------- | ------------------------------- |
|
||||
| **GTC** | Good-Til-Cancelled — rests on the book until filled or cancelled | Default for limit orders |
|
||||
| **GTD** | Good-Til-Date — active until a specified expiration time | Auto-expire before known events |
|
||||
| **FOK** | Fill-Or-Kill — must fill immediately and entirely, or cancel | All-or-nothing market orders |
|
||||
| **FAK** | Fill-And-Kill — fills what's available immediately, cancels the rest | Partial-fill market orders |
|
||||
|
||||
\_Before trading, you'll want to visit the [markets page](https://polymarket.com/markets) to find a market that interests you.
|
||||
* **GTC** and **GTD** are limit order types — they rest on the book at your specified price.
|
||||
* **FOK** and **FAK** are market order types — they execute against resting liquidity immediately.
|
||||
* **BUY**: specify the dollar amount you want to spend
|
||||
* **SELL**: specify the number of shares you want to sell
|
||||
|
||||
<Steps>
|
||||
<Steps.Step>
|
||||
### [Choose a market](https://polymarket.com/markets)
|
||||
***
|
||||
|
||||
Locate the 'buy' modal, on the right side of the screen. Click the outcome you want to buy (usually Yes or No), then enter the dollar amount you wish to invest.
|
||||
</Steps.Step>
|
||||
## Limit Orders
|
||||
|
||||
<Steps.Step>
|
||||
### Buy shares
|
||||
The simplest way to place a limit order — create, sign, and submit in one call:
|
||||
|
||||
Click **Buy** and confirm the transaction in your wallet. Once your trade goes through, you'll receive a notification confirming its success.
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { ClobClient, Side, OrderType } from "@polymarket/clob-client";
|
||||
|
||||
<Tip>Congrats, you're officially a Polymarket trader!</Tip>
|
||||
</Steps.Step>
|
||||
const response = await client.createAndPostOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
},
|
||||
{
|
||||
tickSize: "0.01",
|
||||
negRisk: false,
|
||||
},
|
||||
OrderType.GTC,
|
||||
);
|
||||
|
||||
<Steps.Step>
|
||||
### Share your bet slip
|
||||
console.log("Order ID:", response.orderID);
|
||||
console.log("Status:", response.status);
|
||||
```
|
||||
|
||||
You'll also see a bet slip to share on social media. We love sending \$\$\$ to traders who post their trades on Twitter and tag us!
|
||||
</Steps.Step>
|
||||
</Steps>
|
||||
```python Python theme={null}
|
||||
from py_clob_client.clob_types import OrderArgs, OrderType
|
||||
from py_clob_client.order_builder.constants import BUY
|
||||
|
||||
Simple, right? If you think you've got the hang of it, it's time to learn about more advanced trading and order types. [Limit Orders](../trading/limit-orders/).
|
||||
response = client.create_and_post_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
},
|
||||
order_type=OrderType.GTC
|
||||
)
|
||||
|
||||
print("Order ID:", response["orderID"])
|
||||
print("Status:", response["status"])
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Two-Step: Sign Then Submit
|
||||
|
||||
For more control, you can separate signing from submission. This is useful for batch orders or custom submission logic:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
// Step 1: Create and sign locally
|
||||
const signedOrder = await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
|
||||
// Step 2: Submit to the CLOB
|
||||
const response = await client.postOrder(signedOrder, OrderType.GTC);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
# Step 1: Create and sign locally
|
||||
signed_order = client.create_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
}
|
||||
)
|
||||
|
||||
# Step 2: Submit to the CLOB
|
||||
response = client.post_order(signed_order, OrderType.GTC)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## GTD Orders (Expiring)
|
||||
|
||||
GTD orders auto-expire at a specified time. Useful for quoting around known events.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
// Expire in 1 hour (+ 60s security threshold buffer)
|
||||
const expiration = Math.floor(Date.now() / 1000) + 60 + 3600;
|
||||
|
||||
const response = await client.createAndPostOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.5,
|
||||
size: 10,
|
||||
side: Side.BUY,
|
||||
expiration,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
OrderType.GTD,
|
||||
);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
import time
|
||||
|
||||
# Expire in 1 hour (+ 60s security threshold buffer)
|
||||
expiration = int(time.time()) + 60 + 3600
|
||||
|
||||
response = client.create_and_post_order(
|
||||
OrderArgs(
|
||||
token_id="TOKEN_ID",
|
||||
price=0.50,
|
||||
size=10,
|
||||
side=BUY,
|
||||
expiration=expiration,
|
||||
),
|
||||
options={
|
||||
"tick_size": "0.01",
|
||||
"neg_risk": False,
|
||||
},
|
||||
order_type=OrderType.GTD
|
||||
)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
<Note>
|
||||
There is a security threshold of one minute on GTD expiration. To set an
|
||||
effective lifetime of N seconds, use `now + 60 + N`. For example, for a
|
||||
30-second effective lifetime, set the expiration to `now + 60 + 30`.
|
||||
</Note>
|
||||
|
||||
***
|
||||
|
||||
## Market Orders
|
||||
|
||||
Market orders execute immediately against resting liquidity using FOK or FAK types:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { Side, OrderType } from "@polymarket/clob-client";
|
||||
|
||||
// FOK BUY: spend exactly $100 or cancel entirely
|
||||
const buyOrder = await client.createMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.BUY,
|
||||
amount: 100, // dollar amount
|
||||
price: 0.5, // worst-price limit (slippage protection)
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
await client.postOrder(buyOrder, OrderType.FOK);
|
||||
|
||||
// FOK SELL: sell exactly 200 shares or cancel entirely
|
||||
const sellOrder = await client.createMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.SELL,
|
||||
amount: 200, // number of shares
|
||||
price: 0.45, // worst-price limit (slippage protection)
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
);
|
||||
await client.postOrder(sellOrder, OrderType.FOK);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
from py_clob_client.order_builder.constants import BUY, SELL
|
||||
from py_clob_client.clob_types import OrderType
|
||||
|
||||
# FOK BUY: spend exactly $100 or cancel entirely
|
||||
buy_order = client.create_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=BUY,
|
||||
amount=100, # dollar amount
|
||||
price=0.50, # worst-price limit (slippage protection)
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
)
|
||||
client.post_order(buy_order, OrderType.FOK)
|
||||
|
||||
# FOK SELL: sell exactly 200 shares or cancel entirely
|
||||
sell_order = client.create_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=SELL,
|
||||
amount=200, # number of shares
|
||||
price=0.45, # worst-price limit (slippage protection)
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
)
|
||||
client.post_order(sell_order, OrderType.FOK)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* **FOK** — fill entirely or cancel the whole order
|
||||
* **FAK** — fill what's available, cancel the rest
|
||||
|
||||
The `price` field on market orders acts as a **worst-price limit** (slippage protection), not a target execution price.
|
||||
|
||||
### One-Step Market Order
|
||||
|
||||
For convenience, `createAndPostMarketOrder` handles creation, signing, and submission in one call:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const response = await client.createAndPostMarketOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
side: Side.BUY,
|
||||
amount: 100,
|
||||
price: 0.5,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
OrderType.FOK,
|
||||
);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
response = client.create_and_post_market_order(
|
||||
token_id="TOKEN_ID",
|
||||
side=BUY,
|
||||
amount=100,
|
||||
price=0.50,
|
||||
options={"tick_size": "0.01", "neg_risk": False},
|
||||
order_type=OrderType.FOK,
|
||||
)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## Post-Only Orders
|
||||
|
||||
Post-only orders guarantee you're always the maker. If the order would match immediately (cross the spread), it's rejected instead of executed.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const response = await client.postOrder(signedOrder, OrderType.GTC, true);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
response = client.post_order(signed_order, OrderType.GTC, post_only=True)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* Only works with **GTC** and **GTD** order types
|
||||
* Rejected if combined with FOK or FAK
|
||||
|
||||
***
|
||||
|
||||
## Batch Orders
|
||||
|
||||
Place up to **15 orders** in a single request:
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
import { OrderType, Side, PostOrdersArgs } from "@polymarket/clob-client";
|
||||
|
||||
const orders: PostOrdersArgs[] = [
|
||||
{
|
||||
order: await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.48,
|
||||
side: Side.BUY,
|
||||
size: 500,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
),
|
||||
orderType: OrderType.GTC,
|
||||
},
|
||||
{
|
||||
order: await client.createOrder(
|
||||
{
|
||||
tokenID: "TOKEN_ID",
|
||||
price: 0.52,
|
||||
side: Side.SELL,
|
||||
size: 500,
|
||||
},
|
||||
{ tickSize: "0.01", negRisk: false },
|
||||
),
|
||||
orderType: OrderType.GTC,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await client.postOrders(orders);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
from py_clob_client.clob_types import OrderArgs, OrderType, PostOrdersArgs
|
||||
from py_clob_client.order_builder.constants import BUY, SELL
|
||||
|
||||
response = client.post_orders([
|
||||
PostOrdersArgs(
|
||||
order=client.create_order(OrderArgs(
|
||||
price=0.48,
|
||||
size=500,
|
||||
side=BUY,
|
||||
token_id="TOKEN_ID",
|
||||
), options={"tick_size": "0.01", "neg_risk": False}),
|
||||
orderType=OrderType.GTC,
|
||||
),
|
||||
PostOrdersArgs(
|
||||
order=client.create_order(OrderArgs(
|
||||
price=0.52,
|
||||
size=500,
|
||||
side=SELL,
|
||||
token_id="TOKEN_ID",
|
||||
), options={"tick_size": "0.01", "neg_risk": False}),
|
||||
orderType=OrderType.GTC,
|
||||
),
|
||||
])
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
***
|
||||
|
||||
## Order Options
|
||||
|
||||
Every order requires two market-specific options: `tickSize` and `negRisk`. For details on signature types (`0` = EOA, `1` = POLY\_PROXY, `2` = GNOSIS\_SAFE), see [Authentication](/api-reference/authentication#signature-types-and-funder).
|
||||
|
||||
### Tick Sizes
|
||||
|
||||
Your order price must conform to the market's tick size, or the order is rejected.
|
||||
|
||||
| Tick Size | Precision | Example Prices |
|
||||
| --------- | ---------- | ---------------------- |
|
||||
| `0.1` | 1 decimal | 0.1, 0.2, 0.5 |
|
||||
| `0.01` | 2 decimals | 0.01, 0.50, 0.99 |
|
||||
| `0.001` | 3 decimals | 0.001, 0.500, 0.999 |
|
||||
| `0.0001` | 4 decimals | 0.0001, 0.5000, 0.9999 |
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const tickSize = await client.getTickSize("TOKEN_ID");
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
tick_size = client.get_tick_size("TOKEN_ID")
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Negative Risk
|
||||
|
||||
Multi-outcome events (3+ outcomes) use the Neg Risk CTF Exchange. Pass `negRisk: true` for these markets.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
const isNegRisk = await client.getNegRisk("TOKEN_ID");
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
is_neg_risk = client.get_neg_risk("TOKEN_ID")
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
<Tip>
|
||||
Both values are also available on the market object: `minimum_tick_size` and
|
||||
`neg_risk`.
|
||||
</Tip>
|
||||
|
||||
***
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before placing an order, your funder address must have approved the Exchange contract to spend the relevant tokens:
|
||||
|
||||
* **BUY orders**: USDC.e allowance >= spending amount
|
||||
* **SELL orders**: conditional token allowance >= selling amount
|
||||
|
||||
Order size is limited by your available balance minus amounts reserved by existing open orders:
|
||||
|
||||
$$
|
||||
\text{maxOrderSize} = \text{balance} - \sum(\text{openOrderSize} - \text{filledAmount})
|
||||
$$
|
||||
|
||||
<Warning>
|
||||
Orders are continuously monitored for validity — balances, allowances, and
|
||||
onchain cancellations are tracked in real time. Any maker caught intentionally
|
||||
abusing these checks will be blacklisted.
|
||||
</Warning>
|
||||
|
||||
### Advanced Parameters
|
||||
|
||||
These optional fields can be passed in the `UserOrder` object for fine-grained control:
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| ------------ | ------ | ----------------------------------------------- |
|
||||
| `feeRateBps` | number | Fee rate in basis points (default: market rate) |
|
||||
| `nonce` | number | Custom nonce for order uniqueness |
|
||||
| `taker` | string | Restrict the order to a specific taker address |
|
||||
|
||||
### Sports Markets
|
||||
|
||||
Sports markets have additional behaviors:
|
||||
|
||||
* Outstanding limit orders are **automatically cancelled** once the game begins, clearing the entire order book at the official start time
|
||||
* Marketable orders have a **3-second placement delay** before matching
|
||||
* Game start times can shift — monitor your orders closely, as they may not be cleared if the start time changes unexpectedly
|
||||
|
||||
***
|
||||
|
||||
## Response
|
||||
|
||||
A successful order placement returns:
|
||||
|
||||
```json theme={null}
|
||||
{
|
||||
"success": true,
|
||||
"errorMsg": "",
|
||||
"orderID": "0xabc123...",
|
||||
"takingAmount": "",
|
||||
"makingAmount": "",
|
||||
"status": "live",
|
||||
"transactionsHashes": [],
|
||||
"tradeIDs": []
|
||||
}
|
||||
```
|
||||
|
||||
### Statuses
|
||||
|
||||
| Status | Description |
|
||||
| ----------- | ----------------------------------------------------------- |
|
||||
| `live` | Order resting on the book |
|
||||
| `matched` | Order matched immediately with a resting order |
|
||||
| `delayed` | Marketable order subject to a matching delay |
|
||||
| `unmatched` | Marketable but failed to delay — placement still successful |
|
||||
|
||||
### Error Messages
|
||||
|
||||
| Error | Description |
|
||||
| ---------------------------------- | ----------------------------------------------- |
|
||||
| `INVALID_ORDER_MIN_TICK_SIZE` | Price doesn't conform to the market's tick size |
|
||||
| `INVALID_ORDER_MIN_SIZE` | Order size below the minimum threshold |
|
||||
| `INVALID_ORDER_DUPLICATED` | Identical order already placed |
|
||||
| `INVALID_ORDER_NOT_ENOUGH_BALANCE` | Insufficient balance or allowance |
|
||||
| `INVALID_ORDER_EXPIRATION` | Expiration timestamp is in the past |
|
||||
| `INVALID_POST_ONLY_ORDER_TYPE` | Post-only used with FOK/FAK |
|
||||
| `INVALID_POST_ONLY_ORDER` | Post-only order would cross the book |
|
||||
| `FOK_ORDER_NOT_FILLED_ERROR` | FOK order couldn't be fully filled |
|
||||
| `INVALID_ORDER_ERROR` | System error inserting the order |
|
||||
| `EXECUTION_ERROR` | System error executing the trade |
|
||||
| `ORDER_DELAYED` | Order match delayed due to market conditions |
|
||||
| `DELAYING_ORDER_ERROR` | System error while delaying the order |
|
||||
| `MARKET_NOT_READY` | Market not yet accepting orders |
|
||||
|
||||
***
|
||||
|
||||
## Heartbeat
|
||||
|
||||
The heartbeat endpoint maintains session liveness. If a valid heartbeat is not received within **10 seconds** (with a 5-second buffer), **all open orders are cancelled**.
|
||||
|
||||
<CodeGroup>
|
||||
```typescript TypeScript theme={null}
|
||||
let heartbeatId = "";
|
||||
setInterval(async () => {
|
||||
const resp = await client.postHeartbeat(heartbeatId);
|
||||
heartbeatId = resp.heartbeat_id;
|
||||
}, 5000);
|
||||
```
|
||||
|
||||
```python Python theme={null}
|
||||
import time
|
||||
|
||||
heartbeat_id = ""
|
||||
while True:
|
||||
resp = client.post_heartbeat(heartbeat_id)
|
||||
heartbeat_id = resp["heartbeat_id"]
|
||||
time.sleep(5)
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
* Include the most recent `heartbeat_id` in each request. Use an empty string for the first request.
|
||||
* If you send an expired ID, the server responds with `400` and the correct ID. Update and retry.
|
||||
|
||||
***
|
||||
|
||||
## Next Steps
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Cancel Orders" icon="xmark" href="/trading/orders/cancel">
|
||||
Cancel single, multiple, or all open orders
|
||||
</Card>
|
||||
|
||||
<Card title="Order Attribution" icon="tag" href="/trading/orders/attribution">
|
||||
Attribute orders to your builder account for volume credit
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2,53 +2,115 @@
|
||||
> Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
|
||||
> Use this file to discover all available pages before exploring further.
|
||||
|
||||
# Using the Order Book
|
||||
# Prices & Orderbook
|
||||
|
||||
> Understanding the Order Book will help you become an advanced trader.
|
||||
> How prices work and how the order book enables peer-to-peer trading
|
||||
|
||||
In the Getting Started tutorial on [Making your First Trade](../get-started/making-your-first-trade/), we learned about market orders.
|
||||
|
||||
In a market order, your trade executes instantly at the current market price.
|
||||
|
||||
But what if you think the market price is too high and want to set a specific price that you would be willing to accept? These are called [Limit Orders](../trading/limit-orders/).
|
||||
|
||||
## Viewing the Order Book
|
||||
|
||||
The order book is a list of every open order to buy or sell shares in a particular market.
|
||||
Polymarket uses a **Central Limit Order Book (CLOB)** for trading. Prices aren't set by Polymarket—they emerge from supply and demand as users trade with each other.
|
||||
|
||||
<Frame>
|
||||
<img className="block w-full h-auto dark:hidden" style={{ maxWidth: '100%', height: 'auto' }} noZoom src="https://polymarket-upload.s3.us-east-2.amazonaws.com/Orderbook-light.png" />
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=119174bcaaeb3b9abbd4c2d94b7bdae6" alt="" className="dark:hidden" data-og-width="1540" width="1540" data-og-height="952" height="952" data-path="images/core-concepts/orderbook.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=280&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=4cd823593d6e2ad297d0167864d1609c 280w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=560&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=7d8dbe330255b2e9a4ad3c29cbf75314 560w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=840&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=9cc094dc2019b2dbfbbc4599de5a2130 840w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=1100&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=74433ab1e13b0824014684a73bdfa4f1 1100w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=1650&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=71a63d5439e2f2d546b0cfb42e1842f4 1650w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/orderbook.png?w=2500&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=e38a76f49a70c8a81e9cdb3413373ee0 2500w" />
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=b940f4b5f28ab6ed5845dda2bfe03edb" alt="" className="hidden dark:block" data-og-width="1540" width="1540" data-og-height="952" height="952" data-path="images/dark/core-concepts/orderbook.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=280&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=533188cbd9f6291614252ae4b8ab4369 280w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=560&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=dd1f19796326f6aec10dbfbe711796a5 560w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=840&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=f9b45316ed1c8456d48050ec5afba8ce 840w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=1100&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=e22b48d04c52f6dea3a75f0a5a234bd3 1100w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=1650&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=4b41a58adc9bbb24d31b1a6c9e7a78e1 1650w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/orderbook.png?w=2500&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=010efa3dc9eacb8f76a4045af81b97f6 2500w" />
|
||||
</Frame>
|
||||
|
||||
In this market, **“Presidential Election Winner 2024”**, we are viewing the order book for Trump <span style={{ backgroundColor: '#E5F8E6', color: '#27AE60', padding: '2px 4px', borderRadius: '4px' }}>Yes</span> shares.
|
||||
## Prices = Probabilities
|
||||
|
||||
The green side represents the <span style={{ backgroundColor: '#E5F8E6', color: '#27AE60', padding: '2px 4px', borderRadius: '4px' }}>Bids</span>: the highest price traders are willing to pay to buy Trump <span style={{ backgroundColor: '#E5F8E6', color: '#27AE60', padding: '2px 4px', borderRadius: '4px' }}>Yes</span>
|
||||
shares.
|
||||
Every share on Polymarket is priced between `$0.00` and `$1.00`. The price directly represents the market's belief in the probability of that outcome.
|
||||
|
||||
The red side represents the <span style={{ backgroundColor: '#FEEEE5', color: '#F55A00', padding: '2px 4px', borderRadius: '4px' }}>Asks</span>: the lowest price traders are willing to accept to sell Trump <span style={{ backgroundColor: '#E5F8E6', color: '#27AE60', padding: '2px 4px', borderRadius: '4px' }}>Yes</span> shares.
|
||||
| Price | Implied Probability |
|
||||
| ------ | ------------------- |
|
||||
| \$0.25 | 25% chance |
|
||||
| \$0.50 | 50% chance |
|
||||
| \$0.75 | 75% chance |
|
||||
|
||||
<Tip>
|
||||
Notice that there is a 0.3c gap between the highest bid and the lowest ask price. This is referred to as the spread.
|
||||
</Tip>
|
||||
<Note>
|
||||
The displayed price is the **midpoint** of the bid-ask spread. If the spread
|
||||
is wider than \$0.10, the last traded price is shown instead.
|
||||
</Note>
|
||||
|
||||
## Managing open orders
|
||||
### Example
|
||||
|
||||
When you have an open order, you'll find it displayed just below the Order Book on the market's page.
|
||||
If the best bid for "Yes" is `$0.34` and the best ask is `$0.40`:
|
||||
|
||||
If you have open orders across multiple markets, you can easily manage and monitor them all from the [Portfolio page](https://polymarket.com/portfolio?tab=Open+orders).
|
||||
```
|
||||
Displayed price = ($0.34 + $0.40) / 2 = $0.37 (37% probability)
|
||||
```
|
||||
|
||||
## Canceling open orders
|
||||
You won't necessarily trade at `$0.37`—you'll pay the ask (`$0.40`) when buying or receive the bid (`$0.34`) when selling.
|
||||
|
||||
When you have an open order, you'll find it displayed just below the Order Book on the market's page.
|
||||
## The Order Book
|
||||
|
||||
To cancel the order, you can simply click the red **x** button alongside the order.
|
||||
The order book is a list of all open buy and sell orders for a market. It has two sides:
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/KuA2UdUfZls?si=RUpuzqB9lbBB2pl9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />
|
||||
| Side | Description |
|
||||
| ---- | ----------------------------------------------------------- |
|
||||
| Bids | Buy orders—the highest prices traders are willing to pay |
|
||||
| Asks | Sell orders—the lowest prices traders are willing to accept |
|
||||
|
||||
If you have open orders across multiple markets, you can easily manage and monitor them all from the [Portfolio page](https://polymarket.com/portfolio?tab=Open+orders).
|
||||
The **spread** is the gap between the highest bid and lowest ask. Tighter spreads mean more liquid markets.
|
||||
|
||||
Nice! You can officially call yourself an advanced trader.
|
||||
## Order Types
|
||||
|
||||
<Tip>
|
||||
If some of this still isn’t making sense, feel free to reach out to us on [Discord](https://discord.com/invite/polymarket). We’re happy to help get you up to speed.
|
||||
</Tip>
|
||||
### Market Orders
|
||||
|
||||
Execute immediately at the best available price. Use when you want instant execution and are willing to pay the spread.
|
||||
|
||||
* **Buying**: You pay the lowest ask price
|
||||
* **Selling**: You receive the highest bid price
|
||||
|
||||
### Limit Orders
|
||||
|
||||
Execute only at your specified price or better. Use when you want price control and are willing to wait.
|
||||
|
||||
* Your order sits in the book until someone trades against it
|
||||
* Orders can **partially fill** as different traders match portions of your order
|
||||
* You can cancel unfilled orders at any time
|
||||
|
||||
<Note>
|
||||
All orders on Polymarket are technically limit orders. A "market order" is
|
||||
simply a limit order priced to execute immediately against resting orders.
|
||||
</Note>
|
||||
|
||||
## How Trades Work
|
||||
|
||||
Polymarket's CLOB is **hybrid-decentralized**:
|
||||
|
||||
1. **Offchain matching** — An operator matches compatible orders
|
||||
2. **Onchain settlement** — Matched trades settle via smart contracts
|
||||
|
||||
<Frame>
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=2acec8befdfbba57fb554170f7d5813c" alt="" className="dark:hidden" data-og-width="1540" width="1540" data-og-height="952" height="952" data-path="images/core-concepts/trade-lifecycle.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=280&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=b87b109ead5fae763112e70cd9e397d0 280w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=560&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=ce4b5a18e73aa1a0c69cc0d075ab318c 560w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=840&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=c32ae4a5b13fbde13ae3b73387013d3c 840w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=1100&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=4df792716a2bc70678325cd40d17dc72 1100w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=1650&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=0e419e401bc9e018c70e5205899d2242 1650w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/core-concepts/trade-lifecycle.png?w=2500&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=b055567fe354f162e62b3fcdb3ef26da 2500w" />
|
||||
|
||||
<img src="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=d18b22ad7629820ad554dda8cb83ec18" alt="" className="hidden dark:block" data-og-width="1540" width="1540" data-og-height="952" height="952" data-path="images/dark/core-concepts/trade-lifecycle.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=280&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=514a93dfdc97bf4f59e75dd689b2388e 280w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=560&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=45e5eebd5694861b5102554bab6068d1 560w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=840&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=25363946221517ab70226fdba090ede9 840w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=1100&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=677c7865a1df1b598af0bdee8ad803a1 1100w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=1650&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=b611e2585cadcebc0a505dcac60dbf02 1650w, https://mintcdn.com/polymarket-292d1b1b/FOMte3ewbG-LVy3k/images/dark/core-concepts/trade-lifecycle.png?w=2500&fit=max&auto=format&n=FOMte3ewbG-LVy3k&q=85&s=ec586a31f469c5e12c199949a57bce9e 2500w" />
|
||||
</Frame>
|
||||
|
||||
This design gives you the speed of centralized matching with the security of onchain settlement. You always maintain custody of your funds.
|
||||
|
||||
## Price Discovery
|
||||
|
||||
When a new market launches, there's no initial price. The first price emerges when:
|
||||
|
||||
1. Someone places a limit order to buy Yes at a price (e.g., `$0.60`)
|
||||
2. Someone places a limit order to buy No at the complementary price (e.g., `$0.40`)
|
||||
3. Since `$0.60` + `$0.40` = `$1.00`, the orders match
|
||||
|
||||
When matched, `$1.00` is converted into 1 Yes token and 1 No token, each going to their respective buyers.
|
||||
|
||||
## Next Steps
|
||||
|
||||
<Note>
|
||||
Polymarket's orderbook has **no trading size limits** — it matches willing
|
||||
buyers and sellers of any amount. However, large orders may move the price
|
||||
significantly. Always check orderbook depth before trading in size.
|
||||
</Note>
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Positions & Tokens" icon="coins" href="/concepts/positions-tokens">
|
||||
Learn about outcome tokens and how positions work.
|
||||
</Card>
|
||||
|
||||
<Card title="Order Lifecycle" icon="arrows-spin" href="/concepts/order-lifecycle">
|
||||
Understand what happens from order placement to settlement.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
Reference in New Issue
Block a user