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

# Open orders by vault

> Returns individual orders resting in a vault's orderbooks at a specified timestamp, including owner, implied APY, order type, and remaining amount.

export const ApiResponse = ({children, errors = {}}) => {
  const [status, setStatus] = useState("200");
  const statuses = ["200", ...Object.keys(errors)];
  return <section className="api-response" aria-label="Response">
      <div className="api-response-header not-prose">
        <h2>Response</h2>
        <div className="api-response-format">
          {statuses.length > 1 ? <select aria-label="Response status" value={status} onChange={event => setStatus(event.target.value)}>
              {statuses.map(code => <option key={code} value={code}>{code}</option>)}
            </select> : <span>200</span>}
          <span className="api-response-mime">application/json</span>
        </div>
      </div>
      <div hidden={status !== "200"}>{children}</div>
      {status !== "200" && <div aria-live="polite">
          {Object.entries(errors[status]).map(([name, value]) => <ResponseField key={name} name={name} type={value === null ? "null" : Array.isArray(value) ? "array" : typeof value}>
              {name === "error" ? "Error message describing why the request failed." : "Additional error details."}
            </ResponseField>)}
        </div>}
    </section>;
};

## Path parameters

<ParamField path="vaultAddress" type="string" required>
  Base58 Solana vault public key.
</ParamField>

## Query parameters

<ParamField query="at" type="string">
  Past or present ISO 8601 timestamp with an explicit timezone and up to three fractional-second digits. Omit for current state.
</ParamField>

<ParamField query="includeRemoved" type="boolean" default="false">
  Include orders cancelled by the requested timestamp. Expiry and remaining-amount filters still apply.
</ParamField>

URL-encode `+` in timezone offsets, or use UTC (`Z`).

## Example request

