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

# Close to Bond

> Get notified when a trade occurs at a near-certain-outcome price.

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

Get notified when a trade occurs at a near-certain-outcome price. At least one of `min_price` or `max_price` is required to define the bond zone.

<Tip>
  **Related guide:** [Bond-zone alerts](/guides/bond-zone-alerts) is a worked walkthrough of this event across both websockets and webhooks.
</Tip>

## Defining the bond zone

The bond zone is defined entirely by how you combine `min_price` and `max_price`. The **relationship between the two values** selects one of four modes:

| You set                    | Mode             | Fires when                                     | `bond_side`         |
| -------------------------- | ---------------- | ---------------------------------------------- | ------------------- |
| `min_price` only           | Single high edge | `price ≥ min_price`                            | `"high"`            |
| `max_price` only           | Single low edge  | `price ≤ max_price`                            | `"low"`             |
| Both, with **`min < max`** | Bounded range    | `min_price ≤ price ≤ max_price`                | `"high"`            |
| Both, with **`min > max`** | Two edges        | `price ≥ min_price` **or** `price ≤ max_price` | `"high"` or `"low"` |

<Warning>
  **`min < max` is a band, not a bond.** If you set `min_price: 0.75` and `max_price: 0.90`, you do **not** get "fires above 90% or below 75%". Because `min < max`, it switches to bounded-range mode and fires only when the price lands **inside** the 75–90% band. To alert on the two near-certain extremes, you must set `min > max` (see below).
</Warning>

## Alerting on near-certain outcomes

To get notified when an outcome becomes near-certain in **either** direction (at or above 90% **or** at or below 10%), set `min_price` **higher** than `max_price`:

```json theme={null}
{
  "min_price": 0.90,
  "max_price": 0.10
}
```

Because `0.90 > 0.10`, this is read as two separate edges. A trade at 96¢ fires with `bond_side: "high"`; a trade at 4¢ fires with `bond_side: "low"`. For a single edge, set just one of the two.

## How price is read

* The traded position's own `price` is used: the price of the exact outcome token (`position_id`) that printed.
* Trades at a price of exactly `0` or `1` are skipped, since there is no remaining risk to alert on.
* `price` is on a `0.0`–`1.0` scale (so 95¢ = `0.95`).

## Picking the right side

On a binary market, "YES at ≤10%" and "NO at ≥90%" are the **same** event priced from opposite tokens. If you add `position_outcome_indices: [0]` you will only ever see trades that print on the **Yes/Up** token (index `0`); trades on the No token (index `1`) won't fire even when they hit the same bond zone. Omit `position_outcome_indices` to catch the zone regardless of which side the trade prints on.

## Filters

| Filter                      | Type      | Required | Description                                                                                         |
| --------------------------- | --------- | -------- | --------------------------------------------------------------------------------------------------- |
| `min_price`                 | number    | Yes\*    | High zone threshold, 0.0-1.0 (e.g. 0.95). \*At least one of `min_price` or `max_price` is required. |
| `max_price`                 | number    | Yes\*    | Low zone threshold, 0.0-1.0 (e.g. 0.05). \*At least one of `min_price` or `max_price` is required.  |
| `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)                                              |
| `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 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

Single high edge: fire when an outcome is near-certain (≥ 95%):

```json theme={null}
{
  "op": "subscribe",
  "event": "close_to_bond",
  "min_price": 0.95
}
```

Both edges: fire when an outcome is near-certain in either direction (≥ 90% or ≤ 10%). Note `min_price` is set **higher** than `max_price`:

```json theme={null}
{
  "op": "subscribe",
  "event": "close_to_bond",
  "min_price": 0.90,
  "max_price": 0.10
}
```

## Response

```json theme={null}
{
  "event": "close_to_bond",
  "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",
    "price": 0.96,
    "bond_side": "high",
    "threshold": 0.95
  }
}
```
