Partner SDK & API Documentation

Integrate Doris into your platform

Embed visual investment shapes, real-time payoff calculations, and broker execution into any application with our RESTful API and SDKs.

Low Latency

Sub-100ms response times for payoff calculations

FCA Compliant

Built-in compliance checks and audit trails

Multi-Market

LSE, NYSE, NASDAQ, and more exchanges

Webhooks

Real-time events for orders and lifecycle

Quick Start

Install:

npm install @novum/doris-sdk

Usage:

import { DorisClient } from '@novum/doris-sdk';

const doris = new DorisClient({
  apiKey: 'your-api-key',
  environment: 'sandbox', // or 'production'
});

// List available shapes
const shapes = await doris.shapes.list({ category: 'balanced' });
console.log(shapes);

// Calculate a collar payoff
const payoff = await doris.calculate({
  strategyType: 'collar',
  underlying: 'AZN.L',
  amount: 10000,
  maxLoss: 10,
  targetReturn: 15,
  timeHorizon: 90,
});

// Render the payoff chart in your app
const chartData = payoff.payoffCurve.map(p => ({
  x: p.pricePercent,
  y: p.returnPercent,
}));

Authentication

All API requests require authentication via an API key passed in the Authorization header. Partner-level endpoints additionally require a user token for actions on behalf of end users.

API Key Authentication
For server-to-server calls (shapes, calculations, market data)
Authorization: Bearer nvk_live_abc123...
User Token Authentication
For user-scoped actions (orders, portfolio, account)
Authorization: Bearer nvk_live_abc123...
X-User-Token: usr_token_xyz...
Rate Limits
TierRequests/minCalculations/minWebhooks
Basic60305
Professional60030025
EnterpriseUnlimitedUnlimitedUnlimited

API Reference

GET/api/v1/shapes API Key
List all available investment shapes

Parameters

NameTypeRequiredDescription
categorystringOptionalFilter by risk category: conservative, balanced, growth, aggressive
limitnumberOptionalMax results (default: 20)

Response

{
  "shapes": [
    {
      "id": "collar",
      "name": "Safety Net (Collar)",
      "category": "conservative",
      "description": "Limits both downside and upside...",
      "defaultMaxLoss": 10,
      "defaultTargetReturn": 15,
      "payoffPoints": [...]
    }
  ],
  "total": 8
}
POST/api/v1/calculate API Key
Calculate payoff curve for a given shape and parameters

Parameters

NameTypeRequiredDescription
strategyTypestringRequiredShape type: collar, protective_put, bull_call_spread, etc.
underlyingstringRequiredTicker symbol (e.g., AAPL, AZN.L)
amountnumberRequiredInvestment amount in GBP
maxLossnumberRequiredMaximum loss percentage (e.g., 10)
targetReturnnumberRequiredTarget return percentage (e.g., 15)
timeHorizonnumberRequiredTime horizon in days

Response

{
  "payoffCurve": [
    { "pricePercent": -30, "returnPercent": -10 },
    { "pricePercent": -10, "returnPercent": -10 },
    { "pricePercent": 0, "returnPercent": -2.5 },
    { "pricePercent": 15, "returnPercent": 15 },
    { "pricePercent": 30, "returnPercent": 15 }
  ],
  "legs": [...],
  "greeks": { "delta": 0.45, "gamma": 0.02, "theta": -0.15, "vega": 0.32 },
  "totalPremium": 342.50,
  "netCost": 8342.50
}
POST/api/v1/simulate API Key
Run historical scenario simulation on a shape

Parameters

NameTypeRequiredDescription
strategyTypestringRequiredShape type
scenariostringRequiredScenario: covid_crash, gfc_2008, dot_com, custom
amountnumberRequiredInvestment amount in GBP
maxLossnumberOptionalMax loss %
targetReturnnumberOptionalTarget return %

Response

