Documentation

Everything you need to fit arbitrage-free implied volatility surfaces with Volptima.

Overview

Volptima provides CVI (Convex Volatility Interpolation), a volatility surface fitter built on convex optimization. Instead of starting from a parametric model, CVI formulates the calibration as a sparse quadratic program, enforcing no-butterfly and no-calendar arbitrage as hard constraints, and more generally encoding the structural properties of the volatility surface. You send market data (strikes, bid/ask vols, forwards, discount factors), and get back a fitted surface you can interpolate at any strike.

There are two ways to use Volptima, depending on your setup:

Choosing Your Setup

Architecture

There are two entry points into Volptima. The API Client is a Python SDK with interchangeable backends. Grafit can also be used directly from Python, C, or any language via the JSON interface.

Your Python Code

VolptimaClient

volptima-api-client

CloudBackend

HTTPS to cloud

LocalBackend

In-process Rust

Cloud API

Hosted API

Grafit

Rust engine

or

Your Code

Python, C, C++, ...

Grafit

JSON in / JSON out

Use the Rust engine directly via language bindings — no Python SDK needed

SaaS clients use the API Client with CloudBackend (cloud fitting, no local install). Grafit clients can use the API Client with LocalBackend, or call Grafit directly from any supported language.

What You Get

Regardless of which setup you choose, the fitter takes market data and returns a fitted volatility surface with these parameters per expiry:

FieldDescription
atm_volAt-the-money implied volatility
sNormalized ATM skew parameter
c_arrayNormalized convexity array (smile curvature at each node)
std_dev_arrayStandard deviation nodes where the smile is evaluated
anchor_atm_volReference volatility used for normalization

The fitted surface is arbitrage-free by construction: no butterfly arbitrage (PDF ≥ 0) and no calendar arbitrage (total variance non-decreasing).