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.
Assets
Canton instrument identity, the underlying stock or ETF, logo, status, current multiplier and indicative prices.
Prices
The same indicative prices in a lighter response for regular updates.
Corporate actions
Published dividends, splits and other events for each asset.
Limits and errors
100 requests per minute, refresh intervals and every error code.
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.
| Resource | Address |
|---|---|
| Base URL | https://stocks.edel.finance/api/v1 |
| Interactive reference | stocks.edel.finance/api/docs |
| OpenAPI document | stocks.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.
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 this | Use |
|---|---|
| List instruments with names, logos and multipliers | GET /assets |
| Show one asset in detail | GET /assets/{assetId} |
| Refresh prices in a live view | GET /prices |
| Show an asset’s dividends and other events | GET /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.
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);