{"openapi":"3.1.0","info":{"title":"MorningYield API","version":"1.0.0","description":"The yield strategies DeFi writers recommend on X, Substack, Telegram and blogs, collected every morning. Read-only and free, with a key: get one at https://www.morningyield.com/#mcp. Send your key as `Authorization: Bearer <key>`, as an `X-API-Key` header, or as `?api_key=<key>`. The data changes once a day. apy_claimed is what the author stated, not a measured rate; the collection is automated and can be wrong. Not investment advice. The same data is available to AI assistants over MCP at https://www.morningyield.com/mcp."},"servers":[{"url":"https://www.morningyield.com/api/v1"}],"security":[{"bearer":[]},{"header":[]},{"query":[]}],"paths":{"/":{"get":{"operationId":"get_overview","summary":"Overview","description":"What MorningYield holds right now: totals, the latest scan, and the strategy types, chains and protocols you can filter by. Start here.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Overview"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/strategies":{"get":{"operationId":"search_strategies","summary":"Search strategies","description":"Find the yield strategies DeFi writers recommended: vaults, automated strategies and manual recipes. Every filter is optional and they combine with AND; with no filters it lists everything, newest first. Results are brief: get one strategy to see the posts behind it.","parameters":[{"name":"query","in":"query","required":false,"description":"Words to find in the name, protocol, chain, asset, summary, risk flags or address. All words must match.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"vault: one deposit into a pooled product. automated: a product runs a strategy in your own account. strategy: a recipe you run yourself.","schema":{"type":"string","enum":["vault","automated","strategy"]}},{"name":"subtype","in":"query","required":false,"description":"Where the yield comes from. amm: DEX liquidity. lending: interest on debt-like claims, including T-bill and savings-rate dollars. aggregation: allocates across venues. staking: validator or restaking rewards. looping: leverage. risk_exchange: fixed-for-variable, tranches, insurance, options, trader-counterparty pools. delta_neutral: hedged or basis trades. unknown: not stated or none of these.","schema":{"type":"string","enum":["amm","lending","aggregation","staking","looping","risk_exchange","delta_neutral","unknown"]}},{"name":"chain","in":"query","required":false,"description":"Exact chain name, any case, e.g. Ethereum, Base, Solana. The overview lists the chains in use.","schema":{"type":"string"}},{"name":"protocol","in":"query","required":false,"description":"Exact protocol name, any case, e.g. Morpho, Pendle, Kamino. The overview lists the protocols in use.","schema":{"type":"string"}},{"name":"asset","in":"query","required":false,"description":"Text the deposit asset contains, any case: USDC also matches USDC/USDT.","schema":{"type":"string"}},{"name":"source","in":"query","required":false,"description":"Handle of a source that recommended it, e.g. thelearningpill. The sources list has the handles.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only strategies first listed on or after this day (YYYY-MM-DD).","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"on_pigi","in":"query","required":false,"description":"true: only strategies pigi.finance tracks (live APY, TVL and risk there). false: only the others.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"newest: by first listing. most_liked: by visitors' votes. most_mentioned: by number of posts. highest_apy: by apy_claimed_pct, the yield figure stated in the posts; strategies that state none come last.","schema":{"type":"string","enum":["newest","most_liked","most_mentioned","highest_apy"],"default":"newest"}},{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"offset","in":"query","required":false,"description":"How many to skip, for paging.","schema":{"type":"integer","minimum":0,"default":0}},{"name":"mentions","in":"query","required":false,"description":"true: include every post behind each strategy (source, date, link).","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategyList"}}}},"400":{"description":"A parameter is wrong; `error` says which.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/strategies/{key}":{"get":{"operationId":"get_strategy","summary":"Get a strategy","description":"One strategy in full, with every post that recommended it: source, date and link.","parameters":[{"name":"key","in":"path","required":true,"description":"The strategy's key from a search result, e.g. morpho:ethereum:0xb344e331a3cda61d329fb3cca2be5942da87c418.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Strategy"}}}},"400":{"description":"A parameter is wrong; `error` says which.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nothing has that key or date.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/scans":{"get":{"operationId":"list_scans","summary":"List scans","description":"The morning scans, newest first: how many posts were read each day, and how many strategies were new or recommended again.","parameters":[{"name":"limit","in":"query","required":false,"description":"How many days to return.","schema":{"type":"integer","minimum":1,"maximum":366,"default":30}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanList"}}}},"400":{"description":"A parameter is wrong; `error` says which.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/scans/{date}":{"get":{"operationId":"get_scan","summary":"Get a scan","description":"What one morning's scan found: the strategies that were new that day, and the known ones that were recommended again, with the new posts. The date \"latest\" is the most recent scan.","parameters":[{"name":"date","in":"path","required":true,"description":"The scan's day (YYYY-MM-DD), or latest.","schema":{"type":"string","pattern":"^(latest|\\d{4}-\\d{2}-\\d{2})$","default":"latest"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scan"}}}},"400":{"description":"A parameter is wrong; `error` says which.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nothing has that key or date.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sources":{"get":{"operationId":"list_sources","summary":"List sources","description":"The X accounts, newsletters and Telegram channels MorningYield reads every morning, with how many strategies each one surfaced. The handles work as the source filter in a strategy search.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceList"}}}},"401":{"description":"No key was sent, or the key is unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Votes":{"type":"object","required":["up","down"],"properties":{"up":{"type":"integer","description":"Thumbs up from the site's visitors."},"down":{"type":"integer","description":"Thumbs down."}}},"Mention":{"type":"object","description":"One post that recommended a strategy.","required":["source","platform","date","url"],"properties":{"source":{"type":"string","description":"Handle of the source that posted it (see /sources)."},"platform":{"type":"string","description":"x, substack, telegram, medium, mirror, paragraph or rss."},"date":{"type":["string","null"],"description":"The day of the post.","format":"date"},"url":{"type":"string","description":"Link to the post.","format":"uri"}}},"Strategy":{"type":"object","description":"A yield strategy that one or more sources recommended.","required":["key","name","type","subtype","protocol","chain","asset","address","url","apy_claimed","apy_claimed_pct","summary","risk_flags","first_seen","last_seen","mention_count","sources","votes","on_pigi","pigi_url","defillama_url","page"],"properties":{"key":{"type":"string","description":"Stable id: protocol:chain:address, or protocol:chain:name when the posts gave no address."},"name":{"type":"string","description":"The product's name, as the protocol names it."},"type":{"type":["string","null"],"description":"vault: one deposit into a pooled product. automated: a product runs a strategy in your own account. strategy: a recipe you run yourself.","enum":["vault","automated","strategy"]},"subtype":{"type":"string","description":"Where the yield comes from (see the subtype filter); unknown when the posts don't say.","enum":["amm","lending","aggregation","staking","looping","risk_exchange","delta_neutral","unknown"]},"protocol":{"type":["string","null"],"description":"The protocol."},"chain":{"type":["string","null"],"description":"The chain; null when the product spans several or runs off-chain."},"asset":{"type":["string","null"],"description":"What you deposit."},"address":{"type":["string","null"],"description":"The vault's contract address, when a post gave one."},"url":{"type":["string","null"],"description":"The product's page, when a post linked it.","format":"uri"},"apy_claimed":{"type":["string","null"],"description":"The yield as the author stated it, in their words. Not measured or verified."},"apy_claimed_pct":{"type":["number","null"],"description":"The headline figure in apy_claimed, as a number: its first percentage, and for a range the low end. null when the text states none. The highest_apy sort uses it."},"summary":{"type":["string","null"],"description":"One line: what you deposit and where the yield comes from."},"risk_flags":{"type":"array","items":{"type":"string"},"description":"Caveats noted from the posts: sponsored, points-only, thin liquidity…"},"first_seen":{"type":["string","null"],"description":"The day MorningYield first listed it.","format":"date"},"last_seen":{"type":["string","null"],"description":"The day of the latest scan that found a post about it.","format":"date"},"mention_count":{"type":"integer","description":"How many posts recommended it."},"sources":{"type":"array","items":{"type":"string"},"description":"Handles of the sources that recommended it, first to post first."},"votes":{"$ref":"#/components/schemas/Votes"},"on_pigi":{"type":"boolean","description":"pigi.finance tracks this strategy (live APY, TVL and risk)."},"pigi_url":{"type":["string","null"],"description":"Its page on pigi.finance.","format":"uri"},"defillama_url":{"type":["string","null"],"description":"Where pigi has no page: the pool's or the protocol's page on DefiLlama.","format":"uri"},"page":{"type":"string","description":"Its page on MorningYield.","format":"uri"},"mentions":{"type":"array","items":{"$ref":"#/components/schemas/Mention"},"description":"Every post that recommended it, oldest first. Present on a single strategy, and in lists with mentions=true."}}},"StrategyList":{"type":"object","required":["total","offset","limit","count","strategies"],"properties":{"total":{"type":"integer","description":"How many strategies match the filters."},"offset":{"type":"integer","description":"How many were skipped."},"limit":{"type":"integer","description":"The page size asked for."},"count":{"type":"integer","description":"How many are in this page."},"strategies":{"type":"array","items":{"$ref":"#/components/schemas/Strategy"}}}},"ScanSummary":{"type":"object","required":["date","posts_read","sources_read","new_count","mentioned_again_count"],"properties":{"date":{"type":"string","description":"The scan's day.","format":"date"},"posts_read":{"type":"integer","description":"New original posts read that day; replies and reposts are skipped."},"sources_read":{"type":"integer","description":"Sources checked."},"new_count":{"type":"integer","description":"Strategies first listed that day."},"mentioned_again_count":{"type":"integer","description":"Known strategies recommended again that day."}}},"ScanList":{"type":"object","required":["total","count","scans"],"properties":{"total":{"type":"integer","description":"How many scan days there are."},"count":{"type":"integer","description":"How many are in this answer."},"scans":{"type":"array","items":{"$ref":"#/components/schemas/ScanSummary"}}}},"Scan":{"type":"object","required":["date","posts_read","sources_read","new_count","mentioned_again_count","new_strategies","mentioned_again"],"properties":{"date":{"type":"string","description":"The scan's day.","format":"date"},"posts_read":{"type":"integer","description":"New original posts read that day; replies and reposts are skipped."},"sources_read":{"type":"integer","description":"Sources checked."},"new_count":{"type":"integer","description":"Strategies first listed that day."},"mentioned_again_count":{"type":"integer","description":"Known strategies recommended again that day."},"new_strategies":{"type":"array","items":{"$ref":"#/components/schemas/Strategy"}},"mentioned_again":{"type":"array","items":{"type":"object","required":["key","name","type","protocol","chain","mentions"],"properties":{"key":{"type":"string","description":"The strategy's key."},"name":{"type":"string","description":"Its name."},"type":{"type":["string","null"],"description":"vault: one deposit into a pooled product. automated: a product runs a strategy in your own account. strategy: a recipe you run yourself.","enum":["vault","automated","strategy"]},"protocol":{"type":["string","null"],"description":"The protocol."},"chain":{"type":["string","null"],"description":"The chain."},"mentions":{"type":"array","items":{"$ref":"#/components/schemas/Mention"},"description":"That day's new posts about it."}}}}}},"Source":{"type":"object","required":["handle","name","platform","url","followers","focus","note","posts_read","strategies_found","found_by_type","first_to_find","likes","last_find","last_post_at"],"properties":{"handle":{"type":"string","description":"The source's id here; the `source` filter of /strategies takes it."},"name":{"type":["string","null"],"description":"Display name."},"platform":{"type":"string","description":"x, substack, telegram, medium, mirror, paragraph or rss."},"url":{"type":"string","description":"The account or publication.","format":"uri"},"followers":{"type":["integer","null"],"description":"Followers, for X accounts."},"focus":{"type":["string","null"],"description":"How much of its output is about yield."},"note":{"type":["string","null"],"description":"What it publishes."},"posts_read":{"type":"integer","description":"Original posts read so far."},"strategies_found":{"type":"integer","description":"Strategies it recommended."},"found_by_type":{"type":"object","required":["vault","automated","strategy"],"properties":{"vault":{"type":"integer","description":"Vaults."},"automated":{"type":"integer","description":"Automated strategies."},"strategy":{"type":"integer","description":"Manual strategies."}}},"first_to_find":{"type":"integer","description":"Strategies where its post was the earliest."},"likes":{"type":"integer","description":"Thumbs up on the strategies it recommended."},"last_find":{"type":["object","null"],"description":"The strategy it recommended that was listed most recently.","required":["date","key","name"],"properties":{"date":{"type":"string","description":"First listed.","format":"date"},"key":{"type":"string","description":"The strategy's key."},"name":{"type":"string","description":"Its name."}}},"last_post_at":{"type":["string","null"],"description":"When its newest post was published.","format":"date-time"}}},"SourceList":{"type":"object","required":["count","sources"],"properties":{"count":{"type":"integer","description":"How many sources."},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"}}}},"Overview":{"type":"object","required":["name","about","site","api","mcp","updated_at","totals","first_scan","latest_scan","types","subtypes","chains","protocols","notes"],"properties":{"name":{"type":"string","description":"MorningYield."},"about":{"type":"string","description":"What this data is."},"site":{"type":"string","description":"The site.","format":"uri"},"api":{"type":"string","description":"This API's base URL.","format":"uri"},"mcp":{"type":"string","description":"The MCP endpoint.","format":"uri"},"updated_at":{"type":["string","null"],"description":"When the data last changed.","format":"date-time"},"totals":{"type":"object","required":["strategies","sources","scans"],"properties":{"strategies":{"type":"integer","description":"Strategies listed."},"sources":{"type":"integer","description":"Sources read."},"scans":{"type":"integer","description":"Scan days."}}},"first_scan":{"type":["string","null"],"description":"The first scan's day.","format":"date"},"latest_scan":{"$ref":"#/components/schemas/ScanSummary","type":[null,"null"]},"types":{"type":"array","items":{"type":"object","required":["type","count"],"properties":{"type":{"type":"string","description":"vault: one deposit into a pooled product. automated: a product runs a strategy in your own account. strategy: a recipe you run yourself.","enum":["vault","automated","strategy"]},"count":{"type":"integer","description":"Strategies of this type."}}}},"subtypes":{"type":"array","items":{"type":"object","required":["subtype","label","count"],"properties":{"subtype":{"type":"string","description":"The sub-type's id, as the filter takes it."},"label":{"type":"string","description":"Its name on the site."},"count":{"type":"integer","description":"Strategies with it."}}}},"chains":{"type":"array","items":{"type":"object","required":["chain","count"],"properties":{"chain":{"type":"string","description":"Chain name."},"count":{"type":"integer","description":"Strategies on it."}}}},"protocols":{"type":"array","items":{"type":"object","required":["protocol","count"],"properties":{"protocol":{"type":"string","description":"Protocol name."},"count":{"type":"integer","description":"Its strategies."}}}},"notes":{"type":"array","items":{"type":"string"},"description":"What to keep in mind when using the data."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"What went wrong, in plain words."}}}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Authorization: Bearer <key>"},"header":{"type":"apiKey","in":"header","name":"X-API-Key"},"query":{"type":"apiKey","in":"query","name":"api_key"}}}}