---
title: "Get Open Orders"
method: GET
path: "/v1/account/open-orders"
---

# Get Open Orders

`GET /v1/account/open-orders`

Get open orders for the authenticated account.

## Query parameters

- `instrument_id` integer — Instrument ID

## Response `200`

Orders response.

- OrderData[]
  - `order_id` integer, required — Order ID
  - `instrument_id` integer, required — Instrument ID
  - `buy` boolean, required — Is buy
  - `price` string, required — Price
  - `quantity` string, required — Quantity in no. of contracts
  - `tif` 'gtc' | 'ioc' | 'fok', required — Time in force
  - `post_only` boolean, required — Post only
  - `ro` boolean, required — Reduce only
  - `resting_quantity` string, required — Resting quantity
  - `filled_quantity` string, required — Filled quantity
  - `status` string, required — Order status
  - `created_timestamp` integer, required — Create timestamp in milliseconds
  - `updated_timestamp` integer, required — Update timestamp in milliseconds
  - `client_order_id` string — Client order ID
  - `tpsl` TpSlOrderFields — TP/SL-specific fields surfaced alongside the regular order shape.
    - `kind` 'tp' | 'sl', required — Conditional order type (TakeProfit / StopLoss)
    - `scope` 'order' | 'position', required — How the conditional order sizes itself. - `order` - child of a parent entry (bracket / OCO ladder). Quantity is required. - `position` - attached to an open position. v1 always closes the full position (`qty` must be `"0"`).
    - `trp` string, required — Trigger price
    - `parent_oid` integer — Parent entry order id. Optional — omit it (do not send `0`) when the parent is created in the same request (inline `CreateOrder.tpsl` or `CreateTpSlArgs.parent`); the gateway auto-wires the child to it. Set it only to attach an order-scoped leg to an existing resting order. Inline `CreateOrder.tpsl` rejects a non-zero value; position-scoped legs carry no parent.
    - `armed_qty` string — Quantity in no. of contracts
    - `slip_bps` integer — Per-order market-trigger slippage cap in basis points. 0 = use the per-instrument default. Clamped to the instrument cap.

## Other responses

- `400` — Bad request — the request was malformed or failed validation (bad query parameters, unparseable body, invalid signature, or a domain pre-check). The `error` field is a human-readable validation detail.
- `401` — Unauthorized — missing or invalid `POLYMARKET-PROXY` / `POLYMARKET-SECRET` credentials. `error` is `unauthorized`.
- `429` — Too Many Requests. `error` distinguishes the limit that was hit: `ip_rate_limited` (per-IP token bucket), `action_rate_limited` (per-account action rate), or `open_orders_limit` (resting open-order cap).
- `500` — Internal server error. `error` is `internal_error`.

---

[API](https://skmtc.net/polymarket/apis/polymarket-perps-http-api.md) · [All operations](https://skmtc.net/polymarket/apis/polymarket-perps-http-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polymarket/polymarket-perps-http-api/revisions/76e4e47cf3aa/schema)
