Skip to content
Get started
Guides

Trading

Learn trading hours, instruments, order placement, account metrics, positions, portfolio history, and PDT rules.

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

SessionHours (ET)Supported Order Types
Pre-market4:00 AM – 9:30 AMLimit, Stop Limit
Regular9:30 AM – 4:00 PMAll order types
After-hours4:00 PM – 8:00 PMLimit, 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.

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.

NameMethodPathDescription
Instruments by IDGET/v1/instruments/{instrument_id}Retrieves detailed information for a specific instrument.
List InstrumentsGET/v1/instrumentsRetrieve a list of instruments. Note this will not return options
Search InstrumentsGET/v1/instruments/searchSearch through instruments
List Option ContractsGET/v1/instruments/options/contractsLists options contracts. Returns options contracts for a given underlier with options-specific metadata. Exactly one underlier identifier must be provided.
ParameterTypeRequiredNotes
easy_to_borrowbooleanNoFilter by ETB status.
id_filterstringConditionalSubstring filter. Required when listing options unless a security ID filter is supplied.
instrument_idsstringNoComma-separated OEMS instrument UUIDs
is_liquidation_onlybooleanNoFilter by liquidation-only status.
instrument_typeenumNoExamples: COMMON_STOCK, OPTION, PREFERRED_STOCK, CASH.
is_marginablebooleanNoFilter by marginability.
is_restrictedbooleanNoFilter by restricted status.
is_short_prohibitedbooleanNoFilter by short-sale restriction.
is_threshold_securitybooleanNoFilter by Reg SHO threshold status.
page_sizeintegerNoDefaults to 1000; used only on the first page.
page_tokenstringNoToken for retrieving the next page of results. Contains encoded pagination state (limit + offset). When provided, page_size is ignored.
ParameterTypeRequiredNotes
instrument_idpath enumYesinstrument UUID
include_options_expiry_datesbooleanNoWhen true, includes available option expiration dates for the instrument. Useful before loading an option chain.
ParameterTypeRequiredNotes
qstringYesSearch term. Case-insensitive. Matches ticker symbols, company names and ID. Must be at least 1 non-whitespace character.
asset_classCSV enumNoAsset classes to search. Defaults to EQUITY. Supported values: EQUITY, OPTION, WARRANT, BOND, FX, OTHER.
countrystringNoFilter by listing country, e.g. US.
currencystringNoFilter by ISO currency, e.g. USD.
include_inactivebooleanNoInclude inactive instruments. Defaults to false.
include_restrictedbooleanNoInclude restricted instruments. Defaults to true; restricted instruments may be ranked lower.
page_sizeintegerNoDefaults to 1000; used only on the first page.
page_tokenstringNo

The response for instrument by id, list instruments and instrument search follow the same pattern.

FieldTypeDefinition
idUUIDUnique instruments identifier
country_of_issuestringISO country code.
currencystringISO currency code.
easy_to_borrowbooleanWhether the instrument is easy to borrow.
is_liquidation_onlybooleanWhether the instrument can only be liquidated.
is_marginablebooleanWhether the instrument is marginable.
is_restrictedbooleanWhether trading is restricted.
is_short_prohibitedbooleanWhether short selling is prohibited.
is_threshold_securitybooleanWhether the instrument is on the Reg SHO threshold list.
is_tradablebooleanWhether the instrument is tradable
symbolstringsymbol of the instrument
venuestringPrimary listing venue MIC.
advdecimal stringAverage daily volume, when available.
expirydate/nullOption expiration date, for option instruments.
instrument_typeenumSecurity type, e.g. COMMON_STOCK, OPTION, WARRANT, CASH.
long_margin_ratedecimal stringLong margin requirement rate, when available.
namestringInstrument or issuer name, when available.
notional_advdecimal stringadv × previous_close, when available.
previous_closedecimal stringPrevious close price, when available.
short_margin_ratedecimal stringShort margin requirement rate, when available.
strike_pricedecimal string/nullOption strike price, for option instruments.
ParameterTypeRequiredNotes
contract_typeenumNoCALL or PUT.
expirydateNoFilter contracts to one expiration date, YYYY-MM-DD.
underlierstringConditionalDirect underlier symbol, e.g. AAPL.
underlier_instrument_idUUIDConditionalinstrument ID of the underlying equity. Preferred when known.
page_sizeintegerNoDefaults to 1000; used only on the first page.
page_tokenstringNoToken for retrieving the next page of results. Contains encoded pagination state (limit + offset). When provided, page_size is ignored.
FieldTypeDefinition
idUUIDInstrument ID for the option contract.
contract_typeenumCALL or PUT.
currencystringISO currency code.
exchangestringListing venue MIC.
exercise_styleenumAMERICAN or EUROPEAN.
expirydateContract expiration date.
is_liquidation_onlybooleanWhether the contract can only be liquidated.
is_marginablebooleanWhether the contract is marginable.
is_restrictedbooleanWhether trading is restricted.
listing_typeenumSTANDARD, FLEX, or OTC.
multiplierdecimal stringContract multiplier, commonly 100.
strike_pricedecimal stringStrike price.
symbolstringOSI option symbol.
open_interestintegerOpen interest, when available.
underlier_instrument_idUUIDID of the underlier, when resolvable.

