---
title: "Close Position"
method: DELETE
path: "/v1/accounts/{account_id}/positions/{instrument_id}"
tags: ["Positions"]
---

# Close Position

`DELETE /v1/accounts/{account_id}/positions/{instrument_id}`

## Request

- Base URL: `https://api.clearstreet.com`
- URL: `https://api.clearstreet.com/v1/accounts/{account_id}/positions/{instrument_id}`
- Auth: HTTP bearer

Delete a position within an account for an instrument.

Retrieves orders generated to close the position.

## Path parameters

- `account_id` integer, required
- `instrument_id` string, required: Instrument identifier: either an instrument UUID or a symbol (symbol for equities, OSI for options). Non-UUID inputs are resolved server-side.

## Request body

- ClosePositionRequest
  - `cancel_orders` boolean, nullable: Whether to cancel existing open orders for the position before submitting closing orders.

## Response `200`

List of orders generated to close the position.

- object
  - `error` ApiError: A direct mapping of tonic::Status, for use in HTTP responses.
    - `code` integer, required: The error code is used to identify the nature of the error. It corresponds to an HTTP status code.
    - `details` object[]
    - `message` string, required: A human-readable message providing more details about the error.
  - `metadata` ResponseMetadata, required: Metadata for the response. This will always contain a request ID which can be used to identify the request to Clear Street for tracing, and optionally may include pagination data.
    - `next_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `page_number` integer, nullable: Pagination. Included if this was a GET (list) response
    - `previous_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `request_id` string, required: A unique ID for this request, generated upon ingestion of the request.
    - `total_items` integer, nullable: Total number of items available (not just in this page).
    - `total_pages` integer, nullable: Total number of pages available.
  - `data` Order[], required
    - `account_id` integer, required
    - `average_fill_price` string, nullable: Average fill price across all executions. For multileg orders this is the venue's strategy-level average when reported, else the signed net package price derived from the leg averages: net debit positive, net credit negative, zero possible. When a null/undefined value is observed, it indicates that there is no available data.
    - `client_order_id` string, required: Client-provided identifier echoed back.
    - `created_at` string, date-time, required: Timestamp when order was created (UTC)
    - `details` string[]: Contains execution, rejection or cancellation details, if any
    - `expires_at` string, date-time, nullable: Timestamp when the order will expire (UTC). Present when time_in_force is GOOD_TILL_DATE. When a null/undefined value is observed, it indicates it does not apply.
    - `extended_hours` boolean, nullable: Whether the order is eligible for extended-hours trading.
    - `filled_quantity` string, required: Cumulative filled quantity
    - `id` string, required: Engine-assigned unique identifier for this order (UUID).
    - `instrument_id` string, uuid, nullable: Instrument identifier for the traded instrument. `null` when the order is a multileg strategy whose legs are reported individually in `legs[]`. When a null/undefined value is observed, it indicates it does not apply.
    - `instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH': Security type
    - `leaves_quantity` string, required: Remaining unfilled quantity
    - `limit_offset` string, nullable: Limit offset for trailing stop-limit orders (signed) When a null/undefined value is observed, it indicates it does not apply.
    - `limit_price` string, nullable: Limit price (for LIMIT and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply.
    - `order_type` 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_LIMIT' | 'TRAILING_STOP' | 'TRAILING_STOP_LIMIT' | 'OTHER', required: Order type
    - `quantity` string, required: Total order quantity
    - `releases_at` string, date-time, nullable: Scheduled release time for orders awaiting release. When a null/undefined value is observed, it indicates it does not apply.
    - `side` 'BUY' | 'SELL', required: Side of the order (BUY or SELL).
    - `status` 'PENDING_NEW' | 'QUEUED' | 'PENDING_TRIGGER' | 'NEW' | 'PARTIALLY_FILLED' | 'FILLED' | 'CANCELED' | 'REJECTED' | 'EXPIRED' | 'PENDING_CANCEL' | 'PENDING_REPLACE' | 'REPLACED' | 'DONE_FOR_DAY' | 'STOPPED' | 'SUSPENDED' | 'CALCULATED' | 'OTHER', required: Order status
    - `stop_price` string, nullable: Stop price (for STOP and STOP_LIMIT orders) When a null/undefined value is observed, it indicates it does not apply.
    - `strategy` object: The execution strategy the order was submitted with, if any.
      - `destination` string: Venue code the order is routed to. DMA only.
      - `end_at` string, date-time: UTC timestamp (RFC 3339) at which execution ends.
      - `start_at` string, date-time: UTC timestamp (RFC 3339) at which execution begins.
      - `type` 'SOR' | 'VWAP' | 'TWAP' | 'DMA', required: Execution strategy type.
    - `symbol` string, nullable: Trading symbol. `null` when the order is a multileg strategy whose legs are reported individually in `legs[]`. When a null/undefined value is observed, it indicates it does not apply.
    - `time_in_force` 'DAY' | 'GOOD_TILL_CANCEL' | 'IMMEDIATE_OR_CANCEL' | 'FILL_OR_KILL' | 'GOOD_TILL_DATE' | 'AT_OPEN' | 'AT_CLOSE' | 'OTHER', required: Time in force
    - `trailing_limit_px` string, nullable: Current trailing limit price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_offset` string, nullable: Trailing offset amount for trailing orders When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_offset_type` 'PRICE' | 'BPS': Trailing offset type for trailing stop orders.
    - `trailing_stop_px` string, nullable: Current trailing stop price computed by the trailing strategy When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_watermark_px` string, nullable: Trailing watermark price for trailing orders. Strategy-computed, so it is absent on the order-submission acknowledgement and only appears once fetched via the order fetch or list endpoints. When a null/undefined value is observed, it indicates it does not apply.
    - `trailing_watermark_ts` string, date-time, nullable: Trailing watermark timestamp for trailing orders. Strategy-computed, so it is absent on the order-submission acknowledgement and only appears once fetched via the order fetch or list endpoints. When a null/undefined value is observed, it indicates it does not apply.
    - `underlying_instrument_id` string, uuid, nullable: Instrument ID of the option's underlying instrument. Populated only for options orders. A `null` means one of two things: the order is not an option, so the field does not apply; or the order is an option whose underlier has not yet been resolved. When a null/undefined value is observed, it indicates it does not apply.
    - `underlying_instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH': Security type
    - `updated_at` string, date-time, required: Timestamp of the most recent update (UTC)
    - `venue` string, required: MIC code of the venue where the order is routed

## Other responses

- `400`: Invalid request
- `403`: Forbidden
- `500`: Internal server error

## Changes

- **2026-10-30** `7e4b278ca27a`: 1 warning
  - removed the optional property `allOf[subschema #2]/data/items/queue_state` from the response with the `200` status
- **2026-10-16** `1bd9eddeffc8`: 1 breaking, 4 warning, 10 info
  - for the `path` request parameter `instrument_id`, the minLength was increased from `0` to `1`
  - added the new `AT_CLOSE` enum value to the `allOf[subschema #2]/data/items/time_in_force` response property for the response status `200`
  - added the new `AT_OPEN` enum value to the `allOf[subschema #2]/data/items/time_in_force` response property for the response status `200`
  - added the new `PENDING_TRIGGER` enum value to the `allOf[subschema #2]/data/items/status` response property for the response status `200`
  - …11 more
- **2026-07-17** `12dd2417df82`: 1 warning
  - added the new `INDEX` enum value to the `allOf[subschema #2]/data/items/instrument_type/oneOf[#/components/schemas/SecurityType]/` response property for the response status `200`
- **2026-07-17** `4b5aaa49308c`: 7 breaking, 3 info
  - the response property `allOf[subschema #2]/data/items/instrument_id` became nullable for the status `200`
  - the response property `allOf[subschema #2]/data/items/symbol` became nullable for the status `200`
  - the response property `allOf[subschema #2]/data/items/instrument_id` became optional for the status `200`
  - the response property `allOf[subschema #2]/data/items/instrument_type` became optional for the status `200`
  - …6 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/clear-street/apis/clear-street-trading-api/changes/v1/accounts/:account_id/positions/:instrument_id/delete.md)

---

[API](https://skmtc.dev/clear-street/apis/clear-street-trading-api.md) - [All operations](https://skmtc.dev/clear-street/apis/clear-street-trading-api/llms.txt) - [OpenAPI document](https://skmtc.dev/clear-street/apis/clear-street-trading-api/revisions/52e77ea7d731?raw)
