Portal Guide

The Quantra Portal is a web application for managing market data, building yield curves, and pricing instruments — all from your browser.

Quick start (price in 2 minutes)

  1. Open the Portal at app.quantra.io and sign in.
  2. Go to Settings → click Load Example (No Market Data).
  3. Then click Load Market Data to load quotes and the quote book.
  4. Go to Products → open any instrument (Fixed Rate Bond, Floating Rate Bond, IR Swap, Swaption) → click Price.

Overview

The Portal is available at app.quantra.io. Sign in with your Google account to access the Dashboard. From there, you can manage your API keys, set up market data, build curves, and price instruments.

Under the hood, the Portal sends exactly the same JSON requests as the API. Every action you perform in the Portal can be replicated via a direct API call — the Portal just provides a visual interface on top.

Section Description
Dashboard API key management, quick start guide, and a pricing playground for raw JSON requests
Market Data → Quotes Enter and manage market quotes (rates, spreads, prices). Quotes are tagged as Curve or Volatility.
Market Data → Quote Book Time-series quotes with as-of resolution and import/export. Use it for both curve and volatility quotes.
Market Data → Indices Define IBOR and overnight indices (Euribor, SOFR, ESTR, etc.) with their conventions
Curve Sets Combine indices, quotes, and bootstrap settings into reusable curve configurations
Vol Surfaces Build swaption volatility surfaces from a manual grid or from the Quote Book
Products Price fixed rate bonds, floating rate bonds, and IR swaps
Settings Data overview, export/import, load examples, and clear-all

Dashboard

API Keys

The API Keys panel lets you create, toggle, copy, and delete API keys. Keys are used to authenticate programmatic API requests (via the X-API-Key header). The free tier allows up to 3 keys.

When you create a key, the full key is shown once. Copy it immediately — for security, the Portal only stores a masked version after that.

Pricing Playground

The Pricing Playground on the Dashboard lets you send raw JSON requests to any endpoint. This is useful for testing and debugging — you can select a product type, edit the JSON, and see the response alongside timing information.

Market Data

The Market Data section is where you define the building blocks that curves and instruments need.

Quotes

Quotes represent market observables: deposit rates, swap rates, FRA rates, futures prices, FX spots, and spreads. Each quote has an id, a kind (Rate, Spread, Price, etc.), and a value.

Every quote is tagged with a Quote Type: Curve (used by curve helpers and pricing quotes) or Volatility (used by volatility surfaces).

Quotes can be referenced by curve helpers via quote_id, which means you can update market data in one place and have all curves that depend on it automatically use the new values.

Indices

Indices represent floating rate references like Euribor 6M, SOFR, or ESTR. An index definition includes the tenor, fixing days, calendar, day counter, and business day convention — everything QuantLib needs to construct the index object.

Indices are stored in your browser (local storage). Use Import/Export in Settings to back them up or move them between machines.

Quantra supports two index types:

Index Fixings (Past Rates)

Each index can store a time-series of past fixings. These are used for seasoned instruments (e.g., floating rate bonds) and are included in the API payload under pricing.indices[*].fixings.

Quote Book

The Quote Book stores time-series values per quote (date → value). It resolves a value for the current as-of date using either Previous (last value ≤ date) or Exact mode.

Use the calendar heatmap to see completeness, edit values by date directly in the table, and export/import the quote book JSON when needed. Volatility quotes live here too — just set Quote Type to Volatility.

Volatility Surfaces

Vol Surfaces are configured separately (top-level menu). Each surface stores an expiry × tenor grid plus metadata (calendar, day count, volatility type).

There are two ways to fill the grid:

Vol Surfaces screen: field-by-field

To link the Quote Book, set Quote Source = Quote Book and provide a Quote ID template. The template is a pattern that expands into quote ids for every grid cell. Example:

example — quote id template
Template: SWAPTION_{exp}Y_{ten}Y
Expiries: 1, 2, 3, 5
Tenors: 1, 2, 5, 10

Generated IDs:
SWAPTION_1Y_1Y, SWAPTION_1Y_2Y, SWAPTION_1Y_5Y, SWAPTION_1Y_10Y
SWAPTION_2Y_1Y, SWAPTION_2Y_2Y, SWAPTION_2Y_5Y, SWAPTION_2Y_10Y
...