Clear Street’s Trading API supports trading common stocks and ETFs listed on US exchanges as well as US stock options.

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.

LevelsCapabilities
1Covered calls and cash secured puts
2Level 1 and long calls and puts
3Level 2, plus spread strategies and long straddles/strangles
4Level 3, plus uncovered calls/puts and short straddles/strangles
NameMethodPathDescription
Order By IDGET/v1/accounts/{account_id}/orders/{order_id}Get details for a single order by order ID.
List OrdersGET/v1/accounts/{account_id}/ordersList orders for an account. Supports pagination plus filters such as status, symbol, instrument_type, from, and to.
Submit OrdersPOST/v1/accounts/{account_id}/ordersSubmit orders for an account
Replace OrderPATCH/v1/accounts/{account_id}/orders/{order_id}Replace an existing order with updated parameters.
Cancel Open OrdersDELETE/v1/accounts/{account_id}/ordersCancel all open orders for an account. Supports filters such as side, type, and instrument_type
Cancel Open OrderDELETE/v1/accounts/{account_id}/orders/{order_id}Cancel a specific open order.
FieldTypeRequiredDescription
instrument_typestringYesCOMMON_STOCK, OPTION, etc.
order_typestringYesMARKET, LIMIT, STOP, STOP_LIMIT, TRAILING_STOP, TRAILING_STOP_LIMIT
quantitystringYesNumber of shares/contracts (decimal string)
sidestringYesBUY, SELL, or SELL_SHORT
time_in_forcestringYesDAY, GTC, GTD, IOC, FOK, AT_THE_OPENING, AT_THE_CLOSE
idstringNoClient-assigned order ID (max 64 chars, unique per account)
expires_atstringConditionalISO 8601 timestamp (required when time_in_force is GTD)
extended_hoursbooleanNoEnable pre-market and after-hours execution
instrument_idstringConditionalunique identifier for instrument
limit_offsetstringConditionalLimit offset for TRAILING_STOP_LIMIT orders
limit_pricestringConditionalRequired for LIMIT and STOP_LIMIT orders
position_effectstringNoFor options: OPEN, CLOSE, AUTOMATIC
stop_pricestringConditionalRequired for STOP and STOP_LIMIT orders
symbolstringConditionalTicker symbol (required if instrument_id not provided)
trailing_offsetstringConditionalRequired for trailing stop orders
trailing_offset_typestringConditionalPRICE or BPS (required with trailing_offset)
FieldTypeDescription
idstringEngine-assigned order UUID.
account_idintegerTrading account ID.
client_order_idstringClient-provided order ID echoed back.
created_attimestamp stringUTC creation timestamp.
filled_quantitydecimal stringCumulative filled quantity.
instrument_idstringOEMS instrument UUID.
instrument_typestringSecurity type, such as COMMON_STOCK or OPTION.
leaves_quantitydecimal stringRemaining open quantity.
order_typestringMARKET, LIMIT, STOP, STOP_LIMIT, TRAILING_STOP, or TRAILING_STOP_LIMIT.
quantitydecimal stringTotal order quantity.
sidestringBUY, SELL, SELL_SHORT, or OTHER.
statusstringCurrent order status, such as PENDING_NEW, NEW, PARTIALLY_FILLED, FILLED, or REJECTED.
symbolstringTrading symbol.
time_in_forcestringTime-in-force value, such as DAY, GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL, or GOOD_TILL_DATE.
updated_attimestamp stringUTC most recent update timestamp.
venuestringRouted venue MIC code.
average_fill_pricedecimal stringOptional. Average execution price across fills.
detailsarray of stringsOptional. Execution, rejection, or cancellation details; omitted when empty.
expires_attimestamp stringOptional. Present when time_in_force is GOOD_TILL_DATE.
extended_hoursbooleanStates wether an order is eligible for extended hours
limit_offsetdecimal stringOptional. Signed limit offset for trailing stop-limit orders.
limit_pricedecimal stringOptional. Present for limit-style orders.
queue_statestringWAITING_RELEASE or RELEASED.
releases_attimestamp stringScheduled release time for queued/held orders.
stop_pricedecimal stringOptional. Present for stop-style orders.
trailing_offsetdecimal stringOptional. Trailing offset amount.
trailing_offset_typestringOptional. PRICE or PERCENT_BPS.
trailing_watermark_pxdecimal stringOptional. Current trailing watermark price.
trailing_watermark_tstimestamp stringOptional. Timestamp for the trailing watermark.
underlying_instrument_idUUID stringPopulated for option orders when the underlying can be resolved; otherwise null.
StatusCategoryDescription
PENDING_NEWPendingOrder submitted, awaiting exchange acknowledgment
PENDING_CANCELPendingCancel request submitted, awaiting confirmation
PENDING_REPLACEPendingModification request submitted, awaiting confirmation
NEWWorkingOrder accepted and live on the exchange
PARTIALLY_FILLEDWorkingSome quantity has been filled; remainder is still active
FILLEDTerminalEntire quantity has been executed
CANCELEDTerminalOrder has been canceled
REJECTEDTerminalOrder was rejected (risk check failure, invalid parameters, etc.)
EXPIREDTerminalOrder expired based on its time-in-force setting
REPLACEDOrder has been modified (cancel/replace)
DONE_FOR_DAYOrder is done for the current trading session
SUSPENDEDOrder is temporarily suspended
STOPPEDThe 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

