> ## 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 ``` ```bash Python theme={null} pip install py-clob-client ``` ```bash Rust theme={null} 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.0 const 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 | If you have a Polymarket.com account, your funds are in a proxy wallet (visible in the profile dropdown). Use type 1 or 2. Type 0 is for standalone EOA wallets only. *** ## 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 wallet const 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 ) ``` **Do not use Builder API credentials in place of User API credentials!** Builder credentials are for order attribution, not user authentication. See [Builder Order Attribution](/developers/builders/order-attribution). *** ## Step 5: Place an Order Now you're ready to trade! First, get a token ID from the [Gamma API](/developers/gamma-markets-api/get-markets). ```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](https://builders.polymarket.com/): ```typescript TypeScript theme={null} 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 ); ``` Builder credentials are **separate** from user credentials. You use your builder credentials to tag orders, but each user still needs their own L2 credentials to trade. Complete documentation for order attribution and gasless transactions