<RequestExample dropdown>
  ```bash cURL theme={null}
  curl https://api.exponent.finance/open-orders/vault/Cmry6B5824MGAKrtL2u7YG9PiLZLoTBWs8hVaCJeUFaH
  ```

  ```python Python theme={null}
  import requests

  response = requests.get("https://api.exponent.finance/open-orders/vault/Cmry6B5824MGAKrtL2u7YG9PiLZLoTBWs8hVaCJeUFaH", timeout=30)
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.exponent.finance/open-orders/vault/Cmry6B5824MGAKrtL2u7YG9PiLZLoTBWs8hVaCJeUFaH");
  if (!response.ok) {
    throw new Error(`Request failed: ${response.status}`);
  }
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ApiResponse errors={{"400": {"error": "<message>"}, "500": {"error": "<message>"}}}>
  | Field | Type | Description |
  | - | - | - |
  | `id` | number | Indexed order ID. |
  | `post_offer_event_id` | number | Original posting event ID; distinguishes orders with reused offer indices. |
  | `offer_idx` | number | On-chain offer index. May be reused by subsequent orders. |
  | `orderbook_address` | string | Orderbook containing the order. |
  | `vault_address` | string | Associated vault. |
  | `user_address` | string | Owner's wallet address. |
  | `original_amount` | number | Raw input amount before any fills during posting. Denominated in SY for `buyPT`/`buyYT`, PT for `sellPT`, or YT for `sellYT`. |
  | `amount_remaining` | number | Unfilled amount at the requested timestamp, in the same denomination as `original_amount`. Divide by `10^tokenDecimals` for a human-readable token amount. |
  | `price_implied_apy` | number | Logarithmic annual rate scaled by 1,000,000. Convert to APY percent with `(exp(price_implied_apy / 1000000) - 1) × 100`. |
  | `order_type` | string | `buyPT`, `sellPT`, `buyYT`, or `sellYT`. |
  | `expiry_seconds` | number | Configured expiry duration; zero indicates no expiry. |
  | `options` | JSON | Order execution options. |
  | `tx_signature` | string | Original posting transaction signature. |
  | `created_at` | string | Posting timestamp. |
  | `updated_at` | string | Latest posting, fill, or cancellation timestamp included in the snapshot. |
  | `expiry_at` | string or null | Expiry timestamp, or `null` for orders without expiry. |
  | `is_removed` | boolean | Whether cancellation had occurred by the requested timestamp. |
  | `remove_tx_signature` | string or null | Cancellation signature; `null` if cancellation had not occurred by the requested timestamp. |
</ApiResponse>

## Snapshot behavior

* Posting and fill events at or before `at` are included.
* Orders created after `at` are excluded.
* Fills during posting and subsequent maker fills are applied according to the order type.
* Orders expiring at or before `at` are excluded.
* Cancelled orders are excluded unless `includeRemoved=true`. Their returned balance is the unfilled amount before cancellation, not funds still available to trade.
* Fully filled orders and balances at or below the indexed orderbook threshold are excluded. The fallback threshold is 500 raw units if no initialization record is available at the timestamp.
* Historical requests include orderbooks inactive today. Current requests retain the existing active-orderbook filter.
* Future fills and cancellations do not affect historical balances or cancellation metadata.

## Points integrations

Attribute orders using `user_address`, convert `price_implied_apy` to APY percent, and compare it with your market APY reference at the same timestamp. Apply your eligibility window before aggregating eligible balances by user.

For server-calculated APY range checks and separate unclaimed filled SY/YT balances, use the [orderbook in-range snapshot](/api-documentation/get-in-range-orderbook).

This endpoint does not supply historical market APY, time-weighted balances, SY conversion, or points eligibility. Unclaimed proceeds from filled orders require separate treatment. Use the default `includeRemoved=false` for resting-order eligibility.

<ResponseExample>
  ```json 200 theme={null}
  [
    {
      "id": 130438,
      "post_offer_event_id": 35224,
      "offer_idx": 11,
      "orderbook_address": "8JtnQcProV3bF1KUF9ohqRrnGpQCmMjTS6XxXv1aoXam",
      "vault_address": "Cmry6B5824MGAKrtL2u7YG9PiLZLoTBWs8hVaCJeUFaH",
      "user_address": "H4Hq9jpjd9uZvnib66wQDeCZzaCjjummYozc71ZNbn2j",
      "original_amount": 3667763,
      "amount_remaining": 3667763,
      "price_implied_apy": 101653,
      "order_type": "buyYT",
      "expiry_seconds": 604800,
      "options": {
        "__kind": "FillOrKill",
        "fields": [
          false
        ]
      },
      "tx_signature": "34CtjMgrBiY5E9qz84Nc3Rs9TGmbfZyAi8ZL8FiAerZz1h1VEPuzwkYduvMAVzZnTt5Kf1dJV6xwtz18nTb9iN57",
      "created_at": "2026-10-14T13:59:17+00:00",
      "updated_at": "2026-10-14T13:59:17+00:00",
      "expiry_at": "2026-10-21T13:59:17+00:00",
      "is_removed": false,
      "remove_tx_signature": null
    },
    {
      "id": 130437,
      "post_offer_event_id": 35223,
      "offer_idx": 10,
      "orderbook_address": "8JtnQcProV3bF1KUF9ohqRrnGpQCmMjTS6XxXv1aoXam",
      "vault_address": "Cmry6B5824MGAKrtL2u7YG9PiLZLoTBWs8hVaCJeUFaH",
      "user_address": "H4Hq9jpjd9uZvnib66wQDeCZzaCjjummYozc71ZNbn2j",
      "original_amount": 34564864,
      "amount_remaining": 34564864,
      "price_implied_apy": 107059,
      "order_type": "buyYT",
      "expiry_seconds": 604800,
      "options": {
        "__kind": "FillOrKill",
        "fields": [
          false
        ]
      },
      "tx_signature": "3bC3JvuCwR4ANtB31mHLr3hQmd2j51NGLNwt2U1y8msjBqC5dgqdY4zLyZtU3d89LE9HqDbaxM5kqkndtrTaMTQ2",
      "created_at": "2026-10-14T13:42:45+00:00",
      "updated_at": "2026-10-14T13:42:45+00:00",
      "expiry_at": "2026-10-21T13:42:45+00:00",
      "is_removed": false,
      "remove_tx_signature": null
    }
  ]
  ```

  ```json 400 theme={null}
  {
    "error": "<message>"
  }
  ```

  ```json 500 theme={null}
  {
    "error": "<message>"
  }
  ```
</ResponseExample>

Historical responses reflect the data available at request time. Late-arriving data or corrections can change earlier results.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.