---
title: "Cancel Orders COID"
method: DELETE
path: "/v1/trade/orders-coid"
---

# Cancel Orders COID

`DELETE /v1/trade/orders-coid`

Cancel orders by client order ID.
Requires proxy signature, see [proxy signing](/http/signing#2-proxy-signing).

## Request body

- CancelByCoidRequest
  - `op` OpCancelOrdersByCoid, required
    - `type` 'cancelOrdersCOID', required
    - `args` Coid[], required — Array of client order IDs to cancel. Cancelling an order that has attached take-profit / stop-loss children (see `CreateOrder.tr`) cascades to those children — they are cancelled with reason `ParentCancelled`.
  - `sig` string, required — Signature in hex format
  - `salt` integer, required — Salt
  - `ts` integer, required — Request timestamp. Unix milliseconds for most operations; Unix seconds for withdrawals (must match the on-chain EIP-712 struct verified against block.timestamp).
  - `exp` integer — Command expiry timestamp in Unix milliseconds. If provided, it must be in the future and within the gateway's default command timeout. It can shorten request validity but cannot extend it. This is not an order auto-cancel time.

## Response `200`

Cancel response.

- CancelResponse[]
  - union
    - CancelAccepted
      - `status` 'ok', required
      - `oid` integer, required — Order ID
      - `coid` string — Client order ID
    - CancelRejected
      - `status` 'err', required
      - `oid` integer — Order ID
      - `coid` string — Client order ID
      - `error` string, required — Error identifier. For domain rejections and transport errors (`401`/`404`/`429`/`500`) this is a stable, machine-readable snake_case identifier that is part of the API contract and safe to branch on, e.g. `insufficient_margin`, `insufficient_balance`, `order_not_found`, `reduce_only_invalid`, `price_outside_bounds`, `position_not_found`, `invalid_margin_mode`, `invalid_margin_amount`, `margin_below_required_initial`, `account_liquidating`, `unauthorized`, `not_found`. For `400` it is a human-readable validation detail whose wording may change. See the Error handling guide for the domain identifiers. (Post-only / Fill-or-Kill outcomes are order statuses such as `post_only_rejected`, not rejections.)

## 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.
- `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/versions/e17c4709273e/schema)
