Skip to content
Start Trading

Short Selling and Locates

Place short sales, understand hard-to-borrow locates, and estimate borrow costs.

Shorting is selling a stock you do not own, anticipating the price will fall. Below are the steps.

  1. Borrow shares: someone lends you 100 XYZ
  2. Sell them: you receive cash at today’s price ($50)
  3. Price falls: XYZ is now $40
  4. Buy them back: you pay $40 (this is “covering”)
  5. Return the shares: profit = ($50 − $40) × 100 = $1,000, minus costs

If the price rises instead, you buy back higher and lose money. Unlike a long position, a short’s loss is unbounded: a stock can only fall to $0 but can rise without limit.

Clear Street classifies every equity as easy-to-borrow (ETB), hard-to-borrow (HTB), or not shortable. For HTB stocks, Clear Street requests the locate for you automatically when you submit the order. More details on locates can be found in the Advanced Shorting Concepts section.


Submit a sell order through the submit orders endpoint. There is no short flag and no separate “request a locate” call.

[
{
"order_type": "LIMIT",
"limit_price": "350",
"side": "SELL",
"time_in_force": "DAY",
"quantity": "100",
"symbol": "TSLA",
"instrument_type": "COMMON_STOCK"
}
]

A SELL is treated as a short sale when you hold no long position in the stock or already hold a short position. Order responses report short sales with side: SELL; there is no separate short-sale side.

A single sell order may close a long or open a short, never both. If you hold 100 shares, a SELL of 150 is rejected. To reverse, send two orders: close the long, then short.

Starting from a long position of 100 shares:

OrderOutcome
SELL 150Rejected: a single order cannot flip the position from long to short.
SELL 100Accepted: closes the long (position is now 0).
SELL 50 (submitted after the previous SELL 100)Accepted: opens a short (position is now −50).

Hard-to-borrow short sales have restrictions that do not apply to other orders:

  • Time in force must expire by end of day: DAY, IMMEDIATE_OR_CANCEL, FILL_OR_KILL, and AT_CLOSE are supported. GOOD_TILL_CANCEL and GOOD_TILL_DATE are rejected, because a locate is only valid for the day it is granted.
  • Sessions: locate requests are only accepted during pre-market, regular, and after-hours sessions (4:00 AM – 8:00 PM ET). An HTB short sale cannot be placed during the overnight session. ETB short sales are not session-restricted.
  • Order types: trailing stop, trailing stop limit, and extended-hours stop limit orders are not supported for HTB short sales.
  1. Read shortable_attribute (and is_threshold_security) on the instrument.
  2. Read the borrow rate and estimate cost, remembering it is only an estimate.
  3. Submit a SELL. Locates, if needed, are handled for you.
  4. Track the order status, and /locates if you want to see the grant.
  • Unbounded loss if the price rises.
  • Margin calls if the position moves against you.
  • Borrow rates can rise while you are short; the billed rate may exceed the estimate.
  • Buy-ins, especially in threshold securities.
  • Borrow cost continues to accrue on a halted security you are short, even though you cannot buy to cover.

A short has costs beyond the price move. Note charges are estimates until billed or settled.

You pay to borrow the shares. Key points:

  • Borrow is charged only on settled shares. The cost starts once the short sale settles, not at order time, and accrues every calendar day based on settlement, including weekends and settlement holidays.
  • Easy-to-borrow stocks typically accrue little or no borrow cost; hard-to-borrow rates run higher and can move quickly.
  • The rate is annualized and accrues daily on the market value of the borrowed shares, using a 360-day year. Weekends count: a Friday-night position accrues 3 days of borrow cost (Fri, Sat, Sun).
daily_borrow_cost = short_market_value × annual_borrow_rate / 360
Short 1,000 XYZ @ $20 = $20,000, rate 0.037012 (3.7012%)
daily_borrow_cost = 20,000 × 0.037012 / 360 ≈ $2.06 per day
NameMethodPathDescription
List Locate RatesGET/v1/locates/ratesGet current borrow rates for up to 1,000 instruments.
Get Locate RateGET/v1/locates/rates/{instrument_id}Get the current borrow rate for a single instrument.

Both accept instrument UUIDs or ticker symbols.

{ "instrument_id": "…", "rate": "0.037012", "as_of": "2026-10-16T14:30:00Z" }
FieldDescription
rateAnnualized borrow rate as a decimal. 0.037012 = 3.7012%.
as_ofWhen the rate was last retrieved.

The list endpoint returns 200 if every instrument has a rate and 207 if some do not; those entries carry an error instead of a rate. The single endpoint returns 404 when the instrument is unknown or has no rate.

The rate is an indicative estimate, not a quote. The billed rate is determined at billing and can be higher or lower than the rate shown when you opened the position. Use it to estimate cost.


