{"openapi":"3.0.3","info":{"title":"Stocks API","version":"1.0.0","description":"Build with Edel Stocks on Canton.\n\nAccess asset metadata, indicative stock and token prices, and corporate actions to power wallets, portfolio views, and market dashboards.\n\nNo API key required. Start with **Assets** to discover supported instruments, then use **Prices** for lightweight updates."},"components":{"schemas":{}},"paths":{"/api/v1/assets":{"get":{"summary":"List all assets","tags":["Assets"],"description":"Returns Canton instrument identity, the underlying stock or ETF, logo, status, current multiplier and indicative prices. Use the returned `id` with the single-asset routes; it identifies the instrument’s admin and ID together. Decimal values are strings to preserve precision.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["active","inactive","unspecified"]},"logoUri":{"type":"string","format":"uri"},"instrument":{"type":"object","properties":{"id":{"type":"string","minLength":1},"admin":{"type":"string","minLength":1}},"required":["id","admin"],"additionalProperties":false},"underlying":{"type":"object","properties":{"ticker":{"type":"string"},"name":{"type":"string"}},"required":["ticker","name"],"additionalProperties":false},"prices":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"underlying":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"USD per underlying stock/ETF share: exact bid/ask midpoint."},"implied":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"Indicative USD per Canton token: backing token bid/ask midpoint. Not executable or an observed exchange trade."}},"required":["currency","underlying","implied"],"additionalProperties":false},"multiplier":{"type":"object","properties":{"value":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"}},"required":["value"],"additionalProperties":false},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Upstream price generation time, preserving source precision; not response or metadata update time."}},"required":["id","status","logoUri","instrument","underlying","prices","multiplier","generatedAt"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}},"/api/v1/assets/{assetId}":{"get":{"summary":"Get an asset","tags":["Assets"],"description":"Returns Canton instrument identity, the underlying stock or ETF, logo, status, current multiplier and indicative prices. Use the returned `id` with the single-asset routes; it identifies the instrument’s admin and ID together. Decimal values are strings to preserve precision.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"assetId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["active","inactive","unspecified"]},"logoUri":{"type":"string","format":"uri"},"instrument":{"type":"object","properties":{"id":{"type":"string","minLength":1},"admin":{"type":"string","minLength":1}},"required":["id","admin"],"additionalProperties":false},"underlying":{"type":"object","properties":{"ticker":{"type":"string"},"name":{"type":"string"}},"required":["ticker","name"],"additionalProperties":false},"prices":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"underlying":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"USD per underlying stock/ETF share: exact bid/ask midpoint."},"implied":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"Indicative USD per Canton token: backing token bid/ask midpoint. Not executable or an observed exchange trade."}},"required":["currency","underlying","implied"],"additionalProperties":false},"multiplier":{"type":"object","properties":{"value":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"}},"required":["value"],"additionalProperties":false},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Upstream price generation time, preserving source precision; not response or metadata update time."}},"required":["id","status","logoUri","instrument","underlying","prices","multiplier","generatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}},"/api/v1/prices":{"get":{"summary":"List all prices","tags":["Prices"],"description":"Returns the underlying stock midpoint and the implied value per Canton token in the stated currency. These are indicative display prices, not executable quotes or Canton exchange prices. Decimal values are strings. `generatedAt` is the source price timestamp, so it may precede the request. Poll at intervals of 15 seconds or longer.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"prices":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"underlying":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"USD per underlying stock/ETF share: exact bid/ask midpoint."},"implied":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"Indicative USD per Canton token: backing token bid/ask midpoint. Not executable or an observed exchange trade."}},"required":["currency","underlying","implied"],"additionalProperties":false},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Upstream price generation time, preserving source precision; not response or metadata update time."}},"required":["id","prices","generatedAt"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}},"/api/v1/prices/{assetId}":{"get":{"summary":"Get an asset’s prices","tags":["Prices"],"description":"Returns the underlying stock midpoint and the implied value per Canton token in the stated currency. These are indicative display prices, not executable quotes or Canton exchange prices. Decimal values are strings. `generatedAt` is the source price timestamp, so it may precede the request. Poll at intervals of 15 seconds or longer.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"assetId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"prices":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"underlying":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"USD per underlying stock/ETF share: exact bid/ask midpoint."},"implied":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$","description":"Indicative USD per Canton token: backing token bid/ask midpoint. Not executable or an observed exchange trade."}},"required":["currency","underlying","implied"],"additionalProperties":false},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Upstream price generation time, preserving source precision; not response or metadata update time."}},"required":["id","prices","generatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}},"/api/v1/corporate-actions":{"get":{"summary":"List all corporate actions","tags":["Corporate actions"],"description":"Returns published corporate actions for supported assets. `multiplier` contains an effect only when its link to the action can be independently verified; otherwise it is `null`. A null effect does not mean the multiplier was unchanged. `processDate` is the event’s processing date, not the dividend payment date or multiplier effective time. Decimal values are strings.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string"},"status":{"type":"string","enum":["in_progress","completed"]},"processDate":{"nullable":true,"description":"Source processing calendar date, if supplied; not the multiplier effective instant.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"One economic variant: cash_dividend has rate (USD/share) and currency USD; stock_dividend has rate (shares/share); split has oldRate/newRate. Other published variant fields remain strings. No unique event identity is implied."},"multiplier":{"nullable":true,"description":"Verified before/after and actual effective time only when independently linked to this action. Null means unverified or unavailable, not zero economic change. Current feed has no safe linkage.","type":"object","properties":{"before":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"},"after":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"},"effectiveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["before","after","effectiveAt"],"additionalProperties":false}},"required":["assetId","type","status","processDate","details","multiplier"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}},"/api/v1/assets/{assetId}/corporate-actions":{"get":{"summary":"Get an asset’s corporate actions","tags":["Corporate actions"],"description":"Returns published corporate actions for supported assets. `multiplier` contains an effect only when its link to the action can be independently verified; otherwise it is `null`. A null effect does not mean the multiplier was unchanged. `processDate` is the event’s processing date, not the dividend payment date or multiplier effective time. Decimal values are strings.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"assetId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string"},"status":{"type":"string","enum":["in_progress","completed"]},"processDate":{"nullable":true,"description":"Source processing calendar date, if supplied; not the multiplier effective instant.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"One economic variant: cash_dividend has rate (USD/share) and currency USD; stock_dividend has rate (shares/share); split has oldRate/newRate. Other published variant fields remain strings. No unique event identity is implied."},"multiplier":{"nullable":true,"description":"Verified before/after and actual effective time only when independently linked to this action. Null means unverified or unavailable, not zero economic change. Current feed has no safe linkage.","type":"object","properties":{"before":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"},"after":{"type":"string","maxLength":100,"pattern":"^\\d+(?:\\.\\d+)?$"},"effectiveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["before","after","effectiveAt"],"additionalProperties":false}},"required":["assetId","type","status","processDate","details","multiplier"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}}}}}}}},"servers":[{"url":"https://stocks.edel.finance"}],"tags":[{"name":"Assets","description":"Instrument identity, metadata and current prices."},{"name":"Prices","description":"Lightweight pricing for regular updates."},{"name":"Corporate actions","description":"Published events and verified multiplier effects."}]}