{
  "openapi": "3.1.0",
  "info": {
    "title": "OpenYield Data Services API",
    "description": "### Introduction\n\n**Welcome to [OpenYield](https://openyld.com) Data Services.**\n\nPower your applications with high-fidelity fixed-income data derived directly from the [OpenYield](https://openyld.com) marketplace. We are bringing true transparency to the bond market by delivering pricing powered by firm orders — setting a new standard of accuracy in a market often obscured by indicative quotes. The API also includes basic reference data, market-wide tape, and analytics used to power our own institutional-grade trading platform.\n\n**Interactive Demo**: Visualize this data in action using your credentials at [https://data.openyld.com](https://data.openyld.com).\n\n### Coverage\n\nThe API includes:\n\n- Reference – basic reference data\n- Pricing – daily and intraday pricing, top-of-book search, and the live Treasury benchmark curve (REST and WebSocket)\n- Analytics – price/yield/spread conversion and cashflow schedules\n- Reported – TRACE and MSRB prints and statistics, and marketplace inventory\n\nCoverage includes:\n\n- Treasuries (Bills, Notes & Bonds)\n- Municipals (Taxable & Tax-Exempt)\n- Corporates (IG & HY)\n- Agencies\n- Certificates of Deposit\n\n### Limits and Offsets\n\nEndpoints that return lists are paged with `limit` and `offset`:\n\n- `limit` is the maximum number of records to return. It defaults to 100 and is capped at 500; a larger value is reduced to the cap. **Close Prices by Asset** and **Search Top-of-Book Prices** allow up to 5000. **Recent Prints for Security** defaults to 10 and is capped at 100.\n- `offset` is the zero-based index of the first record to return (default 0). To get the next page, add the number of records returned to `offset`. A page with fewer than `limit` records is the last one.\n- **Search Top-of-Book Prices** only serves the first 5000 matches: a request where `offset + limit` exceeds 5000 returns `400`.\n\nThe historical and today's MSRB/TRACE print endpoints page by sequence number instead. Each call returns up to 500 prints in sequence order, starting *at* the `{sequence}` you pass (inclusive). To get the next batch, pass the last sequence number you received and skip the prints you already have. A batch of fewer than 500 prints means you have caught up.\n\n### Daily Limits\n\n**Security by Identifier** allows 5,000 calls per account per day by default, counted in Eastern time and reset at midnight ET. Calls over the limit return `429`. [Contact OpenYield](mailto:intro@openyld.com) if you need a higher limit.\n\n### API Usage\n\nAccess to the [OpenYield](https://openyld.com) Data Services API requires a signed OpenYield Data Services Agreement. [Request Access](mailto:intro@openyld.com).\n\n### Decimal values\n\nDecimal values are JSON strings. Calculated and quoted prices use five decimal places. Coupon rates, REST yields, standard deviations and yield-curve tenors and yields use six. Currency amounts, notionals and spreads use two. Rounding is half to even. Missing optional values remain `null`. Raw reported and executed trade prices preserve their stored precision rather than using the five-place price format. Quantities retain their existing units and precision. The TRACE stream's legacy `printyield` field also retains its existing precision.\n\n### What's new in 1.6.0\n\n- **Count Prints:** `GET /reported/prints/counts` counts the TRACE or MSRB prints of one New York trade date that match filters (trade time, securities, ATS, parties, side, size), with their par, optionally grouped by up to two of `is_ats`, `report_party`, `contra_party`, `side`, `hour`, `size` and `security`. One call answers \"how many ATS prints so far today?\". The reply states `reported_through` and the account's `entitlements`.\n- **Entitlements in every print reply:** Recent Prints for Security, Prints for Security and Date, Print Statistics for Security, Print Volume by Asset, the TRACE and MSRB feeds and Count Prints carry `entitlements` (`real_time_trace`, and `history_from`, the earliest trade date the account can see) and `reported_through`, the latest report time included. Existing fields are unchanged.\n\n### What's new in 1.5.0\n\n- **Intraday prices are bid and ask:** Intraday Prices for Security and the Latest Intraday Prices endpoints return `bid_price`, `bid_yield`, `bid_quantity`, `ask_price`, `ask_yield` and `ask_quantity` in place of a mid `price` and `yield`. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` give the mid only when both sides are quoted. Close and daily prices and the yield curve stay mids.\n- **Grades from S&P ratings:** `IG` is BBB- or better and `HY` BB+ or lower, in the search `grade` filter and in the `grade` of search results, Security by Identifier and Print Volume by Asset. Unrated bonds and Treasuries have no grade. `grade=EM` still selects the vendor's emerging-markets bonds.\n- **Search by issuer:** the search `name` filter also matches the issuer's name and a municipal bond's project or obligor, so `Apple` or `New York N Y` finds their bonds. Spelled-out words match their CUSIP abbreviations, so `Port Authority` finds `PORT AUTH N Y & N J`.\n- **Muni tax status in search:** municipal search results carry `fed_taxable` and `state_taxable`, as in Security by Identifier.\n- **Fixed-to-float bonds:** the interest rate type `Invert` is now `FixedToFloat`, in `income` (Security by Identifier) and `interest_rate_type` (search). The search filter takes `FixedToFloat`, and still accepts `Invert`.\n- **Shortcuts as identifiers:** every endpoint that takes a security identifier also takes an OpenYield shortcut, such as `CT10` or `AAPL30`, for the newest bond that carries it. A shortcut shared by bonds issued the same day returns `400` naming them. The search `id` filter matches shortcuts too.\n- **Next call dates need a call price:** `next_call_date` in Security by Identifier, and `is_callable` in search, count a next call only when a call at a set price backs it. The start of a make-whole period is no longer shown as a call date.\n- **Close yields:** in Close Prices by Asset and Daily Prices for Security, a yield that can't be computed, as for floating-rate bonds, or that is implausible for the price (below -2%, or above 25% and 75% for corporates) is `null`. Those closes used to show a yield of `0`.\n- **Calculator errors name the bond type:** Compute Price/Yield on a floating-rate, variable-rate, fixed-to-float or step-coupon bond says that it prices only fixed-rate and zero-coupon bonds, instead of a general failure.\n\n### What's new in 1.4.0\n\n- **Decimals:** prices have five decimal places; yields, coupons and curve tenors six; amounts, notionals and spreads two.\n- **Missing values are `null`, never `0`:** a missing bid or offer in search, and a yield that wasn't reported or can't be computed, in search, prints and the TRACE stream. A print's ISIN is `null` for a security OpenYield doesn't carry, and its CUSIP is `null` when none was reported.\n- **Trade times:** REST print times carry their UTC offset, such as `2025-09-03T13:00:47-04:00`, and the TRACE stream's times are now the correct instant. Prints for Security and Date, Print Statistics and Print Volume by Asset group by New York trade date.\n- **Recent Prints for Security:** the most recent prints from any day, 10 by default.\n- **Errors:** an identifier we don't carry returns `404`; an invalid check digit and an impossible date return `400` with a specific message; the calculators return `503` while unavailable.\n- **Search:** `total` counts every match, `as_of` keeps later pages on the first page's snapshot, municipal rows carry sector and industry, and identifiers and tickers match in any case and across share classes.\n- **Daily Prices for Security:** OpenYield closes only; a day without one has no entry.\n- **Yield curve:** latest intraday prices and the curve follow the New York date. Between a bill's auction and its first quote, the curve shows the bill it replaced, under that bill's own shortcut.\n",
    "contact": {
      "name": "OpenYield",
      "url": "https://openyld.com",
      "email": "intro@openyld.com"
    },
    "license": {
      "name": "Proprietary"
    },
    "version": "1.6.0"
  },
  "servers": [
    {
      "url": "https://api.openyld.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/auth/login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Login",
        "description": "Authenticates a user and returns a bearer token (JWT). Send it as `Authorization: Bearer <token>` on every other request, including the WebSocket streams. The token expires after a period set by OpenYield; after that, requests return 401 and you need to log in again.\n\nAfter 5 wrong passwords, an email is locked out for 15 minutes and login returns 429.\n\nThe response also sets a `token` cookie (HTTP-only, SameSite=Lax) mirroring the returned token.",
        "operationId": "new",
        "requestBody": {
          "description": "Login credentials.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginParameters"
              },
              "example": {
                "email": "user@example.com",
                "password": "<password>"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful authentication",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginBody"
                },
                "example": {
                  "status": "Success",
                  "token": "<jwt>",
                  "user": {
                    "name": "Jane Doe",
                    "email": "user@example.com",
                    "role": "User"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "User email or password not valid"
                }
              }
            }
          },
          "429": {
            "description": "Too many failed attempts for this email; `Retry-After` gives the seconds to wait",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Too many failed attempts. Try again in 15 minutes."
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          },
          "503": {
            "description": "Too many logins in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Sign-in is busy; try again in a few minutes"
                }
              }
            }
          }
        }
      }
    },
    "/auth/logout": {
      "get": {
        "tags": [
          "Authentication"
        ],
        "summary": "Logout",
        "description": "Clears the `token` cookie set by Login (used by browser sessions).\n\nThis does not revoke the token itself: a bearer token stays valid until it expires, so discard it on the client.",
        "operationId": "delete",
        "responses": {
          "200": {
            "description": "Logged out",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LogoutBody"
                },
                "example": {
                  "status": "Logout successful"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/compute/bondcalc": {
      "post": {
        "tags": [
          "Analytics"
        ],
        "summary": "Compute Price/Yield",
        "description": "Given one input value (`parameter`) and its type (`kind`, e.g. `Price` or `YieldToWorst`), returns the bond's price, yields and spread to benchmark.\n\nUnits: prices are per 100 face, yields are in percent, and spreads are in basis points.\n\nSpread calculations require a usable benchmark rate dated today. They return HTTP 422 when that rate is missing, including weekends, market holidays and before the day's rate is available. A previous business-day rate is not substituted.",
        "operationId": "bondcalc",
        "requestBody": {
          "description": "Bond calculation parameters.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiComputeRequest"
              },
              "example": {
                "id": "US74460WAH07",
                "kind": "Price",
                "parameter": "99.00",
                "as_at": "2025-09-05"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BondCalcResponse"
                },
                "example": {
                  "result": {
                    "isin": "US74460WAH07",
                    "cusip": "74460WAH0",
                    "price": "99.00000",
                    "name": "PSA 5.35 2053-08-01",
                    "yield_to_worst": "5.419537",
                    "yield_to_maturity": "5.419537",
                    "as_at": "2025-09-05",
                    "benchmark": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "422": {
            "description": "The calculation cannot be completed for these inputs or the required benchmark is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          },
          "503": {
            "description": "The calculator is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Price, yield and cashflow calculations are unavailable right now; try again shortly"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/compute/cashflow": {
      "post": {
        "tags": [
          "Analytics"
        ],
        "summary": "Compute Cashflow",
        "description": "This API returns the payment parameters and future cash flows for a quantity of a bond traded at a price.\n\nUnits: `quantity` is in bonds ($1,000 face each), prices are per 100 face, and cash amounts are in dollars.",
        "operationId": "cashflow",
        "requestBody": {
          "description": "Cashflow calculation parameters.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiCashflowRequest"
              },
              "example": {
                "id": "US037833CR93",
                "price": "100.0",
                "quantity": "1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CashflowResponse"
                },
                "example": {
                  "cashflow": {
                    "isin": "US037833CR93",
                    "cusip": "037833CR9",
                    "name": "AAPL 3.2 2027-05-11",
                    "trade_date": "2025-09-04",
                    "settlement_date": "2025-09-05",
                    "quantity": "1",
                    "price": "100.00000",
                    "principal": "1000.00",
                    "accrued_amount": "10.13",
                    "accrued_days": 114,
                    "settlement_amount": "1010.13",
                    "par_price": "100.00000",
                    "cashflows": [
                      {
                        "quantity": "1",
                        "period_start": "2025-05-11",
                        "period_end": "2025-11-11",
                        "period_pay_date": "2025-11-12",
                        "coupon_rate": "3.200000",
                        "day_count": "30/360",
                        "interest_amount": "16.00",
                        "principal_amount": "0.00",
                        "call_quantity": null,
                        "call_price": null
                      },
                      {
                        "quantity": "1",
                        "period_start": "2025-11-11",
                        "period_end": "2026-05-11",
                        "period_pay_date": "2026-05-11",
                        "coupon_rate": "3.200000",
                        "day_count": "30/360",
                        "interest_amount": "16.00",
                        "principal_amount": "0.00",
                        "call_quantity": null,
                        "call_price": null
                      },
                      {
                        "quantity": "1",
                        "period_start": "2026-05-11",
                        "period_end": "2026-11-11",
                        "period_pay_date": "2026-11-12",
                        "coupon_rate": "3.200000",
                        "day_count": "30/360",
                        "interest_amount": "16.00",
                        "principal_amount": "0.00",
                        "call_quantity": null,
                        "call_price": null
                      },
                      {
                        "quantity": "1",
                        "period_start": "2026-11-11",
                        "period_end": "2027-05-11",
                        "period_pay_date": "2027-05-11",
                        "coupon_rate": "3.200000",
                        "day_count": "30/360",
                        "interest_amount": "16.00",
                        "principal_amount": "1000.00",
                        "call_quantity": null,
                        "call_price": null
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "422": {
            "description": "The calculation cannot be completed for these inputs or the required benchmark is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          },
          "503": {
            "description": "The calculator is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Price, yield and cashflow calculations are unavailable right now; try again shortly"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/close/{asset}": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Close Prices by Asset",
        "description": "This API returns the OpenYield close mid price and yield as of the previous business day for all securities in the given asset class.\n\nResults are sorted by maturity (ascending), then ISIN. `limit` can be raised to 5000 for bulk retrieval.",
        "operationId": "prices_close_by_asset",
        "parameters": [
          {
            "name": "asset",
            "in": "path",
            "description": "Asset class. One of: `government`, `corporate`, `municipal`, `agency`, `certificate`, or a single class as inventory and reference data name it, such as `TreasuryBill`.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "corporate",
                "government",
                "municipal",
                "agency",
                "certificate"
              ]
            },
            "example": "government"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 5000\nare reduced to 5000.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 5000,
              "minimum": 0
            },
            "example": 5000
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatedPricesResponse"
                },
                "example": {
                  "prices": [
                    {
                      "isin": "US912797PW16",
                      "cusip": "912797PW1",
                      "name": "B 0.0 2025-09-11",
                      "maturity": "2025-09-11",
                      "price_date": "2025-09-09",
                      "price": "99.98845",
                      "yield": "3.942734815"
                    },
                    {
                      "isin": "US91282CFK27",
                      "cusip": "91282CFK2",
                      "name": "T 3.5 2025-09-15",
                      "maturity": "2025-09-15",
                      "price_date": "2025-09-09",
                      "price": "99.9905",
                      "yield": "3.800662270"
                    },
                    {
                      "isin": "US912797QU41",
                      "cusip": "912797QU4",
                      "name": "B 0.0 2025-09-16",
                      "maturity": "2025-09-16",
                      "price_date": "2025-09-09",
                      "price": "99.92965",
                      "yield": "4.282699410"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — unknown asset class, or one your account is not entitled to. The message lists the asset classes available to you.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [foo] not found or not allowed for this endpoint. Available asset classes: [\"corporate\", \"government\", \"municipal\", \"agency\", \"certificate\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/daily/{id}": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Daily Prices for Security",
        "description": "This API returns end-of-day daily mid prices for a given security for the past ~3 months.\n\nNote: entries are returned sorted by `price_date` in descending order.",
        "operationId": "prices_daily_by_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US912797RL33"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SingleSecurityDatedPriceListResponse"
                },
                "example": {
                  "isin": "US912797RL33",
                  "cusip": "912797RL3",
                  "name": "B 0.0 2026-02-05",
                  "prices": [
                    {
                      "price_date": "2025-09-03",
                      "price": "98.35195",
                      "yield": "3.985392860"
                    },
                    {
                      "price_date": "2025-09-02",
                      "price": "98.32835",
                      "yield": "3.990605460"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/intraday/agency": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Latest Intraday Prices for Agencies",
        "description": "This API returns the *latest* intraday bid and ask today for all available agency securities: each security's most recent snapshot today that had a quote. Snapshots are taken about every 10 minutes. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` are the average of bid and ask when both sides are quoted, and `null` otherwise.\n\nNote: Results are sorted by `maturity` (ascending), then `isin` (ascending).",
        "operationId": "prices_intraday_agency",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesResponse"
                },
                "example": {
                  "prices": [
                    {
                      "isin": "US3135G0T60",
                      "cusip": "3135G0T60",
                      "name": "FNMA 2.0 2027-01-05",
                      "maturity": "2027-01-05",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": "96.18000",
                      "bid_yield": "4.156620",
                      "bid_quantity": "[100-1000)",
                      "ask_price": "96.28800",
                      "ask_yield": "4.090310",
                      "ask_quantity": "[100-1000)",
                      "mid_price": "96.23400",
                      "mid_yield": "4.123465"
                    },
                    {
                      "isin": "US3130AWKC38",
                      "cusip": "3130AWKC3",
                      "name": "FHLB 4.125 2028-09-28",
                      "maturity": "2028-09-28",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": null,
                      "bid_yield": null,
                      "bid_quantity": null,
                      "ask_price": "99.87500",
                      "ask_yield": "4.162346",
                      "ask_quantity": "[0-100)",
                      "mid_price": null,
                      "mid_yield": null
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — your account is not entitled to this asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [agency] not found or not allowed for this endpoint. Available asset classes: [\"corporate\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/intraday/certificate": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Latest Intraday Prices for Certificates of Deposit",
        "description": "This API returns the *latest* intraday bid and ask today for all available certificate of deposit securities: each security's most recent snapshot today that had a quote. Snapshots are taken about every 10 minutes. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` are the average of bid and ask when both sides are quoted, and `null` otherwise.\n\nNote: Results are sorted by `isin` (ascending).",
        "operationId": "prices_intraday_certificate",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesResponse"
                },
                "example": {
                  "prices": [
                    {
                      "isin": "US06406RBL36",
                      "cusip": "06406RBL3",
                      "name": "BAC CD 5.0 2026-03-15",
                      "maturity": "2026-03-15",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": null,
                      "bid_yield": null,
                      "bid_quantity": null,
                      "ask_price": "99.87500",
                      "ask_yield": "5.063457",
                      "ask_quantity": "[0-100)",
                      "mid_price": null,
                      "mid_yield": null
                    },
                    {
                      "isin": "US17327TBC81",
                      "cusip": "17327TBC8",
                      "name": "C CD 4.85 2026-06-22",
                      "maturity": "2026-06-22",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": "99.45000",
                      "bid_yield": "5.031220",
                      "bid_quantity": "[0-100)",
                      "ask_price": "99.51200",
                      "ask_yield": "4.987654",
                      "ask_quantity": "[0-100)",
                      "mid_price": "99.48100",
                      "mid_yield": "5.009437"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — your account is not entitled to this asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [certificate] not found or not allowed for this endpoint. Available asset classes: [\"corporate\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/intraday/corporate": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Latest Intraday Prices for Corporates",
        "description": "This API returns the *latest* intraday bid and ask today for all available corporate securities: each security's most recent snapshot today that had a quote. Snapshots are taken about every 10 minutes. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` are the average of bid and ask when both sides are quoted, and `null` otherwise.\n\nNote: Results are sorted by `isin` (ascending).",
        "operationId": "prices_intraday_corporate",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesResponse"
                },
                "example": {
                  "prices": [
                    {
                      "isin": "US037833CR93",
                      "cusip": "037833CR9",
                      "name": "AAPL 3.2 2027-05-11",
                      "maturity": "2027-05-11",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": "98.40000",
                      "bid_yield": "3.950210",
                      "bid_quantity": "[100-1000)",
                      "ask_price": "98.51200",
                      "ask_yield": "3.874480",
                      "ask_quantity": "[0-100)",
                      "mid_price": "98.45600",
                      "mid_yield": "3.912345"
                    },
                    {
                      "isin": "US650116DA16",
                      "cusip": "650116DA1",
                      "name": "NFLX 4.875 2030-04-15",
                      "maturity": "2030-04-15",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": null,
                      "bid_yield": null,
                      "bid_quantity": null,
                      "ask_price": "97.12500",
                      "ask_yield": "5.234568",
                      "ask_quantity": "[0-100)",
                      "mid_price": null,
                      "mid_yield": null
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — your account is not entitled to this asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [corporate] not found or not allowed for this endpoint. Available asset classes: [\"government\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/intraday/government": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Latest Intraday Prices for Governments",
        "description": "This API returns the *latest* intraday bid and ask today for all available government securities: each security's most recent snapshot today that had a quote. Snapshots are taken about every 10 minutes. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` are the average of bid and ask when both sides are quoted, and `null` otherwise.\n\nNote: Government results are sorted by `maturity` (ascending), then `isin` (ascending).",
        "operationId": "prices_intraday_government",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesResponse"
                },
                "example": {
                  "prices": [
                    {
                      "isin": "US912797QT77",
                      "cusip": "912797QT7",
                      "name": "B 0.0 2025-09-09",
                      "maturity": "2025-09-09",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": "99.95260",
                      "bid_yield": "4.346030",
                      "bid_quantity": "[1000+]",
                      "ask_price": "99.95350",
                      "ask_yield": "4.263090",
                      "ask_quantity": "[1000+]",
                      "mid_price": "99.95305",
                      "mid_yield": "4.304560"
                    },
                    {
                      "isin": "US912797PW16",
                      "cusip": "912797PW1",
                      "name": "B 0.0 2025-09-11",
                      "maturity": "2025-09-11",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": "99.93000",
                      "bid_yield": "4.262910",
                      "bid_quantity": "[100-1000)",
                      "ask_price": null,
                      "ask_yield": null,
                      "ask_quantity": null,
                      "mid_price": null,
                      "mid_yield": null
                    },
                    {
                      "isin": "US91282CFK27",
                      "cusip": "91282CFK2",
                      "name": "T 3.5 2025-09-15",
                      "maturity": "2025-09-15",
                      "as_at": "2025-09-04T17:00:00Z",
                      "bid_price": null,
                      "bid_yield": null,
                      "bid_quantity": null,
                      "ask_price": "99.98047",
                      "ask_yield": "4.315020",
                      "ask_quantity": "[0-100)",
                      "mid_price": null,
                      "mid_yield": null
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — your account is not entitled to this asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [government] not found or not allowed for this endpoint. Available asset classes: [\"corporate\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/intraday/{id}": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Intraday Prices for Security",
        "description": "This API returns today's intraday bid and ask for a given security (ISIN, CUSIP, FIGI or a shortcut such as CT10). Each row is the top of book at one of the snapshots taken about every 10 minutes: the best bid and ask with their yields and size buckets. A side with no quote is `null`, so a one-sided book shows as one. `mid_price` and `mid_yield` are the average of bid and ask when both sides are quoted, and `null` otherwise. Snapshots with no quote on either side are left out.\n\nNote: entries are returned sorted by `as_at` in ascending order.",
        "operationId": "prices_intraday_by_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US912797RL33"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SingleSecurityPriceListResponse"
                },
                "example": {
                  "isin": "US912797RL33",
                  "cusip": "912797RL3",
                  "name": "B 0.0 2026-02-05",
                  "prices": [
                    {
                      "as_at": "2025-09-04T13:30:00Z",
                      "bid_price": "98.36100",
                      "bid_yield": "3.971020",
                      "bid_quantity": "[1000+]",
                      "ask_price": "98.36330",
                      "ask_yield": "3.968755",
                      "ask_quantity": "[100-1000)",
                      "mid_price": "98.36215",
                      "mid_yield": "3.969888"
                    },
                    {
                      "as_at": "2025-09-04T13:40:00Z",
                      "bid_price": "98.36050",
                      "bid_yield": "3.971512",
                      "bid_quantity": "[1000+]",
                      "ask_price": "98.36270",
                      "ask_yield": "3.969345",
                      "ask_quantity": "[100-1000)",
                      "mid_price": "98.36160",
                      "mid_yield": "3.970428"
                    },
                    {
                      "as_at": "2025-09-04T13:50:00Z",
                      "bid_price": "98.36030",
                      "bid_yield": "3.971709",
                      "bid_quantity": "[1000+]",
                      "ask_price": null,
                      "ask_yield": null,
                      "ask_quantity": null,
                      "mid_price": null,
                      "mid_yield": null
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/search": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Search Top-of-Book Prices",
        "description": "Search securities and return their latest top-of-book bid/ask prices and quantities.\n\nAt least one filter parameter is required (`limit`, `offset` and `as_of` do not count).\n\n`total` counts the matches across all pages. To page through one snapshot, pass the first response's `as_of` with each later page.\n\n`quantity_min`/`quantity_max` and `yield_min`/`yield_max` match if either side (bid or ask) satisfies the bound.\n\n`maturity_min`/`maturity_max` are interpreted as the year of maturity; values < 100 are added to the current year (so `5` means \"5 years from now\").\n\nResults are sorted by ask yield (descending, nulls last), then maturity (ascending), then ISIN. Only securities with at least one priced side are returned.\n\nPagination is capped: `offset + limit` cannot exceed 5000. `limit` can be raised to 5000, so a single request can return the whole window.",
        "operationId": "prices_search",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Exact match against CUSIP, ISIN, FIGI or shortcut (case-insensitive), such as\n`CT10`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "US037833EW60"
          },
          {
            "name": "ticker",
            "in": "query",
            "description": "Issuer ticker (case-insensitive): the equity ticker, or the debt ticker\nthat starts the bond names, with or without a share class, so `BRK.B`\nalso matches `BRK`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "AAPL"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Case-insensitive substring of the bond's name, its issuer's name, or\na municipal bond's project or obligor (e.g. `Apple` or `New York N Y`).\nSpelled-out words also match their CUSIP abbreviations, so `Port\nAuthority` finds `PORT AUTH N Y & N J`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Apple"
          },
          {
            "name": "sector",
            "in": "query",
            "description": "Case-insensitive substring match across the security's sector, industry, state, use of\nproceeds, and municipal purpose class and subclass (e.g. `Finance`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Manufacturing"
          },
          {
            "name": "asset",
            "in": "query",
            "description": "Asset class. One or more of: `government`, `corporate`, `municipal`,\n`agency`, `certificate`. Multiple values may be supplied as a\ncomma-separated list (e.g. `asset=government,corporate`). The names\ninventory and reference data use, such as `CorporateBond` or\n`TreasuryBill`, also work and select only that class. Defaults to all\nasset classes your account is entitled to.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "corporate"
          },
          {
            "name": "coupon_min",
            "in": "query",
            "description": "Minimum coupon, in percent (e.g. `3.5`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "3.5"
          },
          {
            "name": "coupon_max",
            "in": "query",
            "description": "Maximum coupon, in percent.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "6.0"
          },
          {
            "name": "maturity_min",
            "in": "query",
            "description": "Minimum maturity year (e.g. `2030`). Values < 100 are added to the current\nyear (so `5` means \"5 years from now\").",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2030"
          },
          {
            "name": "maturity_max",
            "in": "query",
            "description": "Maximum maturity year. See `maturity_min` for the < 100 shortcut.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2040"
          },
          {
            "name": "quantity_min",
            "in": "query",
            "description": "Minimum quantity, in bonds ($1,000 face each). Matches if either the bid or\nask quantity is >= this. Compared against the actual resting quantity,\nnot the bucket shown in `bid_quantity` / `ask_quantity`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "5"
          },
          {
            "name": "quantity_max",
            "in": "query",
            "description": "Maximum quantity, in bonds ($1,000 face each). Matches if either the bid or\nask quantity is <= this. Compared against the actual resting quantity,\nnot the bucket shown in `bid_quantity` / `ask_quantity`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "1000"
          },
          {
            "name": "yield_min",
            "in": "query",
            "description": "Minimum yield, in percent. Matches when a present bid or ask satisfies both supplied yield bounds.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "3.0"
          },
          {
            "name": "yield_max",
            "in": "query",
            "description": "Maximum yield, in percent. Both supplied yield bounds must be satisfied by the same side.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "8.0"
          },
          {
            "name": "tax_exempt_status",
            "in": "query",
            "description": "Filter by federal tax status. `exempt` matches bonds whose federal tax\nstatus is `TaxExempt`; `taxable` matches `Taxable`. Bonds subject to AMT,\nor with unknown status, match neither. Supplying both\n(`tax_exempt_status=exempt,taxable`) applies no tax filter.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "exempt"
          },
          {
            "name": "interest_rate_type",
            "in": "query",
            "description": "Interest rate type. One or more of: `Fixed`, `Float`, `Variable`,\n`Step`, `Zero`, `FixedToFloat` (the same values as `income` in Security\nby Identifier). Matched case-insensitively; multiple values may be\nsupplied as a comma-separated list (e.g. `interest_rate_type=Fixed,Zero`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Fixed"
          },
          {
            "name": "is_callable",
            "in": "query",
            "description": "Restrict to callable (`true`) or non-callable (`false`) bonds.",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "is_putable",
            "in": "query",
            "description": "Restrict to putable (`true`) or non-putable (`false`) bonds.",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "is_make_whole",
            "in": "query",
            "description": "Restrict to bonds whose retained schedules do (`true`) or do not\n(`false`) contain a make-whole call provision. A next call date is not required.\nFew make-whole provisions are in the call schedules yet, so `true` finds\nalmost none.",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "issue_date_min",
            "in": "query",
            "description": "Earliest issue date, inclusive (`YYYY-MM-DD`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2020-01-01"
          },
          {
            "name": "issue_date_max",
            "in": "query",
            "description": "Latest issue date, inclusive (`YYYY-MM-DD`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2026-01-01"
          },
          {
            "name": "grade",
            "in": "query",
            "description": "Credit grade. `IG` is an S&P rating of BBB- or better and `HY` BB+ or\nlower; unrated securities and Treasuries match neither. `EM` is the\nvendor's emerging-markets classification; those bonds show their S&P\ngrade. One or more, comma-separated (e.g. `grade=IG,EM`).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "IG"
          },
          {
            "name": "state",
            "in": "query",
            "description": "Two-letter state or territory code of the municipal issuer. Multiple\nvalues may be supplied as a comma-separated list (e.g. `state=NY,CA`).\nSupplying `state` restricts results to municipal bonds.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "NY"
          },
          {
            "name": "as_of",
            "in": "query",
            "description": "Snapshot to read, as the `as_of` of an earlier response (ISO 8601). Pass\npage 1's `as_of` on later pages so they don't mix snapshots. Snapshots\nare kept for 30 days. Not a filter on its own.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2026-10-26T14:30:00Z"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 5000\nare reduced to 5000.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 5000,
              "minimum": 0
            },
            "example": 5000
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                },
                "example": {
                  "as_of": "2026-05-07T18:30:00Z",
                  "results": [
                    {
                      "isin": "US037833EW60",
                      "cusip": "037833EW6",
                      "name": "AAPL 4.85 2053-05-10",
                      "asset": "CorporateBond",
                      "coupon": "4.85",
                      "maturity": "2053-05-10",
                      "bid_price": "94.53",
                      "bid_yield": "5.230",
                      "bid_quantity": "[100-1000)",
                      "ask_price": "94.96",
                      "ask_yield": "5.200",
                      "ask_quantity": "[0-100)",
                      "interest_rate_type": "Fixed",
                      "grade": "IG",
                      "issue_date": "2023-05-10",
                      "sector": "Manufacturing",
                      "industry": "Electronic Computer Manufacturing",
                      "state": null,
                      "is_callable": true,
                      "is_putable": false,
                      "is_make_whole": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request — no filter parameter was supplied, `offset + limit` exceeds 5000, or `issue_date_min`/`issue_date_max` is not `YYYY-MM-DD`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "At least one search parameter is required."
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — an `asset` value is unknown or one your account is not entitled to. The message lists the asset classes available to you.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [foo] not found or not allowed for this endpoint. Available asset classes: [\"corporate\", \"government\", \"municipal\", \"agency\", \"certificate\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/prices/yield_curve": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Treasury Benchmark Yield Curve",
        "description": "Returns the live US Treasury benchmark yield curve, sorted by tenor from shortest to longest. Bill points below one year are included when available.\n\nA new bill has no yield between its auction and its first quote. Until it has one, its point shows the bill it replaced, under that bill's own shortcut (ending in `B`, such as CB06B), ISIN and name, with its own previous close and latest 10-minute mid.\n\nFields:\n- `as_of`: latest timestamp across the benchmark points returned.\n- `benchmarks`: yield-curve benchmark points ordered by tenor.\n- `tenor`: benchmark tenor in years as a string with six decimal places.\n- `shortcut`: OpenYield shortcut code, such as CT02 or CT10; CB06B for a replaced bill shown in place of a new one.\n- `isin`: benchmark ISIN.\n- `cusip`: benchmark CUSIP, when available.\n- `name`: benchmark display name. It starts with the issue's ticker: `T` for a note or bond, `B` for a bill, `WIT` or `WIB` when the issue is when-issued (announced but not yet auctioned), and `XIT` or `XIB` for a reopened issue between its auction and settlement. The prefix changes with the issue's status; the ISIN and CUSIP don't.\n- `previous`: previous close benchmark yield, rounded half-even to six decimal places.\n- `current`: current live OpenYield benchmark yield, rounded half-even to six decimal places. It is the mid of the order book's best bid and offer yields, updated as quotes change. With only a bid or an offer, it is that side's yield moved by half the benchmark's last two-sided spread. So it can differ from the bid and ask yields in Intraday Prices and Search, which are 10-minute snapshots of the book.",
        "operationId": "prices_yield_curve",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/YieldCurveResponse"
                },
                "example": {
                  "as_of": "2026-03-12T15:30:00Z",
                  "benchmarks": [
                    {
                      "tenor": "2.000000",
                      "shortcut": "CT02",
                      "isin": "US91282CQB09",
                      "cusip": "91282CQB0",
                      "name": "T 3.375 2028-02-29",
                      "previous": "3.983000",
                      "current": "3.995000"
                    },
                    {
                      "tenor": "3.000000",
                      "shortcut": "CT03",
                      "isin": "US91282CQA26",
                      "cusip": "91282CQA2",
                      "name": "T 4.000 2029-02-15",
                      "previous": "3.954000",
                      "current": "3.966000"
                    },
                    {
                      "tenor": "5.000000",
                      "shortcut": "CT05",
                      "isin": "US91282CQD64",
                      "cusip": "91282CQD6",
                      "name": "T 4.125 2031-02-15",
                      "previous": "4.021000",
                      "current": "4.015000"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reference/security/list": {
      "get": {
        "tags": [
          "Reference"
        ],
        "summary": "Tradable Securities List",
        "description": "Returns the government, corporate and certificate of deposit securities tradable on the OpenYield ATS (excludes 144A and municipal securities). Available to subscribers on request; other accounts receive 401 `Unauthorized`.",
        "operationId": "list",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityListResponse"
                },
                "example": {
                  "securities": [
                    {
                      "isin": "US912797RL33",
                      "cusip": "912797RL3",
                      "name": "B 0.0 2026-02-05",
                      "asset": "TreasuryBill"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — not logged in, or the account is not enabled for this list (`{\"error\": \"Unauthorized\"}`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reference/security/{id}": {
      "get": {
        "tags": [
          "Reference"
        ],
        "summary": "Security by Identifier",
        "description": "This API returns reference data for a single security (ISIN, CUSIP or FIGI).\n\nNote: some fields may be omitted or null depending on availability and your permissions (e.g. `rating_snp`).\n\nBy default each account may make 5,000 calls a day, counted in Eastern time; further calls return 429 until midnight ET. Contact OpenYield if you need more.",
        "operationId": "id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US023135BS49"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SingleSecurityResponse"
                },
                "example": {
                  "security": {
                    "isin": "US023135BS49",
                    "cusip": "023135BS4",
                    "figi": "BBG00V6PVBS0",
                    "name": "AMZN 1.5 2030-06-03",
                    "shortcut": null,
                    "asset": "CorporateBond",
                    "grade": "IG",
                    "next_call_date": "2030-03-03",
                    "next_put_date": null,
                    "next_sink_date": null,
                    "next_coupon_date": "2025-12-03",
                    "accrual_date": "2020-06-03",
                    "maturity_date": "2030-06-03",
                    "coupon": "1.500000",
                    "income": "Fixed",
                    "frequency": "SemiAnnual",
                    "issue_notional": "2000000000.00",
                    "outstanding_notional": "2000000000.00",
                    "issuer": "Amazon.com, Inc.",
                    "benchmark_isin": "US91282CNX55",
                    "borrower": "Amazon.com, Inc.",
                    "rating_snp": "AA",
                    "corporate_bond_detail": {
                      "sector": "Retail Trade",
                      "industry": "Electronic Shopping and Mail-Order Houses",
                      "seniority": "Senior",
                      "secured": "Unsecured"
                    },
                    "municipal_bond_detail": null
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — the identifier is not a valid ISIN, CUSIP, FIGI or shortcut, a shortcut is shared by bonds issued the same day, or a check digit is wrong",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — your account is not entitled to this security's asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests — the account's daily limit is used up",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Daily limit of 5000 Security by Identifier calls reached; it resets at midnight ET"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reference/ticker/{ticker}": {
      "get": {
        "tags": [
          "Reference"
        ],
        "summary": "Securities by Ticker",
        "description": "Returns the active, tradable corporate bonds for the given ticker, with the same fields as the Tradable Securities List.\n\nA bond matches when its issuer has this equity ticker, or when its name starts with this debt ticker. The match is case-insensitive and also tries the ticker without its share class, so `GOOG` and `GOOGL` both return Alphabet's bonds, and `BRK`, `BRK.A` and `BRK.B` return Berkshire Hathaway's. Tickers are not exchange-qualified, so unrelated issuers can share one (`DTE` returns DTE Energy and Deutsche Telekom), and a parent's ticker can include subsidiaries that issue under it.\n\nNote: results are sorted by maturity (ascending).",
        "operationId": "ticker",
        "parameters": [
          {
            "name": "ticker",
            "in": "path",
            "description": "Equity or debt ticker (case-insensitive), with or without a share class.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AAPL"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityListResponse"
                },
                "example": {
                  "securities": [
                    {
                      "isin": "US037833EB24",
                      "cusip": "037833EB2",
                      "name": "AAPL 0.7 2026-02-08",
                      "asset": "CorporateBond"
                    },
                    {
                      "isin": "US037833BY53",
                      "cusip": "037833BY5",
                      "name": "AAPL 3.25 2026-02-23",
                      "asset": "CorporateBond"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — your account is not entitled to corporate securities",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [corporate] not found or not allowed for this endpoint. Available asset classes: [\"government\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/asset/{asset}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Print Volume by Asset",
        "description": "Returns the securities in the given asset class that traded today (New York date), with TRACE for `corporate`, MSRB for `municipal`, and OpenYield marketplace print count, average size and volume. Late reports of earlier trades are excluded. Pages are taken in order of reported volume, largest first.\n\nSizes and volumes are face amounts in dollars; TRACE capped sizes (1MM+ and 5MM+) count as $1,000,000 and $5,000,000.",
        "operationId": "print_summaries_for_asset",
        "parameters": [
          {
            "name": "asset",
            "in": "path",
            "description": "Asset class. One of: `corporate`, `municipal` (or `CorporateBond`, `MunicipalBond`).",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "corporate",
                "municipal"
              ]
            },
            "example": "corporate"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintSummaries"
                },
                "example": {
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "prints": [
                    {
                      "security": {
                        "isin": "US650116DA16",
                        "cusip": "650116DA1",
                        "name": "NFLX 4.875 2030-04-15",
                        "start_date": "2018-04-15",
                        "maturity": "2030-04-15",
                        "shortcut": null,
                        "asset": "CorporateBond",
                        "grade": "IG"
                      },
                      "external_prints": {
                        "count": 77,
                        "average": "100000",
                        "volume": "7700000"
                      },
                      "openyield_prints": {
                        "count": 3,
                        "average": "250000",
                        "volume": "750000"
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — unknown asset class, or one your account is not entitled to",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Asset [foo] not found or not allowed for this endpoint. Available asset classes: [\"corporate\", \"municipal\"]"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/historical/msrb/{date}/{sequence}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Historical MSRB Prints",
        "description": "Returns up to 500 MSRB prints for a given date in sequence order, starting at the given sequence number (inclusive).\n\nTo get the next batch, pass the last `sequence` you received and skip the prints you already have. A batch of fewer than 500 prints means you have reached the end of the day.\n\nWithout a history subscription, dates before the last 7 days (Eastern time) return 403.",
        "operationId": "msrb_prints_dated_after_sequence",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "Date (YYYY-MM-DD).",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2025-09-03"
          },
          {
            "name": "sequence",
            "in": "path",
            "description": "First sequence number to return (inclusive).",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1504327
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsResponse"
                },
                "example": {
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T14:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 1504327,
                      "as_at": "2025-09-03T14:22:10",
                      "isin": "US590545A742",
                      "cusip": "590545A74",
                      "side": "Buy",
                      "quantity": "100",
                      "price": "101.250",
                      "yield": "4.5210",
                      "parties": "Customer",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid date [2025-13-01]. Please use YYYY-MM-DD format"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — the date is outside your account's history window",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Prints before 2026-10-16 require a history subscription; contact intro@openyld.com"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/historical/trace/{date}/{sequence}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Historical TRACE Prints",
        "description": "Returns up to 500 TRACE prints for a given date in sequence order, starting at the given sequence number (inclusive). TRACE prints are delayed by 4 hours without a real-time TRACE license.\n\nTo get the next batch, pass the last `sequence` you received and skip the prints you already have. A batch of fewer than 500 prints means you have reached the end of the day.\n\nWithout a history subscription, dates before the last 7 days (Eastern time) return 403.",
        "operationId": "trace_prints_dated_after_sequence",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "Date (YYYY-MM-DD).",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2025-09-03"
          },
          {
            "name": "sequence",
            "in": "path",
            "description": "First sequence number to return (inclusive).",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 2207535
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsResponse"
                },
                "example": {
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 2207535,
                      "as_at": "2025-09-03T13:00:47",
                      "isin": "US037833EW60",
                      "cusip": "037833EW6",
                      "side": "Sell",
                      "quantity": "250",
                      "price": "98.125",
                      "yield": "3.9500",
                      "parties": "D-C",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid date [2025-13-01]. Please use YYYY-MM-DD format"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — the date is outside your account's history window",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Prints before 2026-10-16 require a history subscription; contact intro@openyld.com"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/inventory": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Inventory Snapshot",
        "description": "Returns active marketplace inventory summarized by asset class. Only asset classes your account is entitled to are included.",
        "operationId": "inventory",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryResponse"
                },
                "example": {
                  "inventory": [
                    {
                      "asset": "CorporateBond",
                      "bid_count": 12,
                      "bid_amount": "1850",
                      "ask_count": 9,
                      "ask_amount": "1425",
                      "identifier_count": 21,
                      "created_at": "2026-05-21T13:45:00Z",
                      "updated_at": "2026-05-21T13:50:00Z"
                    },
                    {
                      "asset": "MunicipalBond",
                      "bid_count": 0,
                      "bid_amount": "0",
                      "ask_count": 3,
                      "ask_amount": "250",
                      "identifier_count": 3,
                      "created_at": "2026-05-21T13:45:00Z",
                      "updated_at": "2026-05-21T13:50:00Z"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/prints/counts": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Count Prints",
        "description": "Counts the TRACE or MSRB prints that traded on one New York trade date and match the filters, with their total par, optionally grouped by up to two of `is_ats`, `report_party`, `contra_party`, `side`, `hour`, `size` and `security`. One call answers a question such as \"how many ATS prints so far today?\" without paging the feed.\n\nA trade reported on a later day counts on the day it happened. Canceled prints are left out. Each reported leg of a trade is its own print. TRACE prints are delayed by 4 hours without a real-time TRACE license, and `reported_through` says how far the count reaches. Without a history subscription, dates before the last 7 days (Eastern time) return 403.\n\nPar is in dollars, with capped sizes (1MM+ and 5MM+) counted at their cap, so it is a floor when `capped` is above 0. `entitlements` states this account's TRACE delay and history window.",
        "operationId": "print_counts",
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "description": "`trace` or `msrb`. Municipal bonds are MSRB; every other bond is TRACE.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "trace"
          },
          {
            "name": "date",
            "in": "query",
            "description": "New York trade date (YYYY-MM-DD); today when omitted. A trade reported on a\nlater day still counts on the day it happened.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "2026-11-04"
          },
          {
            "name": "time_min",
            "in": "query",
            "description": "Earliest trade time, New York (HH:MM), inclusive.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "09:30"
          },
          {
            "name": "time_max",
            "in": "query",
            "description": "Latest trade time, New York (HH:MM), exclusive.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "12:00"
          },
          {
            "name": "id",
            "in": "query",
            "description": "Up to 50 CUSIPs, ISINs or FIGIs, comma-separated. Each must be a bond of\n`source` that the account is entitled to.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "US037833EW60"
          },
          {
            "name": "is_ats",
            "in": "query",
            "description": "Executed on an ATS (`true`) or not (`false`).",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "report_party",
            "in": "query",
            "description": "Reporting party: TRACE `Dealer` or `ATS`; MSRB is always `Dealer`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Dealer"
          },
          {
            "name": "contra_party",
            "in": "query",
            "description": "Other party: TRACE `Dealer`, `Customer`, `Affiliate` or `ATS`; MSRB `Dealer`\nor `Customer`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Customer"
          },
          {
            "name": "side",
            "in": "query",
            "description": "`Buy` or `Sell`, from the reporting party's side: on a dealer-to-customer\nprint, `Sell` is a customer buy.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Sell"
          },
          {
            "name": "size_min",
            "in": "query",
            "description": "Smallest size, in bonds ($1,000 face each), inclusive. Capped sizes count at\ntheir cap (1MM+ as 1,000 bonds).",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "1000"
          },
          {
            "name": "size_max",
            "in": "query",
            "description": "Largest size, in bonds ($1,000 face each), inclusive.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "5000"
          },
          {
            "name": "group_by",
            "in": "query",
            "description": "Up to two of `is_ats`, `report_party`, `contra_party`, `side`, `hour`, `size`\nand `security`, comma-separated. Without it the reply has one group.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "hour,is_ats"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Most groups to return when grouping by `security`, largest par first.\nDefaults to 50; values above 500 are reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 50,
              "maximum": 500,
              "minimum": 1
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintCountsResponse"
                },
                "example": {
                  "source": "trace",
                  "date": "2026-11-04",
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "entitlements": {
                    "real_time_trace": true,
                    "history_from": null
                  },
                  "groups": [
                    {
                      "is_ats": false,
                      "count": 21430,
                      "par": "3912345000.00",
                      "capped": 402
                    },
                    {
                      "is_ats": true,
                      "count": 5120,
                      "par": "88123000.00",
                      "capped": 3
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request — an unknown source, filter value or group, an invalid date or time, or an identifier from the other source",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "group_by takes at most two values"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — the date is outside your account's history window, or an `id` is in an asset class your account is not entitled to",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Prints before 2026-10-29 require a history subscription; contact intro@openyld.com"
                }
              }
            }
          },
          "404": {
            "description": "No active security has an `id`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/security/recent/{id}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Recent Prints for Security",
        "description": "Returns the most recent prints for a given security, from any day, newest first: the last 10 unless `limit` asks for more, up to 100. For Municipal bonds this uses MSRB; for other assets this uses TRACE (delayed by 4 hours without a real-time TRACE license).\n\nWithout a history subscription, only prints from the last 7 days (Eastern time) are returned.\n\nNote: entries are returned sorted by `as_at` in descending order.",
        "operationId": "recent_reported_by_security",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US037833EW60"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of prints to return. Defaults to 10; values above 100\nare reduced to 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 10,
              "maximum": 100,
              "minimum": 0
            },
            "example": 10
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first print to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsByDateAndSecurityResponse"
                },
                "example": {
                  "isin": "US037833EW60",
                  "cusip": "037833EW6",
                  "name": "AAPL 4.85 2053-05-10",
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 2207535,
                      "as_at": "2025-09-03T13:00:47-04:00",
                      "side": "Buy",
                      "quantity": "10",
                      "price": "98.354",
                      "yield": "4.958000",
                      "parties": "D-D",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/security/{date}/{id}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Prints for Security and Date",
        "description": "Returns the prints for a given security on a given New York trade date (YYYY-MM-DD). Late reports are included on the date the trade occurred. For Municipal bonds this uses MSRB; for other assets this uses TRACE (delayed by 4 hours without a real-time TRACE license).\n\nWithout a history subscription, dates before the last 7 days (Eastern time) return 403.\n\nNote: entries are returned sorted by `as_at` in descending order.",
        "operationId": "reported_by_date_and_security",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "New York trade date (YYYY-MM-DD).",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "2025-09-03"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US037833EW60"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsByDateAndSecurityResponse"
                },
                "example": {
                  "isin": "US037833EW60",
                  "cusip": "037833EW6",
                  "name": "AAPL 4.85 2053-05-10",
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 2207535,
                      "as_at": "2025-09-03T13:00:47-04:00",
                      "side": "Buy",
                      "quantity": "10",
                      "price": "98.354",
                      "yield": "4.958000",
                      "parties": "D-D",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request — invalid date, or an identifier that is not a valid ISIN, CUSIP, FIGI or shortcut",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid date [2025-13-01]. Please use YYYY-MM-DD format"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — the date is outside your account's history window, or your account is not entitled to this security's asset class",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Prints before 2026-10-16 require a history subscription; contact intro@openyld.com"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/stats/{id}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Print Statistics for Security",
        "description": "Returns aggregated daily print statistics for the last ~3 months (the last 7 days without a history subscription) for a given security, most recent day first. For Municipal bonds this uses MSRB; for other assets this uses TRACE (delayed by 4 hours without a real-time TRACE license).\n\nEach reported leg of a trade counts as its own print, so a trade reported by both sides, such as an ATS trade, counts more than once. Buys and sells are from the reporting dealer's side.\n\nPrint-size buckets, by face amount: `teeny` up to $25,000; `small` over $25,000 to $100,000; `medium` over $100,000 to $250,000; `large` over $250,000 to $1,000,000; `block` over $1,000,000.",
        "operationId": "reported_stats_by_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "US650116DA16"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of entries to return. Defaults to 100; values above 500\nare reduced to 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100,
              "maximum": 500,
              "minimum": 0
            },
            "example": 500
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Zero-based index of the first entry to return. Defaults to 0. For the\nnext page, add `limit` to `offset`.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 0,
              "minimum": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyPrintStatsResponse"
                },
                "example": {
                  "isin": "US650116DA16",
                  "cusip": "650116DA1",
                  "name": "NFLX 4.875 2030-04-15",
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "stats": [
                    {
                      "print_date": "2025-09-03",
                      "sells": 45,
                      "buys": 32,
                      "volume": "7750000",
                      "smallest": "5000",
                      "teeny": 10,
                      "small": 28,
                      "medium": 24,
                      "large": 12,
                      "block": 3,
                      "price_low": "97.125",
                      "price_high": "98.500",
                      "price_mean": "97.812",
                      "price_stddev": "0.342",
                      "dealer_dealer": 18,
                      "dealer_customer": 52,
                      "dealer_affiliate": 7,
                      "ats": 4
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid symbol AAPL 4.85. Expecting ISIN, CUSIP, FIGI or a shortcut such as CT10"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/today/msrb/{sequence}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Today's MSRB Prints",
        "description": "Returns up to 500 of today's MSRB prints in sequence order, starting at the given sequence number (inclusive).\n\nTo get the next batch, pass the last `sequence` you received and skip the prints you already have. A batch of fewer than 500 prints means you have caught up.",
        "operationId": "msrb_prints_today_after_sequence",
        "parameters": [
          {
            "name": "sequence",
            "in": "path",
            "description": "First sequence number to return (inclusive).",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1504327
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsResponse"
                },
                "example": {
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T14:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 1504327,
                      "as_at": "2025-09-03T14:22:10",
                      "isin": "US590545A742",
                      "cusip": "590545A74",
                      "side": "Buy",
                      "quantity": "100",
                      "price": "101.250",
                      "yield": "4.5210",
                      "parties": "Customer",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reported/today/trace/{sequence}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Today's TRACE Prints",
        "description": "Returns up to 500 of today's TRACE prints in sequence order, starting at the given sequence number (inclusive). TRACE prints are delayed by 4 hours without a real-time TRACE license.\n\nTo get the next batch, pass the last `sequence` you received and skip the prints you already have. A batch of fewer than 500 prints means you have caught up.",
        "operationId": "trace_prints_today_after_sequence",
        "parameters": [
          {
            "name": "sequence",
            "in": "path",
            "description": "First sequence number to return (inclusive).",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 2207535
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintsResponse"
                },
                "example": {
                  "entitlements": {
                    "real_time_trace": false,
                    "history_from": "2026-10-29"
                  },
                  "reported_through": "2026-11-04T10:53:12-05:00",
                  "prints": [
                    {
                      "sequence": 2207535,
                      "as_at": "2025-09-03T13:00:47",
                      "isin": "US037833EW60",
                      "cusip": "037833EW6",
                      "side": "Sell",
                      "quantity": "250",
                      "price": "98.125",
                      "yield": "3.9500",
                      "parties": "D-C",
                      "is_ats": false
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/streaming/prints": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Marketplace Prints Stream (WebSocket) — internal",
        "description": "Stream OpenYield marketplace prints over WebSocket at `wss://api.openyld.com/streaming/prints`. Internal users only; other accounts receive 403.\n\nEach frame is one print as a JSON object, plus an opaque `cursor` string — the frame's position in the stream. To resume after a disconnect, reconnect with `?since=<cursor>` using the last cursor received: every row after it is replayed before live delivery resumes, so nothing from the served day is lost. Cursors are not to be parsed or constructed; one this server did not issue is rejected with 400.\n\nResume is lossless **within the served day**: the stream carries the current day only, and a cursor from an earlier day replays the served day from the start. Earlier days are available from the REST endpoints, not the stream.\n\nA large resume is delivered in bounded batches: after 10,000 replayed rows the server closes with code 1013 and reason `replay truncated; resume with ?since=` — reconnect with the last received cursor and the replay continues exactly where it left off.\n\nServer-initiated closes carry a code the client can branch on: 1001 (missed pongs), 1012 (shutting down) or 1013 (slow consumer, failed or truncated replay). All invite a reconnect, with `?since=` for continuity. Liveness is WebSocket protocol ping/pong; this is a receive-only stream and no messages are expected to be sent.\n\nScalar's **Test Request** button cannot open a WebSocket; use one of the code samples instead. The samples set a `User-Agent` because websocat sends none by default.\n\nA plain GET without a WebSocket upgrade serves the same rows as newline-delimited JSON over chunked HTTP (the legacy transport, without cursors or resume).\n\nConnect with a WebSocket client using the same bearer token as the REST API:\n\n```\nwebsocat wss://api.openyld.com/streaming/prints --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'\n```",
        "operationId": "prints",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "description": "Resume cursor (WebSocket only): replay every row after this one before\ngoing live, so a reconnecting client loses nothing from the served\nday. Pass back the opaque `cursor` field from the last frame received,\nverbatim — the value is not to be parsed or constructed, and one this\nserver did not issue is rejected with 400.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols — the example below is one WebSocket frame sent after the upgrade: a print plus its resume `cursor`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Print"
                },
                "example": {
                  "print_id": 4711,
                  "isin": "US037833EW60",
                  "counterparty": "Dealer",
                  "contraparty": "Customer",
                  "side": "Buy",
                  "quantity": "25",
                  "price": "99.875",
                  "yield": "4.125000",
                  "traded_at": "2026-08-19T14:31:07Z",
                  "cursor": "323032362d30382d31397c343731317c"
                }
              }
            }
          },
          "400": {
            "description": "Invalid resume cursor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid resume cursor [abc]. Pass back the `cursor` field from a previous message"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — internal users only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "shell",
            "label": "websocat",
            "source": "websocat wss://api.openyld.com/streaming/prints --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'"
          },
          {
            "lang": "shell",
            "label": "curl (WebSocket build)",
            "source": "# needs curl built with WebSocket support (`curl --version` lists ws/wss)\ncurl --no-buffer -H \"Authorization: Bearer <token>\" wss://api.openyld.com/streaming/prints"
          }
        ]
      }
    },
    "/streaming/prints/{isin}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "Marketplace Prints Stream by Security (WebSocket) — internal",
        "description": "Stream OpenYield marketplace prints for one security over WebSocket at `wss://api.openyld.com/streaming/prints/{isin}`. Internal users only. The wire contract — per-frame `cursor`, `?since=` resume (lossless within the served day), 10,000-row replay batches closing 1013 `replay truncated; resume with ?since=`, close codes 1001/1012/1013, chunked NDJSON on a plain GET — is identical to `/streaming/prints`.",
        "operationId": "prints_by_isin",
        "parameters": [
          {
            "name": "isin",
            "in": "path",
            "description": "ISIN of the security to stream",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "description": "Resume cursor (WebSocket only): replay every row after this one before\ngoing live, so a reconnecting client loses nothing from the served\nday. Pass back the opaque `cursor` field from the last frame received,\nverbatim — the value is not to be parsed or constructed, and one this\nserver did not issue is rejected with 400.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols — one print per frame, plus its resume `cursor` (see /streaming/prints for an example)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Print"
                }
              }
            }
          },
          "400": {
            "description": "Invalid resume cursor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid resume cursor [abc]. Pass back the `cursor` field from a previous message"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — internal users only",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "shell",
            "label": "websocat",
            "source": "websocat wss://api.openyld.com/streaming/prints/US037833EW60 --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'"
          },
          {
            "lang": "shell",
            "label": "curl (WebSocket build)",
            "source": "# needs curl built with WebSocket support (`curl --version` lists ws/wss)\ncurl --no-buffer -H \"Authorization: Bearer <token>\" wss://api.openyld.com/streaming/prints/US037833EW60"
          }
        ]
      }
    },
    "/streaming/trace/{id}": {
      "get": {
        "tags": [
          "Reported"
        ],
        "summary": "TRACE Prints Stream (WebSocket)",
        "description": "Stream TRACE prints for one security over WebSocket at `wss://api.openyld.com/streaming/trace/{id}`.\n\nStreaming TRACE requires the **real-time** TRACE entitlement: the stream is shared, so the per-account 4-hour delay of the REST `/reported` endpoints cannot be applied per connection. Accounts without the entitlement receive 403 and should use the REST endpoints instead.\n\nReported prices retain the source precision and are `null` when no price was reported. REST and streaming responses preserve the same reported price.\n\nEach frame is one print as a JSON object, plus an opaque `cursor` string — the frame's position in the stream. To resume after a disconnect, reconnect with `?since=<cursor>` using the last cursor received: every row after it is replayed before live delivery resumes, so nothing from the served day is lost. Cursors are not to be parsed or constructed; one this server did not issue is rejected with 400.\n\nResume is lossless **within the served day**: the stream carries the current TRACE day only, and a cursor from an earlier day replays the served day from the start. Earlier days are available from the REST endpoints, not the stream.\n\nA large resume is delivered in bounded batches: after 10,000 replayed rows the server closes with code 1013 and reason `replay truncated; resume with ?since=` — reconnect with the last received cursor and the replay continues exactly where it left off.\n\nServer-initiated closes carry a code the client can branch on: 1001 (missed pongs), 1012 (shutting down) or 1013 (slow consumer, failed or truncated replay). All invite a reconnect, with `?since=` for continuity. Liveness is WebSocket protocol ping/pong; this is a receive-only stream and no messages are expected to be sent.\n\nScalar's **Test Request** button cannot open a WebSocket; use one of the code samples instead. The samples set a `User-Agent` because websocat sends none by default.\n\nA plain GET without a WebSocket upgrade serves the same rows as newline-delimited JSON over chunked HTTP (the legacy transport, without cursors or resume).\n\nConnect with a WebSocket client using the same bearer token as the REST API:\n\n```\nwebsocat wss://api.openyld.com/streaming/trace/US037833EW60 --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'\n```",
        "operationId": "trace_by_isin",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ISIN, CUSIP, FIGI or shortcut (such as AAPL30) of the security to stream",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "description": "Resume cursor (WebSocket only): replay every row after this one before\ngoing live, so a reconnecting client loses nothing from the served\nday. Pass back the opaque `cursor` field from the last frame received,\nverbatim — the value is not to be parsed or constructed, and one this\nserver did not issue is rejected with 400.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols — the example below is one WebSocket frame sent after the upgrade: a TRACE print plus its resume `cursor`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TracePrintLine"
                },
                "example": {
                  "trace_sequence": 8123,
                  "as_at": "2026-08-19T14:31:07Z",
                  "cusip": "037833EW6",
                  "side": "Buy",
                  "quantity": "250",
                  "is_estimated": false,
                  "price": "99.875",
                  "printyield": "4.125",
                  "parties": "D-C",
                  "is_ats": false,
                  "cursor": "323032362d30382d31397c383132337c42544453"
                }
              }
            }
          },
          "400": {
            "description": "Invalid resume cursor, or an id that is not a valid ISIN, CUSIP, FIGI or shortcut",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Invalid resume cursor [abc]. Pass back the `cursor` field from a previous message"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires the real-time TRACE entitlement",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "404": {
            "description": "No active security has this identifier",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "ISIN US023135BS49 not found"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "shell",
            "label": "websocat",
            "source": "websocat wss://api.openyld.com/streaming/trace/US037833EW60 --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'"
          },
          {
            "lang": "shell",
            "label": "curl (WebSocket build)",
            "source": "# needs curl built with WebSocket support (`curl --version` lists ws/wss)\ncurl --no-buffer -H \"Authorization: Bearer <token>\" wss://api.openyld.com/streaming/trace/US037833EW60"
          }
        ]
      }
    },
    "/streaming/yield_curve": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Treasury Benchmark Yield Curve Stream (WebSocket)",
        "description": "Stream the live US Treasury Benchmark Yield curve over WebSocket at `wss://api.openyld.com/streaming/yield_curve`.\n\nThe full curve is sent as a JSON message on connect and again whenever any benchmark yield changes. Each message carries `as_of`, the timestamp of the newest benchmark rate in it (`null` before the first rate of the day).\n\nAn account entitled only to bills, or only to coupon Treasuries, receives just those points, as from `GET /prices/yield_curve`.\n\nAs in the REST curve, a new bill with no yield yet is shown by the bill it replaced, under that bill's own shortcut (such as CB06B) and ISIN.\n\nTenors and yields are decimal strings with six decimal places, using the same precision as the REST curve. Missing yields remain null.\n\nThis is a receive-only stream; no messages are expected to be sent.\n\nScalar's **Test Request** button cannot open a WebSocket; use one of the code samples instead. The samples set a `User-Agent` because websocat sends none by default.\n\nConnect with a WebSocket client using the same bearer token as the REST API:\n\n```\nwebsocat wss://api.openyld.com/streaming/yield_curve --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'\n```",
        "operationId": "yield_curve_stream",
        "responses": {
          "101": {
            "description": "Switching Protocols — the example below is a WebSocket message sent after the upgrade",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/YieldCurveStreamMessage"
                },
                "example": {
                  "as_of": "2026-03-12T15:30:00Z",
                  "benchmarks": [
                    {
                      "tenor": "2.000000",
                      "shortcut": "CT02",
                      "isin": "US91282CQB09",
                      "cusip": "91282CQB0",
                      "name": "T 3.375 2028-02-29",
                      "yield": "3.995000"
                    },
                    {
                      "tenor": "3.000000",
                      "shortcut": "CT03",
                      "isin": "US91282CQA26",
                      "cusip": "91282CQA2",
                      "name": "T 4.000 2029-02-15",
                      "yield": "3.966000"
                    },
                    {
                      "tenor": "5.000000",
                      "shortcut": "CT05",
                      "isin": "US91282CQD64",
                      "cusip": "91282CQD6",
                      "name": "T 4.125 2031-02-15",
                      "yield": "4.015000"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Not logged in, token required"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Forbidden"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "error": "Something went wrong"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "x-codeSamples": [
          {
            "lang": "shell",
            "label": "websocat",
            "source": "websocat wss://api.openyld.com/streaming/yield_curve --ua=oyld-client/1.0 -H='Authorization: Bearer <token>'"
          },
          {
            "lang": "shell",
            "label": "curl (WebSocket build)",
            "source": "# needs curl built with WebSocket support (`curl --version` lists ws/wss)\ncurl --no-buffer -H \"Authorization: Bearer <token>\" wss://api.openyld.com/streaming/yield_curve"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "ApiCashflowRequest": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "as_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Trade date (YYYY-MM-DD). Omitted uses today."
          },
          "id": {
            "type": "string",
            "description": "The security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10"
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Clean price per 100 face. Omitted or zero uses 100. No market-price lookup."
          },
          "quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional quantity in bonds ($1,000 face each). Defaults to 1."
          }
        }
      },
      "ApiComputeRequest": {
        "type": "object",
        "required": [
          "id",
          "kind",
          "parameter"
        ],
        "properties": {
          "as_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Settlement date (YYYY-MM-DD). Omitted uses the standard settlement date."
          },
          "id": {
            "type": "string",
            "description": "The security identifier: ISIN, CUSIP, FIGI or a shortcut such as CT10"
          },
          "kind": {
            "$ref": "#/components/schemas/ParameterKind",
            "description": "Type of the input value in `parameter`."
          },
          "parameter": {
            "type": "string",
            "description": "The input value, in the units of `kind`: clean price per 100 face for\n`Price`; yield in percent (e.g. `5.25`) for `YieldToWorst` and\n`YieldToMaturity`; spread over the benchmark yield in basis points for\n`Spread` (the bond is priced at a yield-to-worst equal to the benchmark\nyield plus the spread)."
          }
        }
      },
      "ApiErrorResponse": {
        "type": "object",
        "description": "Standard error envelope returned by the API for non-2xx responses.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Human readable error message."
          }
        }
      },
      "Benchmark": {
        "type": "object",
        "required": [
          "isin",
          "name"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "Benchmark CUSIP."
          },
          "isin": {
            "type": "string",
            "description": "Benchmark ISIN."
          },
          "name": {
            "type": "string",
            "description": "Benchmark display name."
          },
          "spread": {
            "type": [
              "string",
              "null"
            ],
            "description": "Spread to benchmark, in basis points."
          },
          "yield_to_maturity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Benchmark yield-to-maturity, in percent."
          }
        }
      },
      "BidAsk": {
        "type": "object",
        "description": "Top of book at one snapshot. A side with no quote is `null` in all three of its fields, and\nthe mid is `null` unless both sides are quoted.",
        "properties": {
          "ask_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Best ask price (per 100 face), if there is an ask."
          },
          "ask_quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Ask quantity bucket, in bonds ($1,000 face each): `[0-100)` (fewer than 100),\n`[100-1000)` (100 to 999) or `[1000+]` (1,000 or more), or `null` if there's no ask."
          },
          "ask_yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Yield at the ask price, in percent, if there is an ask and its yield is known."
          },
          "bid_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Best bid price (per 100 face), if there is a bid."
          },
          "bid_quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Bid quantity bucket, in bonds ($1,000 face each): `[0-100)` (fewer than 100),\n`[100-1000)` (100 to 999) or `[1000+]` (1,000 or more), or `null` if there's no bid."
          },
          "bid_yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Yield at the bid price, in percent, if there is a bid and its yield is known."
          },
          "mid_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mid price (per 100 face), the average of bid and ask. `null` unless both are quoted."
          },
          "mid_yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mid yield, in percent, the average of the bid and ask yields. `null` unless both\nsides are quoted and both yields are known."
          }
        }
      },
      "BodyUser": {
        "type": "object",
        "required": [
          "name",
          "email",
          "role"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "User's login email."
          },
          "name": {
            "type": "string",
            "description": "User's display name."
          },
          "role": {
            "type": "string",
            "description": "User's role."
          }
        }
      },
      "BondCalcResponse": {
        "type": "object",
        "required": [
          "result"
        ],
        "properties": {
          "result": {
            "$ref": "#/components/schemas/ComputeLine",
            "description": "Computation result."
          }
        }
      },
      "Cashflow": {
        "type": "object",
        "required": [
          "quantity",
          "period_start",
          "period_end",
          "period_pay_date",
          "coupon_rate",
          "day_count",
          "interest_amount",
          "principal_amount"
        ],
        "properties": {
          "call_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Call price (per 100 face), if a call occurs during this period."
          },
          "call_quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Called quantity in bonds, if a call occurs during this period."
          },
          "coupon_rate": {
            "type": "string",
            "description": "Coupon rate used for this period, in percent."
          },
          "day_count": {
            "type": "string",
            "description": "Day count convention."
          },
          "interest_amount": {
            "type": "string",
            "description": "Interest paid for this period, in dollars."
          },
          "period_end": {
            "type": "string",
            "format": "date",
            "description": "Cashflow period end date."
          },
          "period_pay_date": {
            "type": "string",
            "format": "date",
            "description": "Payment date for this period."
          },
          "period_start": {
            "type": "string",
            "format": "date",
            "description": "Cashflow period start date."
          },
          "principal_amount": {
            "type": "string",
            "description": "Principal repaid for this period, in dollars."
          },
          "quantity": {
            "type": "string",
            "description": "Quantity applicable to this cashflow, in bonds ($1,000 face each)."
          }
        }
      },
      "CashflowBond": {
        "type": "object",
        "required": [
          "isin",
          "name"
        ],
        "properties": {
          "accrued_amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Accrued interest to the settlement date, in dollars."
          },
          "accrued_days": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Number of accrued days, under the bond's day count convention."
          },
          "cashflows": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Cashflow"
            },
            "description": "Computed cashflow schedule."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "Security CUSIP."
          },
          "isin": {
            "type": "string",
            "description": "Security ISIN."
          },
          "name": {
            "type": "string",
            "description": "Security display name."
          },
          "par_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Par price for the instrument, per 100 face."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Clean price, per 100 face."
          },
          "principal": {
            "type": [
              "string",
              "null"
            ],
            "description": "Principal in dollars: quantity × 1,000 × price / 100."
          },
          "quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trade quantity in bonds ($1,000 face each)."
          },
          "settlement_amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Total settlement amount in dollars (principal + accrued interest)."
          },
          "settlement_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Settlement date derived from trade date."
          },
          "trade_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Trade date used."
          }
        }
      },
      "CashflowResponse": {
        "type": "object",
        "required": [
          "cashflow"
        ],
        "properties": {
          "cashflow": {
            "$ref": "#/components/schemas/CashflowBond",
            "description": "Cashflow schedule and trade-level calculations."
          }
        }
      },
      "ComputeLine": {
        "type": "object",
        "required": [
          "isin",
          "name"
        ],
        "properties": {
          "as_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Settlement date used."
          },
          "benchmark": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Benchmark",
                "description": "Benchmark details and spreads, when applicable."
              },
              {
                "type": "null"
              }
            ]
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "Security CUSIP."
          },
          "isin": {
            "type": "string",
            "description": "Security ISIN."
          },
          "name": {
            "type": "string",
            "description": "Security display name."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Computed clean price, per 100 face."
          },
          "yield_to_maturity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Computed yield-to-maturity, in percent."
          },
          "yield_to_worst": {
            "type": [
              "string",
              "null"
            ],
            "description": "Computed yield-to-worst, in percent."
          }
        }
      },
      "CorporateBondDetail": {
        "type": "object",
        "properties": {
          "industry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Industry related to the bond issuer."
          },
          "sector": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sector related to the bond issuer."
          },
          "secured": {
            "type": [
              "string",
              "null"
            ],
            "description": "Bond securitization (e.g. Secured / Unsecured)."
          },
          "seniority": {
            "type": [
              "string",
              "null"
            ],
            "description": "Bond seniority (e.g. Junior / Senior / Subordinated)."
          }
        }
      },
      "CountedSecurity": {
        "type": "object",
        "required": [
          "cusip",
          "isin",
          "name"
        ],
        "properties": {
          "cusip": {
            "type": "string",
            "description": "CUSIP as reported."
          },
          "isin": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISIN identifier. Null for a security OpenYield doesn't carry."
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Security name. Null for a security OpenYield doesn't carry."
          }
        }
      },
      "DailyPrintStatsResponse": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "entitlements",
          "reported_through",
          "stats"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements",
            "description": "What this account's print data covers: whether TRACE is real-time or\ndelayed 4 hours, and the earliest trade date it can see."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "reported_through": {
            "type": "string",
            "description": "Latest report time included, New York time with its UTC offset: now, or 4\nhours ago for delayed TRACE.",
            "example": "2026-11-04T10:53:12-05:00"
          },
          "stats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrintStatsLine"
            },
            "description": "Daily aggregated statistics."
          }
        }
      },
      "DatedPriceLine": {
        "type": "object",
        "required": [
          "price_date",
          "price"
        ],
        "properties": {
          "price": {
            "type": "string",
            "description": "Mid price (per 100 face) on `price_date`."
          },
          "price_date": {
            "type": "string",
            "format": "date",
            "description": "Price date (YYYY-MM-DD)."
          },
          "yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Yield corresponding to `price`, in percent; `null` when it can't be\ncomputed, as for floating-rate bonds, or is implausible for the price."
          }
        }
      },
      "DatedPricesResponse": {
        "type": "object",
        "required": [
          "prices"
        ],
        "properties": {
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurityDatedPriceLine"
            },
            "description": "Previous business day's close prices."
          }
        }
      },
      "Entitlements": {
        "type": "object",
        "description": "What this account's print data covers, so a reply can say so.",
        "required": [
          "real_time_trace",
          "history_from"
        ],
        "properties": {
          "history_from": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Earliest trade date the account can see (YYYY-MM-DD, New York); null with a\nhistory subscription."
          },
          "real_time_trace": {
            "type": "boolean",
            "description": "True when TRACE prints are real-time; false when they are delayed by 4 hours.\nMSRB prints are always real-time."
          }
        }
      },
      "InventoryResponse": {
        "type": "object",
        "required": [
          "inventory"
        ],
        "properties": {
          "inventory": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventorySnapshot"
            },
            "description": "Inventory snapshots by asset class."
          }
        }
      },
      "InventorySnapshot": {
        "type": "object",
        "required": [
          "asset",
          "bid_count",
          "bid_amount",
          "ask_count",
          "ask_amount",
          "created_at",
          "updated_at",
          "identifier_count"
        ],
        "properties": {
          "ask_amount": {
            "type": "string",
            "description": "Sum of remaining ask-side order quantity."
          },
          "ask_count": {
            "type": "integer",
            "format": "int32",
            "description": "Number of distinct bonds with an active offer."
          },
          "asset": {
            "type": "string",
            "description": "Asset class (e.g. `CorporateBond`, `MunicipalBond`)."
          },
          "bid_amount": {
            "type": "string",
            "description": "Sum of remaining bid-side order quantity."
          },
          "bid_count": {
            "type": "integer",
            "format": "int32",
            "description": "Number of distinct bonds with an active bid."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Time the snapshot was first created."
          },
          "identifier_count": {
            "type": "integer",
            "format": "int32",
            "description": "Number of distinct bonds with any active order (a bond quoted on both\nsides counts once)."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Snapshot update timestamp."
          }
        }
      },
      "LoginBody": {
        "type": "object",
        "required": [
          "status",
          "token",
          "user"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "Always `Success`."
          },
          "token": {
            "type": "string",
            "description": "JWT to send as `Authorization: Bearer <token>` on every request."
          },
          "user": {
            "$ref": "#/components/schemas/BodyUser",
            "description": "The logged-in user."
          }
        }
      },
      "LoginParameters": {
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "Login email."
          },
          "password": {
            "type": "string",
            "description": "Password."
          }
        }
      },
      "LogoutBody": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "Always `Logout successful`."
          }
        }
      },
      "MunicipalBondDetail": {
        "type": "object",
        "properties": {
          "fed_taxable": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicates whether the bond is taxable at the Federal level (e.g. Taxable / TaxExempt / AMT / Unknown).\nThe `tax_exempt_status` search filter matches `TaxExempt` (`exempt`) and `Taxable` (`taxable`)\nonly; `AMT` and `Unknown` bonds match neither."
          },
          "proceeds": {
            "type": [
              "string",
              "null"
            ],
            "description": "Purpose of the borrowing."
          },
          "purpose_class": {
            "type": [
              "string",
              "null"
            ],
            "description": "The revenue stream for the bond."
          },
          "purpose_subclass": {
            "type": [
              "string",
              "null"
            ],
            "description": "The revenue stream for the bond (further narrowed down)."
          },
          "source": {
            "type": [
              "string",
              "null"
            ],
            "description": "The revenues and assets available to service the payments and debt repayment of the bond (e.g. Revenue / GeneralObligation / DoubleBarrel)."
          },
          "state_taxable": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicates whether the bond is taxable at the state level (e.g. Taxable / TaxExempt / Unknown)."
          }
        }
      },
      "ParameterKind": {
        "type": "string",
        "enum": [
          "Price",
          "YieldToWorst",
          "YieldToMaturity",
          "Spread"
        ]
      },
      "PriceLine": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BidAsk"
          },
          {
            "type": "object",
            "required": [
              "as_at"
            ],
            "properties": {
              "as_at": {
                "type": "string",
                "format": "date-time",
                "description": "Snapshot time of the quote."
              }
            }
          }
        ]
      },
      "PricesResponse": {
        "type": "object",
        "required": [
          "prices"
        ],
        "properties": {
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurityPriceLine"
            },
            "description": "Latest intraday bid and ask for each security."
          }
        }
      },
      "Print": {
        "type": "object",
        "required": [
          "print_id",
          "isin",
          "counterparty",
          "contraparty",
          "side",
          "quantity",
          "price",
          "yield",
          "traded_at"
        ],
        "properties": {
          "contraparty": {
            "type": "string",
            "description": "Kind of the other party to the fill (e.g. `Customer`)."
          },
          "counterparty": {
            "type": "string",
            "description": "Kind of the first party to the fill (e.g. `Dealer`)."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "price": {
            "type": "string",
            "description": "Executed price, per 100 face, preserving the stored precision."
          },
          "print_id": {
            "type": "integer",
            "format": "int32",
            "description": "Marketplace fill id, unique within the trade date."
          },
          "quantity": {
            "type": "string",
            "description": "Quantity in bonds ($1,000 face each)."
          },
          "side": {
            "type": "string",
            "description": "`Buy` or `Sell`."
          },
          "traded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Trade timestamp (UTC)."
          },
          "yield": {
            "type": "string",
            "description": "Yield, in percent."
          }
        }
      },
      "PrintCountGroup": {
        "type": "object",
        "description": "Counts for one group. Only the fields named in `group_by` are present.",
        "required": [
          "count",
          "par",
          "capped"
        ],
        "properties": {
          "capped": {
            "type": "integer",
            "format": "int64",
            "description": "Prints whose size was capped (1MM+ or 5MM+)."
          },
          "contra_party": {
            "type": [
              "string",
              "null"
            ],
            "description": "Other party: TRACE `Dealer`, `Customer`, `Affiliate` or `ATS`; MSRB\n`Dealer` or `Customer`. Present when grouping by `contra_party`."
          },
          "count": {
            "type": "integer",
            "format": "int64",
            "description": "Number of prints. Each reported leg of a trade is a print."
          },
          "hour": {
            "type": [
              "string",
              "null"
            ],
            "description": "Hour of the trade, New York time (`09:00` covers 09:00 to 09:59). Present\nwhen grouping by `hour`."
          },
          "is_ats": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Executed on an ATS. Present when grouping by `is_ats`."
          },
          "par": {
            "type": "string",
            "description": "Total face amount in dollars, with capped sizes at their cap, so a floor\nwhen `capped` is above 0.",
            "example": "812345000.00"
          },
          "report_party": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reporting party: TRACE `Dealer` or `ATS`, MSRB `Dealer`. Present when\ngrouping by `report_party`."
          },
          "security": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CountedSecurity",
                "description": "The security. Present when grouping by `security`."
              },
              {
                "type": "null"
              }
            ]
          },
          "side": {
            "type": [
              "string",
              "null"
            ],
            "description": "`Buy` or `Sell`, from the reporting party's side. Present when grouping by\n`side`."
          },
          "size": {
            "type": [
              "string",
              "null"
            ],
            "description": "`teeny` (up to $25,000 face), `small` (to $100,000), `medium` (to\n$250,000), `large` (to $1,000,000) or `block` (above), as in Print\nStatistics. Present when grouping by `size`."
          }
        }
      },
      "PrintCountsResponse": {
        "type": "object",
        "required": [
          "source",
          "date",
          "reported_through",
          "entitlements",
          "groups"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "description": "New York trade date counted."
          },
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements",
            "description": "What this account's print data covers: whether TRACE is real-time or\ndelayed 4 hours, and the earliest trade date it can see."
          },
          "groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrintCountGroup"
            },
            "description": "One group per combination of the `group_by` values, or a single group."
          },
          "reported_through": {
            "type": "string",
            "description": "Latest report time counted, New York time with its UTC offset: now, or 4\nhours ago for delayed TRACE.",
            "example": "2026-11-04T10:53:12-05:00"
          },
          "source": {
            "type": "string",
            "description": "`trace` or `msrb`."
          }
        }
      },
      "PrintLine": {
        "type": "object",
        "description": "PrintLine without ISIN or CUSIP",
        "required": [
          "sequence",
          "as_at",
          "side",
          "quantity",
          "price",
          "yield",
          "parties",
          "is_ats"
        ],
        "properties": {
          "as_at": {
            "type": "string",
            "description": "Trade time in New York local time, as ISO 8601 with its UTC offset\n(e.g. `2025-09-03T13:00:47-04:00`).",
            "example": "2025-09-03T13:00:47-04:00"
          },
          "is_ats": {
            "type": "boolean",
            "description": "Whether the trade was executed on an ATS."
          },
          "parties": {
            "type": "string",
            "description": "Parties to the trade. TRACE: `<reporting party>-<contra party>`, using the\nfirst letter of each party kind: `D` Dealer, `C` Customer, and `A` an ATS\nas the reporting party; as the contra party, `A` is an ATS when `is_ats`\nis true and an affiliate otherwise. MSRB: `Dealer` (inter-dealer) or\n`Customer` (dealer-to-customer)."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reported trade price, per 100 face, preserving the source precision.\nNull when the source did not report a price."
          },
          "quantity": {
            "type": "string",
            "description": "Trade quantity in bonds ($1,000 face each). TRACE capped sizes appear as\n`1000.001` (1MM+) and `5000.001` (5MM+)."
          },
          "sequence": {
            "type": "integer",
            "format": "int32",
            "description": "TRACE or MSRB sequence number of the print. Sequences restart each\nreport date, so a print is identified by its report date and sequence."
          },
          "side": {
            "type": "string",
            "description": "`Buy` or `Sell`, from the reporting dealer's side of the trade: on a\ndealer-to-customer print, `Sell` is a customer buy."
          },
          "yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trade yield, in percent. Null when not reported."
          }
        }
      },
      "PrintStat": {
        "type": "object",
        "properties": {
          "average": {
            "type": [
              "string",
              "null"
            ],
            "description": "Average print size, face amount in dollars."
          },
          "count": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Print count."
          },
          "volume": {
            "type": [
              "string",
              "null"
            ],
            "description": "Total volume, face amount in dollars."
          }
        }
      },
      "PrintStatsLine": {
        "type": "object",
        "required": [
          "print_date",
          "sells",
          "buys",
          "volume",
          "smallest",
          "teeny",
          "small",
          "medium",
          "large",
          "block",
          "price_low",
          "price_high",
          "price_mean",
          "dealer_dealer",
          "dealer_customer",
          "dealer_affiliate",
          "ats"
        ],
        "properties": {
          "ats": {
            "type": "integer",
            "format": "int64",
            "description": "TRACE: prints with an ATS reporting or contra party, exclusive of the\ndealer buckets. MSRB: prints flagged `is_ats`, which can also appear in\na dealer bucket."
          },
          "block": {
            "type": "integer",
            "format": "int64",
            "description": "Count of prints over $1,000,000 recorded or capped face. Includes TRACE\n5MM+ sizes at their $5,000,000 cap. TRACE 1MM+ sizes belong to `large`."
          },
          "buys": {
            "type": "integer",
            "format": "int64",
            "description": "Prints where the reporting dealer bought."
          },
          "dealer_affiliate": {
            "type": "integer",
            "format": "int64",
            "description": "Dealer-to-affiliate prints: TRACE prints whose contra party is an\naffiliate, not an ATS. Always 0 for MSRB."
          },
          "dealer_customer": {
            "type": "integer",
            "format": "int64",
            "description": "Dealer-to-customer prints count."
          },
          "dealer_dealer": {
            "type": "integer",
            "format": "int64",
            "description": "Dealer-to-dealer prints count."
          },
          "large": {
            "type": "integer",
            "format": "int64",
            "description": "Count of prints over $250,000 up to $1,000,000 recorded or capped face.\nIncludes TRACE 1MM+ sizes, counted at their $1,000,000 cap."
          },
          "medium": {
            "type": "integer",
            "format": "int64",
            "description": "Count of prints over $100,000 up to $250,000 face."
          },
          "price_high": {
            "type": [
              "string",
              "null"
            ],
            "description": "Highest reported price, per 100 face. Null when no prices were reported."
          },
          "price_low": {
            "type": [
              "string",
              "null"
            ],
            "description": "Lowest reported price, per 100 face. Null when no prices were reported."
          },
          "price_mean": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mean reported price, per 100 face. Null when no prices were reported."
          },
          "price_stddev": {
            "type": [
              "string",
              "null"
            ],
            "description": "Price standard deviation, if available."
          },
          "print_date": {
            "type": "string",
            "format": "date",
            "description": "Trade date (YYYY-MM-DD, New York)."
          },
          "sells": {
            "type": "integer",
            "format": "int64",
            "description": "Prints where the reporting dealer sold; on a dealer-to-customer print,\na customer buy."
          },
          "small": {
            "type": "integer",
            "format": "int64",
            "description": "Count of prints over $25,000 up to $100,000 face."
          },
          "smallest": {
            "type": "string",
            "description": "Smallest print size, face amount in dollars."
          },
          "teeny": {
            "type": "integer",
            "format": "int64",
            "description": "Count of prints up to $25,000 face."
          },
          "volume": {
            "type": "string",
            "description": "Total volume, face amount in dollars."
          }
        }
      },
      "PrintSummaries": {
        "type": "object",
        "required": [
          "entitlements",
          "reported_through",
          "prints"
        ],
        "properties": {
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements",
            "description": "What this account's print data covers: whether TRACE is real-time or\ndelayed 4 hours, and the earliest trade date it can see."
          },
          "prints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrintSummary"
            },
            "description": "Per-security print summary lines."
          },
          "reported_through": {
            "type": "string",
            "description": "Latest report time included, New York time with its UTC offset: now, or 4\nhours ago for delayed TRACE.",
            "example": "2026-11-04T10:53:12-05:00"
          }
        }
      },
      "PrintSummary": {
        "type": "object",
        "required": [
          "security",
          "external_prints",
          "openyield_prints"
        ],
        "properties": {
          "external_prints": {
            "$ref": "#/components/schemas/PrintStat",
            "description": "Today's reported (TRACE or MSRB) print statistics."
          },
          "openyield_prints": {
            "$ref": "#/components/schemas/PrintStat",
            "description": "Today's OpenYield marketplace print statistics: count and volume are 0\nand average is null when there were none."
          },
          "security": {
            "$ref": "#/components/schemas/SecuritySummary",
            "description": "Security reference summary."
          }
        }
      },
      "PrintsByDateAndSecurityResponse": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "entitlements",
          "reported_through",
          "prints"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements",
            "description": "What this account's print data covers: whether TRACE is real-time or\ndelayed 4 hours, and the earliest trade date it can see."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "prints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrintLine"
            },
            "description": "Prints for the requested security/date."
          },
          "reported_through": {
            "type": "string",
            "description": "Latest report time included, New York time with its UTC offset: now, or 4\nhours ago for delayed TRACE.",
            "example": "2026-11-04T10:53:12-05:00"
          }
        }
      },
      "PrintsResponse": {
        "type": "object",
        "required": [
          "entitlements",
          "reported_through",
          "prints"
        ],
        "properties": {
          "entitlements": {
            "$ref": "#/components/schemas/Entitlements",
            "description": "What this account's print data covers: whether TRACE is real-time or\ndelayed 4 hours, and the earliest trade date it can see."
          },
          "prints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SinglePrintLine"
            },
            "description": "Up to 500 prints in sequence order, starting at the requested sequence number (inclusive)."
          },
          "reported_through": {
            "type": "string",
            "description": "Latest report time included, New York time with its UTC offset: now, or 4\nhours ago for delayed TRACE.",
            "example": "2026-11-04T10:53:12-05:00"
          }
        }
      },
      "SearchResponse": {
        "type": "object",
        "required": [
          "total",
          "results"
        ],
        "properties": {
          "as_of": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Snapshot timestamp the prices reflect. `null` if no snapshot has been\nwritten today."
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchResultLine"
            },
            "description": "Matching securities with their latest top-of-book prices."
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "description": "Securities matching the filters in this snapshot, across all pages.\nPaging stops at 5,000 rows even when `total` is higher."
          }
        }
      },
      "SearchResultLine": {
        "type": "object",
        "required": [
          "isin",
          "is_callable",
          "is_putable",
          "is_make_whole"
        ],
        "properties": {
          "ask_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest ask price, if present."
          },
          "ask_quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest ask quantity bucket, in bonds ($1,000 face each): `[0-100)` (fewer\nthan 100), `[100-1000)` (100 to 999) or `[1000+]` (1,000 or more), or\n`null` if there's no ask side."
          },
          "ask_yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest ask yield, in percent, if present."
          },
          "asset": {
            "type": [
              "string",
              "null"
            ],
            "description": "Asset class (canonical form, e.g. `CorporateBond`)."
          },
          "bid_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest bid price, if present."
          },
          "bid_quantity": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest bid quantity bucket, in bonds ($1,000 face each): `[0-100)` (fewer\nthan 100), `[100-1000)` (100 to 999) or `[1000+]` (1,000 or more), or\n`null` if there's no bid side."
          },
          "bid_yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Latest bid yield, in percent, if present."
          },
          "coupon": {
            "type": [
              "string",
              "null"
            ],
            "description": "Coupon rate (annualized, in percent)."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "fed_taxable": {
            "type": [
              "string",
              "null"
            ],
            "description": "Federal tax status of a municipal bond: `TaxExempt`, `Taxable` or `AMT`,\nas in Security by Identifier. `null` for non-municipal bonds."
          },
          "grade": {
            "type": [
              "string",
              "null"
            ],
            "description": "Credit grade from the S&P rating, as the `grade` filter uses it: `IG`\n(BBB- or better) or `HY` (BB+ or lower); `null` when unrated and for\nTreasuries."
          },
          "industry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Industry classification."
          },
          "interest_rate_type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Interest rate type: `Fixed`, `Float`, `Variable`, `Step`, `Zero` or\n`FixedToFloat` (a switch between fixed and floating rates), where\navailable."
          },
          "is_callable": {
            "type": "boolean",
            "description": "True when the bond has a next call date at a set price, as in\n`next_call_date` of Security by Identifier."
          },
          "is_make_whole": {
            "type": "boolean",
            "description": "True when the retained schedules contain a make-whole call provision.\nIndependent of `is_callable`: a next call date is not required. Few\nmake-whole provisions are in the call schedules yet, so `false` doesn't\nmean the bond has none."
          },
          "is_putable": {
            "type": "boolean",
            "description": "True when the bond has a next put date."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "issue_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Issue date."
          },
          "maturity": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Maturity date."
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Security name in Bloomberg-style format."
          },
          "sector": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sector classification."
          },
          "state": {
            "type": [
              "string",
              "null"
            ],
            "description": "State or territory of the municipal issuer. `null` for non-municipal\nbonds."
          },
          "state_taxable": {
            "type": [
              "string",
              "null"
            ],
            "description": "State tax status of a municipal bond: `TaxExempt`, `Taxable` or\n`Unknown`, as in Security by Identifier. `null` for non-municipal bonds."
          }
        }
      },
      "SecurityDatedPriceLine": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "price"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "maturity": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Maturity date (when available for the requested asset class)."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "price": {
            "type": "string",
            "description": "Mid price (per 100 face) on `price_date`."
          },
          "price_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Price date (YYYY-MM-DD)."
          },
          "yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Yield corresponding to `price`, in percent; `null` when it can't be\ncomputed, as for floating-rate bonds, or is implausible for the price."
          }
        }
      },
      "SecurityLine": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "asset",
          "issuer",
          "borrower"
        ],
        "properties": {
          "accrual_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Interest accrual date."
          },
          "asset": {
            "type": "string",
            "description": "Asset class (e.g. GovernmentBond / MunicipalBond / TreasuryBill / CorporateBond / AgencyBond)."
          },
          "benchmark_isin": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISIN of the instrument the bond is benchmarked against."
          },
          "borrower": {
            "type": "string",
            "description": "Borrower name: the obligor or project when recorded, otherwise the issuer name, so it\noften matches `issuer`."
          },
          "corporate_bond_detail": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CorporateBondDetail",
                "description": "Extra corporate metadata (corporate bonds only)."
              },
              {
                "type": "null"
              }
            ]
          },
          "coupon": {
            "type": [
              "string",
              "null"
            ],
            "description": "Coupon rate as a percentage."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "figi": {
            "type": [
              "string",
              "null"
            ],
            "description": "FIGI identifier."
          },
          "frequency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Coupon frequency (e.g. OneTime, Monthly, Quarterly, SemiAnnual, Annual)."
          },
          "grade": {
            "type": [
              "string",
              "null"
            ],
            "description": "Credit grade from the S&P rating: IG (BBB- or better) or HY (BB+ or lower); null when unrated and for Treasuries."
          },
          "income": {
            "type": [
              "string",
              "null"
            ],
            "description": "Interest rate (coupon) type: Fixed, Float, Variable, Step, Zero or\nFixedToFloat (a switch between fixed and floating rates). Same values as\n`interest_rate_type` in Search Top-of-Book Prices."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "issue_notional": {
            "type": [
              "string",
              "null"
            ],
            "description": "Notional at issue."
          },
          "issuer": {
            "type": "string",
            "description": "Issuer name."
          },
          "maturity_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Maturity date."
          },
          "municipal_bond_detail": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/MunicipalBondDetail",
                "description": "Extra municipal metadata (municipal bonds only)."
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "next_call_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Next date the bond can be called at a set price. Null when it has none, or\nwhen the next call is only the start of a make-whole period."
          },
          "next_coupon_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Bond's next coupon payment date, if applicable."
          },
          "next_put_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Bond's next put date, if applicable."
          },
          "next_sink_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Bond's next sink date, if applicable."
          },
          "outstanding_notional": {
            "type": [
              "string",
              "null"
            ],
            "description": "Current outstanding notional."
          },
          "rating_snp": {
            "type": [
              "string",
              "null"
            ],
            "description": "Current S&P rating. Omitted unless your account is entitled to S&P ratings; `null` if the\nsecurity is unrated."
          },
          "shortcut": {
            "type": [
              "string",
              "null"
            ],
            "description": "OpenYield shortcut code (e.g. CT10), if curated."
          }
        }
      },
      "SecurityListItem": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "asset"
        ],
        "properties": {
          "asset": {
            "type": "string",
            "description": "Asset class."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          }
        }
      },
      "SecurityListResponse": {
        "type": "object",
        "required": [
          "securities"
        ],
        "properties": {
          "securities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurityListItem"
            },
            "description": "Tradable securities."
          }
        }
      },
      "SecurityPriceLine": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BidAsk"
          },
          {
            "type": "object",
            "required": [
              "isin",
              "name"
            ],
            "properties": {
              "as_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "Snapshot time of the quote."
              },
              "cusip": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "CUSIP identifier."
              },
              "isin": {
                "type": "string",
                "description": "ISIN identifier."
              },
              "maturity": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date",
                "description": "Maturity date (when available for the requested asset class)."
              },
              "name": {
                "type": "string",
                "description": "Security name in Bloomberg-style format."
              }
            }
          }
        ]
      },
      "SecuritySummary": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "maturity",
          "asset"
        ],
        "properties": {
          "asset": {
            "type": "string",
            "description": "Asset class (e.g. GovernmentBond / MunicipalBond / TreasuryBill / CorporateBond / AgencyBond)."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "grade": {
            "type": [
              "string",
              "null"
            ],
            "description": "Credit grade from the S&P rating: IG (BBB- or better) or HY (BB+ or lower); null when unrated and for Treasuries."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "maturity": {
            "type": "string",
            "format": "date",
            "description": "Security maturity date."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "shortcut": {
            "type": [
              "string",
              "null"
            ],
            "description": "OpenYield shortcut code (e.g. CT10), if curated."
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Security start date (interest accrual date, issue date, or initial settlement date)."
          }
        }
      },
      "SinglePrintLine": {
        "type": "object",
        "required": [
          "sequence",
          "as_at",
          "isin",
          "cusip",
          "side",
          "quantity",
          "price",
          "yield",
          "parties",
          "is_ats"
        ],
        "properties": {
          "as_at": {
            "type": "string",
            "description": "Trade time in New York local time, as ISO 8601 with its UTC offset\n(e.g. `2025-09-03T13:00:47-04:00`).",
            "example": "2025-09-03T13:00:47-04:00"
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier. Null when the source reported none."
          },
          "is_ats": {
            "type": "boolean",
            "description": "Whether the trade was executed on an ATS."
          },
          "isin": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISIN identifier. Null for a security OpenYield doesn't carry."
          },
          "parties": {
            "type": "string",
            "description": "Parties to the trade. TRACE: `<reporting party>-<contra party>`, using the\nfirst letter of each party kind: `D` Dealer, `C` Customer, and `A` an ATS\nas the reporting party; as the contra party, `A` is an ATS when `is_ats`\nis true and an affiliate otherwise. MSRB: `Dealer` (inter-dealer) or\n`Customer` (dealer-to-customer)."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reported trade price, per 100 face, preserving the source precision.\nNull when the source did not report a price."
          },
          "quantity": {
            "type": "string",
            "description": "Trade quantity in bonds ($1,000 face each). TRACE capped sizes appear as\n`1000.001` (1MM+) and `5000.001` (5MM+)."
          },
          "sequence": {
            "type": "integer",
            "format": "int32",
            "description": "TRACE or MSRB sequence number of the print. Sequences restart each\nreport date, so a print is identified by its report date and sequence."
          },
          "side": {
            "type": "string",
            "description": "`Buy` or `Sell`, from the reporting dealer's side of the trade: on a\ndealer-to-customer print, `Sell` is a customer buy."
          },
          "yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trade yield, in percent. Null when not reported."
          }
        }
      },
      "SingleSecurityDatedPriceListResponse": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "prices"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DatedPriceLine"
            },
            "description": "Daily prices for the security."
          }
        }
      },
      "SingleSecurityPriceListResponse": {
        "type": "object",
        "required": [
          "isin",
          "name",
          "prices"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "CUSIP identifier."
          },
          "isin": {
            "type": "string",
            "description": "ISIN identifier."
          },
          "name": {
            "type": "string",
            "description": "Security name in Bloomberg-style format."
          },
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceLine"
            },
            "description": "Intraday prices for the security."
          }
        }
      },
      "SingleSecurityResponse": {
        "type": "object",
        "required": [
          "security"
        ],
        "properties": {
          "security": {
            "$ref": "#/components/schemas/SecurityLine",
            "description": "Reference data for the requested security."
          }
        }
      },
      "TracePrintLine": {
        "type": "object",
        "required": [
          "trace_sequence",
          "as_at",
          "cusip",
          "side",
          "quantity",
          "is_estimated",
          "price",
          "printyield",
          "parties",
          "is_ats"
        ],
        "properties": {
          "as_at": {
            "type": "string",
            "format": "date-time",
            "description": "Trade time (UTC)."
          },
          "cusip": {
            "type": "string",
            "description": "CUSIP identifier."
          },
          "is_ats": {
            "type": "boolean",
            "description": "Whether the trade was executed on an ATS."
          },
          "is_estimated": {
            "type": "boolean",
            "description": "True when TRACE disseminated a capped size (e.g. 1MM+) rather than the\nexact quantity."
          },
          "parties": {
            "type": "string",
            "description": "`<reporting party>-<contra party>`, using the first letter of each party\nkind: `D` Dealer, `C` Customer, `A` ATS as the reporting party; as the\ncontra party, `A` is an ATS when `is_ats` is true and an affiliate otherwise."
          },
          "price": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reported trade price, per 100 face, preserving the source precision.\nNull when the source did not report a price."
          },
          "printyield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Trade yield, in percent. Null when not reported."
          },
          "quantity": {
            "type": "string",
            "description": "Trade quantity in bonds ($1,000 face each)."
          },
          "side": {
            "type": "string",
            "description": "`Buy` or `Sell`, from the reporting dealer's side of the trade: on a\ndealer-to-customer print, `Sell` is a customer buy."
          },
          "trace_sequence": {
            "type": "integer",
            "format": "int32",
            "description": "TRACE sequence number of the print."
          }
        }
      },
      "YieldCurveBenchmarkLine": {
        "type": "object",
        "required": [
          "tenor",
          "shortcut",
          "isin",
          "name"
        ],
        "properties": {
          "current": {
            "type": [
              "string",
              "null"
            ],
            "description": "Current live benchmark yield, in percent (six decimals)."
          },
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "Benchmark CUSIP."
          },
          "isin": {
            "type": "string",
            "description": "Benchmark ISIN."
          },
          "name": {
            "type": "string",
            "description": "Benchmark display name."
          },
          "previous": {
            "type": [
              "string",
              "null"
            ],
            "description": "Previous close benchmark yield, in percent (six decimals)."
          },
          "shortcut": {
            "type": "string",
            "description": "OpenYield shortcut code (e.g. CT02, CT10). A new bill with no yield yet is\nshown by the bill it replaced, under that bill's shortcut (e.g. CB06B)."
          },
          "tenor": {
            "type": "string",
            "description": "Benchmark tenor in years."
          }
        }
      },
      "YieldCurveResponse": {
        "type": "object",
        "required": [
          "benchmarks"
        ],
        "properties": {
          "as_of": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Latest timestamp across the benchmark points returned."
          },
          "benchmarks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/YieldCurveBenchmarkLine"
            },
            "description": "Yield-curve benchmark points ordered by tenor."
          }
        }
      },
      "YieldCurveStreamBenchmarkLine": {
        "type": "object",
        "description": "A single benchmark point in a curve message. Fields match\n`GET /prices/yield_curve`, except `previous` is not included and the live\nyield is named `yield` (the REST endpoint names it `current`).",
        "required": [
          "tenor",
          "shortcut",
          "isin",
          "name"
        ],
        "properties": {
          "cusip": {
            "type": [
              "string",
              "null"
            ],
            "description": "Benchmark CUSIP."
          },
          "isin": {
            "type": "string",
            "description": "Benchmark ISIN."
          },
          "name": {
            "type": "string",
            "description": "Benchmark display name."
          },
          "shortcut": {
            "type": "string",
            "description": "OpenYield shortcut code (e.g. CT02, CT10). A new bill with no yield yet is\nshown by the bill it replaced, under that bill's shortcut (e.g. CB06B)."
          },
          "tenor": {
            "type": "string",
            "description": "Benchmark tenor in years, as a decimal string with six decimal places."
          },
          "yield": {
            "type": [
              "string",
              "null"
            ],
            "description": "Current live benchmark yield, in percent (six decimals)."
          }
        }
      },
      "YieldCurveStreamMessage": {
        "type": "object",
        "description": "The message pushed to yield-curve stream clients: the complete benchmark\ncurve, sent on connect and again whenever any benchmark point changes.\nEvery frame is a complete curve; liveness uses WebSocket protocol\nping/pong, not an application heartbeat. Clients must ignore unknown\nfields.",
        "required": [
          "benchmarks"
        ],
        "properties": {
          "as_of": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Timestamp of the most recent benchmark update; `null` before the first\nupdate of the day."
          },
          "benchmarks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/YieldCurveStreamBenchmarkLine"
            },
            "description": "Yield-curve benchmark points ordered by tenor."
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "API access requires a signed OpenYield Data Services Agreement.\n\n[Request Access](mailto:intro@openyld.com).\n\n*Note that each user or application needs its own credentials to access the Data Services API.*\n\nTo authenticate:\n\n1. Call **Login** (`POST /auth/login`) with your email and password. The response contains a JWT in `token`.\n2. Send `Authorization: Bearer <token>` on every request, including the WebSocket streams.\n3. Tokens expire after a period set by OpenYield. Requests with an expired token return `401`; log in again to get a new one.\n\n**Logout** clears the `token` cookie that Login sets for browser sessions. It does not revoke the token itself: a bearer token stays valid until it expires, so discard it on the client.\n"
    },
    {
      "name": "Reference",
      "description": "The **reference** section has endpoints for:\n\n- **Security by Identifier**: Get full reference data for a single security.\n- **Securities by Ticker**: Get the ISIN, CUSIP, name and asset class of the corporate bonds whose issuer has a given equity ticker.\n\nThe **Tradable Securities List** endpoint is available to subscribers on request, for those who need a trading list of government, corporate and certificate of deposit securities (excluding 144A).\n"
    },
    {
      "name": "Pricing",
      "description": "The **pricing** section has endpoints for:\n\n- **Close Prices by Asset**: Mid price and yield as of the previous business day's close.\n- **Daily Prices for Security**: The end-of-day mid price and yield for a given identifier for the past ~3 months.\n- **Treasury Benchmark Yield Curve**: Benchmark Treasury curve points with the previous close and the live mid yield from the order book.\n- **Latest Intraday Prices for Asset**: The most recent bid and ask, with their yields and sizes and their mid when both are quoted, by asset class, available as:\n  - **Latest Intraday Prices for Governments**\n  - **Latest Intraday Prices for Corporates**\n  - **Latest Intraday Prices for Agencies**\n  - **Latest Intraday Prices for Certificates of Deposit**\n- **Intraday Prices for Security**: Returns today's intraday bid and ask, with their yields and sizes and their mid when both are quoted, for a security.\n- **Search Top-of-Book Prices**: Search securities by filters and return their latest top-of-book bid/ask.\n- **Treasury Benchmark Yield Curve Stream**: The live benchmark curve over WebSocket.\n"
    },
    {
      "name": "Analytics",
      "description": "The **analytics** section exposes the bond calculator and cashflow calculator.\n\nThe unversioned bond calculator treats `as_at` as the settlement date. Cashflow treats `as_at` as the trade date and applies the standard settlement cycle. Historical dates use the available reference terms; these endpoints do not promise archived reference versions.\n\nCashflow `quantity` is the number of bonds of $1,000 face. An omitted quantity uses 1. An omitted or zero `price` uses 100 under the existing contract. Supply an explicit positive price to calculate at another price. This endpoint does not fetch the latest market price.\n\nInvalid numeric inputs return HTTP 400. An unsuccessful calculation or spread calculation without a usable benchmark returns HTTP 422. For explicit dates other than the current standard settlement date the benchmark is omitted from price/yield results. No historical benchmark close is substituted with today's rate.\n\nSpread calculations require a usable benchmark rate dated today. A missing rate returns HTTP 422 on weekends and market holidays and before the day's benchmark is available. The calculator does not substitute a stale rate from the previous business day. Price/yield requests that do not require a benchmark may still succeed with `benchmark: null`.\n"
    },
    {
      "name": "Reported",
      "description": "[OpenYield](https://openyld.com) collects all TRACE and MSRB reported print data. MSRB covers municipal bonds; TRACE covers corporate, agency, and other FINRA-reported securities. Our API endpoints provide both derived and raw print data.\n\nNote that you will need a TRACE license for real-time TRACE data from [OpenYield](https://openyld.com). Without one, TRACE prints are delivered with a 4-hour delay. Every print reply says which applies to your account: `entitlements.real_time_trace`, with `entitlements.history_from` for the earliest trade date you can see, and `reported_through` for the latest report time included.\n\nThe **reported** section has endpoints for:\n\n- **Count Prints**: Returns how many TRACE or MSRB prints of a trade date match the filters, and their par, optionally grouped (for example by hour and ATS, or by security).\n- **Print Volume by Asset**: Returns average, count and volume of print data for traded securities by asset.\n- **Historical MSRB Prints**: Returns raw MSRB prints for a date, from a given sequence number.\n- **Historical TRACE Prints**: Returns raw TRACE prints for a date, from a given sequence number.\n- **Recent Prints for Security**: Returns the latest prints across trade dates.\n- **Prints for Security and Date**: Returns prints for a security on the given New York trade date.\n- **Print Statistics for Security**: Returns daily print statistics for a security for up to ~3 months.\n- **Today's MSRB Prints**: Returns all of today's raw MSRB prints, from a given sequence number.\n- **Today's TRACE Prints**: Returns all of today's raw TRACE prints, from a given sequence number.\n- **Inventory Snapshot**: Returns active marketplace inventory by asset class.\n- **TRACE Prints Stream**: Live TRACE prints for a security over WebSocket (requires real-time TRACE).\n\nThe sequence-based endpoints return up to 500 prints per call, starting at the `{sequence}` you pass (inclusive). To get the next batch, pass the last sequence number you received and skip the prints you already have. A batch of fewer than 500 prints means you have caught up.\n\n### History\n\nWithout a history subscription, print data covers the last 7 days (Eastern time). **Historical MSRB Prints**, **Historical TRACE Prints**, **Prints for Security and Date** and **Count Prints** return `403` for earlier dates, and **Recent Prints for Security** and **Print Statistics for Security** stop at the same date. [Contact OpenYield](mailto:intro@openyld.com) for full history.\n\nTrade-date summaries exclude older trades received today. Sequence feeds remain grouped by feed/report date. Current rows do not provide immutable correction or cancellation history.\n\nMSRB uses 5000.001 bonds to indicate capped MM+ sizes. TRACE also uses capped markers. Statistics use the corresponding cap amount: TRACE 1MM+ counts as $1,000,000 face in `large`, while 5MM+ counts as $5,000,000 face in `block`.\n\nTRACE party buckets are mutually exclusive. Its `ats` bucket counts prints with an ATS reporting or contra party; dealer-to-dealer prints remain in `dealer_dealer` even when flagged `is_ats`. MSRB counts `is_ats` separately, so its `ats` count can overlap a dealer bucket.\n\nIndividual Treasury prints are not supplied by these feeds. Treasury prices and the benchmark curve are separate data products.\n\nRaw reported trade prices preserve source precision over REST and the TRACE WebSocket stream. A missing source price is returned as `null`; the print remains in the response.\n"
    }
  ]
}