ValueNameDescription
DAYDayExpires at end of the current trading session
GTCGood Till CancelRemains active until filled or explicitly canceled
GTDGood Till DateRemains active until a specified date (set expire_at)
IOCImmediate or CancelFills whatever is available immediately, cancels the rest
FOKFill or KillMust fill the entire quantity immediately or cancel entirely
AT_THE_OPENINGAt the OpeningParticipates in the opening auction only
AT_THE_CLOSEAt the CloseParticipates in the closing auction only

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"
}
]

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"
}
]

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"
}
]

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"
}
]

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"
}
]

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"
}
]

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.

Data Fields

FieldTypeDescription
account_idintegerAccount identifier.
buying_powerdecimal stringProjected buying power available after current positions and risk-increasing open orders.
currencystringCurrency for monetary values, USD.
daily_realized_pnldecimal stringRealized daily P&L, calculated as daily_total_pnl - daily_unrealized_pnl.
daily_total_pnldecimal stringTotal daily P&L, calculated as current equity minus start-of-day equity.
daily_unrealized_pnldecimal stringTotal unrealized P&L across positions versus prior close.
equitydecimal stringCurrent trade-date account equity based on cash and positions. trade_cash + long_market_value - short_market_value
long_market_valuedecimal stringCurrent market value of long positions, excluding cash.
margin_typestringAccount margin model, such as NONE, REG_T, or PORTFOLIO_MARGIN.
open_order_adjustmentdecimal stringBuying-power adjustment from open orders.Negative means open orders are consuming buying power.
settled_cashdecimal stringSettle-date cash balance.
sodobjectStart-of-day balance snapshot.
trade_cashdecimal stringTrade-date cash balance.
unsettled_creditsdecimal stringTrade-date unsettled cash credits.
unsettled_debitsdecimal stringTrade-date unsettled cash debits.
withdrawable_cashstringThe amount of cash currently available to withdraw.
margin_detailsobject, optionalReg T margin-specific details. Omitted for non-Reg T accounts.
multiplierdecimal string, optionalEffective margin multiplier. Present for Reg T accounts.
short_market_valuedecimal stringCurrent market value of short positions, excluding cash.
FieldTypeDescription
buying_powerdecimal stringStart-of-day buying power. For cash accounts, this maps to SOD cash.
equitydecimal stringStart-of-day account equity.
long_market_valuedecimal stringStart-of-day long market value.
short_market_valuedecimal stringStart-of-day short market value.
asofdate, optionalDate of the start-of-day snapshot.
day_trade_buying_powerdecimal string, optionalStart-of-day day-trade buying power. Reg T/PDT only.
maintenance_margin_excessdecimal string, optionalStart-of-day maintenance margin excess. Reg T only.
maintenance_margin_requirementdecimal string, optionalStart-of-day maintenance margin requirement. Reg T only.
trade_cashdecimal string, optionalStart-of-day trade cash. Reg T only.

Margin Details Fields

FieldTypeDescription
day_trade_countintegerNumber of day trades over the five most recent trading days.
initial_margin_excessdecimal stringCurrent equity above initial margin requirement.
initial_margin_requirementdecimal stringCurrent initial margin requirement.
maintenance_margin_excessdecimal stringCurrent maintenance margin excess.
maintenance_margin_requirementdecimal stringCurrent maintenance margin requirement.
pattern_day_traderbooleanWhether the account is currently flagged as a Pattern Day Trader.
day_trade_buying_power_usagedecimal string, optionalDay-trade buying power used today.
top_contributorsarray, optionalTop per-underlying margin contributors. Returned only when requested with top_margin_contributors_limit.
usageobject, optionalCurrent margin usage totals.

