---
title: Short Selling and Locates - Clear Street Trading API Documentation and Guides
description: Place short sales, understand hard-to-borrow locates, and estimate borrow costs.
---

## Shorting Overview

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](#advanced-shorting-concepts) section.

---

## Placing a Short Order

Submit a sell order through the [submit orders endpoint](/api/resources/v1/subresources/orders/methods/submit_orders/index.md). 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.

### One Order Cannot Flip a Position

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:

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

### HTB Order Rules

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](/guides/trading/#trading-hours/index.md). 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.

## Typical Workflow

1. Read `shortable_attribute` (and `is_threshold_security`) on the [instrument](#three-shortable-classes).
2. [Read the borrow rate](#overnight-borrowing-charge) 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](/guides/trading/#order-statuses/index.md), and `/locates` if you want to [see the grant](#locates).

## Risks of Shorting

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

---

## Shorting Economics

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

### Overnight Borrowing Charge

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

#### Checking the Borrow Rate

| Name                                                                                             | Method | Path                                | Description                                           |
| ------------------------------------------------------------------------------------------------ | ------ | ----------------------------------- | ----------------------------------------------------- |
| [List Locate Rates](/api/resources/v1/subresources/locates/methods/get_locate_rates/index.md)    | `GET`  | `/v1/locates/rates`                 | Get current borrow rates for up to 1,000 instruments. |
| [Get Locate Rate](/api/resources/v1/subresources/locates/methods/get_locate_rate_by_id/index.md) | `GET`  | `/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" }
```

| Field   | Description                                                |
| ------- | ---------------------------------------------------------- |
| `rate`  | Annualized borrow rate as a decimal. `0.037012` = 3.7012%. |
| `as_of` | When 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.

---

## Advanced Shorting Concepts

### Three Shortable Classes

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

| Value            | Meaning                                                                            | Locate needed? |
| ---------------- | ---------------------------------------------------------------------------------- | -------------- |
| `EASY_TO_BORROW` | Shares are readily available to loan.                                              | No             |
| `HARD_TO_BORROW` | Not easy to borrow, but locate inventory is available and float meets the minimum. | Yes            |
| `NOT_SHORTABLE`  | Cannot 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](/guides/instrument-data/#instrument-response/index.md) for the full instrument shape.

### Threshold Securities

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

### Locates

**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.

#### Seeing Your Locates

| Name                                                                                   | Method | Path                                     | Description                                            |
| -------------------------------------------------------------------------------------- | ------ | ---------------------------------------- | ------------------------------------------------------ |
| [List Locates](/api/resources/v1/subresources/locates/methods/get_locates/index.md)    | `GET`  | `/v1/accounts/{account_id}/locates`      | List locate requests and grants for an account.        |
| [Get Locate](/api/resources/v1/subresources/locates/methods/get_locate_by_id/index.md) | `GET`  | `/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).

#### Locate Response

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

| Field                | Type        | Description                                     |
| -------------------- | ----------- | ----------------------------------------------- |
| `locate_request_id`  | UUID string | Identifier of the request.                      |
| `client_request_id`  | string      | Identifier assigned when requested.             |
| `account_id`         | integer     | Owning account.                                 |
| `instrument_id`      | UUID string | Instrument located.                             |
| `requested_quantity` | integer     | Shares requested.                               |
| `effective_date`     | date        | Trading day in force.                           |
| `status`             | string      | `REQUESTED`, `ACCEPTED`, `REJECTED`, `EXPIRED`. |
| `related_order_id`   | UUID string | Order that triggered the request, if any.       |
| `locate_id`          | UUID string | Present once granted.                           |
| `quantity`           | integer     | Shares granted (may be less than requested).    |
| `reserved_quantity`  | integer     | Granted shares held by open short orders.       |
| `used_quantity`      | integer     | Granted 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.

#### How an Order Moves Through a Locate

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

| Locate Outcome    | Locate Status                   | Order Result                                                                                                                                                                |
| ----------------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Granted in full   | `ACCEPTED`                      | Shares reserved, order released (`NEW`).                                                                                                                                    |
| Rejected          | `REJECTED`                      | Order rejected: `Locate Check Failed: locate request rejected`.                                                                                                             |
| Granted partially | `ACCEPTED` (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 ends          | `EXPIRED`                       | Unused quantity is gone.                                                                                                                                                    |

## Short Sale Rejections

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

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