{"openapi":"3.1.0","info":{"title":"DriftNote API","version":"1.0.0","description":"Turn podcast episodes into structured written summaries. Paste a link from Spotify, Apple Podcasts, YouTube, an RSS feed or a direct audio file — or just name a show and summarize its latest episode.\n\nSummarizing is asynchronous: the summarize endpoints return a summaryId immediately and the work continues in the background. Poll GET /api/v1/summaries?id=… about every 30 seconds; a typical episode completes in 2-5 minutes.","contact":{"name":"DriftNote support","url":"https://www.driftnote.net/settings"}},"servers":[{"url":"https://www.driftnote.net"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A DriftNote API key, created at /settings. Send it as `Authorization: Bearer dn_live_…`."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"}}},"StartedSummary":{"type":"object","properties":{"summaryId":{"type":"string"},"status":{"type":"string","enum":["processing"]},"episodeTitle":{"type":"string"},"podcastName":{"type":"string"},"message":{"type":"string"}}},"Summary":{"type":"object","properties":{"summaryId":{"type":"string"},"status":{"type":"string","enum":["processing","completed","failed"]},"episodeTitle":{"type":"string","nullable":true},"podcastName":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"shareUrl":{"type":"string","nullable":true},"error":{"type":"string"},"message":{"type":"string"}}},"Podcast":{"type":"object","properties":{"feedUrl":{"type":"string"},"title":{"type":"string"},"author":{"type":"string"},"imageUrl":{"type":"string","nullable":true}}}}},"paths":{"/api/v1/podcasts/search":{"get":{"operationId":"searchPodcasts","summary":"Search podcasts by name","description":"Returns feed URLs that can be passed to /api/v1/summarize-latest or /api/v1/follow.","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"},"description":"Podcast name, e.g. 'Huberman Lab'."}],"responses":{"200":{"description":"Matching podcasts","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Podcast"}}}}}}}}}},"/api/v1/summarize":{"post":{"operationId":"summarizeEpisode","summary":"Summarize a specific episode","description":"Accepts a Spotify, Apple Podcasts, YouTube, RSS or direct audio URL. Returns immediately; poll /api/v1/summaries?id=…","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Link to the episode."}}}}}},"responses":{"200":{"description":"Summary started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartedSummary"}}}},"403":{"description":"Monthly free limit reached — upgrade required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/summarize-latest":{"post":{"operationId":"summarizeLatestEpisode","summary":"Summarize a show's newest episode","description":"Give either a feedUrl from searchPodcasts, or a query naming the show.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"feedUrl":{"type":"string"},"query":{"type":"string"}}}}}},"responses":{"200":{"description":"Summary started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartedSummary"}}}}}}},"/api/v1/summaries":{"get":{"operationId":"getSummaries","summary":"Fetch one summary, or list recent ones","description":"With `id`, returns that summary — poll it while status is 'processing'. Without `id`, lists the most recent summaries.","parameters":[{"name":"id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"A summary, or a list of them","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Summary"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/ask":{"post":{"operationId":"askAboutEpisode","summary":"Ask a question about a summarized episode (Pro)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["summaryId","question"],"properties":{"summaryId":{"type":"string"},"question":{"type":"string"}}}}}},"responses":{"200":{"description":"The answer","content":{"application/json":{"schema":{"type":"object","properties":{"answer":{"type":"string"}}}}}}}}},"/api/v1/share":{"post":{"operationId":"shareSummary","summary":"Publish a summary and get a public link","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["summaryId"],"properties":{"summaryId":{"type":"string"}}}}}},"responses":{"200":{"description":"Public link","content":{"application/json":{"schema":{"type":"object","properties":{"shareUrl":{"type":"string"}}}}}}}}},"/api/v1/follow":{"post":{"operationId":"followPodcast","summary":"Follow a show for automatic summaries (Pro)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["feedUrl"],"properties":{"feedUrl":{"type":"string"},"podcastName":{"type":"string"}}}}}},"responses":{"200":{"description":"Now following","content":{"application/json":{"schema":{"type":"object","properties":{"following":{"type":"boolean"},"podcastName":{"type":"string","nullable":true}}}}}}}}}}}