Quoting and Trading API
With this API you can quote and trade structured products and OTC derivatives. This guide explains the key features of the API and the data structures used.
The basic quoting/trading flow
This API can be used to quote and trade products in flows where Vontobel is either a client (sends QuoteRequests)
or a service (consumes QuoteRequests). These two flows require two separate infrastructure configurations, but in
either case the flow follows the same principles:
- The client sends a
QuoteRequest - The service immediately responds with a
QuoteRequestAckacknowledging the reciept of the quote request - Once the service computes/solves the price, it sends back a
QuoteResultto the client - The client checks
QuoteResult.Statusto see if the quoting was successful - Optionally, the client can follow up with a
TradeRequestusing theQuoteRequest.Id.Requestidentifier - The service immediately responds with a
TradeRequestAckacknowledging the receipt of the trade request - Once the service fully confirms the trade, it will publish a
TradeResultto the client - The client checks the
TradeResult.Statusto confirm the trade was successfully confirmed
The client can optionally specify the id -> clientRequest identifier. The service doesn't need/use this
identifier, but it will carry it throughout the entire flow, helping the client to correlate its own
messages. On the other hand, the service will generate a unique id -> request identifier right after the first response
(QuoteResultAck) to uniquely identify the flow - this identifier must to be attached to each following
message for the given flow and will be used by the service to correlate messages related to a specific quote/trade request.
The quote request
The quote request has three major parts:
idto provide a client reference idquotingParametersto specify certain parameters, such as the seeking parameterproductto define the product parameters
Reference: see swagger reference
{
"id":{
"clientRequest": "5e5b6e02-5ca2-40be-9ab7-47982102d03a"
},
"quotingParameters": {
"seekingParameter": "Price",
"quoteType": "Tradeable",
"clientDirection": "Short"
},
"product": {
"$type": "VanillaOption",
"currency": "CHF",
"optionType": "Put",
"initialFixingDate": { "offset": "0B" },
"initialPaymentDate": { "offset": "2B" },
"finalFixingDate": { "offset": "12M" },
"finalPaymentDate": { "offset": "2B" },
"underlyings": [
{ "id": { "bloomberg": "SMI Index" } }
],
"initialFixingType": "Close",
"settlementType": "Cash",
"price": {
"type": "Percent"
},
"strike": { "percent": 1.0 },
"size": {
"notional": 100000,
"denomination": 500
}
}
}
product is a polymorphic field, meaning that based on the $type field it can take different shapes
(consult the OpenAPI schema for more details). For example, the $type: VanillaOption product will have a different
set of fields than the $type: CallableReverseConvertible - the latter will have call and coupon schedules.
This polymorphic type approach will manifest itself in more places, for example the call/coupon schedule fields are
also polymorphic - schedules can be parametric where the client just specifies a call/coupon frequency and
the service will generate the dates automatically, or fixed in which case the client has to provide a fixed
call/coupon schedule with all the call/coupon dates listed.
Another important aspect of the API is date handling. The client is allowed to use date offsets or explicit dates:
// using offsets
"product": {
...
"initialFixingDate": { "offset": "0B" },
"initialPaymentDate": { "offset": "2B" },
"finalFixingDate": { "offset": "12M" },
"finalPaymentDate": { "offset": "2B" },
...
}
// using explicit dates
"product": {
...
"initialFixingDate": { "date": "2025-04-01" },
"initialPaymentDate": { "date": "2025-04-03" },
"finalFixingDate": { "date": "2026-04-01" },
"finalPaymentDate": { "date": "2026-04-03" },
...
}
When Vontobel plays the role of the quoting/trading service, it supports offset dates, but 3rd party services using this API are not required to support offset dates, as Vontobel will always send explicit dates in the requests/responses.
Offset dates are always converted into explicit dates in QuoteResults. Date generation
is based on multiple parameters such as the list of underlyings, the settlement type, currency etc.
Certain fields support both a percent and an absolute input. For example the strike field
can be entered as a percent:
"strike": { "percent": 1.0 },
Or as an absolute value:
"strike": { "absolute": 12726.58 },
The actual reference point of a percent value depends on the field. For example, in case of the strike the reference
value is the referenceSpot that will be returned in the QuoteResult. If percentage values are used in the output,
they will be "expanded" into absolute values in the QuoteResult:
...
"strike": {
"absolute": 12726.58,
"percent": 1
},
"referenceSpot": 12726.58,
"initialFixingType": "Close",
...
Certain values, such as the strike and the barrier level can be specified both on the payoff level and also on the underlying
level in the QuoteRequest. The underlying level input has precendence over the payoff level input, and the payoff level input
is moved to the underlying level in the QuoteResult to avoid any confusion.
The quote result
The quote result returns practically the same quote request that was sent, except it contains the solution (in this case the price that we solved for) and it expands certain fields. For example, it will expand offset dates into actual fixed dates, set the reference spot used for the calculation, return the actual value of fields that were defaulted because the client didn't specify them.
{
"status": {
"status": "Success"
},
"id": {
"Request": "6a90c0b3-5a0d-474d-b543-fcabf26b8cc3",
"ClientRequest": "5e5b6e02-5ca2-40be-9ab7-47982102d03a"
},
"quotingParameters": {
"seekingParameter": "Price",
"quoteType": "Tradeable",
"clientDirection": "Short"
},
"product": {
"$type": "VanillaOption",
"optionType": "Put",
"initialFixingDate": { "date": "2025-04-01" },
"initialPaymentDate": { "date": "2025-04-03" },
"finalFixingDate": { "date": "2026-04-01" },
"finalPaymentDate": { "date": "2026-04-07" },
"underlyings": [
{
"id": { "bloomberg": "SMI Index" },
"strike": {
"absolute": 12726.58,
"percent": 1
},
"referenceSpot": 12726.58,
"initialFixingType": "Close",
"initialFixingDate": {
"date": "2025-04-01"
}
}
],
"isQuanto": false,
"currency": "CHF",
"price": {
"type": "Percent",
"value": 0.0454
},
"size": {
"notional": 100000,
"denomination": 500,
"sharesCalculationType": "DenominationPerStrike"
},
"settlementType": "Cash"
}
}
In terms of schema, the exact same id, quotingParameters and product types are used.
Please note the following changes to the product:
- If the pricing was successful, the field we solved for (e.g.:
Price) is populated now - If offset dates were used in the
QuoteRequest, then they are replaced with explicit fixed dates - If
percentvalues were used in theQuoteRequest, they also contain nowabsolutevalues - Certain fields, such as the
strikewere moved under theunderlyings - Certain optional fields that were not specified were returned with their default value
The status field contains a top level status value and optionally a list of warning or
error messages when the quoting fails.
{
...
"status": {
"status": "Fail",
"messages": [
{
"message": "Volume CHF 100 is less than minimum 10000 [Code IS-6930-G]",
"severity": "Error",
"visibility": "Public"
}
]
}
...
}
The trade request
In order to trade a successful qoute result, the client needs to use the QuoteResult.Id.Request
identifier from the quote result.
Reference: see swagger reference
{
"id": {
"Request": "6a90c0b3-5a0d-474d-b543-fcabf26b8cc3"
}
}
The trade result
Upon a successful trade confirmation the service will respond with a TradeResult.
The TradeResult will contain the product from the QuoteResult - it is the exact same product as in the QuoteResult, only
added for convenience for clients.
At the moment the only new information in the TradeResult is the ISIN.
{
"status": {
"status": "Success"
},
"id": {
"Request": "364f793d-d639-4347-bb8f-2264ad325a47",
"Simulation": "34581311",
"Valdet": "3651286477",
"ISIN": "XF0040490223"
},
"product": {
"$type": "VanillaOption",
"optionType": "Put",
"initialFixingDate": { "date": "2025-04-01" },
"initialPaymentDate": { "date": "2025-04-03" },
"finalFixingDate": { "date": "2026-04-01" },
"finalPaymentDate": { "date": "2026-04-07" },
"underlyings": [
{
"id": { "bloomberg": "SMI Index" },
"strike": {
"absolute": 12726.58,
"percent": 1
},
"referenceSpot": 12726.58,
"initialFixingType": "Close",
"initialFixingDate": {
"date": "2025-04-01"
}
}
],
"isQuanto": false,
"currency": "CHF",
"price": {
"type": "Percent",
"value": 0.0454
},
"size": {
"notional": 100000,
"denomination": 500,
"sharesCalculationType": "DenominationPerStrike"
},
"settlementType": "Cash"
}
}