Volatility Surface Grid
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/surface/grid \
--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": 102.5
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/surface/grid"
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": 102.5
}
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: 102.5
})
};
fetch('https://api.fincept.in/quantlib/volatility/surface/grid', 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/grid",
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' => 102.5
]),
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/grid"
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\": 102.5\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/grid")
.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\": 102.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/surface/grid")
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\": 102.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"volatility": 0.2375,
"total_variance": 0.028203125,
"expiry": 0.5,
"strike": 102.5
}
}{
"detail": "Invalid API key"
}{
"detail": "Endpoint requires Standard tier or higher"
}{
"detail": [
{
"loc": [
"body",
"volatility"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}quantlib-volatility
Volatility Surface Grid
Query a full volatility surface defined on a 2D grid of expiries and strikes. Uses bilinear interpolation between grid points. Essential for pricing exotic options, managing volatility risk, and calibrating models to market data. Supports arbitrary volatility smile and term structure shapes. [Tier: PRO, Credits: 5]
POST
/
quantlib
/
volatility
/
surface
/
grid
Volatility Surface Grid
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/surface/grid \
--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": 102.5
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/surface/grid"
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": 102.5
}
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: 102.5
})
};
fetch('https://api.fincept.in/quantlib/volatility/surface/grid', 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/grid",
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' => 102.5
]),
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/grid"
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\": 102.5\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/grid")
.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\": 102.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/surface/grid")
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\": 102.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"volatility": 0.2375,
"total_variance": 0.028203125,
"expiry": 0.5,
"strike": 102.5
}
}{
"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 (must be strictly increasing)
Minimum array length:
2Example:
[0.25, 0.5, 1]
Array of strike prices (must be strictly increasing)
Minimum array length:
2Example:
[90, 95, 100, 105, 110]
2D matrix of volatilities [expiry_index][strike_index]. Dimensions must match expiries x strikes
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 point
Required range:
x >= 0Example:
0.5
Strike price for the query point
Required range:
x >= 0Example:
102.5
⌘I
