Skip to main content
POST
/
v0
/
trade
/
create-order
# All hosted venues are funded once on Polygon — see /guides/escrow-lifecycle.
# Hosted writes need: pmxt_api_key + wallet_address + private_key (signs EIP-712 locally).
# Pass an outcome straight from client.fetch_markets() — no UUID lookup needed.
import pmxt

client = pmxt.Polymarket(
    pmxt_api_key="YOUR_PMXT_API_KEY",
    wallet_address="0xYourWallet",    # EVM address — its Polygon USDC funds the escrow
    private_key="0x...",    # any EVM key controlling that address
)
market = client.fetch_markets({"query": "trump 2028"})[0]
yes = next(o for o in market.outcomes if o.label.lower() == "yes")
order = client.create_order(
    outcome=yes,
    side="buy",
    type="limit",
    amount=10,
    price=0.55,
)
print(order.id, order.status)
{
  "id": "<string>",
  "status": "<string>",
  "amount": 123,
  "price": 123,
  "filled": 123,
  "remaining": 123,
  "fee": 123,
  "timestamp": "<string>",
  "tx_hash": "<string>",
  "chain": "<string>",
  "block_number": 123
}
Available on: Polymarket, Opinion, Limitless. Other venues raise NotSupported in hosted mode — for those, run a local PMXT service.
Before your first call: deposit USDC on Polygon at pmxt.dev/dashboard/wallet (one-time setup). For the programmatic flow, see escrow lifecycle.
Use any EVM private key. Your USDC sits in a non-custodial PreFundedEscrow on Polygon — the single funding location for every hosted venue (including Opinion, which PMXT settles cross-chain for you). PMXT cannot move funds without your EIP-712 signature.

Authorizations

Authorization
string
header
required

Required when calling the hosted API directly (curl, requests, fetch). SDK users pass credentials via constructor params instead.

Body

application/json

Hosted build-order request. Identify the target outcome by passing venue + venue_outcome_id from client.fetch_markets() (the SDK does this automatically when you pass outcome= to create_order or build_order).

side
enum<string>
required

Direction of the order. buy opens or adds to a long position on the outcome; sell closes or reduces it.

Available options:
buy,
sell
amount
number
required

Order size. For market buys, in USDC dollars (the budget you want to spend). For market sells and all limit orders, in outcome shares.

Required range: x >= 0
user_address
string
required

EVM wallet address that will sign the resulting typed data. Must match the wallet whose USDC funded the PMXT PreFundedEscrow on Polygon.

venue
enum<string>

Venue the outcome trades on. Inferred automatically from your client class in the SDKs.

Available options:
polymarket,
opinion
venue_outcome_id
string

The outcome's identifier (e.g. Polymarket tokenId, Opinion outcome hash). Returned by client.fetch_markets().

order_type
enum<string>
default:market

market fills immediately at the best available price (subject to slippage_pct); limit rests on the venue's order book at price until matched or cancelled.

Available options:
market,
limit
denom
enum<string>
default:shares

Unit amount is denominated in. shares = outcome shares; usdc = USDC dollars. Market buys require usdc; market sells and limit orders require shares (the server validates this combination).

Available options:
shares,
usdc
price
number | null

Required for limit orders. Probability in [0, 1] -- e.g. 0.55 means buying / selling shares at 55 cents each. Ignored for market orders.

Required range: 0 <= x <= 1
slippage_pct
number | null

Maximum acceptable slippage as a percent. Use aggressive defaults (30 for buys, 99.9 for sells) until the upstream economic validator tightens -- lower values frequently trip precision checks. Ignored for market orders, which pin worst-price to the domain extreme; the server defaults to 20 when omitted.

Required range: 0 <= x <= 100

Response

Order accepted by the hosted backend.

Hosted-mode Order shape. Mirrors pmxt.Order so the SDK can return it directly. tx_hash, chain, and block_number populate once execution settles on-chain.

id
string
required

Unified order id. Stable across the order's lifetime; reuse it in fetchOrderHosted and cancelOrderHosted.

status
string
required

Lifecycle status. Open-order values include resting and partial; submit responses pass through the upstream status string (failed when an error was raised); cancel responses return the venue's cancel-acknowledgement status.

side
enum<string> | null

Order direction. null on cancel responses, which only carry id and status.

Available options:
buy,
sell
type
enum<string> | null

Order type echoed from the build. null on cancel responses.

Available options:
market,
limit
amount
number | null

Order size in outcome shares. For market submits, this is the shares actually obtained (tokens_bought / tokens_sold); for resting limit orders it is the total shares originally requested. null on cancel responses.

price
number | null

Limit price in probability units [0, 1] for limit orders. null for market orders and cancel responses.

filled
number

Shares filled so far. For market submits this equals the shares obtained on-chain; for resting limit orders it is the running fill total.

remaining
number

Shares still outstanding (amount - filled, floored at 0). Reaches 0 when the order is fully filled or cancelled.

fee
number | null

Total fee charged for this order, in USDC dollars. null until the venue reports fees (typically after settlement).

timestamp
string | null

ISO-8601 timestamp the order was created on the venue side. null on cancel responses.

tx_hash
string | null

On-chain settlement transaction hash on Polygon. null until the order settles on-chain (resting limit orders stay null until matched).

chain
string | null

Chain the order settled on. Always polygon for hosted orders today (Opinion settles cross-chain via the same Polygon escrow). null on cancel responses.

block_number
integer | null

Polygon block height at which the order settled. null until settlement.