Total Variance from Surface
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/surface/total-variance \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"expiries": [
0.25,
0.5,
1
],
"strikes": [
90,
95,
100,
105,
110
],
"vol_matrix": [
[
0.28,
0.26,
0.24,
0.25,
0.27
],
[
0.27,
0.25,
0.23,
0.24,
0.26
],
[
0.26,
0.24,
0.22,
0.23,
0.25
]
],
"query_expiry": 0.5,
"query_strike": 100
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/surface/total-variance"
payload = {
"expiries": [0.25, 0.5, 1],
"strikes": [90, 95, 100, 105, 110],
"vol_matrix": [[0.28, 0.26, 0.24, 0.25, 0.27], [0.27, 0.25, 0.23, 0.24, 0.26], [0.26, 0.24, 0.22, 0.23, 0.25]],
"query_expiry": 0.5,
"query_strike": 100
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expiries: [0.25, 0.5, 1],
strikes: [90, 95, 100, 105, 110],
vol_matrix: [
[0.28, 0.26, 0.24, 0.25, 0.27],
[0.27, 0.25, 0.23, 0.24, 0.26],
[0.26, 0.24, 0.22, 0.23, 0.25]
],
query_expiry: 0.5,
query_strike: 100
})
};
fetch('https://api.fincept.in/quantlib/volatility/surface/total-variance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fincept.in/quantlib/volatility/surface/total-variance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'expiries' => [
0.25,
0.5,
1
],
'strikes' => [
90,
95,
100,
105,
110
],
'vol_matrix' => [
[
0.28,
0.26,
0.24,
0.25,
0.27
],
[
0.27,
0.25,
0.23,
0.24,
0.26
],
[
0.26,
0.24,
0.22,
0.23,
0.25
]
],
'query_expiry' => 0.5,
'query_strike' => 100
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fincept.in/quantlib/volatility/surface/total-variance"
payload := strings.NewReader("{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fincept.in/quantlib/volatility/surface/total-variance")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/surface/total-variance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"total_variance": 0.026245,
"expiry": 0.5,
"strike": 100
}
}{
"detail": "Invalid API key"
}{
"detail": "Endpoint requires Standard tier or higher"
}{
"detail": [
{
"loc": [
"body",
"volatility"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}quantlib-volatility
Total Variance from Surface
Query total variance (volatility^2 * time) from a volatility surface at a specific expiry and strike. Total variance is fundamental for option pricing models and ensures proper scaling of volatility across different time horizons. Used in variance swaps, volatility derivatives, and model calibration. [Tier: PRO, Credits: 5]
POST
/
quantlib
/
volatility
/
surface
/
total-variance
Total Variance from Surface
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/surface/total-variance \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"expiries": [
0.25,
0.5,
1
],
"strikes": [
90,
95,
100,
105,
110
],
"vol_matrix": [
[
0.28,
0.26,
0.24,
0.25,
0.27
],
[
0.27,
0.25,
0.23,
0.24,
0.26
],
[
0.26,
0.24,
0.22,
0.23,
0.25
]
],
"query_expiry": 0.5,
"query_strike": 100
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/surface/total-variance"
payload = {
"expiries": [0.25, 0.5, 1],
"strikes": [90, 95, 100, 105, 110],
"vol_matrix": [[0.28, 0.26, 0.24, 0.25, 0.27], [0.27, 0.25, 0.23, 0.24, 0.26], [0.26, 0.24, 0.22, 0.23, 0.25]],
"query_expiry": 0.5,
"query_strike": 100
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
expiries: [0.25, 0.5, 1],
strikes: [90, 95, 100, 105, 110],
vol_matrix: [
[0.28, 0.26, 0.24, 0.25, 0.27],
[0.27, 0.25, 0.23, 0.24, 0.26],
[0.26, 0.24, 0.22, 0.23, 0.25]
],
query_expiry: 0.5,
query_strike: 100
})
};
fetch('https://api.fincept.in/quantlib/volatility/surface/total-variance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fincept.in/quantlib/volatility/surface/total-variance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'expiries' => [
0.25,
0.5,
1
],
'strikes' => [
90,
95,
100,
105,
110
],
'vol_matrix' => [
[
0.28,
0.26,
0.24,
0.25,
0.27
],
[
0.27,
0.25,
0.23,
0.24,
0.26
],
[
0.26,
0.24,
0.22,
0.23,
0.25
]
],
'query_expiry' => 0.5,
'query_strike' => 100
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fincept.in/quantlib/volatility/surface/total-variance"
payload := strings.NewReader("{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fincept.in/quantlib/volatility/surface/total-variance")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/surface/total-variance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expiries\": [\n 0.25,\n 0.5,\n 1\n ],\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"vol_matrix\": [\n [\n 0.28,\n 0.26,\n 0.24,\n 0.25,\n 0.27\n ],\n [\n 0.27,\n 0.25,\n 0.23,\n 0.24,\n 0.26\n ],\n [\n 0.26,\n 0.24,\n 0.22,\n 0.23,\n 0.25\n ]\n ],\n \"query_expiry\": 0.5,\n \"query_strike\": 100\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"total_variance": 0.026245,
"expiry": 0.5,
"strike": 100
}
}{
"detail": "Invalid API key"
}{
"detail": "Endpoint requires Standard tier or higher"
}{
"detail": [
{
"loc": [
"body",
"volatility"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}Authorizations
API key for authentication. Get your key at https://api.fincept.in/auth/register
Body
application/json
Array of expiry times in years
Minimum array length:
2Example:
[0.25, 0.5, 1]
Array of strike prices
Minimum array length:
2Example:
[90, 95, 100, 105, 110]
2D volatility matrix [expiry_index][strike_index]
Example:
[
[0.28, 0.26, 0.24, 0.25, 0.27],
[0.27, 0.25, 0.23, 0.24, 0.26],
[0.26, 0.24, 0.22, 0.23, 0.25]
]
Expiry time in years for the query
Required range:
x >= 0Example:
0.5
Strike price for the query
Required range:
x >= 0Example:
100
⌘I
