Welcome to Refinitiv’s Volatility Surfaces API.
The Volatility Surfaces API provides you with an easy way to:
To compute a volatility surface, all you need to do is define the underlying instrument. For more advanced usage, you can easily apply different calculation parameters or adjust the surface layout to match your needs.
When making any request to our Volatility Surfaces API, you will need to include a valid token that can be retrieved from the oauth2 API.
Please refer to the quick start guide for details on how to get the authorization token.
Method: POST |
Protocol: https | Endpoint: api.refinitiv.com/data/quantitative-analytics-curves-and-surfaces/v1/surfaces |
The request is structured as follows:
{
"universe": [
{
"surfaceTag": "mySurface",
"underlyingType": "<underlying-type>",
"underlyingDefinition": <underlying-definition>,
"surfaceParameters": {
"xAxis": "Date",
"yAxis": "Strike"
},
"surfaceLayout": {
"format": "Matrix"
}
}
]
}
Here is a description of the properties that compose the API request:
Parameter | Description |
---|---|
surfaceTag | This is a user-defined string that is used to identify the output of the calculation |
underlyingType | The value provided describes the type of volatility surface being generated. The possible values are:
|
underlyingDefinition | In this section, you will find the description of the underlying instruments used for the generation of the volatility surface. The list of the properties depends on the type of instrument and is controlled by the value set to the instrumentType property. |
surfaceParameters | This object property contains the properties that may be used to control the calculation. It mainly covers dates, market data assumptions (e.g. interpolation), and pricing model preferences. Some Parameters are common to all volatility surfaces contracts, while others are specific to a particular type of volatility. |
surface Layout | This object property contains the properties that may be used to control how the surface is displayed. Format: the general format of the surface returned. The possible values are:
xValues: Here you can specify your own values for the x-axis. yValues: Here you can specify your own values for the y-axis. xPointCount: The number of points on the x-axis. yPointCount: The number of points on the y-axis. dataPoint: Here you can specify the list of specific data points to be returned. Used only if format = 'List'. Please see the response structure description for more details on the surface layout definition. |
The API response contains the different sections defined in the "output" property of the request.
{
"data": [
{
"surfaceTag": "mySurface",
"surface": [
[
null,
"34.088",
"36.2185",
"38.349",
"40.4795"
],
[
"2019-04-18",
0.5433581255439179,
0.48003249444850066,
0.4131854250680365,
0.34279427928780754
],
[
"2019-09-20",
0.40053081800213886,
0.3855299957095886,
0.37502560388285044,
0.37611620462184264
],
[
"2019-12-20",
0.3700413864441955,
0.35877058687095253,
0.3515030450704461,
0.35094606876956363
]
]
}
]
}
The table below explains the different types of layout you can specify when requesting a volatility surface.
Matrix layout format | List layout format | |
Description | xValues and yValues arrays define values on x and y axis. In the example below, xAxis is Tenor and yAxis is Strike. |
Points to return are defined by dataPoints array of (x, y) pairs. In the example below, xAxis is Tenor and yAxis is Strike. |
Request example | "surfaceLayout": { "format": "Matrix", "xValues": [ "1M", "3M" ], "yValues":[ 3800, 4200] } |
"surfaceLayout": { "format": "List", "dataPoints":[{"x": "1M", "y":3800}, {"x": "3M", "y":4200} ] } |
Response | "surface": [ [ null, "3800", "4200" ], [ "1M", 22.280937986749098, 14.902041118838 ], [ "3M", 12.935225550274199, 8.652717035855979 ] ] |
"surface": [ [ "1M", "3800", 22.280937986749098 ], [ "3M", "4200", 8.652717035855979 ] ] |