curl --request POST \
--url https://api.fincept.in/quantlib/models/svi/calibrate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"strikes": [
90,
95,
100,
105,
110
],
"market_vols": [
0.28,
0.24,
0.22,
0.23,
0.26
],
"forward": 100.5,
"T": 0.5
}
'import requests
url = "https://api.fincept.in/quantlib/models/svi/calibrate"
payload = {
"strikes": [90, 95, 100, 105, 110],
"market_vols": [0.28, 0.24, 0.22, 0.23, 0.26],
"forward": 100.5,
"T": 0.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({
strikes: [90, 95, 100, 105, 110],
market_vols: [0.28, 0.24, 0.22, 0.23, 0.26],
forward: 100.5,
T: 0.5
})
};
fetch('https://api.fincept.in/quantlib/models/svi/calibrate', 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/models/svi/calibrate",
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([
'strikes' => [
90,
95,
100,
105,
110
],
'market_vols' => [
0.28,
0.24,
0.22,
0.23,
0.26
],
'forward' => 100.5,
'T' => 0.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/models/svi/calibrate"
payload := strings.NewReader("{\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.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/models/svi/calibrate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/models/svi/calibrate")
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 \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"fitted_vols": [
0.279,
0.241,
0.22,
0.229,
0.258
],
"total_variances": [
0.0389,
0.029,
0.0242,
0.0262,
0.0333
]
}
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient credits. This endpoint requires 5 credits. Current balance: 2 credits."
}{
"detail": [
{
"loc": [
"body",
"kappa"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}SVI Volatility Surface Calibration
Calibrate the Stochastic Volatility Inspired (SVI) parametric model to market implied volatility data. SVI provides a smooth, arbitrage-free volatility smile that can be efficiently calibrated to market quotes. Essential for volatility surface construction, option pricing across strikes, and risk management. Returns fitted volatilities and total variances for all input strikes. [Tier: ENTERPRISE, Credits: 10]
curl --request POST \
--url https://api.fincept.in/quantlib/models/svi/calibrate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"strikes": [
90,
95,
100,
105,
110
],
"market_vols": [
0.28,
0.24,
0.22,
0.23,
0.26
],
"forward": 100.5,
"T": 0.5
}
'import requests
url = "https://api.fincept.in/quantlib/models/svi/calibrate"
payload = {
"strikes": [90, 95, 100, 105, 110],
"market_vols": [0.28, 0.24, 0.22, 0.23, 0.26],
"forward": 100.5,
"T": 0.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({
strikes: [90, 95, 100, 105, 110],
market_vols: [0.28, 0.24, 0.22, 0.23, 0.26],
forward: 100.5,
T: 0.5
})
};
fetch('https://api.fincept.in/quantlib/models/svi/calibrate', 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/models/svi/calibrate",
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([
'strikes' => [
90,
95,
100,
105,
110
],
'market_vols' => [
0.28,
0.24,
0.22,
0.23,
0.26
],
'forward' => 100.5,
'T' => 0.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/models/svi/calibrate"
payload := strings.NewReader("{\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.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/models/svi/calibrate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/models/svi/calibrate")
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 \"strikes\": [\n 90,\n 95,\n 100,\n 105,\n 110\n ],\n \"market_vols\": [\n 0.28,\n 0.24,\n 0.22,\n 0.23,\n 0.26\n ],\n \"forward\": 100.5,\n \"T\": 0.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"fitted_vols": [
0.279,
0.241,
0.22,
0.229,
0.258
],
"total_variances": [
0.0389,
0.029,
0.0242,
0.0262,
0.0333
]
}
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient credits. This endpoint requires 5 credits. Current balance: 2 credits."
}{
"detail": [
{
"loc": [
"body",
"kappa"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}Authorizations
API key for authentication. Get your key at https://api.fincept.in/auth/register
Body
Array of option strike prices from market data (e.g., [90, 95, 100, 105, 110])
Corresponding market implied volatilities (annualized, e.g., [0.28, 0.24, 0.22, 0.23, 0.26])
Forward price of the underlying at maturity T (F = S * exp((r-q)*T))
Time to maturity in years (same for all strikes in this slice)