{
  "scenario": "covid_crash",
  "marketChange": -33.9,
  "shapeReturn": -10.0,
  "unprotectedReturn": -33.9,
  "protectionBenefit": 23.9,
  "timeline": [...]
}
GET/api/v1/market/quote/:symbol API Key
Get real-time market quote for a symbol

Parameters

NameTypeRequiredDescription
symbolstringRequiredTicker symbol (path parameter)

Response

{
  "symbol": "AZN.L",
  "name": "AstraZeneca PLC",
  "price": 10542.00,
  "change": 156.00,
  "changePercent": 1.50,
  "currency": "GBp",
  "exchange": "LSE",
  "timestamp": "2026-03-09T14:30:00Z"
}
POST/api/v1/orders API Key + User Token
Submit an investment order through the broker integration

Parameters

NameTypeRequiredDescription
strategyTypestringRequiredShape type
underlyingstringRequiredTicker symbol
amountnumberRequiredInvestment amount in GBP
maxLossnumberRequiredMax loss %
targetReturnnumberRequiredTarget return %
timeHorizonnumberRequiredDays
brokerIdstringRequiredConnected broker identifier

Response

{
  "orderId": "ORD-2026-ABC123",
  "status": "pending_review",
  "confirmationNumber": null,
  "estimatedFees": 45.00,
  "estimatedPremium": 342.50,
  "complianceStatus": "pending",
  "message": "Order submitted for compliance review"
}
POST/api/v1/webhooks API Key
Register a webhook for order and lifecycle events

Parameters

NameTypeRequiredDescription
urlstringRequiredYour webhook endpoint URL
eventsstring[]RequiredEvent types: order.filled, order.rejected, position.matured, position.alert
secretstringOptionalWebhook signing secret for verification

Response

{
  "webhookId": "wh_abc123",
  "url": "https://your-app.com/webhooks/doris",
  "events": ["order.filled", "position.matured"],
  "status": "active",
  "createdAt": "2026-03-09T14:30:00Z"
}

Embed Code Generator

Embed interactive Doris shape visualisations directly into your website or application. Customise the appearance and copy the code.

Configuration
Market Movement

Powered by Doris / Novum

Embed Code
<iframe
  src="https://embed.novum.io/shape/collar?theme=dark"
  width="600"
  height="400"
  frameborder="0"
  allow="clipboard-write"
  style="border-radius: 12px; border: 1px solid #1e293b;"
></iframe>

<!-- Or use the JavaScript SDK -->
<div id="doris-shape"></div>
<script src="https://cdn.novum.io/embed.js"></script>
<script>
  Doris.render('#doris-shape', {
    shape: 'collar',
    theme: 'dark',
    interactive: true,
    width: 600,
    height: 400,
  });
</script>
Integration Checklist
1

Register for a partner account

2

Generate your API key from the Partner Portal

3

Install the SDK or use the REST API directly

4

Test in sandbox environment

5

Complete compliance review

6

Go live with production credentials

Webhook Events

Receive real-time notifications when events occur in your users' investment lifecycle.

order.submitted

Order has been submitted for review

order.compliance_approved

Order passed compliance checks

order.filled

Order has been executed by the broker

order.rejected

Order was rejected (compliance or broker)

position.matured

Investment has reached maturity date

position.safety_net

Safety net (max loss) has been activated

position.target_reached

Target return has been achieved

position.approaching_maturity

Investment is within 7 days of maturity

Webhook Payload Example

{
  "id": "evt_abc123",
  "type": "order.filled",
  "timestamp": "2026-03-09T14:30:00Z",
  "data": {
    "orderId": "ORD-2026-ABC123",
    "userId": "usr_xyz",
    "underlying": "AZN.L",
    "strategyType": "collar",
    "amount": 10000,
    "confirmationNumber": "CONF-789",
    "executionPrice": 10542.00,
    "fees": 45.00
  },
  "signature": "sha256=abc123..."
}

Ready to integrate?

Get started with a free sandbox account. Our team is available to help with integration, compliance, and going live.