Trading
Learn trading hours, instruments, order placement, account metrics, positions, portfolio history, and PDT rules.
Trading Hours
Section titled “Trading Hours”Currently the Trading API supports regular trading hours and extended hours which includes pre-market and after-hours. Below is a table that shows the hours for those sessions along with the order types that are supported during each session. More information on order types is available in the Order Types section. Call the market hours endpoint GET /v1/calendars/market-hours to retrieve these hours programmatically
| Session | Hours (ET) | Supported Order Types |
|---|---|---|
| Pre-market | 4:00 AM – 9:30 AM | Limit, Stop Limit |
| Regular | 9:30 AM – 4:00 PM | All order types |
| After-hours | 4:00 PM – 8:00 PM | Limit, Stop Limit |
Regular Trading Hours
US equity markets operate from 9:30 AM to 4:00 PM Eastern Time, Monday through Friday, excluding market holidays.
During regular hours, all order types are supported .
Extended Hours
Extended-hours trading is available for limit and stop-limit orders:
Market orders and stop orders are restricted to the 9:30 AM – 4:00 PM window, since they require continuous price discovery to execute safely.
To enable extended-hours trading on an order, set "extended_hours": true in your order request.
Overnight
Overnight trading support is coming soon.
Instruments
Section titled “Instruments”These instrument endpoints let clients discover, resolve, and inspect tradable instruments, including supported instruments, trading flags, marginability, and optional supplemental details.
For options workflows, clients can resolve an underlier, fetch available expirations, and retrieve paginated option contracts by underlier, expiry, and call/put side to build an option chain.
| Name | Method | Path | Description |
|---|---|---|---|
| Instruments by ID | GET | /v1/instruments/{instrument_id} | Retrieves detailed information for a specific instrument. |
| List Instruments | GET | /v1/instruments | Retrieve a list of instruments. Note this will not return options |
| Search Instruments | GET | /v1/instruments/search | Search through instruments |
| List Option Contracts | GET | /v1/instruments/options/contracts | Lists options contracts. Returns options contracts for a given underlier with options-specific metadata. Exactly one underlier identifier must be provided. |
List Instruments Query Parameters
Section titled “List Instruments Query Parameters”| Parameter | Type | Required | Notes |
|---|---|---|---|
| easy_to_borrow | boolean | No | Filter by ETB status. |
| id_filter | string | Conditional | Substring filter. Required when listing options unless a security ID filter is supplied. |
| instrument_ids | string | No | Comma-separated OEMS instrument UUIDs |
| is_liquidation_only | boolean | No | Filter by liquidation-only status. |
| instrument_type | enum | No | Examples: COMMON_STOCK, OPTION, PREFERRED_STOCK, CASH. |
| is_marginable | boolean | No | Filter by marginability. |
| is_restricted | boolean | No | Filter by restricted status. |
| is_short_prohibited | boolean | No | Filter by short-sale restriction. |
| is_threshold_security | boolean | No | Filter by Reg SHO threshold status. |
| page_size | integer | No | Defaults to 1000; used only on the first page. |
| page_token | string | No | Token for retrieving the next page of results. Contains encoded pagination state (limit + offset). When provided, page_size is ignored. |
Instruments by ID Query Parameters
Section titled “Instruments by ID Query Parameters”| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrument_id | path enum | Yes | instrument UUID |
| include_options_expiry_dates | boolean | No | When true, includes available option expiration dates for the instrument. Useful before loading an option chain. |
Instruments Search Query Parameters
Section titled “Instruments Search Query Parameters”| Parameter | Type | Required | Notes |
|---|---|---|---|
| q | string | Yes | Search term. Case-insensitive. Matches ticker symbols, company names and ID. Must be at least 1 non-whitespace character. |
| asset_class | CSV enum | No | Asset classes to search. Defaults to EQUITY. Supported values: EQUITY, OPTION, WARRANT, BOND, FX, OTHER. |
| country | string | No | Filter by listing country, e.g. US. |
| currency | string | No | Filter by ISO currency, e.g. USD. |
| include_inactive | boolean | No | Include inactive instruments. Defaults to false. |
| include_restricted | boolean | No | Include restricted instruments. Defaults to true; restricted instruments may be ranked lower. |
| page_size | integer | No | Defaults to 1000; used only on the first page. |
| page_token | string | No |
Instrument Response
Section titled “Instrument Response”The response for instrument by id, list instruments and instrument search follow the same pattern.
| Field | Type | Definition |
|---|---|---|
| id | UUID | Unique instruments identifier |
| country_of_issue | string | ISO country code. |
| currency | string | ISO currency code. |
| easy_to_borrow | boolean | Whether the instrument is easy to borrow. |
| is_liquidation_only | boolean | Whether the instrument can only be liquidated. |
| is_marginable | boolean | Whether the instrument is marginable. |
| is_restricted | boolean | Whether trading is restricted. |
| is_short_prohibited | boolean | Whether short selling is prohibited. |
| is_threshold_security | boolean | Whether the instrument is on the Reg SHO threshold list. |
| is_tradable | boolean | Whether the instrument is tradable |
| symbol | string | symbol of the instrument |
| venue | string | Primary listing venue MIC. |
| adv | decimal string | Average daily volume, when available. |
| expiry | date/null | Option expiration date, for option instruments. |
| instrument_type | enum | Security type, e.g. COMMON_STOCK, OPTION, WARRANT, CASH. |
| long_margin_rate | decimal string | Long margin requirement rate, when available. |
| name | string | Instrument or issuer name, when available. |
| notional_adv | decimal string | adv × previous_close, when available. |
| previous_close | decimal string | Previous close price, when available. |
| short_margin_rate | decimal string | Short margin requirement rate, when available. |
| strike_price | decimal string/null | Option strike price, for option instruments. |
List Option Contracts Query Parameters
Section titled “List Option Contracts Query Parameters”| Parameter | Type | Required | Notes |
|---|---|---|---|
| contract_type | enum | No | CALL or PUT. |
| expiry | date | No | Filter contracts to one expiration date, YYYY-MM-DD. |
| underlier | string | Conditional | Direct underlier symbol, e.g. AAPL. |
| underlier_instrument_id | UUID | Conditional | instrument ID of the underlying equity. Preferred when known. |
| page_size | integer | No | Defaults to 1000; used only on the first page. |
| page_token | string | No | Token for retrieving the next page of results. Contains encoded pagination state (limit + offset). When provided, page_size is ignored. |
List Option Contracts Response
Section titled “List Option Contracts Response”| Field | Type | Definition |
|---|---|---|
| id | UUID | Instrument ID for the option contract. |
| contract_type | enum | CALL or PUT. |
| currency | string | ISO currency code. |
| exchange | string | Listing venue MIC. |
| exercise_style | enum | AMERICAN or EUROPEAN. |
| expiry | date | Contract expiration date. |
| is_liquidation_only | boolean | Whether the contract can only be liquidated. |
| is_marginable | boolean | Whether the contract is marginable. |
| is_restricted | boolean | Whether trading is restricted. |
| listing_type | enum | STANDARD, FLEX, or OTC. |
| multiplier | decimal string | Contract multiplier, commonly 100. |
| strike_price | decimal string | Strike price. |
| symbol | string | OSI option symbol. |
| open_interest | integer | Open interest, when available. |
| underlier_instrument_id | UUID | ID of the underlier, when resolvable. |
Placing Orders
Section titled “Placing Orders”Clear Street’s Trading API supports trading common stocks and ETFs listed on US exchanges as well as US stock options.
Options Levels
Section titled “Options Levels”Before you can trade options you will need to go through the suitability questions on web or mobile. If you are able to trade you will be assigned options level 1-4. Below is an outline of what each level enables you to trade. Note that currently the API only support level 1 and 2 trading.
| Levels | Capabilities |
|---|---|
| 1 | Covered calls and cash secured puts |
| 2 | Level 1 and long calls and puts |
| 3 | Level 2, plus spread strategies and long straddles/strangles |
| 4 | Level 3, plus uncovered calls/puts and short straddles/strangles |
Endpoints
Section titled “Endpoints”| Name | Method | Path | Description |
|---|---|---|---|
| Order By ID | GET | /v1/accounts/{account_id}/orders/{order_id} | Get details for a single order by order ID. |
| List Orders | GET | /v1/accounts/{account_id}/orders | List orders for an account. Supports pagination plus filters such as status, symbol, instrument_type, from, and to. |
| Submit Orders | POST | /v1/accounts/{account_id}/orders | Submit orders for an account |
| Replace Order | PATCH | /v1/accounts/{account_id}/orders/{order_id} | Replace an existing order with updated parameters. |
| Cancel Open Orders | DELETE | /v1/accounts/{account_id}/orders | Cancel all open orders for an account. Supports filters such as side, type, and instrument_type |
| Cancel Open Order | DELETE | /v1/accounts/{account_id}/orders/{order_id} | Cancel a specific open order. |
Order Request Field Reference
Section titled “Order Request Field Reference”| Field | Type | Required | Description |
|---|---|---|---|
instrument_type | string | Yes | COMMON_STOCK, OPTION, etc. |
order_type | string | Yes | MARKET, LIMIT, STOP, STOP_LIMIT, TRAILING_STOP, TRAILING_STOP_LIMIT |
quantity | string | Yes | Number of shares/contracts (decimal string) |
side | string | Yes | BUY, SELL, or SELL_SHORT |
time_in_force | string | Yes | DAY, GTC, GTD, IOC, FOK, AT_THE_OPENING, AT_THE_CLOSE |
id | string | No | Client-assigned order ID (max 64 chars, unique per account) |
expires_at | string | Conditional | ISO 8601 timestamp (required when time_in_force is GTD) |
extended_hours | boolean | No | Enable pre-market and after-hours execution |
instrument_id | string | Conditional | unique identifier for instrument |
limit_offset | string | Conditional | Limit offset for TRAILING_STOP_LIMIT orders |
limit_price | string | Conditional | Required for LIMIT and STOP_LIMIT orders |
position_effect | string | No | For options: OPEN, CLOSE, AUTOMATIC |
stop_price | string | Conditional | Required for STOP and STOP_LIMIT orders |
symbol | string | Conditional | Ticker symbol (required if instrument_id not provided) |
trailing_offset | string | Conditional | Required for trailing stop orders |
trailing_offset_type | string | Conditional | PRICE or BPS (required with trailing_offset) |
Order Response
Section titled “Order Response”| Field | Type | Description |
|---|---|---|
id | string | Engine-assigned order UUID. |
account_id | integer | Trading account ID. |
client_order_id | string | Client-provided order ID echoed back. |
created_at | timestamp string | UTC creation timestamp. |
filled_quantity | decimal string | Cumulative filled quantity. |
instrument_id | string | OEMS instrument UUID. |
instrument_type | string | Security type, such as COMMON_STOCK or OPTION. |
leaves_quantity | decimal string | Remaining open quantity. |
order_type | string | MARKET, LIMIT, STOP, STOP_LIMIT, TRAILING_STOP, or TRAILING_STOP_LIMIT. |
quantity | decimal string | Total order quantity. |
side | string | BUY, SELL, SELL_SHORT, or OTHER. |
status | string | Current order status, such as PENDING_NEW, NEW, PARTIALLY_FILLED, FILLED, or REJECTED. |
symbol | string | Trading symbol. |
time_in_force | string | Time-in-force value, such as DAY, GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL, or GOOD_TILL_DATE. |
updated_at | timestamp string | UTC most recent update timestamp. |
venue | string | Routed venue MIC code. |
average_fill_price | decimal string | Optional. Average execution price across fills. |
details | array of strings | Optional. Execution, rejection, or cancellation details; omitted when empty. |
expires_at | timestamp string | Optional. Present when time_in_force is GOOD_TILL_DATE. |
extended_hours | boolean | States wether an order is eligible for extended hours |
limit_offset | decimal string | Optional. Signed limit offset for trailing stop-limit orders. |
limit_price | decimal string | Optional. Present for limit-style orders. |
queue_state | string | WAITING_RELEASE or RELEASED. |
releases_at | timestamp string | Scheduled release time for queued/held orders. |
stop_price | decimal string | Optional. Present for stop-style orders. |
trailing_offset | decimal string | Optional. Trailing offset amount. |
trailing_offset_type | string | Optional. PRICE or PERCENT_BPS. |
trailing_watermark_px | decimal string | Optional. Current trailing watermark price. |
trailing_watermark_ts | timestamp string | Optional. Timestamp for the trailing watermark. |
underlying_instrument_id | UUID string | Populated for option orders when the underlying can be resolved; otherwise null. |
Order Statuses
Section titled “Order Statuses”| Status | Category | Description |
|---|---|---|
PENDING_NEW | Pending | Order submitted, awaiting exchange acknowledgment |
PENDING_CANCEL | Pending | Cancel request submitted, awaiting confirmation |
PENDING_REPLACE | Pending | Modification request submitted, awaiting confirmation |
NEW | Working | Order accepted and live on the exchange |
PARTIALLY_FILLED | Working | Some quantity has been filled; remainder is still active |
FILLED | Terminal | Entire quantity has been executed |
CANCELED | Terminal | Order has been canceled |
REJECTED | Terminal | Order was rejected (risk check failure, invalid parameters, etc.) |
EXPIRED | Terminal | Order expired based on its time-in-force setting |
REPLACED | Order has been modified (cancel/replace) | |
DONE_FOR_DAY | Order is done for the current trading session | |
SUSPENDED | Order is temporarily suspended | |
STOPPED | The order has been stopped/held and is not executing normally. |
- Pending: PENDING_NEW, PENDING_CANCEL, PENDING_REPLACE
- Working: NEW, PARTIALLY_FILLED
- Terminal: FILLED, CANCELED, REJECTED, EXPIRED
Time in Force (TIF) Options
| Value | Name | Description |
|---|---|---|
DAY | Day | Expires at end of the current trading session |
GTC | Good Till Cancel | Remains active until filled or explicitly canceled |
GTD | Good Till Date | Remains active until a specified date (set expire_at) |
IOC | Immediate or Cancel | Fills whatever is available immediately, cancels the rest |
FOK | Fill or Kill | Must fill the entire quantity immediately or cancel entirely |
AT_THE_OPENING | At the Opening | Participates in the opening auction only |
AT_THE_CLOSE | At the Close | Participates in the closing auction only |
Order Types
Section titled “Order Types”Market Order
Section titled “Market Order”An order to buy or sell immediately at the best available price in the market. It prioritizes execution speed over price certainty. Note market orders sent outside of normal market hours, orders will be queued up for the next market open.
Buy scenario
A stock is trading around $50.00 and you want in immediately. You place a market buy order. It fills right away at the best available ask, maybe $50.03.
Sell scenario
You own shares and want out immediately. The stock is around $50.00. You place a market sell order. It fills right away at the best available bid, maybe $49.98.
Example Request
[ { "order_type": "MARKET", "side": "BUY", "time_in_force": "DAY", "quantity": "1", "symbol": "TSLA", "instrument_type": "COMMON_STOCK" }]Limit Order
Section titled “Limit Order”An order to buy or sell only at a specified price or better. It prioritizes price control over guaranteed execution. It’s important to note that limit orders are not guaranteed to execute.
- Buy limit: executes at the limit price or lower
- Sell limit: executes at the limit price or higher
Buy scenario
A stock is trading at $50.00, but you only want to buy if it drops to $48.00 or lower. You place a buy limit at $48.00.
- If the price falls to $48.00 or below, it may execute.
- If it never reaches $48.00, it will not fill.
Sell scenario
You own shares trading at $50.00 and want to sell only if the price rises to $55.00 or higher. You place a sell limit at $55.00.
-
If the price reaches $55.00 or above, it may execute.
-
If it never gets there, it will not fill.
Example Request
[ { "order_type": "LIMIT", "limit_price": "350", "side": "BUY", "time_in_force": "DAY", "quantity": "1", "symbol": "TSLA", "instrument_type": "COMMON_STOCK" }]Stop (Market) Order
Section titled “Stop (Market) Order”An order that becomes a market order once a specified stop price is reached. It is commonly used to enter a trade on momentum or exit to limit losses, but once triggered it can fill at a different price than the stop price.
Buy scenario
A stock is trading at $50.00. You want to buy only if it shows upward momentum and breaks out above $52.00. You place a buy stop at $52.00.
- Once the market hits $52.00, the order becomes a market order.
- It might fill at $52.10, $52.25, etc.
- If it never hits $52.00 the market order won’t be triggered and no shares will be purchased.
Sell scenario
You own shares at $50.00 and want to limit downside if the price drops. You place a sell stop at $47.00.
-
Once the stock hits $47.00, the order becomes a market order.
-
It could fill at $46.90 or lower in a fast market.
-
If it never hits $47.00 the market order won’t be triggered and no shares will be sold.
Example Request
[ { "order_type": "STOP", "stop_price": "370", "side": "BUY", "time_in_force": "DAY", "quantity": "1", "symbol": "TSLA", "instrument_type": "COMMON_STOCK" }]Stop Limit Order
Section titled “Stop Limit Order”Like a stop order, but triggers a limit order instead of a market order. This gives you price protection after the stop triggers, but the order may not fill if the price moves past your limit.
Buy scenario
A stock is trading at $50.00. You want to buy on a breakout above $52.00, but do not want to pay more than $52.50. You place:
- Stop = $52.00
- Limit = $52.50
If the stock hits $52.00, the order becomes a limit buy order.
- It can fill at $52.50 or lower.
- If the stock jumps to $53.00 immediately, it may not fill.
Sell scenario
You own shares trading at $50.00 and want protection below $47.00, but do not want to sell for less than $46.50. You place:
- Stop = $47.00
- Limit = $46.50
If the stock hits $47.00, the order becomes a limit sell order.
-
It can fill at $46.50 or higher.
-
If the stock gaps down to $45.00, it may not fill.
Example Request
[ { "order_type": "STOP_LIMIT", "stop_price": "370", "side": "BUY", "limit_price": "371", "time_in_force": "DAY", "quantity": "1", "symbol": "TSLA", "instrument_type": "COMMON_STOCK" }]Trailing Stop (Market) Order
Section titled “Trailing Stop (Market) Order”A stop order where the stop price trails the market price by a fixed amount or percentage. As the price moves in your favor, the stop price adjusts automatically. When the price reverses by the trailing amount, a market order is triggered.
Buy scenario
A stock is falling and is now at $50.00. You want to buy if it reverses upward by $2.00 from its low. You place a buy trailing stop with a $2.00 trail.
- If the stock drops to $47.00, your trigger tracks that low.
- The order would trigger if price rises to $49.00.
- Once triggered, it becomes a market order.
Sell scenario
You own a stock currently at $50.00 and want to protect gains while letting it keep rising. You place a sell trailing stop with a $3.00 trail.
- If the stock rises to $55.00, your stop trails up to $52.00.
- If it then falls to $52.00, the order triggers.
- It becomes a market order and sells near the best available price.
Note at Clear Street trailing_offset_type can be PRICE (absolute dollar offset) or BPS (basis points). Examples of both requests have been provided below.
Example Requests
Trailing stop with trailing offset type of price
[ { "order_type": "TRAILING_STOP", "instrument_type": "COMMON_STOCK", "side": "BUY", "symbol": "TSLA", "quantity": "350", "time_in_force": "DAY", "trailing_offset": "5", "trailing_offset_type": "PRICE" }]Trailing stop with trailing offset type of bps
[ { "order_type": "TRAILING_STOP", "instrument_type": "COMMON_STOCK", "side": "BUY", "symbol": "TSLA", "quantity": "350", "time_in_force": "DAY", "trailing_offset": "115", "trailing_offset_type": "BPS" }]Trailing Stop Limit Order
Section titled “Trailing Stop Limit Order”Same as trailing stop, but triggers a limit order instead of a market order. You can set a limit price directly or use limit_offset to set the distance between the triggered stop price and the limit price.
Buy scenario
A stock is falling and trades at $50.00. You want to buy if it rebounds by $2.00, but not above a certain price. You place a buy trailing stop limit with:
- Trail = $2.00
- Limit = $0.50 above stop trigger, for example
If the stock falls to $47.00, the stop trigger adjusts to $49.00.
- When price rises to $49.00, the order is triggered.
- It becomes a limit buy, say capped at $49.50.
- If the market jumps above $49.50, it may not fill.
Sell scenario
You own a stock at $50.00 and want to protect gains with a trailing trigger, but do not want to sell too far below the trigger price. You place a sell trailing stop limit with:
- Trail = $3.00
- Limit offset = $0.50
If the stock rises to $55.00, the stop trigger trails up to $52.00.
- If price falls to $52.00, the order triggers.
- It becomes a limit sell at, for example, $51.50.
- If the market falls quickly below $51.50, it may not fill.
Note that unlike trailing_offset_type which can be PRICE (absolute dollar offset) or BPS (basis points) the limit_offset is just in absolute dollar offset. Examples of both requests have been provided below.
Example Requests
Trailing stop limit with limit_price
[ { "order_type": "TRAILING_STOP_LIMIT", "instrument_type": "COMMON_STOCK", "side": "BUY", "symbol": "TSLA", "quantity": "2", "time_in_force": "DAY", "trailing_offset": "5", "limit_price": "350", "trailing_offset_type": "BPS" }]Trailing stop limit with limit_offset
[ { "order_type": "TRAILING_STOP_LIMIT", "instrument_type": "COMMON_STOCK", "side": "BUY", "symbol": "TSLA", "quantity": "2", "time_in_force": "DAY", "trailing_offset": "5", "limit_offset": "5", "trailing_offset_type": "BPS" }]Your Trading Account Metrics
Section titled “Your Trading Account Metrics”Balances
Section titled “Balances”Balances endpoint GET /v1/accounts/{account_id}/balances gives you a real-time view of your account’s financial state. There is an optional query parameter called top_margin_contributors_limit which provides the top margin contributors for your account.
Balances Response
Section titled “Balances Response”Data Fields
| Field | Type | Description |
|---|---|---|
| account_id | integer | Account identifier. |
| buying_power | decimal string | Projected buying power available after current positions and risk-increasing open orders. |
| currency | string | Currency for monetary values, USD. |
| daily_realized_pnl | decimal string | Realized daily P&L, calculated as daily_total_pnl - daily_unrealized_pnl. |
| daily_total_pnl | decimal string | Total daily P&L, calculated as current equity minus start-of-day equity. |
| daily_unrealized_pnl | decimal string | Total unrealized P&L across positions versus prior close. |
| equity | decimal string | Current trade-date account equity based on cash and positions. trade_cash + long_market_value - short_market_value |
| long_market_value | decimal string | Current market value of long positions, excluding cash. |
| margin_type | string | Account margin model, such as NONE, REG_T, or PORTFOLIO_MARGIN. |
| open_order_adjustment | decimal string | Buying-power adjustment from open orders.Negative means open orders are consuming buying power. |
| settled_cash | decimal string | Settle-date cash balance. |
| sod | object | Start-of-day balance snapshot. |
| trade_cash | decimal string | Trade-date cash balance. |
| unsettled_credits | decimal string | Trade-date unsettled cash credits. |
| unsettled_debits | decimal string | Trade-date unsettled cash debits. |
| withdrawable_cash | string | The amount of cash currently available to withdraw. |
| margin_details | object, optional | Reg T margin-specific details. Omitted for non-Reg T accounts. |
| multiplier | decimal string, optional | Effective margin multiplier. Present for Reg T accounts. |
| short_market_value | decimal string | Current market value of short positions, excluding cash. |
SOD Fields
Section titled “SOD Fields”| Field | Type | Description |
|---|---|---|
| buying_power | decimal string | Start-of-day buying power. For cash accounts, this maps to SOD cash. |
| equity | decimal string | Start-of-day account equity. |
| long_market_value | decimal string | Start-of-day long market value. |
| short_market_value | decimal string | Start-of-day short market value. |
| asof | date, optional | Date of the start-of-day snapshot. |
| day_trade_buying_power | decimal string, optional | Start-of-day day-trade buying power. Reg T/PDT only. |
| maintenance_margin_excess | decimal string, optional | Start-of-day maintenance margin excess. Reg T only. |
| maintenance_margin_requirement | decimal string, optional | Start-of-day maintenance margin requirement. Reg T only. |
| trade_cash | decimal string, optional | Start-of-day trade cash. Reg T only. |
Margin Details Fields
| Field | Type | Description |
|---|---|---|
| day_trade_count | integer | Number of day trades over the five most recent trading days. |
| initial_margin_excess | decimal string | Current equity above initial margin requirement. |
| initial_margin_requirement | decimal string | Current initial margin requirement. |
| maintenance_margin_excess | decimal string | Current maintenance margin excess. |
| maintenance_margin_requirement | decimal string | Current maintenance margin requirement. |
| pattern_day_trader | boolean | Whether the account is currently flagged as a Pattern Day Trader. |
| day_trade_buying_power_usage | decimal string, optional | Day-trade buying power used today. |
| top_contributors | array, optional | Top per-underlying margin contributors. Returned only when requested with top_margin_contributors_limit. |
| usage | object, optional | Current margin usage totals. |
Margin Details Usage Fields
| Field | Type | Description |
|---|---|---|
| total | decimal string | Total available capacity, calculated as used plus excess. |
| used | decimal string | Amount of margin or day-trade buying power currently being used. |
Margin Details Top Contributors
| Field | Type | Description |
|---|---|---|
| day_trade_buying_power_usage | string | Day-trade buying power consumed by fills against this underlying on the current trade date. Populated only for pattern day trader accounts. |
| initial_margin_requirement | decimal string | Initial margin requirement attributable to this underlying. |
| maintenance_margin_requirement | decimal string | Maintenance margin requirement attributable to this underlying. |
| market_value | decimal string | Net market value attributable to this underlying. |
| underlying_instrument_id | UUID string | Underlying instrument contributing to margin requirement. |
Positions
Section titled “Positions”The Positions API lets clients retrieve current account holdings. It also supports close-position workflows that submit market DAY orders to flatten one or all non-cash positions, with trade permission required for those actions.
| Name | Method | Path | Description |
|---|---|---|---|
| List Positions | GET | /v1/accounts/{account_id}/positions | Returns current positions for the account, with optional filtering, sorting, and pagination. Requires view permission. |
| Close Position | DELETE | /v1/accounts/{account_id}/positions/{instrument_id} | Submits a market DAY order to flatten one non-cash position for the specified instrument. Optionally cancels related open orders first. Requires trade permission. |
| Close Positions | DELETE | /v1/accounts/{account_id}/positions | Submits market DAY orders to flatten all non-cash positions in the account. Optionally cancels related open orders first. Requires trade permission. |
List Positions
Section titled “List Positions”The list positions endpoint GET /v1/accounts/{account_id}/positions returns your current holdings, including real-time P&L calculations.
List Positions Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| instrument_ids | string | No | Comma-separated instrument UUIDs |
| page_size | integer | No | Number of positions to return. Defaults to 1000; maximum 1000. |
| page_token | string | No | Pagination token from metadata.next_page_token or metadata.previous_page_token. |
| sort_by | enum | No | One of SYMBOL, INSTRUMENT_TYPE, QUANTITY, MARKET_VALUE, POSITION_TYPE, UNREALIZED_PNL, or DAILY_UNREALIZED_PNL. Defaults to SYMBOL. |
| sort_direction | enum | No | ASC or DESC. Defaults to ASC. |
List Positions Response
| Field | Description |
|---|---|
| account_id | Account that owns the position. |
| available_quantity | Quantity currently available to act on. May differ from quantity due to open orders or other constraints. |
| instrument_id | UUID for an instrument |
| instrument_type | Instrument type, such as COMMON_STOCK, OPTION, or CASH. |
| market_value | Current market value. |
| position_type | Position direction, such as LONG or SHORT. |
| quantity | Signed position quantity. Positive is long; negative is short. |
| symbol | Display symbol. For cash positions, this is usually the currency, such as USD. |
| avg_price | Average position price, when available. |
| closing_price | Previous close price used for valuation, when available. |
| closing_price_date | The market date associated with closing_price |
| cost_basis | Total cost basis, when available. |
| daily_unrealized_pnl | Current-day unrealized P&L, when available. |
| daily_unrealized_pnl_pct | Current-day unrealized P&L percentage, when available. |
| instrument_price | Current market price, of the instrument. |
| underlying_instrument_id | Underlying instrument ID for options, when available. |
| unrealized_pnl | Total unrealized P&L, when available. |
| unrealized_pnl_pct | Total unrealized P&L percentage, when available. |
Close Position
Section titled “Close Position”Closes an open position positions.
Close One Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| account_id | integer | Yes | Clear Street account identifier. |
| instrument_id | string | Yes | UUID for an instrument |
Behavior
- For a long position, a market DAY sell order is sent for the net quantity.
- For a short position, a market DAY buy order for the absolute net quantity.
- Cash positions and already-flat positions are skipped. If no order is needed, the endpoint returns an empty data array.
Close Position Response
Returns order status for generated order.
Close All Positions
Section titled “Close All Positions”Closes all positions
Behavior
Evaluates every current non-cash position in the account and submits market DAY orders to flatten them. Long positions generate sell orders. Short positions generate buy orders. Cash positions and already-flat positions are skipped.
Portfolio History
Section titled “Portfolio History”Get portfolio history endpoint GET /v1/accounts/{account_id}/portfolio-history returns daily snapshots of your account equity, letting you track performance over time. Each snapshot includes the opening equity, closing equity, and daily P&L for that trading day.
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
| start_date | date | Yes | Inclusive start date in YYYY-MM-DD format. |
| end_date | date | No | Inclusive end date in YYYY-MM-DD format. Must be on or before the current UTC date. |
Note start_date must be on or before end_date.
When end_date is the current UTC date, the response includes an intraday segment computed from current balances. Some fields for that segment may be null because finalized order-flow, adjustment, dividend, accrual, income, or expense data may not yet be available.
The response may contain fewer segments than calendar days in the requested range. Non-trading days or dates with no available account history may be omitted.
Portfolio History Response
Section titled “Portfolio History Response”| Field | Description |
|---|---|
| date | Date for the segment. |
| eod_equity | Equity at the end of the trading day, or current intraday equity for the current-day segment. |
| realized_pnl | P&L realized from position-closing activity. |
| sod_equity | Equity at the start of the trading day. |
| unrealized_pnl | P&L from market changes. |
| bought_notional | Mark-to-market amount bought, when available. |
| day_pnl | P&L from intraday trading activity, when available. |
| net_pnl | Net P&L after realized P&L, unrealized P&L, adjustments, dividends, accrual changes, income, and expenses, when available. |
| position_pnl | P&L attributable to start-of-day carried positions, when available. |
| sold_notional | Mark-to-market amount sold, when available. |
Monetary values are returned as decimal strings. Nullable fields are returned as null when unavailable.
Day Trading and PDT
Section titled “Day Trading and PDT”What Is a Day Trade?
Section titled “What Is a Day Trade?”A day trade is any trade where you buy and sell (or sell short and buy to cover) the same security on the same trading day. Below are some examples of what is counted as a day trade and what is not.
| Trading activity | Day trade count impact |
|---|---|
| Buy 100 AAPL, then sell 100 AAPL the same trade date | 1 day trade |
| Buy 50 AAPL, buy 50 AAPL, then sell 100 AAPL the same trade date | 1 day trade |
| Sell short 100 AAPL, then buy 100 AAPL the same trade date | 1 day trade |
| Buy 100 AAPL on Monday, then sell 100 AAPL on Tuesday | 0 day trades |
| Sell shares that were already held overnight | 0 day trades |
Multiple fills that are part of the same-day open-and-close sequence are treated as one day trade rather than one day trade per fill.
PDT Flags
Section titled “PDT Flags”Under FINRA rules, if you execute 4 or more day trades within a rolling 5-trading-day window your account is classified as a Pattern Day Trader (PDT).
You can check your current status through the balances endpoint along with the day_trade_count
{ "pattern_day_trader": true, "day_trade_count": 4}Once flagged, PDT status remains on your account. PDT accounts must maintain a minimum equity of $25,000 (compared to $2,000 for standard margin accounts) and if it falls below that ALL trading is restricted to liquidation until 90 days since the last day trade or until equity is above $25,000.
PDT Protection
Section titled “PDT Protection”PDT protection is a pre-trade risk control for Reg T margin accounts. Its purpose is to help prevent an account with less than $25,000 projected equity from submitting an order that could create a fourth day trade in a rolling five-trading-day window.
At a high level, the system :
- Tracks filled executions by account, trade date, and security.
- Counts completed day trades over the most recent five U.S. equity trading days.
- Projects currently open orders before evaluating a new order.
- Rejects the new order with
PDT_PROTECTIONif the projected state would breach the configured PDT protection rule.
Other risk checks still apply. An order can be rejected for buying power, restricted list, liquidation-only, self-match, or other risk reasons independently of PDT protection. It’s important to note that Clear Street has protections on both entry and exit. This handles the case where an account opens/extends a position with 3 day trades in the last 5 trading days and at least $25,000 equity, then attempts to close that same position same-day with less than $25,000 equity.