Margin Details Usage Fields

FieldTypeDescription
totaldecimal stringTotal available capacity, calculated as used plus excess.
useddecimal stringAmount of margin or day-trade buying power currently being used.

Margin Details Top Contributors

FieldTypeDescription
day_trade_buying_power_usagestringDay-trade buying power consumed by fills against this underlying on the current trade date. Populated only for pattern day trader accounts.
initial_margin_requirementdecimal stringInitial margin requirement attributable to this underlying.
maintenance_margin_requirementdecimal stringMaintenance margin requirement attributable to this underlying.
market_valuedecimal stringNet market value attributable to this underlying.
underlying_instrument_idUUID stringUnderlying instrument contributing to margin requirement.

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.

NameMethodPathDescription
List PositionsGET/v1/accounts/{account_id}/positionsReturns current positions for the account, with optional filtering, sorting, and pagination. Requires view permission.
Close PositionDELETE/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 PositionsDELETE/v1/accounts/{account_id}/positionsSubmits market DAY orders to flatten all non-cash positions in the account. Optionally cancels related open orders first. Requires trade permission.

The list positions endpoint GET /v1/accounts/{account_id}/positions returns your current holdings, including real-time P&L calculations.

List Positions Query Parameters

ParameterTypeRequiredDescription
instrument_idsstringNoComma-separated instrument UUIDs
page_sizeintegerNoNumber of positions to return. Defaults to 1000; maximum 1000.
page_tokenstringNoPagination token from metadata.next_page_token or metadata.previous_page_token.
sort_byenumNoOne of SYMBOL, INSTRUMENT_TYPE, QUANTITY, MARKET_VALUE, POSITION_TYPE, UNREALIZED_PNL, or DAILY_UNREALIZED_PNL. Defaults to SYMBOL.
sort_directionenumNoASC or DESC. Defaults to ASC.

List Positions Response

FieldDescription
account_idAccount that owns the position.
available_quantityQuantity currently available to act on. May differ from quantity due to open orders or other constraints.
instrument_idUUID for an instrument
instrument_typeInstrument type, such as COMMON_STOCK, OPTION, or CASH.
market_valueCurrent market value.
position_typePosition direction, such as LONG or SHORT.
quantitySigned position quantity. Positive is long; negative is short.
symbolDisplay symbol. For cash positions, this is usually the currency, such as USD.
avg_priceAverage position price, when available.
closing_pricePrevious close price used for valuation, when available.
closing_price_dateThe market date associated with closing_price
cost_basisTotal cost basis, when available.
daily_unrealized_pnlCurrent-day unrealized P&L, when available.
daily_unrealized_pnl_pctCurrent-day unrealized P&L percentage, when available.
instrument_priceCurrent market price, of the instrument.
underlying_instrument_idUnderlying instrument ID for options, when available.
unrealized_pnlTotal unrealized P&L, when available.
unrealized_pnl_pctTotal unrealized P&L percentage, when available.

Closes an open position positions.

Close One Path Parameters

ParameterTypeRequiredDescription
account_idintegerYesClear Street account identifier.
instrument_idstringYesUUID 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.

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.

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.

ParameterTypeRequiredDescription
start_datedateYesInclusive start date in YYYY-MM-DD format.
end_datedateNoInclusive 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.

FieldDescription
dateDate for the segment.
eod_equityEquity at the end of the trading day, or current intraday equity for the current-day segment.
realized_pnlP&L realized from position-closing activity.
sod_equityEquity at the start of the trading day.
unrealized_pnlP&L from market changes.
bought_notionalMark-to-market amount bought, when available.
day_pnlP&L from intraday trading activity, when available.
net_pnlNet P&L after realized P&L, unrealized P&L, adjustments, dividends, accrual changes, income, and expenses, when available.
position_pnlP&L attributable to start-of-day carried positions, when available.
sold_notionalMark-to-market amount sold, when available.

Monetary values are returned as decimal strings. Nullable fields are returned as null when unavailable.

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 activityDay trade count impact
Buy 100 AAPL, then sell 100 AAPL the same trade date1 day trade
Buy 50 AAPL, buy 50 AAPL, then sell 100 AAPL the same trade date1 day trade
Sell short 100 AAPL, then buy 100 AAPL the same trade date1 day trade
Buy 100 AAPL on Monday, then sell 100 AAPL on Tuesday0 day trades
Sell shares that were already held overnight0 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.

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 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 :

  1. Tracks filled executions by account, trade date, and security.
  2. Counts completed day trades over the most recent five U.S. equity trading days.
  3. Projects currently open orders before evaluating a new order.
  4. Rejects the new order with PDT_PROTECTION if 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.