Skip to content
Docs
Edel Stocks

Public Stocks API

Connect to the public, read-only API for Edel Stocks data.

What the API provides

The Public Stocks API gives wallets, portfolio views and market dashboards the data they need to display Edel Stocks. It is read-only and needs no account, API key or signature.

Prices are indicative display data, not executable quotes or exchange prices. The API cannot mint, redeem or submit transactions. See Stocks API status.

Where to connect

All data routes sit under one base URL and accept GET requests from any origin, including a browser. Use the interactive reference to try any route.

ResourceAddress
Base URLhttps://stocks.edel.finance/api/v1
Interactive referencestocks.edel.finance/api/docs
OpenAPI documentstocks.edel.finance/api/docs/json

Make your first request

List the published assets, then keep each asset’s id. The single-asset routes take that UUID: a ticker or Canton instrument ID returns 400. See Assets for every field.

List published assets
curl --fail-with-body --silent --show-error \
  "https://stocks.edel.finance/api/v1/assets"

Choose a route

Start with assets to discover instruments, then use prices for regular updates.

To do thisUse
List instruments with names, logos and multipliersGET /assets
Show one asset in detailGET /assets/{assetId}
Refresh prices in a live viewGET /prices
Show an asset’s dividends and other eventsGET /assets/{assetId}/corporate-actions

Keep prices current

Load /assets for identity and names, then poll /prices every 15 seconds and join the two on id. Read /assets again from time to time: the published list can change, so do not hard-code it.

Poll prices in JavaScript
const api = "https://stocks.edel.finance/api/v1";

async function read(path) {
  const response = await fetch(`${api}${path}`);
  if (!response.ok) throw new Error(`${path} returned ${response.status}`);
  return response.json();
}

const assets = await read("/assets");
const names = new Map(assets.map((a) => [a.id, a.underlying.name]));

async function refresh() {
  try {
    for (const { id, prices, generatedAt } of await read("/prices")) {
      console.log(names.get(id), prices.implied, generatedAt);
    }
  } catch (error) {
    // Keep the last values on screen and mark them as stale.
    console.warn(error.message);
  }
}

refresh();
setInterval(refresh, 15_000);