POST /v1/quotes
The main endpoint. Price an optional pool of ad-hoc instruments plus a list of quotes that
reference instruments by id (pooled ad-hoc or stored). Returns a batch — one entry per quote,
each with its own status.
Request body
{
"instruments": [ /* optional ad-hoc pool; each item needs an id */ ],
"quotes": [ /* one or more quotes */ ]
}
Quote fields
| Field | Required | Description |
|---|---|---|
instrument_id | yes | id of a pooled ad-hoc instrument or a stored one |
input_kind | yes | yield · clean_price · dirty_price · transacted |
input_value | yes | the yield (decimal) or price (per 100), or transacted cash |
amount_kind | no | nominal or transacted (trade size) |
amount_value | no | required (> 0) when amount_kind is set |
settlement_date | no | ISO date; defaults to today |
options | no | see below |
input_kind
| Value | You supply | emrgex returns |
|---|---|---|
yield | a yield | the price + metrics |
clean_price | a clean price | the solved yield + metrics |
dirty_price | a dirty price | the solved yield + metrics |
transacted | a dirty cash amount (needs amount_kind: nominal) | derives the price, then solves |
options
| Option | Type | Description |
|---|---|---|
round | int (0–12) | round money/rate outputs to N decimals |
with_cashflows | bool | include the full discounted cashflow schedule |
yield_worst | bool | compute yield-to-worst for callable bonds |
coupon_type | FIXED/ACCRUAL | per-quote override of the coupon mechanic (what-if) |
index_ratio | number | published index nominal (VNA) for index-linked bonds; every money output is multiplied by index_ratio/100 |
Response — batch envelope
{
"data": [
{
"index": 0,
"id": "MH12034",
"status": "ok",
"data": {
"instrument_id": "MH12034",
"convention": "NOMINAL · ACT/ACT.DRMH",
"calculation_code": "ACT/ACT.DRMH|NOMINAL",
"coupon_type": "ACCRUAL",
"settlement_date": "2026-06-09T00:00:00Z",
"metrics": { "yield": 0.1, "dirty_price": 112.547645, "clean_price": 107.853124, "...": "..." },
"next_coupon": { "date": "...", "interest": 5.75, "total": 5.75, "present_value": 5.7 }
}
}
],
"warnings": []
}
- Each item has
status: "ok"with adatapayload, orstatus: "failed"with an RFC 7807errorobject — one bad quote never fails the whole batch. - A non-convergent price→yield solve returns a per-item
422.
The five input scenarios
input_kind × amount_kind cover the traded combinations:
input_kind | amount_kind | Use |
|---|---|---|
yield | nominal | yield + face → price & settlement cash |
yield | transacted | yield + cash → implied nominal |
clean_price | nominal | price + face → yield & cash |
clean_price | transacted | price + cash → yield & nominal |
transacted | nominal | cash + face → price & yield |
See Examples for full request bodies.