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)
- Open the Portal at app.quantra.io and sign in.
- Go to Settings → click Load Example (No Market Data).
- Then click Load Market Data to load quotes and the quote book.
- Go to Products → open any instrument (Fixed Rate Bond, Floating Rate Bond, IR Swap) → 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) used by curve helpers |
| Market Data → Quote Book | Time-series quotes with as-of resolution, calendar view, and import/export |
| 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 |
| 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.
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.
Quantra supports two index types:
- Ibor: Term-rate indices like Euribor, LIBOR, TIBOR (with a tenor > 0)
- Overnight: Overnight rate indices like SOFR, ESTR, SONIA (tenor = 0)
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.
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.
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:
- Every Portal pricing operation sends a standard JSON request to
api.quantra.io - The Portal authenticates with Firebase tokens; the API accepts API keys. Same backend, different auth.
- Any request you build in the Portal can be exported as JSON and sent via curl or your own code
- The Pricing Playground on the Dashboard lets you see and edit the raw JSON for any request
Example: Portal pricing request
When you price a fixed rate bond in the Portal, it sends something like this:
{
"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.