When you click Resolve Grid @ As‑Of, the Portal looks up those ids in the Quote Book and fills the grid with the matching volatility values. The plots always reflect the current grid values.

The heatmap and 3D plot always show the current grid values. If you are using Quote Book, those values come from the last Resolve Grid @ As‑Of action and depend on the global as‑of date in the header.

Curve Sets

A Curve Set is a reusable configuration that combines everything needed to build one or more yield curves: which indices to use, which curve helpers (deposits, swaps, OIS, etc.), and the bootstrap settings (interpolation, day counter, trait).

When you price an instrument in the Portal, you select a Curve Set. The Portal resolves all the references, builds the pricing.curves block, and sends it to the API.

Curve Sets are the core abstraction in the Portal. Once you've set up your market data and built a Curve Set, pricing any instrument is just a matter of filling in the instrument details and clicking Price.

Products

The Products section provides form-based interfaces for pricing instruments. Currently supported in the Portal:

Fixed Rate Bond

Enter the bond details (face amount, coupon rate, schedule, day count conventions) and select a Curve Set for discounting. The Portal builds the full API request and returns NPV, clean/dirty price, yield, duration, convexity, and optionally cash flows.

Bonds can be saved for later — give them a name and they'll appear in the Fixed Rate Bond list for quick re-pricing with updated market data.

Floating Rate Bond

Similar to fixed rate bonds, but with an index reference, spread, and fixing days. The Portal automatically includes the required index definition in the API request.

IR Swap

Create and price vanilla interest rate swaps. The list page supports import/export/new, and the editor builds an API-compliant request including curves, indices, and optional cash flows.

Swaption

Price swaptions with a selected volatility surface and an IR pricing model. The editor includes the underlying swap terms, exercise date/type, and model selection.

For a detailed comparison of Bloomberg SWPM-OV vs. QuantLib and how Quantra makes assumptions explicit, see Bloomberg Swaption Comparison.

Settings

Settings provides data overview counts, export/import backup tools, example loaders (no market data vs. market data), and a clear-all option.

As-Of Date

The Portal has a global as-of date selector in the header. This sets the valuation date for all pricing operations. When you change the as-of date, all instruments will be re-priced relative to that date.

This maps directly to the pricing.as_of_date field in the API — it sets QuantLib's Settings::evaluationDate().

Portal vs. API: what's the same?

The Portal is a frontend for the same API. Here's what that means in practice:

Example: Portal pricing request

When you price a fixed rate bond in the Portal, it sends something like this:

json — sent by the portal
{
  "pricing": {
    "as_of_date": "2025-06-15",
    "settlement_date": "2025-06-17",
    "indices": [
      {
        "id": "EUR_6M",
        "name": "Euribor",
        "index_type": "Ibor",
        "tenor_number": 6,
        "tenor_time_unit": "Months",
        "fixing_days": 2,
        "calendar": "TARGET",
        "business_day_convention": "ModifiedFollowing",
        "day_counter": "Actual360",
        "end_of_month": false,
        "currency": "EUR"
      }
    ],
    "curves": [{
      "id": "EUR_DISC",
      "day_counter": "Actual365Fixed",
      "interpolator": "LogLinear",
      "bootstrap_trait": "Discount",
      "reference_date": "2025-06-15",
      "points": [
        /* ... deposit, swap, OIS helpers from the Curve Set ... */
      ]
    }]
  },
  "bonds": [{
    "fixed_rate_bond": {
      "settlement_days": 2,
      "face_amount": 100,
      "rate": 0.05,
      "accrual_day_counter": "ActualActualBond",
      "payment_convention": "ModifiedFollowing",
      "redemption": 100.0,
      "issue_date": "2025-01-15",
      "schedule": {
        "calendar": "TARGET",
        "effective_date": "2025-01-15",
        "termination_date": "2030-01-15",
        "frequency": "Semiannual",
        "convention": "ModifiedFollowing",
        "termination_date_convention": "ModifiedFollowing",
        "date_generation_rule": "Backward"
      }
    },
    "discounting_curve": "EUR_DISC"
  }]
}

This is identical to what you'd send via curl or Python — the Portal just helps you build it visually.