{"openapi":"3.0.0","info":{"title":"Silo V3 Indexer API","version":"1.0.0","description":"REST API for the Silo lending protocol indexer."},"servers":[{"url":"/v1","description":"Silo Indexer API v1"}],"components":{"schemas":{},"parameters":{}},"paths":{"/users/{address}/market-position-snapshots":{"get":{"tags":["Market"],"summary":"Market position snapshots","description":"Returns daily snapshots of a user's market positions, including collateral, debt, and USD values.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"},{"schema":{"type":"string","pattern":"^d+$","description":"Start timestamp (Unix seconds, default: 30 days ago)"},"required":false,"description":"Start timestamp (Unix seconds, default: 30 days ago)","name":"from_timestamp","in":"query"},{"schema":{"type":"string","pattern":"^d+$","description":"End timestamp (Unix seconds, default: now)"},"required":false,"description":"End timestamp (Unix seconds, default: now)","name":"to_timestamp","in":"query"},{"schema":{"type":"string","description":"Filter by market address"},"required":false,"description":"Filter by market address","name":"market","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"If true, groups results by chain + market + account + timestamp and sums numeric values"},"required":false,"description":"If true, groups results by chain + market + account + timestamp and sums numeric values","name":"should_group_by_timestamp","in":"query"}],"responses":{"200":{"description":"Paginated list of market position snapshots","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"}}}},"/users/{address}/vault-position-snapshots":{"get":{"tags":["Vault"],"summary":"Vault position snapshots","description":"Returns daily snapshots of a user's vault positions, including shares, assets, and USD values.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"},{"schema":{"type":"string","pattern":"^d+$","description":"Start timestamp (Unix seconds, default: 30 days ago)"},"required":false,"description":"Start timestamp (Unix seconds, default: 30 days ago)","name":"from_timestamp","in":"query"},{"schema":{"type":"string","pattern":"^d+$","description":"End timestamp (Unix seconds, default: now)"},"required":false,"description":"End timestamp (Unix seconds, default: now)","name":"to_timestamp","in":"query"},{"schema":{"type":"string","description":"Filter by vault address"},"required":false,"description":"Filter by vault address","name":"vault","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"If true, groups results by chain + vault + account + timestamp and sums numeric values"},"required":false,"description":"If true, groups results by chain + vault + account + timestamp and sums numeric values","name":"should_group_by_timestamp","in":"query"}],"responses":{"200":{"description":"Paginated list of vault position snapshots","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"}}}},"/users/{address}/market-liquidation-rewards":{"get":{"tags":["Market"],"summary":"Market liquidation rewards","description":"Returns a user's proportional share of defaulting liquidation rewards for a specific collateral market.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Collateral market address (required)"},"required":true,"description":"Collateral market address (required)","name":"market","in":"query"}],"responses":{"200":{"description":"Paginated list of market liquidation reward entries","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"txHash":{"type":"string"},"logIndex":{"type":"number"},"timestamp":{"type":"string"},"accountId":{"type":"string"},"debtMarketId":{"type":"string"},"collateralMarketId":{"type":"string"},"supplySent":{"type":"string"},"supplySentUsd":{"type":"number","nullable":true},"collateralReceived":{"type":"string"},"collateralReceivedUsd":{"type":"number","nullable":true},"liquidReward":{"type":"string"},"liquidRewardUsd":{"type":"number","nullable":true},"userRoi":{"type":"string","nullable":true},"claimedTimestamp":{"type":"string","nullable":true}},"required":["txHash","logIndex","timestamp","accountId","debtMarketId","collateralMarketId","supplySent","supplySentUsd","collateralReceived","collateralReceivedUsd","liquidReward","liquidRewardUsd","userRoi","claimedTimestamp"]}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"},"404":{"description":"Market not found"}}}},"/users/{address}/vault-liquidation-rewards":{"get":{"tags":["Vault"],"summary":"Vault liquidation rewards","description":"Returns a user's proportional share of vault defaulting liquidation rewards.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"},{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Vault address (required)"},"required":true,"description":"Vault address (required)","name":"vault","in":"query"}],"responses":{"200":{"description":"Paginated list of vault liquidation reward entries","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"txHash":{"type":"string"},"logIndex":{"type":"number"},"timestamp":{"type":"string"},"accountId":{"type":"string"},"vaultId":{"type":"string"},"supplySent":{"type":"string"},"supplySentUsd":{"type":"number","nullable":true},"collateralReceived":{"type":"string"},"collateralReceivedUsd":{"type":"number","nullable":true},"liquidReward":{"type":"string"},"liquidRewardUsd":{"type":"number","nullable":true},"userRoi":{"type":"string","nullable":true},"claimedTimestamp":{"type":"string","nullable":true}},"required":["txHash","logIndex","timestamp","accountId","vaultId","supplySent","supplySentUsd","collateralReceived","collateralReceivedUsd","liquidReward","liquidRewardUsd","userRoi","claimedTimestamp"]}},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"},"404":{"description":"Vault not found"}}}},"/users/{address}/earnings":{"get":{"tags":["User"],"summary":"User earnings","description":"Returns how much a user has earned on the Silo platform. Earnings = Current Position Value (USD) - Net Cash Invested (USD).","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"}],"responses":{"200":{"description":"User earnings with totals and paginated breakdown","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"total_earnings_usd":{"type":"number"},"total_current_value_usd":{"type":"number"},"total_net_cash_invested_usd":{"type":"number"},"has_incomplete_prices":{"type":"boolean"},"breakdown":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"number"},"entity_id":{"type":"string"},"entity_type":{"type":"string"},"current_value_usd":{"type":"number"},"net_cash_invested_usd":{"type":"number"},"earnings_usd":{"type":"number"},"has_incomplete_prices":{"type":"boolean"}},"required":["chain_id","entity_id","entity_type","current_value_usd","net_cash_invested_usd","earnings_usd","has_incomplete_prices"]}}},"required":["total_earnings_usd","total_current_value_usd","total_net_cash_invested_usd","has_incomplete_prices","breakdown"]},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"}}}},"/users/{address}/net-apr":{"get":{"tags":["User"],"summary":"User net APR","description":"Returns weighted average APRs for a user's positions. earn_net_apr is weighted by deposit USD, borrow_net_apr by borrow USD.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1,"description":"Page number (1-based)"},"required":false,"description":"Page number (1-based)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1000,"default":100,"description":"Results per page (max 1000)"},"required":false,"description":"Results per page (max 1000)","name":"page_size","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)"},"required":false,"description":"Filter by chain ID (e.g., 1 = Ethereum, 42161 = Arbitrum, 8453 = Base, 146 = Sonic)","name":"chain_id","in":"query"}],"responses":{"200":{"description":"User net APR with totals and paginated breakdown","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"earn_net_apr":{"type":"number"},"borrow_net_apr":{"type":"number"},"total_earn_deposits_usd":{"type":"number"},"total_borrow_usd":{"type":"number"},"breakdown":{"type":"array","items":{"type":"object","properties":{"chain_id":{"type":"number"},"entity_id":{"type":"string"},"entity_type":{"type":"string"},"earn_deposit_usd":{"type":"number"},"deposit_rate":{"type":"number"},"borrow_usd":{"type":"number"},"borrow_rate":{"type":"number"}},"required":["chain_id","entity_id","entity_type","earn_deposit_usd","deposit_rate","borrow_usd","borrow_rate"]}}},"required":["earn_net_apr","borrow_net_apr","total_earn_deposits_usd","total_borrow_usd","breakdown"]},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"},"has_more":{"type":"boolean"}},"required":["page","page_size","total","has_more"]},"filters":{"type":"object","additionalProperties":{"nullable":true}}},"required":["data","pagination","filters"]}}}},"400":{"description":"Invalid address or query parameters"}}}}}}