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

# Price Threshold

> Get notified when an outcome's price crosses a target level.

<Note>
  **Event:** `price_threshold` \
  **Endpoint:** `wss://api.struct.to/ws/alerts` \
  **Cost:** 0.2 credits per event
</Note>

Get notified when an outcome's price (implied probability) crosses a target level. It is edge-triggered: it fires once on the crossing, not on every trade that stays past the level. Set `min_price` for an upward target, `max_price` for a downward target, or both to watch from either side.

## Filters

| Filter                      | Type      | Required | Description                                                                                                                                                    |
| --------------------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `min_price`                 | number    | Yes\*    | Upward target, 0.0-1.0. Fire when the price crosses up to ≥ this value (e.g. 0.75). \*At least one of `min_price` or `max_price` is required.                  |
| `max_price`                 | number    | Yes\*    | Downward target, 0.0-1.0. Fire when the price crosses down to ≤ this value (e.g. 0.25). \*At least one of `min_price` or `max_price` is required.              |
| `one_shot`                  | boolean   | No       | Unsubscribe after the first delivery. Requires `position_ids` or `condition_ids`                                                                               |
| `fire_if_already_past`      | boolean   | No       | Fire immediately if the first observed price is already past the target                                                                                        |
| `condition_ids`             | string\[] | No       | Restrict to specific conditions (max 500)                                                                                                                      |
| `position_ids`              | string\[] | No       | Restrict to specific positions (max 500)                                                                                                                       |
| `outcomes`                  | string\[] | No       | Filter by outcome name, e.g. `["Yes", "No"]` (max 500). Note that multiple choice and esports markets often have non-standard outcome names (e.g. team names). |
| `position_outcome_indices`  | number\[] | No       | Filter by outcome index: 0 or 1 (max 500)                                                                                                                      |
| `event_slugs`               | string\[] | No       | Restrict to specific events (max 500)                                                                                                                          |
| `tags`                      | string\[] | No       | Restrict to markets carrying any of these tags or category names, case-insensitive (max 500)                                                                   |
| `series_slugs`              | string\[] | No       | Restrict to markets in any of these series by slug, case-insensitive (max 500)                                                                                 |
| `exclude_shortterm_markets` | boolean   | No       | Exclude short-term `updown` markets from results                                                                                                               |

<Tip>
  **Scope by market taxonomy.** `tags` matches a market's own tags **or** its category, given as the display label shown on Polymarket (for example `"Sports"`, `"Politics"`, or `"FIFA World Cup"`), not a slug. `series_slugs` matches the market's parent series by slug (for example `"nba-finals"`). Both are case-insensitive, accept up to 500 values each, and an empty or omitted list applies no taxonomy restriction.
</Tip>

## Subscribe

Fire when a specific market's YES outcome crosses up through 75%:

```json theme={null}
{
  "op": "subscribe",
  "event": "price_threshold",
  "condition_ids": ["0x4fec624c0ff2bfae89956cebd6fbc9c58f995f824382dc587dc5a32a4b15940b"],
  "min_price": 0.75
}
```

## Response

```json theme={null}
{
  "event": "price_threshold",
  "timestamp": 1775913505260,
  "data": {
    "trader": "0x9d84cef98b41a5b88dafb55c05e9a7e0f1a4f4d6",
    "taker": "0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e",
    "position_id": "452312848583266388373324160190187140051835877600158453279131187530910662656",
    "condition_id": "0x4fec624c0ff2bfae89956cebd6fbc9c58f995f824382dc587dc5a32a4b15940b",
    "outcome": "Yes",
    "outcome_index": 0,
    "question": "Will candidate X win the 2028 election?",
    "market_slug": "will-candidate-x-win",
    "event_slug": "us-presidential-election-2028",
    "trade_id": "0x9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b",
    "hash": "0x1f2e3d4c5b6a7988deadbeefcafebabe0011223344556677889900aabbccddee",
    "block": 19456789,
    "confirmed_at": 1713012000,
    "amount_usd": 5000.00,
    "shares_amount": 5263.16,
    "fee": 50.00,
    "side": "Buy",
    "previous_price": 0.72,
    "price": 0.76,
    "probability": 0.76,
    "direction": "up",
    "threshold": 0.75
  }
}
```

<Note>
  **`price` and `probability` are not the same field:**

  * **`price`**: the outcome you are looking at (the token in `outcome_index` / `position_id`).
  * **`probability`**: always outcome index `0` (the Yes/Up token), no matter which outcome the payload is about.

  They are equal only when `outcome_index` is `0`. On the No side (index `1`) they are complements: a `price` of `0.40` pairs with a `probability` of `0.60`.
</Note>