Every tradable equity reports a shortable_attribute on the instrument (GET /v1/instruments, /v1/instruments/{id}, /v1/instruments/search, and watchlists):

ValueMeaningLocate needed?
EASY_TO_BORROWShares are readily available to loan.No
HARD_TO_BORROWNot easy to borrow, but locate inventory is available and float meets the minimum.Yes
NOT_SHORTABLECannot be shorted: no locate inventory, or float below the minimum.n/a

The field is omitted for instruments that are not tradable equities (e.g. options). See Instrument Response for the full instrument shape.

Hard-to-borrow stocks split further on is_threshold_security, also on the instrument. A stock lands on the SEC Regulation SHO threshold list after five consecutive settlement days with large fails to deliver (≥ 10,000 shares and ≥ 0.5% of shares outstanding).

For a short seller a threshold security means:

  • Tighter supply and higher rates. Check the borrow rate first.
  • Higher buy-in risk. Fails must be closed out on strict timelines, so a short can be bought in to meet delivery.
  • Locates are not reused on cover (see below).

Screen programmatically:

GET /v1/instruments?is_threshold_security=true&instrument_type=COMMON_STOCK

Clear Street handles this for you. On a hard-to-borrow short, the order is held, a locate is requested on your behalf, and the order is released when it is granted. You never call a locate endpoint to place a short.

Locate behavior to know:

  • Pooled per account, stock and day. Granted shares go into a pool that any of your orders can draw on.
  • Valid for one trading day. In force for its effective_date (New York date) and expires at 8:00 PM ET. Nothing carries over.
  • Same-day covers replenish, except in threshold securities. If you open and cover a short the same day in a stock that is not a threshold security, the covered quantity becomes available again that day. For threshold securities covering does not free quantity, even for a short opened the same day, so shorting again needs new availability.
  • Granted even if the order dies. A locate granted after its order is canceled or rejected still counts toward your day’s pool.
  • Replacing an order never triggers a new locate. It can draw on remaining located shares and is rejected if it needs more. A replace is not allowed while the locate is pending.
  • There is no minimum locate size and no round-lot requirement. The locate request is for exactly the number of shares your order still needs.
NameMethodPathDescription
List LocatesGET/v1/accounts/{account_id}/locatesList locate requests and grants for an account.
Get LocateGET/v1/accounts/{account_id}/locates/{id}Get a single locate by locate request ID or locate ID.

List filters: effective_date (YYYY-MM-DD, defaults to today in New York), status (comma-separated), instrument_ids (UUIDs or symbols).

Each locate joins the locate request with the locate granted for it, if any:

FieldTypeDescription
locate_request_idUUID stringIdentifier of the request.
client_request_idstringIdentifier assigned when requested.
account_idintegerOwning account.
instrument_idUUID stringInstrument located.
requested_quantityintegerShares requested.
effective_datedateTrading day in force.
statusstringREQUESTED, ACCEPTED, REJECTED, EXPIRED.
related_order_idUUID stringOrder that triggered the request, if any.
locate_idUUID stringPresent once granted.
quantityintegerShares granted (may be less than requested).
reserved_quantityintegerGranted shares held by open short orders.
used_quantityintegerGranted shares consumed by executions.

The quantity available for new short sales is quantity - used_quantity - reserved_quantity, and drops to zero once the locate expires.

While the request is outstanding, the order shows status: PENDING_NEW and queue_state: AWAITING_RELEASE (the “pending locate” state).

Locate OutcomeLocate StatusOrder Result
Granted in fullACCEPTEDShares reserved, order released (NEW).
RejectedREJECTEDOrder rejected: Locate Check Failed: locate request rejected.
Granted partiallyACCEPTED (smaller quantity)Order rejected: Locate Check Failed: insufficient locates: need X, have Y. The granted shares stay in your pool for the day, so send a new, smaller order that uses them.
Day endsEXPIREDUnused quantity is gone.

A short can be rejected before it is routed. Rejections at submission return synchronously; rejections after a locate response arrive as a REJECTED order with the reason in details. Locate-related messages are prefixed Locate Check Failed:.

ReasonWhen it occurs
Short selling not permittedThe account type does not permit shorting (e.g. a cash account).
short sales of this stock must expire by end of dayA hard-to-borrow short used GOOD_TILL_CANCEL or GOOD_TILL_DATE.
locate requests are only supported during premarket, regular, and after-hours sessionsA hard-to-borrow short was sent overnight or outside trading hours.
strategy orders are not supported for hard-to-borrow short salesA hard-to-borrow short used a trailing stop, trailing stop limit, or extended-hours stop limit.
locate request rejectedThe locate venue rejected the request.
insufficient locates: need X, have YThe locate venue granted fewer shares than the order needs.