Calculate Key Rate Durations
curl --request POST \
--url https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"cashflows": [
50,
50,
50,
50,
1050
],
"times": [
1,
2,
3,
4,
5
],
"curve_rates": [
0.025,
0.028,
0.03,
0.032,
0.034
],
"bump_size": 0.0001
}
'import requests
url = "https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration"
payload = {
"cashflows": [50, 50, 50, 50, 1050],
"times": [1, 2, 3, 4, 5],
"curve_rates": [0.025, 0.028, 0.03, 0.032, 0.034],
"bump_size": 0.0001
}
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({
cashflows: [50, 50, 50, 50, 1050],
times: [1, 2, 3, 4, 5],
curve_rates: [0.025, 0.028, 0.03, 0.032, 0.034],
bump_size: 0.0001
})
};
fetch('https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration', 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/risk/sensitivities/key-rate-duration",
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([
'cashflows' => [
50,
50,
50,
50,
1050
],
'times' => [
1,
2,
3,
4,
5
],
'curve_rates' => [
0.025,
0.028,
0.03,
0.032,
0.034
],
'bump_size' => 0.0001
]),
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/risk/sensitivities/key-rate-duration"
payload := strings.NewReader("{\n \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\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/risk/sensitivities/key-rate-duration")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration")
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 \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"key_rate_durations": [
0.95,
1.82,
2.68,
3.45,
4.15
]
}
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient credits. This endpoint requires 5 credits."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}quantlib-risk
Calculate Key Rate Durations
Measures sensitivity to changes in specific points (key rates) along the yield curve while holding other rates constant. More precise than overall duration for understanding where yield curve exposure lies. Essential for bullet vs barbell strategies and curve positioning trades. [Tier: PRO, Credits: 5]
POST
/
quantlib
/
risk
/
sensitivities
/
key-rate-duration
Calculate Key Rate Durations
curl --request POST \
--url https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"cashflows": [
50,
50,
50,
50,
1050
],
"times": [
1,
2,
3,
4,
5
],
"curve_rates": [
0.025,
0.028,
0.03,
0.032,
0.034
],
"bump_size": 0.0001
}
'import requests
url = "https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration"
payload = {
"cashflows": [50, 50, 50, 50, 1050],
"times": [1, 2, 3, 4, 5],
"curve_rates": [0.025, 0.028, 0.03, 0.032, 0.034],
"bump_size": 0.0001
}
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({
cashflows: [50, 50, 50, 50, 1050],
times: [1, 2, 3, 4, 5],
curve_rates: [0.025, 0.028, 0.03, 0.032, 0.034],
bump_size: 0.0001
})
};
fetch('https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration', 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/risk/sensitivities/key-rate-duration",
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([
'cashflows' => [
50,
50,
50,
50,
1050
],
'times' => [
1,
2,
3,
4,
5
],
'curve_rates' => [
0.025,
0.028,
0.03,
0.032,
0.034
],
'bump_size' => 0.0001
]),
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/risk/sensitivities/key-rate-duration"
payload := strings.NewReader("{\n \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\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/risk/sensitivities/key-rate-duration")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fincept.in/quantlib/risk/sensitivities/key-rate-duration")
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 \"cashflows\": [\n 50,\n 50,\n 50,\n 50,\n 1050\n ],\n \"times\": [\n 1,\n 2,\n 3,\n 4,\n 5\n ],\n \"curve_rates\": [\n 0.025,\n 0.028,\n 0.03,\n 0.032,\n 0.034\n ],\n \"bump_size\": 0.0001\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"key_rate_durations": [
0.95,
1.82,
2.68,
3.45,
4.15
]
}
}{
"detail": "Invalid API key"
}{
"detail": "Insufficient credits. This endpoint requires 5 credits."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
API key for authentication. Get your key at https://api.fincept.in/auth/register
Body
application/json
Bond cashflows (coupon payments and principal)
Example:
[5, 5, 5, 105]
Time points (in years) when cashflows occur
Example:
[1, 2, 3, 4]
Current yield curve rates at each time point
Example:
[0.02, 0.025, 0.03, 0.035]
Rate bump size for sensitivity calculation
Example:
0.0001
⌘I
