SABR Normal Volatility
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/sabr/normal-vol \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"forward": 0.02,
"strike": 0.015,
"expiry": 2,
"alpha": 0.02,
"beta": 0,
"rho": -0.3,
"nu": 0.4
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/sabr/normal-vol"
payload = {
"forward": 0.02,
"strike": 0.015,
"expiry": 2,
"alpha": 0.02,
"beta": 0,
"rho": -0.3,
"nu": 0.4
}
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({
forward: 0.02,
strike: 0.015,
expiry: 2,
alpha: 0.02,
beta: 0,
rho: -0.3,
nu: 0.4
})
};
fetch('https://api.fincept.in/quantlib/volatility/sabr/normal-vol', 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/sabr/normal-vol",
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([
'forward' => 0.02,
'strike' => 0.015,
'expiry' => 2,
'alpha' => 0.02,
'beta' => 0,
'rho' => -0.3,
'nu' => 0.4
]),
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/sabr/normal-vol"
payload := strings.NewReader("{\n \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\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/sabr/normal-vol")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/sabr/normal-vol")
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 \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"normal_vol": 0.0195,
"forward": 0.02,
"strike": 0.015,
"expiry": 2
}
}{
"detail": "Invalid API key"
}{
"detail": "Endpoint requires Standard tier or higher"
}{
"detail": [
{
"loc": [
"body",
"volatility"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}quantlib-volatility
SABR Normal Volatility
Calculate normal (Bachelier) implied volatility using the SABR model. Normal volatility is used in normal (absolute) option pricing models, common in negative interest rate environments and for spread options. Converts SABR parameters to normal volatility for Bachelier option pricing. [Tier: PRO, Credits: 5]
POST
/
quantlib
/
volatility
/
sabr
/
normal-vol
SABR Normal Volatility
curl --request POST \
--url https://api.fincept.in/quantlib/volatility/sabr/normal-vol \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"forward": 0.02,
"strike": 0.015,
"expiry": 2,
"alpha": 0.02,
"beta": 0,
"rho": -0.3,
"nu": 0.4
}
'import requests
url = "https://api.fincept.in/quantlib/volatility/sabr/normal-vol"
payload = {
"forward": 0.02,
"strike": 0.015,
"expiry": 2,
"alpha": 0.02,
"beta": 0,
"rho": -0.3,
"nu": 0.4
}
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({
forward: 0.02,
strike: 0.015,
expiry: 2,
alpha: 0.02,
beta: 0,
rho: -0.3,
nu: 0.4
})
};
fetch('https://api.fincept.in/quantlib/volatility/sabr/normal-vol', 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/sabr/normal-vol",
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([
'forward' => 0.02,
'strike' => 0.015,
'expiry' => 2,
'alpha' => 0.02,
'beta' => 0,
'rho' => -0.3,
'nu' => 0.4
]),
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/sabr/normal-vol"
payload := strings.NewReader("{\n \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\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/sabr/normal-vol")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/volatility/sabr/normal-vol")
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 \"forward\": 0.02,\n \"strike\": 0.015,\n \"expiry\": 2,\n \"alpha\": 0.02,\n \"beta\": 0,\n \"rho\": -0.3,\n \"nu\": 0.4\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"normal_vol": 0.0195,
"forward": 0.02,
"strike": 0.015,
"expiry": 2
}
}{
"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
Forward price of the underlying
Required range:
-10 <= x <= 10Example:
0.02
Option strike price (can be negative for rates)
Required range:
-10 <= x <= 10Example:
0.015
Time to expiry in years
Required range:
x >= 0Example:
2
SABR alpha parameter
Required range:
x >= 0Example:
0.02
SABR beta parameter (often 0 for normal model)
Required range:
0 <= x <= 1Example:
0
SABR rho parameter (correlation)
Required range:
-1 <= x <= 1Example:
-0.3
SABR nu parameter (vol of vol)
Required range:
x >= 0Example:
0.4
⌘I
