{"openapi":"3.0.3","info":{"title":"Reserve API","description":"API for DTF (Decentralized Token Folio) management, including current and historical data, folio metadata management, and zapper integration","version":"1.0.0"},"components":{"schemas":{}},"paths":{"/v1/accounts/":{"get":{"summary":"Get account metrics","tags":["accounts"],"description":"Get aggregated account metrics with sorting and filtering. Returns account (specific address info or null) and accounts (paginated list).","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":false,"description":"Optional address to get specific account info"},{"schema":{"type":"string","enum":["holdings","minted","performance"],"default":"holdings"},"in":"query","name":"sortBy","required":false,"description":"Field to sort accounts by"},{"schema":{"type":"string","enum":["desc","asc"],"default":"desc"},"in":"query","name":"order","required":false,"description":"Sort order"},{"schema":{"type":"string","enum":["1h","1d","7d","30d"],"default":"7d"},"in":"query","name":"timeRange","required":false,"description":"Time range for performance calculation"},{"schema":{"type":"number","minimum":1,"maximum":5000,"default":1000},"in":"query","name":"limit","required":false,"description":"Maximum number of results to return"},{"schema":{"type":"number","minimum":0,"default":0},"in":"query","name":"offset","required":false,"description":"Number of results to skip"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"account":{"anyOf":[{"type":"object","properties":{"address":{"type":"string","description":"Account address"},"rank":{"type":"number","description":"Rank position based on current sort order"},"totalHoldingsValue":{"type":"number","description":"Total USD value of current holdings"},"totalMintedValue":{"type":"number","description":"Total USD value of minted DTFs"},"performanceRatio":{"type":"number","description":"Portfolio-weighted performance ratio"},"firstHoldTimestamp":{"type":["number","null"],"description":"Timestamp of first hold"},"firstNonZeroHoldTimestamp":{"type":["number","null"],"description":"Timestamp of first non-zero hold"},"firstMintTimestamp":{"type":["number","null"],"description":"Timestamp of first mint"}},"required":["address","rank","totalHoldingsValue","totalMintedValue","performanceRatio"],"additionalProperties":false},{"type":"null"}],"description":"Specific account metrics for the requested address, or null if no address was provided"},"accounts":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Account address"},"rank":{"type":"number","description":"Rank position based on current sort order"},"totalHoldingsValue":{"type":"number","description":"Total USD value of current holdings"},"totalMintedValue":{"type":"number","description":"Total USD value of minted DTFs"},"performanceRatio":{"type":"number","description":"Portfolio-weighted performance ratio"},"firstHoldTimestamp":{"type":["null","number"],"description":"Timestamp of first hold"},"firstNonZeroHoldTimestamp":{"type":["null","number"],"description":"Timestamp of first non-zero hold"},"firstMintTimestamp":{"type":["null","number"],"description":"Timestamp of first mint"}},"required":["address","rank","totalHoldingsValue","totalMintedValue","performanceRatio"],"additionalProperties":false},"description":"List of all accounts sorted by the specified criteria"}},"required":["accounts"],"additionalProperties":false}}}}}}},"/v1/accounts/holdings/{address}":{"get":{"summary":"Get account holdings","tags":["accounts"],"description":"Get DTF holdings for a wallet address across all chains","parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true,"description":"Wallet address to query"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"},"amount":{"type":"string"},"value":{"type":"number"}},"required":["chainId","address","symbol","name","decimals","amount","value"],"additionalProperties":false}}}}}}}},"/v1/api/admin/compliance/internal-wallets":{"get":{"tags":["admin"],"description":"Get all internal (allowlisted) wallets","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"label":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"email":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["address"],"additionalProperties":false}}}}}}},"post":{"tags":["admin"],"description":"Add an internal (allowlisted) wallet","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"label":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"email":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"null"}]}},"required":["address"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"label":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"email":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["address"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/compliance/internal-wallets/{address}":{"put":{"tags":["admin"],"description":"Update an internal wallet's label/email","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"email":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"null"}]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"label":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"email":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["address"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"tags":["admin"],"description":"Remove an internal wallet","parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/native-tokens":{"get":{"tags":["admin"],"description":"Get all native tokens","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1},"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"required":["key","symbol","name","logo","caip2"],"additionalProperties":false}}}}}}},"post":{"tags":["admin"],"description":"Create a new native token","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"required":["key","symbol","name","logo","caip2"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"required":["key","symbol","name","logo","caip2"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/native-tokens/{key}":{"get":{"tags":["admin"],"description":"Get a specific native token by key","parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"required":["key","symbol","name","logo","caip2"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"put":{"tags":["admin"],"description":"Update a native token","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"symbol":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"address":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"logo":{"type":"string","format":"uri"},"caip2":{"type":"string","minLength":1},"url":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"coingeckoId":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]}},"required":["key","symbol","name","logo","caip2"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"tags":["admin"],"description":"Delete a native token","parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/bridges":{"get":{"tags":["admin"],"description":"Get all bridges","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}}}}}}},"post":{"tags":["admin"],"description":"Create a new bridge","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/bridges/{id}":{"get":{"tags":["admin"],"description":"Get a specific bridge by id","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"put":{"tags":["admin"],"description":"Update a bridge","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"description":{"type":"string","minLength":1},"logo":{"type":"string","format":"uri"},"logoDark":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"null"}]},"risks":{"type":"array","items":{"type":"string"}}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"tags":["admin"],"description":"Delete a bridge","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/mappings":{"get":{"tags":["admin"],"description":"Get bridge native mappings by chain","parameters":[{"schema":{"type":"string"},"in":"query","name":"chainId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}}}}}},"post":{"tags":["admin"],"description":"Create a new bridge native mapping","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/mappings/chain/{chainId}/token/{tokenAddress}":{"get":{"tags":["admin"],"description":"Get a specific mapping by chain and token address","parameters":[{"schema":{"type":"string"},"in":"path","name":"chainId","required":true},{"schema":{"type":"string"},"in":"path","name":"tokenAddress","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/mappings/{id}":{"put":{"tags":["admin"],"description":"Update a bridge native mapping","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"tags":["admin"],"description":"Delete a bridge native mapping","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true},{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"204":{"description":"Default Response"},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/exposure/mappings/batch":{"post":{"tags":["admin"],"description":"Batch create bridge native mappings","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}}}},"parameters":[{"schema":{"type":"string"},"in":"header","name":"x-api-key","required":true,"description":"Admin API key"}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"created":{"type":"number"},"skipped":{"type":"number"},"mappings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"chainId":{"type":"integer","exclusiveMinimum":0},"tokenAddress":{"type":"string","minLength":1},"nativeTokenKey":{"type":"string","minLength":1},"bridgeId":{"type":"string","minLength":1},"symbol":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"null"}]},"wrappedVersion":{"type":"boolean"}},"required":["chainId","tokenAddress","nativeTokenKey","bridgeId","wrappedVersion"],"additionalProperties":false}}},"required":["created","skipped","mappings"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/v1/api/admin/mint-volume/backfill":{"post":{"tags":["admin"],"description":"Kick off a full historical mint-volume backfill (fire-and-forget).","responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"],"additionalProperties":false}}}}}}},"/v1/api/admin/mint-volume/status":{"get":{"tags":["admin"],"description":"Current mint-volume rollup (per type/chain totals + cursor) and whether a backfill is running.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"running":{"type":"boolean"},"rollup":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"chain":{"type":"string"},"cumulativeValue":{"type":"number"},"mintCount":{"type":"number"},"lastTimestamp":{"type":"number"},"updatedAt":{"type":"string"}},"required":["type","chain","cumulativeValue","mintCount","lastTimestamp","updatedAt"],"additionalProperties":false}}},"required":["running","rollup"],"additionalProperties":false}}}}}}},"/v1/compliance/geolocation/":{"get":{"summary":"Geolocation & restriction status","tags":["compliance"],"description":"Returns the caller's resolved country, restriction status (sanctioned jurisdiction or unresolved geolocation), and whether the client IP is a known VPN/proxy. Reports status only — this endpoint is never blocked.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string","description":"Human-readable country name"},"countryCode":{"type":"string","description":"Lowercase ISO 3166-1 alpha-2 code (empty when unknown)"},"restricted":{"type":"boolean","description":"Whether the country is sanctioned or geolocation is unresolved"},"isVPN":{"type":"boolean","description":"Whether the client IP matches a known VPN/proxy range"}},"required":["country","countryCode","restricted","isVPN"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/compliance/geolocation/dtf/{dtfAddress}":{"get":{"summary":"DTF geolocation restriction status","tags":["compliance"],"description":"Returns the caller's resolved country and whether the given DTF is restricted for them. Restriction = the DTF's basket contains a banned collateral AND (caller is in a prohibited jurisdiction ('geolocation-prohibited', absolute bar) OR a restricted jurisdiction ('geolocation-restricted', qualified investors only) OR caller is using a VPN/proxy ('vpn') — the VPN arm catches tunnelling from otherwise-allowed countries). Fail-closed: if the basket can't be fetched (not a real DTF or transient RPC error), `restricted` is `true`. Reports status only — never blocks.","parameters":[{"schema":{"type":"number","enum":[1,8453,42161,56]},"in":"query","name":"chainId","required":true,"description":"Chain ID where the DTF lives (1, 8453, 42161, 56)"},{"schema":{"type":"string"},"in":"path","name":"dtfAddress","required":true,"description":"DTF contract address to check"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string","description":"Human-readable country name"},"countryCode":{"type":"string","description":"Lowercase ISO 3166-1 alpha-2 code (empty when unknown)"},"restricted":{"type":"boolean","description":"Whether this DTF is restricted in the caller's jurisdiction"},"restriction":{"type":"string","enum":["none","geolocation-restricted","geolocation-prohibited","vpn"],"description":"Why the DTF is restricted: 'none' when allowed, 'geolocation-prohibited' for an absolute-bar jurisdiction, 'geolocation-restricted' for a qualified-investor-only jurisdiction, 'vpn' for VPN/proxy tunnelling"}},"required":["country","countryCode","restricted","restriction"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/compliance/wallet/{address}":{"get":{"summary":"Check wallet compliance","tags":["compliance"],"description":"Returns wallet restriction status and whether checks should be skipped for an internal wallet.","parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true,"description":"Wallet address to check"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Checked wallet address"},"isRestricted":{"type":"boolean","description":"Whether the wallet is restricted"},"shouldSkipRestrictions":{"type":"boolean","description":"Whether restriction checks should be skipped for this wallet"}},"required":["address","isRestricted","shouldSkipRestrictions"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/current/dtf/":{"get":{"summary":"Get current DTF data","tags":["current"],"description":"Get current DTF price and basket composition","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"number"},"marketCap":{"type":"number"},"totalSupply":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"amount":{"type":"number"},"amountRaw":{"type":"string"},"decimals":{"type":"number"},"price":{"type":"number"},"weight":{"type":"string"},"priceSource":{"type":"string"}},"required":["address","amount","amountRaw","decimals","price","weight"],"additionalProperties":false}}},"required":["price","marketCap","totalSupply","basket"],"additionalProperties":false}}}}}}},"/v1/current/dtfs/":{"get":{"summary":"Get multiple DTFs data","tags":["current"],"description":"Get current price and basket composition for multiple DTFs","parameters":[{"schema":{"type":"string"},"in":"query","name":"addresses","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"totalSupply":{"type":"number"},"marketCap":{"type":"number"},"price":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"amount":{"type":"number"},"amountRaw":{"type":"string"},"decimals":{"type":"number"},"price":{"type":"number"},"weight":{"type":"string"},"priceSource":{"type":"string"}},"required":["address","amount","amountRaw","decimals","price","weight"],"additionalProperties":false}}},"required":["address","totalSupply","marketCap","price","basket"],"additionalProperties":false}}}}}}}},"/v1/current/prices/":{"get":{"summary":"Get consensus token prices","tags":["current"],"description":"Get consensus prices for multiple tokens (fetches from all sources, removes outliers using MAD algorithm, returns average of remaining prices)","parameters":[{"schema":{"type":"string"},"in":"query","name":"tokens","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"number","minimum":1,"maximum":5,"default":1},"in":"query","name":"minConsensusSources","required":false,"description":"Minimum number of price sources required for consensus (1-5)"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"price":{"type":"number"},"timestamp":{"type":"number"},"priceSources":{"type":"array","items":{"type":"string"}}},"required":["address","price","timestamp","priceSources"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/current/prices/all-sources":{"get":{"summary":"Get prices from all sources","tags":["current"],"description":"Get current prices from all available sources in parallel for multiple tokens (returns all prices from all sources)","parameters":[{"schema":{"type":"string"},"in":"query","name":"tokens","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"timestamp":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"price":{"type":"number"},"source":{"type":"string"}},"required":["price","source"],"additionalProperties":false}}},"required":["address","timestamp","prices"],"additionalProperties":false}}}}}}}},"/v1/current/prices/fast":{"get":{"summary":"Get fast token prices","tags":["current"],"description":"Get fast prices for multiple tokens (single price per token from best available source)","parameters":[{"schema":{"type":"string"},"in":"query","name":"tokens","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"source":{"type":"string"},"price":{"type":"number"},"timestamp":{"type":"number"}},"required":["address","price","timestamp"],"additionalProperties":false}}}}}}}},"/v1/current/yield-dtf/":{"get":{"tags":["current"],"description":"Get current price and basket composition for a yield DTF","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"number"},"marketCap":{"type":"number"},"totalSupply":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"amount":{"type":"number"},"amountRaw":{"type":"string"},"decimals":{"type":"number"},"price":{"type":"number"},"weight":{"type":"string"},"priceSource":{"type":"string"}},"required":["address","amount","amountRaw","decimals","price","weight"],"additionalProperties":false}}},"required":["price","marketCap","totalSupply","basket"],"additionalProperties":false}}}}}}},"/v1/discover/dtf/":{"get":{"summary":"Discover DTFs","tags":["discover"],"description":"Get a list of DTFs with its basket composition and current + historical price","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"number"},"in":"query","name":"skip","required":false},{"schema":{"type":"number"},"in":"query","name":"limit","required":false},{"schema":{"type":"number"},"in":"query","name":"now","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"marketCap":{"type":"number"},"fee":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"weight":{"type":"string"}},"required":["address","symbol","name","weight"],"additionalProperties":false}},"price":{"type":"number"},"performance":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number"},"timestamp":{"type":"number"}},"required":["value","timestamp"],"additionalProperties":false}},"brand":{"type":"object","properties":{"icon":{"type":"string"},"cover":{"type":"string"},"video":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"about":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"chainId":{"type":"number"},"mandate":{"type":"string"}},"required":["address","name","symbol","marketCap","fee","basket","price","performance","chainId"],"additionalProperties":false}}}}}}}},"/v1/discover/dtfs/":{"get":{"summary":"List all DTFs","tags":["discover"],"description":"Get a combined list of all index and yield DTFs across all chains, sorted by market cap","parameters":[{"schema":{"type":"boolean","default":false},"in":"query","name":"brand","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"performance","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"governance","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"price":{"type":"number"},"marketCap":{"type":"number"},"chainId":{"type":"number"},"type":{"type":"string","enum":["index","yield"]},"status":{"type":"string","enum":["active","deprecated"]},"fee":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"weight":{"type":"string"}},"required":["address","symbol","name","weight"],"additionalProperties":false}},"brand":{"type":"object","properties":{"icon":{"type":"string"},"cover":{"type":"string"},"video":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"about":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"performance":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"value":{"type":"number"}},"required":["timestamp","value"],"additionalProperties":false}},"mandate":{"type":"string"},"governance":{"anyOf":[{"type":"object","properties":{"governor":{"type":"string"},"timelock":{"type":"string"}},"required":["governor","timelock"],"additionalProperties":false},{"type":"object","properties":{"basketGovernor":{"type":"string"},"basketTimelock":{"type":"string"},"nonBasketGovernor":{"type":"string"},"nonBasketTimelock":{"type":"string"}},"required":["basketGovernor","basketTimelock","nonBasketGovernor","nonBasketTimelock"],"additionalProperties":false}]}},"required":["address","name","symbol","price","marketCap","chainId","type","status","basket"],"additionalProperties":false}}}}}}}},"/v1/dtf/apy/{dtfAddress}":{"get":{"tags":["dtf"],"description":"Get APY for an index DTF","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"debug","required":false},{"schema":{"type":"string"},"in":"path","name":"dtfAddress","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"collateralAPY":{"type":"number"},"redirectAPY":{"type":"number"},"totalAPY":{"type":"number"},"debug":{"type":"object","properties":{"collateral":{"type":"object","properties":{"apy":{"type":"number"},"tokenDetails":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"weight":{"type":"number"},"apy":{"type":"number"},"source":{"type":"string"}},"required":["address","weight","apy","source"],"additionalProperties":false}}},"required":["apy","tokenDetails"],"additionalProperties":false},"redirect":{"type":"object","properties":{"apy":{"type":"number"},"events":{"type":"array"},"growthFactor":{"type":"number"},"periodReturn":{"type":"number"}},"required":["apy","events","growthFactor","periodReturn"],"additionalProperties":false}},"required":["collateral","redirect"],"additionalProperties":false}},"required":["collateralAPY","redirectAPY","totalAPY"],"additionalProperties":false}}}}}}},"/v1/dtf/apy/historical/{dtfAddress}":{"get":{"summary":"Get historical APY for an index DTF","tags":["dtf"],"description":"Returns daily timeseries of collateral, redirect, and total APY","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"path","name":"dtfAddress","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"collateralAPY":{"type":"number"},"redirectAPY":{"type":"number"},"totalAPY":{"type":"number"}},"required":["timestamp","collateralAPY","redirectAPY","totalAPY"],"additionalProperties":false}}}}}}}},"/v1/dtf/daos/":{"get":{"tags":["dtf"],"description":"Get index DTF DAOs and their statistics","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"token":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"price":{"type":"number"}},"required":["address","name","symbol","decimals","price"],"additionalProperties":false},"underlying":{"type":"object","properties":{"token":{"$ref":"#/items/properties/token"}},"required":["token"],"additionalProperties":false},"rewards":{"type":"array","items":{"type":"object","properties":{"token":{"$ref":"#/items/properties/token"},"amount":{"type":"number"},"amountUsd":{"type":"number"}},"required":["token","amount","amountUsd"],"additionalProperties":false}},"dtfs":{"type":"array","items":{"$ref":"#/items/properties/token"}},"lockedAmount":{"type":"number"},"lockedAmountUsd":{"type":"number"},"totalRewardAmountUsd":{"type":"number"},"avgDailyRewardAmountUsd":{"type":"number"},"apr":{"type":"number"}},"required":["chainId","token","underlying","rewards","dtfs","lockedAmount","lockedAmountUsd","totalRewardAmountUsd","avgDailyRewardAmountUsd","apr"],"additionalProperties":false}}}}}}}},"/v1/dtf/daos/{dtfAddress}":{"get":{"tags":["dtf"],"description":"Get index DTF DAO by address","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"path","name":"dtfAddress","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"chainId":{"type":"number"},"token":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"price":{"type":"number"}},"required":["address","name","symbol","decimals","price"],"additionalProperties":false},"underlying":{"type":"object","properties":{"token":{"$ref":"#/properties/token"}},"required":["token"],"additionalProperties":false},"rewards":{"type":"array","items":{"type":"object","properties":{"token":{"$ref":"#/properties/token"},"amount":{"type":"number"},"amountUsd":{"type":"number"}},"required":["token","amount","amountUsd"],"additionalProperties":false}},"dtfs":{"type":"array","items":{"$ref":"#/properties/token"}},"lockedAmount":{"type":"number"},"lockedAmountUsd":{"type":"number"},"totalRewardAmountUsd":{"type":"number"},"avgDailyRewardAmountUsd":{"type":"number"},"apr":{"type":"number"}},"required":["chainId","token","underlying","rewards","dtfs","lockedAmount","lockedAmountUsd","totalRewardAmountUsd","avgDailyRewardAmountUsd","apr"],"additionalProperties":false}}}}}}},"/v1/dtf/exposure/":{"get":{"tags":["dtf"],"description":"Get DTF exposure","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"string","enum":["24h","7d","1m","3m","1y","all"]},"in":"query","name":"period","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"native":{"anyOf":[{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"address":{"type":"string"},"logo":{"type":"string"},"caip2":{"type":"string"},"url":{"type":"string"},"coingeckoId":{"type":"string"}},"required":["symbol","name","logo","caip2"],"additionalProperties":false},{"type":"null"}]},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"weight":{"type":"number"},"change":{"type":"number"},"marketCap":{"type":"number"},"bridge":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"logo":{"type":"string"},"logoDark":{"type":["null","string"]},"risks":{"type":"array","items":{"type":"string"}},"wrappedVersion":{"type":"boolean"}},"required":["id","name","url","description","logo","risks"],"additionalProperties":false}},"required":["address","symbol","weight","change"],"additionalProperties":false}},"totalWeight":{"type":"number"},"change":{"type":"number"},"hasNewlyAdded":{"type":"boolean"},"marketCap":{"type":"number"}},"required":["native","tokens","totalWeight","change","hasNewlyAdded","marketCap"],"additionalProperties":false}}}}}}}},"/v1/dtf/icons/":{"get":{"tags":["dtf"],"description":"Get ALL DTF icons","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"/v1/dtf/ondo/":{"get":{"summary":"Ondo session limits for a DTF basket","tags":["dtf"],"description":"Returns the Ondo per-session notional limits for each Ondo tokenized equity in the DTF basket. Empty list when the DTF holds no Ondo assets.","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"market":{"anyOf":[{"type":"object","properties":{"isOpen":{"type":"boolean"},"session":{"type":"string"},"nextOpen":{"type":["string","null"]},"nextClose":{"type":["string","null"]},"timestamp":{"type":"string"}},"required":["isOpen","session","nextOpen","nextClose","timestamp"],"additionalProperties":false},{"type":"null"}]},"assets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"},"sessionLimits":{"anyOf":[{"type":"object","properties":{"premarket":{"type":"number"},"regular":{"type":"number"},"postmarket":{"type":"number"},"overnight":{"type":"number"}},"additionalProperties":false},{"type":"null"}]},"capacityUsd":{"type":"number"}},"required":["address","symbol","name","sessionLimits"],"additionalProperties":false}}},"required":["market","assets"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/dtf/rebalance/":{"get":{"tags":["dtf"],"description":"Get DTF rebalance data - list all rebalances or get specific rebalance by nonce","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number"},"in":"query","name":"nonce","required":false},{"schema":{"type":"number","minimum":1,"maximum":100,"default":20},"in":"query","name":"first","required":false},{"schema":{"type":"number","minimum":0,"default":0},"in":"query","name":"skip","required":false},{"schema":{"type":"boolean"},"in":"query","name":"refresh","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"transactionHash":{"type":"string"},"nonce":{"type":"number"},"timestamp":{"type":"number"},"availableUntil":{"type":"number"},"blockNumber":{"type":"number"},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"}},"required":["address","symbol","decimals"],"additionalProperties":false}},"auctions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number"},"bids":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"bidder":{"type":"string"},"sellToken":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"}},"required":["address","name","decimals"],"additionalProperties":false},"buyToken":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"decimals":{"type":"number"}},"required":["address","name","decimals"],"additionalProperties":false},"sellAmount":{"type":"string"},"buyAmount":{"type":"string"},"transactionHash":{"type":"string"},"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"sellTokenPrice":{"type":"number"},"buyTokenPrice":{"type":"number"},"sellAmountUsd":{"type":"number"},"buyAmountUsd":{"type":"number"},"priceImpactUsd":{"type":"number"},"priceImpactPercent":{"type":"number"},"price":{"type":"number"}},"required":["id","bidder","sellToken","buyToken","sellAmount","buyAmount","transactionHash","blockNumber","timestamp"],"additionalProperties":false}},"totalSellAmountUsd":{"type":"number"},"totalBuyAmountUsd":{"type":"number"},"totalPriceImpactUsd":{"type":"number"},"avgPriceImpactPercent":{"type":"number"}},"required":["id","startTime","endTime","bids"],"additionalProperties":false}},"totalSellAmountUsd":{"type":"number"},"totalBuyAmountUsd":{"type":"number"},"totalPriceImpactUsd":{"type":"number"},"avgPriceImpactPercent":{"type":"number"},"rebalanceGainLossUsd":{"type":"number"},"rebalanceGainLossPercent":{"type":"number"},"totalRebalancedUsd":{"type":"number"},"totalBidsCount":{"type":"number"},"marketCapAtStart":{"type":"number"},"marketCapRebalanceImpact":{"type":"number"},"trackingBasketDeviation":{"type":"number"},"nativeBasketDeviation":{"type":"number"},"rebalanceAccuracy":{"type":"number"},"isNative":{"type":"boolean"},"basketUnits":{"type":"object","properties":{"proposal":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"units":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"units":{"type":"string"}},"required":["address","units"],"additionalProperties":false}}},"required":["blockNumber","timestamp","units"],"additionalProperties":false},"settlement":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"units":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"units":{"type":"string"}},"required":["address","units"],"additionalProperties":false}}},"required":["blockNumber","timestamp","units"],"additionalProperties":false}},"required":["proposal","settlement"],"additionalProperties":false},"prices":{"type":"object","properties":{"proposal":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"prices":{"type":"object","additionalProperties":{"type":"number"}}},"required":["blockNumber","timestamp","prices"],"additionalProperties":false},"settlement":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"prices":{"type":"object","additionalProperties":{"type":"number"}}},"required":["blockNumber","timestamp","prices"],"additionalProperties":false}},"required":["proposal","settlement"],"additionalProperties":false}},"required":["id","transactionHash","nonce","timestamp","availableUntil","blockNumber","tokens"],"additionalProperties":false}}}}}}}},"/v1/enso/swap/":{"get":{"tags":["external-zap-providers"],"description":"Execute a swap using Enso","parameters":[{"schema":{"type":"string"},"in":"query","name":"chainId","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenIn","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenOut","required":true},{"schema":{"type":"string","pattern":"^\\d+$"},"in":"query","name":"amountIn","required":true},{"schema":{"type":"string"},"in":"query","name":"slippage","required":true},{"schema":{"type":"string"},"in":"query","name":"signer","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","error"]},"result":{"type":"object","properties":{"tokenIn":{"type":"string"},"amountIn":{"type":"string"},"amountInValue":{"type":["null","number"]},"tokenOut":{"type":"string"},"amountOut":{"type":"string"},"amountOutValue":{"type":["null","number"]},"minAmountOut":{"type":"string"},"approvalAddress":{"type":"string"},"approvalNeeded":{"type":"boolean"},"insufficientFunds":{"type":"boolean"},"dust":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"amount":{"type":"string"}},"required":["token","amount"],"additionalProperties":false}},"dustValue":{"type":["null","number"]},"gas":{"type":["null","string"]},"priceImpact":{"type":"number"},"truePriceImpact":{"type":"number"},"pathVizImage":{"type":"string"},"tx":{"anyOf":[{"type":"object","properties":{"data":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"gas":{"type":"number"},"gasPrice":{"type":"number"},"nonce":{"type":"number"}},"required":["data","to","value","gas","gasPrice","nonce"],"additionalProperties":false},{"type":"null"}]}},"required":["tokenIn","amountIn","amountInValue","tokenOut","amountOut","amountOutValue","approvalAddress","approvalNeeded","insufficientFunds","dust","dustValue","gas","priceImpact","truePriceImpact","tx"],"additionalProperties":false},"error":{"type":"string"},"version":{"type":"string"},"worker":{"type":"string"}},"required":["status"],"additionalProperties":false}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"description":"Bad request","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"description":"Internal server error","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}}}}},"/v1/folio-manager/nonce":{"get":{"tags":["folio-manager"],"responses":{"200":{"description":"Default Response"}}}},"/v1/folio-manager/verify":{"post":{"tags":["folio-manager"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"signature":{"type":"string"}},"required":["message","signature"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response"}}}},"/v1/folio-manager/read":{"get":{"tags":["folio-manager"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"folio","required":true},{"schema":{"type":"number"},"in":"query","name":"chainId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/folio-manager/upload":{"post":{"tags":["folio-manager"],"responses":{"200":{"description":"Default Response"}}}},"/v1/folio-manager/save":{"post":{"tags":["folio-manager"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"siwe":{"type":"object","properties":{"message":{"type":"string"},"signature":{"type":"string"}},"required":["message","signature"],"additionalProperties":false},"folio":{"type":"string"},"chainId":{"type":"number"},"data":{}},"required":["siwe","folio","chainId"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response"}}}},"/v1/health/":{"get":{"summary":"Health check","tags":["health"],"description":"Health check endpoint","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"sha":{"type":"string"},"env":{"type":"string"},"postgres":{"type":"boolean"},"timestamp":{"type":"number"}},"required":["status","sha","env","postgres","timestamp"],"additionalProperties":false}}}}}}},"/v1/historical/dtf/":{"get":{"summary":"Get historical DTF prices","tags":["historical"],"description":"Get historical DTF prices and basket composition","parameters":[{"schema":{"type":"number"},"in":"query","name":"from","required":true},{"schema":{"type":"number"},"in":"query","name":"to","required":true},{"schema":{"type":"string","enum":["5m","1h","1d"],"default":"1h"},"in":"query","name":"interval","required":false},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"timeseries":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"price":{"type":"number"},"totalSupply":{"type":"number"},"marketCap":{"type":"number"},"basket":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"price":{"type":"number"},"amount":{"type":"number"}},"required":["address","price","amount"],"additionalProperties":false}}},"required":["timestamp","price","totalSupply","marketCap","basket"],"additionalProperties":false}}},"required":["address","timeseries"],"additionalProperties":false}}}}}}},"/v1/historical/dtf/candles/":{"get":{"summary":"Get historical DTF price candles (OHLC)","tags":["historical"],"description":"Aggregates 5-minute (and backfilled hourly) DTF price snapshots into OHLC candles. Supported intervals: 1h, 4h, 1d, 7d, 30d. Empty buckets are omitted.","parameters":[{"schema":{"type":"number"},"in":"query","name":"from","required":true},{"schema":{"type":"number"},"in":"query","name":"to","required":true},{"schema":{"type":"string","enum":["1h","4h","1d","7d","30d"],"default":"1h"},"in":"query","name":"interval","required":false},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"candles":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"count":{"type":"number"}},"required":["timestamp","open","high","low","close","count"],"additionalProperties":false}}},"required":["address","candles"],"additionalProperties":false}}}}}}},"/v1/historical/portfolio/{address}":{"get":{"summary":"Get historical portfolio value over time","tags":["historical"],"description":"Returns time-series data showing a user's portfolio value breakdown across all chains for area charts.","parameters":[{"schema":{"type":"string","enum":["24h","7d","1m","3m","6m","All"],"default":"7d"},"in":"query","name":"period","required":false},{"schema":{"type":"string"},"in":"path","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"period":{"type":"string"},"timeseries":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"totalHoldingsUSD":{"type":"number"},"totalIndexDTFUSD":{"type":"number"},"totalYieldDTFUSD":{"type":"number"},"totalStakedRSRUSD":{"type":"number"},"totalVoteLockedUSD":{"type":"number"},"totalRSRHoldingsUSD":{"type":"number"},"indexDTFs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"}},"required":["address","name","symbol","chainId","amount","price","value"],"additionalProperties":false}},"yieldDTFs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"}},"required":["address","name","symbol","chainId","amount","price","value"],"additionalProperties":false}},"stakedRSR":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"}},"required":["address","name","symbol","chainId","amount","price","value"],"additionalProperties":false}},"voteLocks":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"}},"required":["address","name","symbol","chainId","amount","price","value"],"additionalProperties":false}},"rsrHoldings":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"}},"required":["chainId","amount","price","value"],"additionalProperties":false}}},"required":["timestamp","totalHoldingsUSD","totalIndexDTFUSD","totalYieldDTFUSD","totalStakedRSRUSD","totalVoteLockedUSD","totalRSRHoldingsUSD","indexDTFs","yieldDTFs","stakedRSR","voteLocks","rsrHoldings"],"additionalProperties":false}}},"required":["address","period","timeseries"],"additionalProperties":false}}}}}}},"/v1/historical/prices/":{"get":{"summary":"Get historical token prices","tags":["historical"],"description":"Get historical prices for a token","parameters":[{"schema":{"type":"number","default":1782443049},"in":"query","name":"from","required":false},{"schema":{"type":"number","default":1782529449},"in":"query","name":"to","required":false},{"schema":{"type":"string","enum":["5m","1h","1d"],"default":"1h"},"in":"query","name":"interval","required":false},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number"},"in":"query","name":"timestamp","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"timeseries":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"price":{"type":"number"}},"required":["timestamp","price"],"additionalProperties":false}}},"required":["address","timeseries"],"additionalProperties":false}}}}}}},"/v1/historical/tvl/":{"get":{"summary":"Get historical TVL and revenue","tags":["historical"],"description":"Get historical DTF TVL and Revenue","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number"},"tvl":{"type":"number"},"revenue":{"type":"number"}},"required":["timestamp","tvl","revenue"],"additionalProperties":false}}}}}}}},"/v1/odos/swap/":{"get":{"tags":["external-zap-providers"],"description":"Execute a swap using Odos protocol","parameters":[{"schema":{"type":"string"},"in":"query","name":"chainId","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenIn","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenOut","required":true},{"schema":{"type":"string","pattern":"^\\d+$"},"in":"query","name":"amountIn","required":true},{"schema":{"type":"string"},"in":"query","name":"slippage","required":true},{"schema":{"type":"string"},"in":"query","name":"signer","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","error"]},"result":{"type":"object","properties":{"tokenIn":{"type":"string"},"amountIn":{"type":"string"},"amountInValue":{"type":["null","number"]},"tokenOut":{"type":"string"},"amountOut":{"type":"string"},"amountOutValue":{"type":["null","number"]},"minAmountOut":{"type":"string"},"approvalAddress":{"type":"string"},"approvalNeeded":{"type":"boolean"},"insufficientFunds":{"type":"boolean"},"dust":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"amount":{"type":"string"}},"required":["token","amount"],"additionalProperties":false}},"dustValue":{"type":["null","number"]},"gas":{"type":["null","string"]},"priceImpact":{"type":"number"},"truePriceImpact":{"type":"number"},"pathVizImage":{"type":"string"},"tx":{"anyOf":[{"type":"object","properties":{"data":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"gas":{"type":"number"},"gasPrice":{"type":"number"},"nonce":{"type":"number"}},"required":["data","to","value","gas","gasPrice","nonce"],"additionalProperties":false},{"type":"null"}]}},"required":["tokenIn","amountIn","amountInValue","tokenOut","amountOut","amountOutValue","approvalAddress","approvalNeeded","insufficientFunds","dust","dustValue","gas","priceImpact","truePriceImpact","tx"],"additionalProperties":false},"error":{"type":"string"},"version":{"type":"string"},"worker":{"type":"string"}},"required":["status"],"additionalProperties":false}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"description":"Bad request","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"description":"Internal server error","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}}}}},"/v1/portfolio/{address}":{"get":{"summary":"Get user portfolio across all chains","tags":["portfolio"],"description":"Returns a user's complete Reserve Protocol portfolio including yield DTFs, staked RSR, index DTFs, vote locks, and RSR balances across all supported chains.","parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"totalHoldingsUSD":{"type":"number"},"yieldDTFs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"decimals":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"},"marketCap":{"type":"number"},"performance7d":{"type":["null","number"]},"mintAPY":{"type":["null","number"]},"averageCost":{"type":["null","number"]},"unrealizedPnL":{"type":["null","number"]}},"required":["address","name","symbol","chainId","decimals","amount","price","value","marketCap","performance7d","mintAPY","averageCost","unrealizedPnL"],"additionalProperties":false}},"stakedRSR":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"stRSRAddress":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"amount":{"type":"string"},"rsrAmount":{"type":"string"},"value":{"type":"number"},"performance7d":{"type":["null","number"]},"apy":{"type":["null","number"]},"votingPower":{"type":"string"},"votingWeight":{"type":"number"},"delegate":{"type":["null","string"]},"activeProposals":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"},"state":{"type":"string"},"proposer":{"type":"string"},"creationTime":{"type":"string"},"voteStart":{"type":"string"},"voteEnd":{"type":"string"},"quorumVotes":{"type":"string"},"forWeightedVotes":{"type":"string"},"againstWeightedVotes":{"type":"string"},"abstainWeightedVotes":{"type":"string"},"totalWeightedVotes":{"type":"string"},"queueTime":{"type":["null","string"]},"executionETA":{"type":["null","string"]}},"required":["id","description","state","proposer","creationTime","voteStart","voteEnd","quorumVotes","forWeightedVotes","againstWeightedVotes","abstainWeightedVotes","totalWeightedVotes","queueTime","executionETA"],"additionalProperties":false}},"pendingWithdrawals":{"type":"array","items":{"type":"object","properties":{"endId":{"type":"number"},"amount":{"type":"string"},"availableAt":{"type":"number"},"delay":{"type":"number"},"value":{"type":"number"}},"required":["endId","amount","availableAt","delay","value"],"additionalProperties":false}}},"required":["address","stRSRAddress","name","symbol","chainId","amount","rsrAmount","value","performance7d","apy","votingPower","votingWeight","delegate","activeProposals","pendingWithdrawals"],"additionalProperties":false}},"indexDTFs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"decimals":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"},"marketCap":{"type":"number"},"performance7d":{"type":["null","number"]},"averageCost":{"type":["null","number"]},"unrealizedPnL":{"type":["null","number"]},"rewards":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"chainId":{"type":"number"},"amount":{"type":"string"},"value":{"type":"number"}},"required":["address","name","symbol","decimals","chainId","amount","value"],"additionalProperties":false},"default":[]}},"required":["address","name","symbol","chainId","decimals","amount","price","value","marketCap","performance7d","averageCost","unrealizedPnL"],"additionalProperties":false}},"voteLocks":{"type":"array","items":{"type":"object","properties":{"stTokenAddress":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"chainId":{"type":"number"},"underlying":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"name":{"type":"string"}},"required":["address","symbol","name"],"additionalProperties":false},"dtfs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"}},"required":["address","name","symbol"],"additionalProperties":false}},"amount":{"type":"string"},"value":{"type":"number"},"apy":{"type":"number"},"votingPower":{"type":"string"},"votingWeight":{"type":"number"},"delegation":{"type":["null","string"]},"activeProposals":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"},"state":{"type":"string"},"proposer":{"type":"string"},"creationTime":{"type":"string"},"voteStart":{"type":"string"},"voteEnd":{"type":"string"},"quorumVotes":{"type":"string"},"forWeightedVotes":{"type":"string"},"againstWeightedVotes":{"type":"string"},"abstainWeightedVotes":{"type":"string"},"totalWeightedVotes":{"type":"string"},"queueTime":{"type":["null","string"]},"executionETA":{"type":["null","string"]}},"required":["id","description","state","proposer","creationTime","voteStart","voteEnd","quorumVotes","forWeightedVotes","againstWeightedVotes","abstainWeightedVotes","totalWeightedVotes","queueTime","executionETA"],"additionalProperties":false}},"locks":{"type":"array","items":{"type":"object","properties":{"lockId":{"type":"string"},"amount":{"type":"string"},"unlockTime":{"type":"number"},"delay":{"type":"number"},"value":{"type":"number"}},"required":["lockId","amount","unlockTime","delay","value"],"additionalProperties":false}},"rewards":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"chainId":{"type":"number"},"amount":{"type":"string"},"value":{"type":"number"}},"required":["address","name","symbol","decimals","chainId","amount","value"],"additionalProperties":false}}},"required":["stTokenAddress","name","symbol","chainId","underlying","dtfs","amount","value","apy","votingPower","votingWeight","delegation","activeProposals","locks","rewards"],"additionalProperties":false}},"rsrBalances":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"amount":{"type":"string"},"price":{"type":"number"},"value":{"type":"number"},"performance7d":{"type":["null","number"]}},"required":["chainId","amount","price","value","performance7d"],"additionalProperties":false}}},"required":["address","totalHoldingsUSD","yieldDTFs","stakedRSR","indexDTFs","voteLocks","rsrBalances"],"additionalProperties":false}}}}}}},"/v1/portfolio/{address}/transactions":{"get":{"summary":"Get user transaction history across all chains","tags":["portfolio"],"description":"Returns the last 100 user transactions across all supported chains and protocols (index + yield), sorted by timestamp descending.","parameters":[{"schema":{"type":"string"},"in":"path","name":"address","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"timestamp":{"type":"number"},"block":{"type":"number"},"txHash":{"type":"string"},"protocol":{"type":"string","enum":["index","yield"]},"type":{"type":"string","enum":["mint","redeem","stake","unstake","transfer","claim_reward","lock","unlock","cancel_lock","delegate","vote","propose","queue_proposal","execute_proposal","cancel_proposal","burn","withdraw","unstake_cancelled","create_dtf"]},"title":{"type":"string"},"description":{"type":"string"},"token":{"anyOf":[{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"},"underlying":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":"string"}},"required":["address","symbol"],"additionalProperties":false}},"required":["address","symbol"],"additionalProperties":false},{"type":"null"}]},"proposalId":{"type":["null","string"]}},"required":["chainId","timestamp","block","txHash","protocol","type","title","description","token"],"additionalProperties":false}}}}}}}},"/v1/protocol/metrics/":{"get":{"summary":"Get protocol metrics","tags":["protocol"],"description":"Get protocol-wide metrics including TVL and revenue","responses":{"200":{"description":"Default Response"}}}},"/v1/rebalance/liquidity/":{"post":{"summary":"Rebalance trade liquidity (Zapper + Ondo)","tags":["rebalance"],"description":"Given the set of rebalance trades (sell surplus / buy deficit), returns DEX liquidity per asset via Zapper and, for Ondo tokenized equities, market hours, trading limits, price and upcoming pauses.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"chainId":{"type":"number","default":8453},"nativePrice":{"type":"number","minimum":0,"default":0},"trades":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"amountUsd":{"type":"number","minimum":0},"price":{"type":"number","minimum":0,"default":0},"decimals":{"type":"integer","minimum":0,"maximum":36,"default":18}},"required":["address","side","amountUsd"],"additionalProperties":false},"minItems":1,"maxItems":200}},"required":["trades"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"market":{"anyOf":[{"type":"object","properties":{"isOpen":{"type":"boolean"},"session":{"type":"string"},"nextOpen":{"type":["string","null"]},"nextClose":{"type":["string","null"]},"timestamp":{"type":"string"}},"required":["isOpen","session","nextOpen","nextClose","timestamp"],"additionalProperties":false},{"type":"null"}]},"totals":{"type":"object","properties":{"sellUsd":{"type":"number"},"buyUsd":{"type":"number"}},"required":["sellUsd","buyUsd"],"additionalProperties":false},"assets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"amountUsd":{"type":"number"},"liquidity":{"type":"object","properties":{"priceImpact":{"type":"number"},"level":{"type":"string"},"score":{"type":"number"},"counterpart":{"type":"string"},"swapPath":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string"},"address":{"type":"array","items":{"type":"string"}},"inputToken":{"type":"array","items":{"type":"string"}},"outputToken":{"type":"array","items":{"type":"string"}},"impact":{"type":"number"},"input":{"type":"number"},"output":{"type":"number"},"success":{"type":"boolean"}},"required":["action","address","inputToken","outputToken","impact","input","output","success"],"additionalProperties":false}},"error":{"type":"string"}},"required":["priceImpact","level","score"],"additionalProperties":false},"ondo":{"type":"object","properties":{"symbol":{"type":"string"},"ticker":{"type":"string"},"price":{"type":"number"},"tradingOpen":{"type":"boolean"},"capacityUsd":{"type":"number"},"withinCapacity":{"type":"boolean"},"reason":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"upcoming":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"start":{"type":["null","string"]},"end":{"type":["null","string"]}},"required":["start","end"],"additionalProperties":false}}},"required":["symbol","tradingOpen","withinCapacity","upcoming"],"additionalProperties":false}},"required":["address","side","amountUsd","liquidity"],"additionalProperties":false}}},"required":["market","totals","assets"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/v1/snapshot/dtf/":{"get":{"summary":"Get DTF snapshot at block","tags":["snapshot"],"description":"Get snapshot DTF price and basket composition","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number"},"in":"query","name":"blockNumber","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response"}}}},"/v1/snapshot/price/":{"get":{"summary":"Get token price at block","tags":["snapshot"],"description":"Get snapshot token price","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":true},{"schema":{"type":"number"},"in":"query","name":"blockNumber","required":true},{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false}],"responses":{"200":{"description":"Default Response"}}}},"/v1/token-list/":{"get":{"summary":"Uniswap-compatible token list","tags":["token-list"],"description":"Returns a Uniswap-compatible token list of all active DTFs across all chains","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"version":{"type":"object","properties":{"major":{"type":"integer","minimum":0},"minor":{"type":"integer","minimum":0},"patch":{"type":"integer","minimum":0}},"required":["major","minor","patch"],"additionalProperties":false},"tokens":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer"},"address":{"type":"string"},"name":{"type":"string","maxLength":60},"symbol":{"type":"string","maxLength":20},"decimals":{"type":"integer","minimum":0,"maximum":255},"logoURI":{"type":"string","format":"uri"}},"required":["chainId","address","name","symbol","decimals"],"additionalProperties":false},"minItems":1,"maxItems":10000}},"required":["name","timestamp","version","tokens"],"additionalProperties":false}}}}}}},"/v1/universal/order":{"post":{"tags":["universal"],"description":"Submit an order to Universal Relayer","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["BUY","SELL"]},"token":{"type":"string"},"token_amount":{"type":"string"},"pair_token":{"anyOf":[{"type":"string","enum":["USDC"]},{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}]},"pair_token_amount":{"type":"string"},"slippage_bips":{"type":"number"},"blockchain":{"type":"string"},"user_address":{"type":"string"},"deadline":{"type":"string"},"id":{"type":"string"},"exchange_rate_usd":{"type":"number"},"merchant_address":{"type":"string"},"gas_fee_nominal":{"type":"string"},"gas_fee_dollars":{"type":"number"},"relayer_nonce":{"type":"number"},"merchant_id":{"type":"string"},"mode":{"type":"string","enum":["BRIDGED","DIRECT"]},"transaction":{"type":"string"},"signature":{"type":"string"}},"required":["type","token","pair_token","blockchain","user_address","deadline","merchant_address","gas_fee_nominal","gas_fee_dollars","relayer_nonce","merchant_id","mode","signature"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response"}}}},"/v1/universal/orders":{"get":{"tags":["universal"],"description":"Get orders from Universal Relayer with optional filtering","parameters":[{"schema":{"type":"string"},"in":"query","name":"address","required":false},{"schema":{"type":"string"},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"query","name":"token","required":false},{"schema":{"anyOf":[{"type":"string","enum":["USDC"]},{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}]},"in":"query","name":"pair_token","required":false},{"schema":{"type":"string"},"in":"query","name":"type","required":false},{"schema":{"type":"string"},"in":"query","name":"blockchain","required":false},{"schema":{"type":"string"},"in":"query","name":"transaction_hash","required":false},{"schema":{"type":"string"},"in":"query","name":"relay_destination_hash","required":false},{"schema":{"type":"number"},"in":"query","name":"page","required":false},{"schema":{"type":"number"},"in":"query","name":"per_page","required":false},{"schema":{"type":"string"},"in":"query","name":"relayer_nonce","required":false},{"schema":{"type":"string"},"in":"query","name":"order_id","required":false}],"responses":{"200":{"description":"Default Response"}}}},"/v1/universal/quote":{"get":{"tags":["universal"],"description":"Get a quote from Universal Relayer","parameters":[{"schema":{"type":"string","enum":["BUY","SELL"]},"in":"query","name":"type","required":true},{"schema":{"type":"string"},"in":"query","name":"token","required":true},{"schema":{"type":"string"},"in":"query","name":"token_amount","required":false},{"schema":{"anyOf":[{"type":"string","enum":["USDC"]},{"type":"string","pattern":"^0x[a-fA-F0-9]+$"}]},"in":"query","name":"pair_token","required":true},{"schema":{"type":"string"},"in":"query","name":"pair_token_amount","required":false},{"schema":{"type":"number"},"in":"query","name":"slippage_bips","required":false},{"schema":{"type":"string"},"in":"query","name":"blockchain","required":true},{"schema":{"type":"string"},"in":"query","name":"user_address","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/velora/swap/":{"get":{"tags":["external-zap-providers"],"description":"Execute a swap using Velora DEX","parameters":[{"schema":{"type":"string"},"in":"query","name":"chainId","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenIn","required":true},{"schema":{"type":"string"},"in":"query","name":"tokenOut","required":true},{"schema":{"type":"string","pattern":"^\\d+$"},"in":"query","name":"amountIn","required":true},{"schema":{"type":"string"},"in":"query","name":"slippage","required":true},{"schema":{"type":"string"},"in":"query","name":"signer","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","error"]},"result":{"type":"object","properties":{"tokenIn":{"type":"string"},"amountIn":{"type":"string"},"amountInValue":{"type":["null","number"]},"tokenOut":{"type":"string"},"amountOut":{"type":"string"},"amountOutValue":{"type":["null","number"]},"minAmountOut":{"type":"string"},"approvalAddress":{"type":"string"},"approvalNeeded":{"type":"boolean"},"insufficientFunds":{"type":"boolean"},"dust":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"amount":{"type":"string"}},"required":["token","amount"],"additionalProperties":false}},"dustValue":{"type":["null","number"]},"gas":{"type":["null","string"]},"priceImpact":{"type":"number"},"truePriceImpact":{"type":"number"},"pathVizImage":{"type":"string"},"tx":{"anyOf":[{"type":"object","properties":{"data":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"gas":{"type":"number"},"gasPrice":{"type":"number"},"nonce":{"type":"number"}},"required":["data","to","value","gas","gasPrice","nonce"],"additionalProperties":false},{"type":"null"}]}},"required":["tokenIn","amountIn","amountInValue","tokenOut","amountOut","amountOutValue","approvalAddress","approvalNeeded","insufficientFunds","dust","dustValue","gas","priceImpact","truePriceImpact","tx"],"additionalProperties":false},"error":{"type":"string"},"version":{"type":"string"},"worker":{"type":"string"}},"required":["status"],"additionalProperties":false}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"description":"Bad request","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"description":"Internal server error","type":"object","properties":{"status":{"type":"string","enum":["error"]},"error":{"type":"string"}}}}}}}}},"/v1/zapper/deploy-ungoverned-zap/":{"post":{"tags":["zapper"],"description":"Deploy an ungoverned DTF","responses":{"200":{"description":"Default Response"}}}},"/v1/zapper/deploy-zap/":{"post":{"tags":["zapper"],"description":"Deploy a governed DTF","responses":{"200":{"description":"Default Response"}}}},"/v1/zapper/healthcheck/":{"get":{"tags":["zapper"],"description":"Zapper healthcheck","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"ok":{"type":"boolean"},"chainId":{"type":"number"},"services":{"type":"array","items":{"type":"object","properties":{"service":{"type":"string"},"ok":{"type":"boolean"},"error":{"type":"string"}},"required":["service","ok"],"additionalProperties":false}},"version":{"type":"string","default":"unknown"},"worker":{"type":"string","default":"unknown"},"error":{"type":"string"}},"required":["ok","chainId","services"],"additionalProperties":false}}}}}}}},"/v1/zapper/report/":{"post":{"tags":["zapper"],"responses":{"200":{"description":"Default Response"}}}},"/v1/zapper/swap/":{"get":{"tags":["zapper"],"description":"Swap an ERC20 token for another","responses":{"200":{"description":"Default Response"}}}},"/v1/zapper/tokens/":{"get":{"tags":["zapper"],"description":"List of supported tokens by the zapper","parameters":[{"schema":{"type":"number","default":8453},"in":"query","name":"chainId","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"unfiltered","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"number"},"decimals":{"type":"number"},"logoURI":{"type":"string"},"volatility":{"type":"string","enum":["high","medium","low"]},"marketCap":{"type":"number"},"totalVolume":{"type":"number"},"address":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"}},"required":["chainId","decimals","volatility","address","name","symbol"],"additionalProperties":false}}}}}}}}},"tags":[{"name":"health","description":"Health check endpoints"},{"name":"current","description":"Current tokens price and DTF data"},{"name":"historical","description":"Historical tokens price and DTF data"},{"name":"discover","description":"Discover and explore DTFs"},{"name":"folio-manager","description":"DTF metadata management and control"},{"name":"protocol","description":"Protocol information and statistics"},{"name":"snapshot","description":"Historical snapshots of DTF data"},{"name":"zapper","description":"Zapper integration for DTF operations"},{"name":"dtf","description":"DTF-specific operations and data"},{"name":"service","description":"Proxy to services"},{"name":"admin","description":"Admin operations and data"},{"name":"accounts","description":"Account metrics and holdings"},{"name":"external-zap-providers","description":"External zap providers (Odos, Velora, Enso)"}]}