Skip to content
Docs
Edel Stocks

Endpoints

Routes, response fields, limits and errors.

Routes

Every route takes GET under the base URL and returns JSON. List routes return a plain array. {assetId} is the UUID from /assets.

RouteReturns
/assetsEvery published asset, complete.
/assets/{assetId}One complete asset.
/pricesPrices for every published asset.
/prices/{assetId}Prices for one asset.
/corporate-actionsActions for every published asset, newest processing date first.
/assets/{assetId}/corporate-actionsOne asset’s actions, or an empty array if it has none.

Assets

GET /assets returns an array of these objects. GET /assets/{assetId} returns one.

Example data: GET /assets/f49ead25-94bf-47db-a2b4-4ff1c475a09f
{
  "id": "f49ead25-94bf-47db-a2b4-4ff1c475a09f",
  "status": "active",
  "logoUri": "https://assets.edel.finance/tokens/QQQe/logo-cfd106bf4706287fa946efe95433081813e756c3b802bc79c2a4826c3724f56a.svg",
  "instrument": {
    "id": "QQQe",
    "admin": "edel-registrar::122085b19d439b7e68abf7c94c3d9949f9e23aef3f1d4835ccbcb0993ed96fb53432"
  },
  "underlying": {
    "ticker": "QQQ",
    "name": "Invesco QQQ"
  },
  "prices": {
    "currency": "USD",
    "underlying": "692.305",
    "implied": "692.7901612803811827545"
  },
  "multiplier": {
    "value": "1.000700791241405425"
  },
  "generatedAt": "2026-10-31T00:44:37.777024710Z"
}
FieldTypeMeaning
idUUIDStable public ID of the asset.
statusStringactive, inactive or unspecified. It does not say where a token trades.
logoUriURLEdel-hosted logo.
instrument.idStringCanton instrument ID, such as QQQe.
instrument.adminStringCanton instrument admin. Use it together with instrument.id.
underlying.tickerStringTicker of the stock or ETF.
underlying.nameStringName of the stock or ETF.
prices.currencyStringCurrently always USD.
prices.underlyingDecimal stringReference price per share of the stock or ETF.
prices.impliedDecimal stringIndicative value of one token, with the multiplier already applied.
multiplier.valueDecimal stringCurrent exposure multiplier.
generatedAtTimestampWhen the upstream price was generated.

Prices

GET /prices returns an array of these objects. GET /prices/{assetId} returns one. prices and generatedAt have the same meaning as on an asset.

Example data: GET /prices/f49ead25-94bf-47db-a2b4-4ff1c475a09f
{
  "id": "f49ead25-94bf-47db-a2b4-4ff1c475a09f",
  "prices": {
    "currency": "USD",
    "underlying": "692.305",
    "implied": "692.7901612803811827545"
  },
  "generatedAt": "2026-10-31T00:46:22.545760620Z"
}

Corporate actions

Both routes return an array of these objects. Read how to interpret them before building on this data.

Example data: one corporate action
{
  "assetId": "cd04948a-e52a-4611-901b-bc9c51987642",
  "type": "cash_dividend",
  "status": "in_progress",
  "processDate": "2026-10-30",
  "details": {
    "rate": "1.888834",
    "currency": "USD"
  },
  "multiplier": null
}
FieldTypeMeaning
assetIdUUIDThe asset’s id.
typeStringEvent type, such as cash_dividend, stock_dividend or split. Expect other values too.
statusStringin_progress or completed.
processDateDate or nullSource processing date, if supplied.
detailsObject of stringsEvent details. The fields depend on type.
multiplierObject or nullbefore, after and effectiveAt, only when the effect is independently verified. Otherwise null.

Corporate action details

All values in details are strings. Unlisted event types keep their published fields.

TypeDetails
cash_dividendrate in USD per share, and currency.
stock_dividendrate in shares per share.
splitoldRate and newRate.

Limits and refresh

Each IP address can make 100 requests per minute. Responses carry x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset, the seconds until the window resets.

Any origin can call the API, and responses use Cache-Control: no-store. Polling faster than the intervals below returns the same data.

DataRefreshes every
Prices, on every route15 seconds
Published list, status and multiplier60 seconds
Corporate actions1 hour

Errors

Errors return JSON with a code and a message. A list route fails as a whole if one published asset cannot be served, so a successful list is always complete.

StatusCodeMeaning
400invalid_requestassetId is not a UUID.
404asset_not_foundThe UUID is unknown, or the asset is not published.
404not_foundThe route or method does not exist.
429rate_limitedToo many requests. Wait for the window to reset.
503data_unavailableSource data cannot be served right now. Retry later and show your last values as stale.