---
title: "Get Positions"
method: GET
path: "/v1/accounts/{account_id}/positions"
tags: ["Positions"]
---

# Get Positions

`GET /v1/accounts/{account_id}/positions`

## Request

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

Retrieves all positions for the specified trading account.

## Path parameters

- `account_id` integer, required

## Query parameters

- `page_size` integer
- `page_token` string, byte: Base64URL-encoded pagination token
- `instrument_ids` string[]
- `sort_by` 'SYMBOL' | 'INSTRUMENT_TYPE' | 'QUANTITY' | 'MARKET_VALUE' | 'POSITION_TYPE' | 'UNREALIZED_PNL' | 'DAILY_UNREALIZED_PNL' | 'DAILY_REALIZED_PNL'
- `sort_direction` 'ASC' | 'DESC': Sort direction for sorted results

## Response `200`

List of positions

- 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` Position[], required
    - `account_id` integer, required: The account this position belongs to
    - `available_quantity` string, required: The quantity of a position that is free to be operated on.
    - `avg_price` string, nullable: The average price paid per share or contract for this position When a null/undefined value is observed, it indicates that there is no available data.
    - `closing_price` string, nullable: The closing price used to value the position for the last trading day When a null/undefined value is observed, it indicates that there is no available data.
    - `closing_price_date` string, date, nullable: The market date associated with `closing_price` When a null/undefined value is observed, it indicates that there is no available data.
    - `cost_basis` string, nullable: The total cost basis for this position When a null/undefined value is observed, it indicates that there is no available data.
    - `daily_realized_pnl` string, nullable: The realized profit or loss for this position for the current day When a null/undefined value is observed, it indicates that there is no available data.
    - `daily_unrealized_pnl` string, nullable: The unrealized profit or loss for this position relative to the previous close When a null/undefined value is observed, it indicates that there is no available data.
    - `daily_unrealized_pnl_pct` string, nullable: The unrealized profit/loss for the position for the current day, expressed as a percentage of the baseline value (range: 0-100). When a null/undefined value is observed, it indicates that there is no available data.
    - `instrument_id` string, uuid, required: Unique instrument identifier
    - `instrument_price` string, nullable: The current market price of the instrument When a null/undefined value is observed, it indicates that there is no available data.
    - `instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH', required: Security type
    - `market_value` string, required: The current market value of the position
    - `position_type` 'LONG' | 'SHORT', required: Position type classification
    - `quantity` string, required: The number of shares or contracts. Can be positive (long) or negative (short)
    - `symbol` string, required: The trading symbol for the instrument
    - `underlying_instrument_id` string, uuid, nullable: Identifier of the underlying instrument, when available When a null/undefined value is observed, it indicates it does not apply.
    - `underlying_instrument_type` 'COMMON_STOCK' | 'INDEX' | 'OPTION' | 'CASH': Security type
    - `unrealized_pnl` string, nullable: The total unrealized profit or loss for this position based on current market value When a null/undefined value is observed, it indicates that there is no available data.
    - `unrealized_pnl_pct` string, nullable: The unrealized profit/loss for the position, expressed as a percentage of the position's cost basis (range: 0-100). When a null/undefined value is observed, it indicates that there is no available data.

## Other responses

- `403`: Forbidden
- `500`: Internal server error

## Changes

- **2026-10-16** `1bd9eddeffc8`: 1 info
  - added the optional property `allOf[subschema #2]/data/items/underlying_instrument_type` to the response with the `200` status
- **2026-07-17** `12dd2417df82`: 1 warning
  - added the new `INDEX` enum value to the `allOf[subschema #2]/data/items/instrument_type` response property for the response status `200`
- **2026-06-29** `1c2a0f99ff87`: 4 info
  - removed the `LONG_CALL` enum value from the `allOf[subschema #2]/data/items/position_type` response property for the response status `200`
  - removed the `LONG_PUT` enum value from the `allOf[subschema #2]/data/items/position_type` response property for the response status `200`
  - removed the `SHORT_CALL` enum value from the `allOf[subschema #2]/data/items/position_type` response property for the response status `200`
  - removed the `SHORT_PUT` enum value from the `allOf[subschema #2]/data/items/position_type` response property for the response status `200`
- **2026-06-16** `1354f5c9f44f`: 2 info
  - added the new enum value `DAILY_REALIZED_PNL` to the `query` request parameter `sort_by`
  - added the optional property `allOf[subschema #2]/data/items/daily_realized_pnl` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/clear-street/apis/clear-street-trading-api/changes/v1/accounts/:account_id/positions/get.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)
