> ## Documentation Index
> Fetch the complete documentation index at: https://finance.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Stop-Limit Order

> Trigger a limit order when a price level is reached. Combines a stop trigger with a price cap so you control the worst fill price after activation.

A **stop-limit order** combines the two ideas you've already seen:

* a **stop** (`stopPrice`) that arms the order, and
* a **limit** (`price`) that controls the price once it's armed.

When the market touches `stopPrice`, the order becomes a **limit order** at your `price` — instead of a market order. This protects you from a bad fill in a fast market, at the cost of possibly **not filling at all** if price blows past your limit.

<Note>
  Stop vs. stop-limit in one line: a [stop](/api-reference/orders/stop-order) guarantees you get *out/in* but not at what price; a stop-limit guarantees the *price* but not that you fill. Choose based on whether execution-certainty or price-certainty matters more.
</Note>

***

## When to use it

* You want a stop-loss but refuse to be filled below a floor in a flash crash.
* You're entering on a breakout but won't chase past a certain price.

The gap between `stopPrice` and `price` is your tolerance. Too tight and you risk no fill; too wide and you give up price protection.

***

## How it works

1. You `POST /v1/orders` with `type: "STOP_LIMIT"`, a `stopPrice`, **and** a `price`.
2. The order waits, inactive, until the market touches `stopPrice`.
3. It then becomes a **limit order** at `price` and rests on the book.
4. It fills only at `price` or better; otherwise it keeps working (or expires per its `timeInForce`).

***

## Request

| Field       | Type   | Required | Description                                                                           |
| ----------- | ------ | -------- | ------------------------------------------------------------------------------------- |
| `type`      | string | yes      | Must be `"STOP_LIMIT"`.                                                               |
| `stopPrice` | string | yes      | The trigger price. When the market reaches it, the order activates.                   |
| `price`     | string | yes      | The limit price the activated order will work at. Fills at this price or better only. |
| `side`      | string | yes      | `BUY`, `SELL`, `SELL_SHORT`, or `BUY_TO_COVER`.                                       |
| `qty`       | string | yes      | Number of shares as a decimal string.                                                 |

### Example — stop-loss with a price floor

Sell 100 AAPL: arm at 145.00, but don't sell below 144.50.

```bash cURL theme={null}
curl -X POST https://api.aries.com/v1/orders \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tradingAccountId": "ACC123456",
    "symbol": "AAPL",
    "side": "SELL",
    "type": "STOP_LIMIT",
    "qty": "100",
    "stopPrice": "145.00",
    "price": "144.50",
    "timeInForce": "GTC"
  }'
```

```json Request body theme={null}
{
  "tradingAccountId": "ACC123456",
  "symbol": "AAPL",
  "side": "SELL",
  "type": "STOP_LIMIT",
  "qty": "100",
  "stopPrice": "145.00",
  "price": "144.50",
  "timeInForce": "GTC"
}
```

<Warning>
  A stop-limit order requires **both** `stopPrice` and `price`. Omitting either is rejected.
</Warning>

***

## Response

```json theme={null}
{
  "success": true,
  "clOrdId": "CLIENT-011",
  "status": "NEW",
  "symbol": "AAPL",
  "side": "SELL",
  "qty": "100",
  "cumQty": "0",
  "leavesQty": "100",
  "avgPrice": "0",
  "transactTime": "2024-01-15T10:30:00Z"
}
```

***

## Watch it trigger and fill

After `stopPrice` is touched, the order behaves like a [limit order](/api-reference/orders/limit-order) — it may fill in full, partially, or sit working at your `price`:

```json account.order — triggered, working as a limit theme={null}
{
  "type": "event",
  "timestamp": "2024-01-15T13:45:00Z",
  "payload": {
    "topic": "account",
    "name": "account.order",
    "target": "account:ACC123456",
    "data": {
      "ordId": "ORD-22002",
      "clOrdId": "CLIENT-011",
      "symbol": "AAPL",
      "side": "SELL",
      "type": "STOP_LIMIT",
      "timeInForce": "GTC",
      "qty": "100",
      "stopPrice": "145.00",
      "price": "144.50",
      "ordStatus": "PARTIALLY_FILLED",
      "cumQty": "60",
      "leavesQty": "40",
      "avgPrice": "144.61",
      "securityType": "EQUITY",
      "category": "EQUITY",
      "updatedAt": "2024-01-15T13:45:00Z"
    }
  }
}
```

<Info>
  If the market trades straight through your `price` after triggering, you may be left `PARTIALLY_FILLED` or completely unfilled — the limit protected you from a worse price but didn't guarantee a fill. See the [Limit order → Listen for updates](/api-reference/orders/limit-order#listen-for-updates) handshake and the full [Account Updates WebSocket](/websockets/account-updates) reference.
</Info>

***

## Next steps

<CardGroup cols={2}>
  <Card title="Stop order" icon="circle-stop" href="/api-reference/orders/stop-order">
    The simpler trigger-into-market variant.
  </Card>

  <Card title="Single-leg option" icon="layer-group" href="/api-reference/orders/single-leg-option">
    Move on to options orders.
  </Card>

  <Card title="Replace Order" icon="pen" href="/api-reference/orders/update-order">
    Adjust the stop or limit on a resting order.
  </Card>

  <Card title="Order Flow" icon="diagram-project" href="/api-reference/orders/order-flow">
    How all order types fit together.
  </Card>
</CardGroup>
