8.9 KiB
Documentation Index
Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt Use this file to discover all available pages before exploring further.
Placing Your First Order
Set up authentication and submit your first trade
This guide walks you through placing an order on Polymarket using your own wallet.
Installation
```bash TypeScript theme={null} npm install @polymarket/clob-client ethers@5 ```pip install py-clob-client
cargo add polymarket-client-sdk
Step 1: Initialize Client with Private Key
```typescript TypeScript theme={null} import { ClobClient } from "@polymarket/clob-client"; import { Wallet } from "ethers"; // v5.8.0const HOST = "https://clob.polymarket.com"; const CHAIN_ID = 137; // Polygon mainnet const signer = new Wallet(process.env.PRIVATE_KEY);
const client = new ClobClient(HOST, CHAIN_ID, signer);
```python Python theme={null}
from py_clob_client.client import ClobClient
import os
host = "https://clob.polymarket.com"
chain_id = 137 # Polygon mainnet
private_key = os.getenv("PRIVATE_KEY")
client = ClobClient(host, key=private_key, chain_id=chain_id)
Step 2: Derive User API Credentials
Your private key is used once to derive API credentials. These credentials authenticate all subsequent requests.
```typescript TypeScript theme={null} // Get existing API key, or create one if none exists const userApiCreds = await client.createOrDeriveApiKey();console.log("API Key:", userApiCreds.apiKey); console.log("Secret:", userApiCreds.secret); console.log("Passphrase:", userApiCreds.passphrase);
```python Python theme={null}
# Get existing API key, or create one if none exists
user_api_creds = client.create_or_derive_api_creds()
print("API Key:", user_api_creds["apiKey"])
print("Secret:", user_api_creds["secret"])
print("Passphrase:", user_api_creds["passphrase"])
Step 3: Configure Signature Type and Funder
Before reinitializing the client, determine your signature type and funder address:
| How do you want to trade? | Type | Value | Funder Address |
|---|---|---|---|
| I want to use an EOA wallet. It holds USDCe and position tokens, and I'll pay my own gas. | EOA | 0 |
Your EOA wallet address |
| I want to trade through my Polymarket.com account (Magic Link email/Google login). | POLY_PROXY | 1 |
Your proxy wallet address |
| I want to trade through my Polymarket.com account (browser wallet connection). | GNOSIS_SAFE | 2 |
Your proxy wallet address |
Step 4: Reinitialize with Full Authentication
```typescript TypeScript theme={null} // Choose based on your wallet type (see table above) const SIGNATURE_TYPE = 0; // EOA example const FUNDER_ADDRESS = signer.address; // For EOA, funder is your walletconst client = new ClobClient( HOST, CHAIN_ID, signer, userApiCreds, SIGNATURE_TYPE, FUNDER_ADDRESS );
```python Python theme={null}
# Choose based on your wallet type (see table above)
signature_type = 0 # EOA example
funder_address = "YOUR_WALLET_ADDRESS" # For EOA, funder is your wallet
client = ClobClient(
host,
key=private_key,
chain_id=chain_id,
creds=user_api_creds,
signature_type=signature_type,
funder=funder_address
)
Step 5: Place an Order
Now you're ready to trade! First, get a token ID from the Gamma API.
```typescript TypeScript theme={null} import { Side, OrderType } from "@polymarket/clob-client";// Get market info first const market = await client.getMarket("TOKEN_ID");
const response = await client.createAndPostOrder( { tokenID: "TOKEN_ID", price: 0.50, // Price per share ($0.50) size: 10, // Number of shares side: Side.BUY, // BUY or SELL }, { tickSize: market.tickSize, negRisk: market.negRisk, // true for multi-outcome events }, OrderType.GTC // Good-Til-Cancelled );
console.log("Order ID:", response.orderID); console.log("Status:", response.status);
```python Python theme={null}
from py_clob_client.clob_types import OrderArgs, OrderType
from py_clob_client.order_builder.constants import BUY
# Get market info first
market = client.get_market("TOKEN_ID")
response = client.create_and_post_order(
OrderArgs(
token_id="TOKEN_ID",
price=0.50, # Price per share ($0.50)
size=10, # Number of shares
side=BUY, # BUY or SELL
),
options={
"tick_size": market["tickSize"],
"neg_risk": market["negRisk"], # True for multi-outcome events
},
order_type=OrderType.GTC # Good-Til-Cancelled
)
print("Order ID:", response["orderID"])
print("Status:", response["status"])
Step 6: Check Your Orders
```typescript TypeScript theme={null} // View all open orders const openOrders = await client.getOpenOrders(); console.log(`You have ${openOrders.length} open orders`);// View your trade history
const trades = await client.getTrades();
console.log(You've made ${trades.length} trades);
// Cancel an order await client.cancelOrder(response.orderID);
```python Python theme={null}
# View all open orders
open_orders = trading_client.get_open_orders()
print(f"You have {len(open_orders)} open orders")
# View your trade history
trades = trading_client.get_trades()
print(f"You've made {len(trades)} trades")
# Cancel an order
trading_client.cancel_order(response["orderID"])
Troubleshooting
Wrong private key, signature type, or funder address for the derived User API credentials.Double check the following values when creating User API credentials via `createOrDeriveApiKey()`:
* Do not use Builder API credentials in place of User API credentials
* Check `signatureType` matches your account type (0, 1, or 2)
* Ensure `funder` is correct for your wallet type
Wrong API key, secret, or passphrase.
Re-derive credentials with `createOrDeriveApiKey()` and update your config.
Either not enough USDCe / position tokens in your funder address, or you lack approvals to spend your tokens.
* Deposit USDCe to your funder address.
* Ensure you have more USDCe than what's committed in open orders.
* Check that you've set all necessary token approvals.
You're trying to place a trade from a restricted region.
See [Geographic Restrictions](/developers/CLOB/geoblock) for details.
Adding Builder API Credentials
If you're building an app that routes orders for your users, you can add builder credentials to get attribution on the Builder Leaderboard:
import { BuilderConfig, BuilderApiKeyCreds } from "@polymarket/builder-signing-sdk";
const builderCreds: BuilderApiKeyCreds = {
key: process.env.POLY_BUILDER_API_KEY!,
secret: process.env.POLY_BUILDER_SECRET!,
passphrase: process.env.POLY_BUILDER_PASSPHRASE!,
};
const builderConfig = new BuilderConfig({ localBuilderCreds: builderCreds });
// Add builderConfig as the last parameter
const client = new ClobClient(
HOST,
CHAIN_ID,
signer,
userApiCreds,
signatureType,
funderAddress,
undefined,
false,
builderConfig
);