{"components":{"schemas":{"CompletionResponse":{"properties":{"content":{"type":"string"},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"}},"type":"object"},"Error":{"properties":{"error":{"type":"string"}},"type":"object"},"Message":{"properties":{"content":{"type":"string"},"role":{"enum":["user","assistant","system"],"type":"string"}},"required":["role","content"],"type":"object"},"Usage":{"properties":{"completion_tokens":{"type":"integer"},"prompt_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}},"type":"object"}},"securitySchemes":{"ApiKeyHeader":{"description":"API key \u2014 prefix `sk_`. Also accepted as `Authorization: Bearer <key>` or `?api_key=<key>`.","in":"header","name":"X-API-Key","type":"apiKey"}}},"info":{"contact":{"name":"Luke Steuber","url":"https://lukesteuber.com"},"description":"Public API gateway at api.dr.eamer.dev. Covers LLM chat, image generation, speech, corpus linguistics, data sources, orchestration, generators, and more.\n\nAuthentication: include your API key in the `X-API-Key` header (or `Authorization: Bearer <key>`). Request access at https://dr.eamer.dev/code/api-access/","license":{"name":"MIT"},"title":"dr.eamer.dev API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/":{"get":{"operationId":"getRoot","responses":{"200":{"content":{"application/json":{"example":{"authentication":{"methods":["X-API-Key header (recommended)","Authorization: Bearer <key>","api_key query parameter"],"rate_limit":"10,000 requests/day (resets at midnight UTC)"},"documentation":"https://api.dr.eamer.dev/v1/docs","endpoints":{"data":"/v1/data - 17 data source APIs","llm":"/v1/llm - LLM chat, vision, image generation, video generation, TTS","orchestrate":"/v1/orchestrate - Multi-agent workflows","utils":"/v1/utils - Image resize, TTS, PDF extraction"},"name":"dr.eamer.dev API Gateway","version":"v1"}}},"description":"API gateway info with endpoint overview and authentication details"}},"security":[],"summary":"API root \u2014 documentation links and endpoint overview","tags":["Status"]}},"/health":{"get":{"operationId":"getHealth","responses":{"200":{"content":{"application/json":{"example":{"status":"ok","version":"1.0.0"}}},"description":"Gateway is running"}},"security":[],"summary":"Health check","tags":["Status"]}},"/openapi.json":{"get":{"operationId":"getOpenApiSpec","responses":{"200":{"content":{"application/json":{}},"description":"OpenAPI 3.1 spec"}},"security":[],"summary":"This OpenAPI specification","tags":["Status"]}},"/v1/aac/sentence":{"post":{"operationId":"aacSentence","requestBody":{"content":{"application/json":{"schema":{"properties":{"symbol_set":{"default":"arasaac","enum":["arasaac","local"],"type":"string"},"text":{"example":"I want to go outside","type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"symbols":[{"id":123,"url":"https://...","word":"I"}]}}},"description":"Symbol sequence"}},"summary":"Convert natural-language sentence to AAC symbol sequence","tags":["AAC"]}},"/v1/aac/symbols/arasaac":{"get":{"operationId":"aacSymbolsArasaac","parameters":[{"example":"water","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"symbols":[{"id":2497,"keywords":["water"],"url":"https://..."}]}}},"description":"Matching symbols"}},"summary":"Search ARASAAC symbol library","tags":["AAC"]}},"/v1/aac/symbols/local":{"get":{"operationId":"aacSymbolsLocal","parameters":[{"example":"happy","in":"query","name":"q","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Local symbol matches"}},"summary":"Search the local symbol library","tags":["AAC"]}},"/v1/aac/symbols/search":{"get":{"operationId":"aacSymbolsSearch","parameters":[{"description":"Search term","example":"water","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"Maximum results (max 20)","in":"query","name":"limit","schema":{"default":10,"maximum":20,"type":"integer"}},{"description":"Comma-separated sources: local, arasaac","in":"query","name":"sources","schema":{"default":"local","type":"string"}},{"description":"Language code","in":"query","name":"language","schema":{"default":"en","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"metadata":{"language":"en","limit":10},"query":"water","results":[{"id":2497,"keywords":["water"],"url":"https://..."}],"sources":["local"],"total":5}}},"description":"Matching symbols from selected sources"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing q parameter"}},"summary":"Search AAC symbols across multiple sources (Blissymbolics, SymbolStix, ARASAAC)","tags":["AAC"]}},"/v1/capabilities":{"get":{"operationId":"getCapabilities","responses":{"200":{"content":{"application/json":{"example":{"endpoints":107,"providers":["anthropic","openai","xai","gemini"]}}},"description":"Capability summary"}},"security":[],"summary":"List API capabilities and configured providers","tags":["Status"]}},"/v1/clinical/":{"get":{"operationId":"clinicalIndex","responses":{"200":{"content":{"application/json":{"example":{"conditions_count":51,"endpoints":{"get":"/v1/clinical/conditions/<id>","list":"/v1/clinical/conditions","search":"/v1/clinical/search"},"name":"Clinical Reference API"}}},"description":"Service info with endpoint list and condition count"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"Clinical reference API info and available endpoints","tags":["Clinical"]}},"/v1/clinical/conditions":{"get":{"operationId":"clinicalConditions","responses":{"200":{"content":{"application/json":{"example":{"conditions":[{"category":"developmental","id":"autism","name":"Autism Spectrum Disorder"}]}}},"description":"Condition list"}},"summary":"List all 51 clinical conditions","tags":["Clinical"]}},"/v1/clinical/conditions/{condition_id}":{"get":{"operationId":"clinicalCondition","parameters":[{"description":"Condition identifier (slug or ID)","example":"autism","in":"path","name":"condition_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"aac_strategies":[],"communication":"...","id":"autism","name":"Autism Spectrum Disorder","overview":"..."}}},"description":"Condition detail"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Condition not found"}},"summary":"Get full reference for a specific condition","tags":["Clinical"]}},"/v1/clinical/search":{"get":{"operationId":"clinicalSearch","parameters":[{"example":"speech","in":"query","name":"q","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Matching conditions"}},"summary":"Search clinical conditions by keyword","tags":["Clinical"]}},"/v1/corpus/":{"get":{"operationId":"corpusIndex","responses":{"200":{"content":{"application/json":{"example":{"corpora":[{"description":"Contemporary American English","name":"COCA","tokens":"1B+"},{"description":"Anglo-Saxon texts (450-1100 CE)","name":"Old English"},{"description":"Medieval English (1100-1500 CE)","name":"Middle English"},{"description":"Shakespeare era (1500-1700 CE)","name":"Early Modern English"}],"description":"Search 48M+ tokens of historical and contemporary English","endpoints":{"collocations":"/v1/corpus/collocations","frequency":"/v1/corpus/frequency","search":"/v1/corpus/search"},"name":"Corpus of Contemporary American English API"}}},"description":"Service info with corpora descriptions and endpoint list"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"COCA corpus API info \u2014 available corpora and endpoints","tags":["Corpus"]}},"/v1/corpus/collocations":{"get":{"operationId":"corpusCollocations","parameters":[{"example":"strong","in":"query","name":"word","required":true,"schema":{"type":"string"}},{"description":"all, left, right","in":"query","name":"position","schema":{"default":"all","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Collocates sorted by MI score"}},"summary":"Get collocates for a word","tags":["Corpus"]}},"/v1/corpus/frequency":{"get":{"operationId":"corpusFrequency","parameters":[{"in":"query","name":"word","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Frequency by decade and register"}},"summary":"Word frequency across registers and decades","tags":["Corpus"]}},"/v1/corpus/search":{"get":{"operationId":"corpusSearch","parameters":[{"description":"Search term \u2014 supports * wildcards","example":"run*","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"coca, old_english, middle_english, early_modern","in":"query","name":"corpus","schema":{"default":"coca","type":"string"}},{"description":"Context words on each side","in":"query","name":"context","schema":{"default":5,"type":"integer"}},{"in":"query","name":"limit","schema":{"default":100,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"results":[{"left":"she decided to","right":"for office in","source":"TIME","word":"run","year":2019}],"total":47892}}},"description":"KWIC concordance lines"}},"summary":"Search the COCA corpus (full-text concordance)","tags":["Corpus"]}},"/v1/create/":{"get":{"operationId":"listGenerators","responses":{"200":{"content":{"application/json":{"example":{"generators":{"antijokes":{"description":"Generate anti-humor jokes with unexpected non-punchlines"},"colors":{"description":"Generate random colors with names and metadata"},"compliments":{"description":"Generate positive affirmations and compliments"},"dadjokes":{"description":"Generate wholesome dad jokes and puns"},"insults":{"description":"Generate creative Shakespearean and themed insults"}}}}},"description":"Generator list with endpoints for each"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"List available generators","tags":["Generators"]}},"/v1/create/{generator}/multiple/{count}":{"get":{"operationId":"generatorMultiple","parameters":[{"example":"colors","in":"path","name":"generator","required":true,"schema":{"enum":["insults","antijokes","colors","compliments"],"type":"string"}},{"example":5,"in":"path","name":"count","required":true,"schema":{"maximum":20,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Multiple results"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Generator does not support multiple (e.g. dadjokes)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unknown generator"}},"summary":"Get multiple random items from a generator","tags":["Generators"]}},"/v1/create/{generator}/random":{"get":{"operationId":"generatorRandom","parameters":[{"example":"dadjokes","in":"path","name":"generator","required":true,"schema":{"enum":["insults","antijokes","dadjokes","colors","compliments"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Random result"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unknown generator"}},"summary":"Get one random item from a generator","tags":["Generators"]}},"/v1/data/archive/snapshot":{"get":{"operationId":"dataArchiveSnapshot","parameters":[{"in":"query","name":"url","required":true,"schema":{"format":"uri","type":"string"}},{"description":"YYYYMMDDHHMMSS \u2014 defaults to most recent","in":"query","name":"timestamp","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"content":"...","timestamp":"20240101120000","url":"https://..."}}},"description":"Archive snapshot data"}},"summary":"Retrieve a Wayback Machine snapshot of a URL","tags":["Data"]}},"/v1/data/census/population":{"get":{"operationId":"dataCensusPopulation","parameters":[{"description":"state, county, tract, or zcta","in":"query","name":"geography","schema":{"default":"state","type":"string"}},{"in":"query","name":"year","schema":{"default":2022,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Population data by geography"}},"summary":"US Census population data","tags":["Data"]}},"/v1/data/finance/crypto":{"get":{"operationId":"dataFinanceCrypto","parameters":[{"description":"Comma-separated symbols, e.g. BTC,ETH","example":"BTC","in":"query","name":"symbol","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"BTC":{"change_24h":2.1,"price":42000}}}},"description":"Crypto market data"}},"summary":"Cryptocurrency prices and market data","tags":["Data"]}},"/v1/data/finance/daily":{"get":{"operationId":"financeDaily","parameters":[{"example":"AAPL","in":"query","name":"symbol","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Daily OHLCV data"}},"summary":"Daily stock price for a symbol","tags":["Data"]}},"/v1/data/finance/fx":{"get":{"operationId":"dataFinanceFx","parameters":[{"in":"query","name":"base","schema":{"default":"USD","type":"string"}},{"description":"Comma-separated target currencies","example":"EUR,GBP,JPY","in":"query","name":"symbols","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"base":"USD","rates":{"EUR":0.92,"GBP":0.79}}}},"description":"FX rates"}},"summary":"Foreign exchange (forex) rates","tags":["Data"]}},"/v1/data/github/repo/{owner}/{repo}":{"get":{"operationId":"githubRepo","parameters":[{"example":"anthropics","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"example":"claude-code","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Repository info"}},"summary":"GitHub repository metadata","tags":["Data"]}},"/v1/data/multi-search":{"post":{"operationId":"multiSearch","requestBody":{"content":{"application/json":{"schema":{"properties":{"limit":{"default":5,"type":"integer"},"query":{"type":"string"},"sources":{"description":"Which sources to search (defaults to all)","items":{"type":"string"},"type":"array"}},"required":["query"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Combined results by source"}},"summary":"Parallel search across multiple data sources","tags":["Data"]}},"/v1/data/nasa/apod":{"get":{"operationId":"nasaApod","parameters":[{"description":"YYYY-MM-DD (defaults to today)","in":"query","name":"date","schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"explanation":"...","title":"Galactic Center","url":"https://apod.nasa.gov/..."}}},"description":"APOD data"}},"summary":"NASA Astronomy Picture of the Day","tags":["Data"]}},"/v1/data/nasa/mars-photos":{"get":{"operationId":"dataNasaMarsPhotos","parameters":[{"in":"query","name":"rover","schema":{"default":"curiosity","enum":["curiosity","opportunity","spirit","perseverance"],"type":"string"}},{"description":"Martian sol (day). Defaults to latest.","in":"query","name":"sol","schema":{"type":"integer"}},{"in":"query","name":"camera","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"photos":[{"earth_date":"2024-01-01","id":12345,"img_src":"https://..."}]}}},"description":"Mars rover photos"}},"summary":"Mars Rover photos from NASA","tags":["Data"]}},"/v1/data/nasa/neo":{"get":{"operationId":"dataNasaNeo","parameters":[{"example":"2024-01-01","in":"query","name":"start_date","schema":{"format":"date","type":"string"}},{"example":"2024-01-07","in":"query","name":"end_date","schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"NEO data"}},"summary":"Near-Earth Objects from NASA API","tags":["Data"]}},"/v1/data/openlibrary/isbn/{isbn}":{"get":{"operationId":"dataOpenLibraryIsbn","parameters":[{"example":"9780140449136","in":"path","name":"isbn","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"authors":["Homer"],"title":"The Iliad","year":1950}}},"description":"Book metadata"}},"summary":"Get book metadata by ISBN","tags":["Data"]}},"/v1/data/openlibrary/search":{"get":{"operationId":"dataOpenLibrarySearch","parameters":[{"example":"Moby Dick","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Book search results"}},"summary":"Search OpenLibrary books","tags":["Data"]}},"/v1/data/pubmed/article/{pmid}":{"get":{"operationId":"dataPubmedArticle","parameters":[{"example":"33782342","in":"path","name":"pmid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Article metadata and abstract"}},"summary":"Fetch a PubMed article by PMID","tags":["Data"]}},"/v1/data/sources":{"get":{"operationId":"listDataSources","responses":{"200":{"content":{"application/json":{"example":{"sources":["github","nasa","arxiv","finance","wikipedia","pubmed","youtube"]}}},"description":"Source list"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"List available data sources","tags":["Data"]}},"/v1/data/weather/current":{"get":{"operationId":"weatherCurrent","parameters":[{"example":"San Francisco","in":"query","name":"location","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Current conditions"}},"summary":"Current weather conditions","tags":["Data"]}},"/v1/data/weather/forecast":{"get":{"operationId":"dataWeatherForecast","parameters":[{"example":"New York, NY","in":"query","name":"location","required":true,"schema":{"type":"string"}},{"in":"query","name":"days","schema":{"default":3,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"forecast":[{"date":"2024-01-01","description":"Partly cloudy","high":42,"low":28}],"location":"New York, NY"}}},"description":"Forecast data"}},"summary":"Weather forecast for a location","tags":["Data"]}},"/v1/data/wikipedia/search":{"get":{"operationId":"dataWikipediaSearch","parameters":[{"example":"quantum computing","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":5,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Search results"}},"summary":"Search Wikipedia articles","tags":["Data"]}},"/v1/data/wikipedia/summary/{title}":{"get":{"operationId":"dataWikipediaSummary","parameters":[{"example":"Black_hole","in":"path","name":"title","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"extract":"A black hole is...","thumbnail":"https://...","title":"Black hole"}}},"description":"Article summary and extract"}},"summary":"Get Wikipedia article summary","tags":["Data"]}},"/v1/data/wolfram/query":{"post":{"operationId":"dataWolframQuery","requestBody":{"content":{"application/json":{"schema":{"properties":{"query":{"example":"population of France","type":"string"}},"required":["query"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"pods":[],"result":"67.97 million (2023)"}}},"description":"Wolfram Alpha result"}},"summary":"Query Wolfram Alpha for computations or facts","tags":["Data"]}},"/v1/data/youtube/channel/{channel_id}":{"get":{"operationId":"dataYoutubeChannel","parameters":[{"description":"YouTube channel ID","example":"UCVHFbw7woebKtB5QL7ELlhA","in":"path","name":"channel_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Channel data"}},"summary":"Get YouTube channel statistics","tags":["Data"]}},"/v1/data/{source}/get/{item_id}":{"get":{"operationId":"getDataItem","parameters":[{"description":"Data source name","example":"arxiv","in":"path","name":"source","required":true,"schema":{"type":"string"}},{"description":"Item identifier (arXiv ID, DOI, etc.)","example":"2301.07041","in":"path","name":"item_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"id":"2301.07041","result":{},"source":"arxiv"}}},"description":"Item data from the source"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unknown data source"}},"summary":"Get a specific item by ID from a data source","tags":["Data"]}},"/v1/data/{source}/search":{"get":{"operationId":"searchDataSource","parameters":[{"example":"arxiv","in":"path","name":"source","required":true,"schema":{"type":"string"}},{"in":"query","name":"q","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Search results"}},"summary":"Search a data source","tags":["Data"]}},"/v1/datavis/":{"get":{"operationId":"datavisIndex","responses":{"200":{"content":{"application/json":{"example":{"data_sources":["US Census Bureau & HUD","World Inequality Database","USGS Earthquakes (live API)","CoinGecko Crypto (live API)"],"description":"123+ D3.js data visualizations with real data from authoritative sources","endpoints":{"categories":"/v1/datavis/categories","list":"/v1/datavis/list","proxy":"/v1/datavis/proxy/<source>"},"name":"DataVis Styles Gallery API"}}},"description":"Service info with data sources and endpoint descriptions"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"DataVis Styles Gallery API info \u2014 data sources and endpoints","tags":["DataVis"]}},"/v1/datavis/categories":{"get":{"operationId":"datavisCategories","responses":{"200":{"content":{"application/json":{}},"description":"Category names and visualization counts"}},"summary":"List visualization categories with counts","tags":["DataVis"]}},"/v1/datavis/list":{"get":{"operationId":"datavisList","parameters":[{"description":"Filter by category name (optional)","in":"query","name":"category","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"by_category":{"Economic":["billions","dowjones"]},"total":123,"visualizations":[{"category":"Economic","description":"World billionaire distribution","name":"billions"}]}}},"description":"Comprehensive catalog of 123+ visualizations organized by category"}},"summary":"List all available D3.js visualizations","tags":["DataVis"]}},"/v1/datavis/proxy/{source}":{"get":{"operationId":"datavisProxy","parameters":[{"description":"Live data source: earthquake (USGS), crypto (CoinGecko), airquality (WAQI)","in":"path","name":"source","required":true,"schema":{"enum":["earthquake","crypto","airquality"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Proxied live data from the upstream source"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unknown source"}},"summary":"Proxy live data APIs for visualizations (CORS-free)","tags":["DataVis"]}},"/v1/documents/formats":{"get":{"operationId":"documentsFormats","responses":{"200":{"content":{"application/json":{"example":{"formats":["pdf","docx","markdown"]}}},"description":"Supported formats"}},"summary":"List supported document output formats","tags":["Documents"]}},"/v1/documents/generate":{"post":{"operationId":"documentsGenerate","requestBody":{"content":{"application/json":{"example":{"content":"# Introduction\n...","format":"pdf","title":"Research Report"},"schema":{"properties":{"content":{"description":"Markdown content","type":"string"},"format":{"default":"pdf","enum":["pdf","docx","markdown"],"type":"string"},"template":{"description":"Optional template name","type":"string"},"title":{"type":"string"}},"required":["title","content"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/pdf":{},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{},"text/markdown":{}},"description":"Generated document"}},"summary":"Generate a PDF, DOCX, or Markdown document from content","tags":["Documents"]}},"/v1/etymology/":{"get":{"operationId":"etymologyIndex","responses":{"200":{"content":{"application/json":{"example":{"description":"Explore word origins with comprehensive etymology data and visualizations","endpoints":{"explore":"/v1/etymology/explore/<word>","health":"/v1/etymology/health"},"features":["Word definitions and pronunciation","Etymology narratives","Cognate discovery","Language lineage tracing"],"name":"Etymology Visualizer API"}}},"description":"Service info with features and endpoint list"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"Etymology service root \u2014 lists available endpoints and features","tags":["Etymology"]}},"/v1/etymology/explore/{word}":{"get":{"operationId":"etymologyExplore","parameters":[{"example":"serendipity","in":"path","name":"word","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Etymology data"}},"summary":"Explore etymology and word history","tags":["Etymology"]}},"/v1/etymology/health":{"get":{"operationId":"etymologyHealth","responses":{"200":{"content":{"application/json":{"example":{"status":"ok"}}},"description":"Service is up"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Etymology backend is down"}},"security":[],"summary":"Etymology service health check","tags":["Etymology"]}},"/v1/generate/alt-text":{"post":{"operationId":"generateAltText","requestBody":{"content":{"application/json":{"schema":{"properties":{"context":{"description":"Surrounding page context to improve accuracy","type":"string"},"image":{"description":"Base64-encoded image or public URL","type":"string"}},"required":["image"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"alt_text":"A tabby cat sitting on a wooden desk next to a laptop."}}},"description":"Generated alt text"}},"summary":"Generate alt text for an image","tags":["Generate"]}},"/v1/generate/business-plan":{"post":{"operationId":"generateBusinessPlan","requestBody":{"content":{"application/json":{"schema":{"properties":{"idea":{"example":"A subscription service for artisanal hot sauces","type":"string"},"industry":{"type":"string"},"provider":{"default":"xai","type":"string"},"target_market":{"type":"string"}},"required":["idea"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"plan":"Executive Summary: ..."}}},"description":"Business plan"}},"summary":"Generate a business plan outline","tags":["Generate"]}},"/v1/generate/itinerary":{"post":{"operationId":"generateItinerary","requestBody":{"content":{"application/json":{"schema":{"properties":{"budget":{"default":"mid-range","enum":["budget","mid-range","luxury"],"type":"string"},"days":{"example":5,"type":"integer"},"destination":{"example":"Kyoto, Japan","type":"string"},"interests":{"example":"temples, food, gardens","type":"string"}},"required":["destination","days"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Day-by-day itinerary"}},"summary":"Generate a travel itinerary","tags":["Generate"]}},"/v1/generate/lesson-plan":{"post":{"operationId":"generateLessonPlan","requestBody":{"content":{"application/json":{"schema":{"properties":{"duration":{"default":60,"description":"Minutes","type":"integer"},"level":{"example":"B2","type":"string"},"topic":{"type":"string"}},"required":["topic"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Lesson plan"}},"summary":"Generate an EFL/ESL lesson plan","tags":["Generate"]}},"/v1/generate/resume":{"post":{"operationId":"generateResume","requestBody":{"content":{"application/json":{"schema":{"properties":{"experience":{"description":"Work history or bullet points","type":"string"},"format":{"default":"markdown","enum":["markdown","text"],"type":"string"},"name":{"type":"string"},"skills":{"type":"string"},"target_role":{"type":"string"}},"required":["experience"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Formatted resume"}},"summary":"Generate a professional resume","tags":["Generate"]}},"/v1/generate/story":{"post":{"operationId":"generateStory","requestBody":{"content":{"application/json":{"schema":{"properties":{"genre":{"example":"sci-fi","type":"string"},"length":{"default":"medium","enum":["short","medium","long"],"type":"string"},"prompt":{"type":"string"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Story text"}},"summary":"Generate a short story","tags":["Generate"]}},"/v1/linguistics/":{"get":{"operationId":"linguisticsIndex","responses":{"200":{"content":{"application/json":{"example":{"coverage":{"languages":7925,"phonemes":105484,"wals_parameters":192},"description":"Comprehensive linguistic data: languages, phonemes, typology","endpoints":{"features":"/v1/linguistics/features","languages":"/v1/linguistics/languages","phonemes":"/v1/linguistics/phonemes","search":"/v1/linguistics/search"},"name":"Linguistic Data API","sources":["ISO 639-3","PHOIBLE","WALS","Glottolog"]}}},"description":"Service info with coverage statistics and endpoint list"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"Linguistic Data API info \u2014 coverage stats, endpoints, and data sources","tags":["Linguistics"]}},"/v1/linguistics/features":{"get":{"operationId":"linguisticsFeatures","responses":{"200":{"content":{"application/json":{}},"description":"Feature list"}},"summary":"List phonological and morphological feature categories","tags":["Linguistics"]}},"/v1/linguistics/languages":{"get":{"operationId":"linguisticsLanguages","parameters":[{"example":"Indo-European","in":"query","name":"family","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Language list"}},"summary":"List all languages in the database","tags":["Linguistics"]}},"/v1/linguistics/languages/{code}":{"get":{"operationId":"linguisticsLanguage","parameters":[{"example":"eng","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Language detail"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Language not found"}},"summary":"Get language detail by ISO 639-3 code","tags":["Linguistics"]}},"/v1/linguistics/phonemes":{"get":{"operationId":"linguisticsPhonemes","parameters":[{"example":"eng","in":"query","name":"language","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Phoneme list"}},"summary":"List phoneme data (IPA) for a language","tags":["Linguistics"]}},"/v1/linguistics/search":{"get":{"operationId":"linguisticsSearch","parameters":[{"example":"tonal","in":"query","name":"q","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Matching languages and features"}},"summary":"Search language data by name or feature","tags":["Linguistics"]}},"/v1/llm/batch":{"get":{"operationId":"listBatches","parameters":[{"in":"query","name":"limit","schema":{"default":20,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Batch list"}},"summary":"List recent batch jobs","tags":["LLM \u2014 Batch"]},"post":{"operationId":"createBatch","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"default":"claude-haiku-4-5","type":"string"},"requests":{"description":"Array of {custom_id, messages} objects","items":{"properties":{"custom_id":{"type":"string"},"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array"}},"required":["custom_id","messages"],"type":"object"},"type":"array"}},"required":["requests"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{}},"description":"Batch created"}},"summary":"Create a batch job (Anthropic Batch API)","tags":["LLM \u2014 Batch"]}},"/v1/llm/batch/{batch_id}":{"get":{"operationId":"getBatch","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Batch status"}},"summary":"Get batch job status","tags":["LLM \u2014 Batch"]}},"/v1/llm/batch/{batch_id}/results":{"get":{"operationId":"getBatchResults","parameters":[{"in":"path","name":"batch_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Batch results"}},"summary":"Get batch results (when processing_complete)","tags":["LLM \u2014 Batch"]}},"/v1/llm/chat":{"post":{"operationId":"chat","requestBody":{"content":{"application/json":{"example":{"messages":[{"content":"Hello!","role":"user"}],"provider":"xai"},"schema":{"properties":{"effort":{"description":"Anthropic only \u2014 controls thinking depth on Opus 4.6 (GA Feb 2026). Replaces budget_tokens for new models.","enum":["low","medium","high"],"type":"string"},"extended_thinking":{"description":"Anthropic convenience flag \u2014 auto-selects adaptive (Opus 4.6) or enabled+budget_tokens (other models).","type":"boolean"},"inference_geo":{"description":"Anthropic only \u2014 data residency. \"us\" routes inference through US infrastructure at 1.1x pricing (models after Feb 1, 2026).","enum":["us"],"type":"string"},"max_tokens":{"type":"integer"},"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array"},"model":{"description":"Model ID \u2014 defaults to provider's recommended model","type":"string"},"provider":{"default":"xai","description":"LLM provider: anthropic, openai, xai, gemini, mistral, cohere, groq, perplexity, ollama","type":"string"},"stream":{"default":false,"description":"Server-Sent Events stream","type":"boolean"},"temperature":{"maximum":2,"minimum":0,"type":"number"},"thinking":{"description":"Anthropic only \u2014 explicit thinking config. {\"type\": \"adaptive\"} for Opus 4.6 or {\"type\": \"enabled\", \"budget_tokens\": 5000} for older models.","type":"object"}},"required":["messages"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionResponse"}},"text/event-stream":{"schema":{"description":"SSE stream of delta chunks","type":"string"}}},"description":"Completion"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing or invalid API key"},"429":{"description":"Rate limit exceeded"}},"summary":"Chat completion","tags":["LLM"]}},"/v1/llm/code-execute":{"post":{"operationId":"llmCodeExecute","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"default":"gemini-2.0-flash","type":"string"},"prompt":{"example":"Calculate the first 20 prime numbers and plot them","type":"string"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"chart":"base64png","code":"primes = ...","output":"2, 3, 5, 7, 11..."}}},"description":"Execution result"}},"summary":"Execute code via Gemini code execution","tags":["LLM"]}},"/v1/llm/embed":{"post":{"operationId":"embed","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"default":"text-embedding-3-small","type":"string"},"provider":{"default":"openai","type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"dimensions":1536,"embedding":[0.012,-0.034],"model":"text-embedding-3-small"}}},"description":"Embedding vector"}},"summary":"Generate embeddings for a single text","tags":["LLM"]}},"/v1/llm/embed-batch":{"post":{"operationId":"embedBatch","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"type":"string"},"provider":{"default":"openai","type":"string"},"texts":{"items":{"type":"string"},"type":"array"}},"required":["texts"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"count":1,"embeddings":[[0.01,-0.02]]}}},"description":"Batch embeddings"}},"summary":"Embed multiple texts in one call","tags":["LLM"]}},"/v1/llm/grounded-chat":{"post":{"operationId":"groundedChat","requestBody":{"content":{"application/json":{"schema":{"properties":{"dynamic_threshold":{"default":0.3,"description":"0.0\u20131.0 \u2014 lower = more searches triggered","type":"number"},"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array"}},"required":["messages"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"content":"...","grounding_sources":[{"title":"Reuters","uri":"https://reuters.com/..."}],"search_queries":["latest news today"]}}},"description":"Grounded response with citations"}},"summary":"Chat with Google Search grounding (Gemini)","tags":["LLM"]}},"/v1/llm/images/generate":{"post":{"operationId":"generateImage","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"type":"string"},"prompt":{"type":"string"},"provider":{"default":"openai","description":"openai (DALL\u00b7E), xai (Aurora), or another image-capable provider","type":"string"},"quality":{"default":"standard","enum":["standard","hd"],"type":"string"},"size":{"default":"1024x1024","type":"string"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"b64_json":null,"model":"dall-e-3","url":"https://..."}}},"description":"Generated image"}},"summary":"Generate an image","tags":["LLM"]}},"/v1/llm/models":{"get":{"operationId":"listModels","parameters":[{"description":"Filter by provider (anthropic, openai, xai, gemini, mistral, cohere, groq, perplexity, ollama)","in":"query","name":"provider","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"models":[{"id":"claude-opus-4-6","provider":"anthropic"},{"id":"claude-sonnet-4-6","provider":"anthropic"},{"id":"claude-haiku-4-5","provider":"anthropic"},{"id":"gpt-4o","provider":"openai"}]}}},"description":"Model list"}},"summary":"List available models","tags":["LLM"]}},"/v1/llm/ollama/embed":{"post":{"operationId":"ollamaEmbed","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"default":"nomic-embed-text","type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"embedding":[0.01,-0.02],"model":"nomic-embed-text"}}},"description":"Embedding vector"}},"summary":"Generate embeddings using a local Ollama model","tags":["Ollama"]}},"/v1/llm/ollama/hosts":{"get":{"operationId":"ollamaHostsList","responses":{"200":{"content":{"application/json":{"example":{"hosts":[{"status":"online","url":"http://localhost:11434"}]}}},"description":"Host list"}},"summary":"List registered Ollama hosts","tags":["Ollama"]},"post":{"operationId":"ollamaHostsAdd","requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"type":"string"},"url":{"example":"http://192.168.1.100:11434","format":"uri","type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Host registered"}},"summary":"Register a new Ollama host","tags":["Ollama"]}},"/v1/llm/ollama/models":{"get":{"operationId":"listOllamaModels","responses":{"200":{"content":{"application/json":{}},"description":"Installed models"}},"summary":"List local Ollama models","tags":["Ollama"]}},"/v1/llm/ollama/models/pull":{"post":{"operationId":"pullOllamaModel","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"example":"llama3.2","type":"string"}},"required":["model"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Pull result"}},"summary":"Pull (download) a model into Ollama","tags":["Ollama"]}},"/v1/llm/ollama/models/{model_name}":{"delete":{"operationId":"deleteOllamaModel","parameters":[{"example":"llama3.2","in":"path","name":"model_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"deleted":"llama3.2"}}},"description":"Deleted"}},"summary":"Delete a local Ollama model","tags":["Ollama"]}},"/v1/llm/ollama/running":{"get":{"operationId":"runningOllamaModels","responses":{"200":{"content":{"application/json":{}},"description":"Running models"}},"summary":"List currently running Ollama models","tags":["Ollama"]}},"/v1/llm/similarity":{"post":{"operationId":"similarity","requestBody":{"content":{"application/json":{"schema":{"properties":{"provider":{"default":"openai","type":"string"},"text1":{"type":"string"},"text2":{"type":"string"}},"required":["text1","text2"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"similarity":0.87,"text1_tokens":12,"text2_tokens":9}}},"description":"Similarity score"}},"summary":"Compute cosine similarity between two texts","tags":["LLM"]}},"/v1/llm/smart-chat":{"post":{"operationId":"smartChat","requestBody":{"content":{"application/json":{"schema":{"properties":{"budget":{"default":"balanced","enum":["cheap","balanced","premium"],"type":"string"},"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array"}},"required":["messages"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionResponse"}}},"description":"Completion with model selection metadata"}},"summary":"Tiered model selection \u2014 routes to best model for task complexity","tags":["LLM"]}},"/v1/llm/speech":{"post":{"operationId":"speech","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"default":"tts-1","type":"string"},"speed":{"default":1.0,"type":"number"},"text":{"type":"string"},"voice":{"default":"alloy","enum":["alloy","echo","fable","onyx","nova","shimmer"],"type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"audio/mpeg":{}},"description":"MP3 audio"}},"summary":"Text-to-speech (OpenAI TTS)","tags":["LLM"]}},"/v1/llm/tiered-select":{"post":{"operationId":"llmTieredSelect","requestBody":{"content":{"application/json":{"schema":{"properties":{"budget":{"default":"balanced","enum":["cheap","balanced","premium"],"type":"string"},"task":{"example":"Summarize a 50-page PDF","type":"string"}},"required":["task"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"model":"claude-haiku-4-5","provider":"anthropic","reason":"Long-context, cost-efficient"}}},"description":"Model recommendation"}},"summary":"Recommend the best provider/model for a task","tags":["LLM"]}},"/v1/llm/transcribe":{"post":{"operationId":"transcribe","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"description":"Audio file (mp3, mp4, wav, webm, m4a)","format":"binary","type":"string"},"language":{"description":"ISO 639-1 language code (optional, auto-detected if omitted)","type":"string"},"prompt":{"description":"Optional context to improve accuracy","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"duration":1.5,"language":"en","text":"Hello, world."}}},"description":"Transcript"}},"summary":"Transcribe audio with Whisper","tags":["LLM"]}},"/v1/llm/video/generate":{"post":{"operationId":"llmVideoGenerate","requestBody":{"content":{"application/json":{"schema":{"properties":{"aspect_ratio":{"default":"16:9","enum":["16:9","9:16","1:1"],"type":"string"},"duration":{"default":5,"description":"Duration in seconds","enum":[5,10],"type":"integer"},"prompt":{"example":"A timelapse of a city at night","type":"string"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"status":"pending","task_id":"abc123"}}},"description":"Video generation job"}},"summary":"Generate a video from a prompt (Kling via Storyblocks)","tags":["LLM"]}},"/v1/llm/vision":{"post":{"operationId":"vision","requestBody":{"content":{"application/json":{"schema":{"properties":{"image":{"description":"Base64-encoded image or public URL","type":"string"},"model":{"type":"string"},"prompt":{"default":"Describe this image","type":"string"},"provider":{"default":"anthropic","type":"string"}},"required":["image"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionResponse"}}},"description":"Vision analysis"}},"summary":"Analyze an image","tags":["LLM"]}},"/v1/orchestrate/dream-cascade":{"post":{"description":"Runs a multi-agent research pipeline: Belter agents gather, Drummer synthesizes mid-level findings, Camina produces an executive summary. Long-running \u2014 use `?async=true` for background execution.","operationId":"dreamCascade","parameters":[{"description":"Return task_id immediately; poll /v1/orchestrate/{task_id}/status","in":"query","name":"async","schema":{"default":false,"type":"boolean"}}],"requestBody":{"content":{"application/json":{"example":{"num_agents":6,"task":"Analyze recent advances in RNA-based therapeutics"},"schema":{"properties":{"budget_tier":{"default":"balanced","enum":["cheap","balanced","premium"],"type":"string"},"num_agents":{"default":8,"type":"integer"},"provider_name":{"default":"xai","type":"string"},"task":{"description":"Research task description","type":"string"},"title":{"type":"string"}},"required":["task"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Synchronous result"},"202":{"content":{"application/json":{"example":{"status":"pending","task_id":"abc123"}}},"description":"Async accepted \u2014 includes task_id"}},"summary":"Dream Cascade \u2014 hierarchical 3-tier research workflow","tags":["Orchestration"]}},"/v1/orchestrate/dream-swarm":{"post":{"description":"Runs N specialized search agents in parallel, then merges results. Faster than Dream Cascade for breadth-first queries.","operationId":"dreamSwarm","parameters":[{"in":"query","name":"async","schema":{"default":false,"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"budget_tier":{"default":"balanced","enum":["cheap","balanced","premium"],"type":"string"},"num_agents":{"default":5,"type":"integer"},"provider_name":{"default":"xai","type":"string"},"query":{"type":"string"}},"required":["query"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Combined search results"},"202":{"content":{"application/json":{"example":{"status":"pending","task_id":"def456"}}},"description":"Async accepted"}},"summary":"Dream Swarm \u2014 parallel multi-domain search","tags":["Orchestration"]}},"/v1/orchestrate/{task_id}":{"delete":{"operationId":"cancelOrchestration","parameters":[{"in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Cancelled"}},"summary":"Cancel a running async task","tags":["Orchestration"]}},"/v1/orchestrate/{task_id}/status":{"get":{"operationId":"getOrchestrationStatus","parameters":[{"in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"result":{},"status":"completed","task_id":"abc123"}}},"description":"Task status"}},"summary":"Check async orchestration task status","tags":["Orchestration"]}},"/v1/orchestrate/{task_id}/stream":{"get":{"description":"Polls the task status every 2 seconds and emits SSE events until the task completes, errors, or times out (600s). Use this instead of polling /status for real-time progress.","operationId":"streamOrchestrationStatus","parameters":[{"in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"text/event-stream":{"schema":{"description":"Newline-delimited JSON objects with task_id, status, and optionally result or error","type":"string"}}},"description":"SSE stream of task status updates ending with complete, error, or timeout"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"}},"summary":"Stream async orchestration task progress via SSE","tags":["Orchestration"]}},"/v1/proxy":{"get":{"operationId":"proxyGet","parameters":[{"description":"Target HTTPS URL to proxy","in":"query","name":"url","required":true,"schema":{"format":"uri","type":"string"}}],"responses":{"200":{"description":"Proxied upstream response (content-type preserved)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing url parameter or non-HTTPS URL"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Host not allowed (private/loopback)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Upstream request failed"}},"security":[],"summary":"CORS proxy \u2014 fetch an HTTPS URL server-side","tags":["Proxy"]},"post":{"operationId":"proxyPost","parameters":[{"description":"Target HTTPS URL (can also be in JSON body)","in":"query","name":"url","schema":{"format":"uri","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"url":{"description":"Target HTTPS URL (alternative to query param)","format":"uri","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Proxied upstream response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing url or non-HTTPS"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Host not allowed"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Upstream request failed"}},"security":[],"summary":"CORS proxy \u2014 POST to an HTTPS URL server-side","tags":["Proxy"]}},"/v1/proxy/":{"get":{"operationId":"proxySlashGet","parameters":[{"description":"Target HTTPS URL to proxy","in":"query","name":"url","required":true,"schema":{"format":"uri","type":"string"}}],"responses":{"200":{"description":"Proxied upstream response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing url parameter or non-HTTPS URL"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Host not allowed"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Upstream request failed"}},"security":[],"summary":"CORS proxy (trailing slash variant) \u2014 fetch an HTTPS URL server-side","tags":["Proxy"]},"post":{"operationId":"proxySlashPost","parameters":[{"in":"query","name":"url","schema":{"format":"uri","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"url":{"format":"uri","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Proxied upstream response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing url or non-HTTPS"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Host not allowed"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Upstream request failed"}},"security":[],"summary":"CORS proxy (trailing slash variant) \u2014 POST to an HTTPS URL server-side","tags":["Proxy"]}},"/v1/screenshot/capture":{"post":{"operationId":"screenshot","requestBody":{"content":{"application/json":{"schema":{"properties":{"full_page":{"default":false,"type":"boolean"},"height":{"default":800,"type":"integer"},"url":{"format":"uri","type":"string"},"width":{"default":1280,"type":"integer"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"format":"png","height":800,"screenshot":"iVBOR...","width":1280}}},"description":"Base64 PNG screenshot"}},"summary":"Capture a website screenshot via Playwright","tags":["Utilities"]}},"/v1/social/search":{"post":{"operationId":"socialSearch","requestBody":{"content":{"application/json":{"schema":{"properties":{"limit":{"default":20,"type":"integer"},"platform":{"default":"all","enum":["bluesky","mastodon","all"],"type":"string"},"query":{"type":"string"}},"required":["query"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Social media results"}},"summary":"Search social media (Bluesky, Mastodon)","tags":["Social"]}},"/v1/swarm/":{"get":{"operationId":"swarmStatus","responses":{"200":{"content":{"application/json":{"example":{"description":"Multi-step research with parallel query analysis and synthesis","endpoints":{"chat":"/v1/swarm/chat","health":"/v1/swarm/health","hive":"/v1/swarm/hive"},"name":"Hive Research API"}}},"description":"Service info with endpoint descriptions and usage"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"Hive research API info and available endpoints","tags":["Swarm / Hive"]}},"/v1/swarm/chat":{"post":{"operationId":"swarmChat","requestBody":{"content":{"application/json":{"schema":{"properties":{"prompt":{"example":"What is the current price of gold?","type":"string"},"tools":{"description":"Specific tools to enable (empty = all)","items":{"type":"string"},"type":"array"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Swarm response"}},"summary":"Single-turn Swarm chat with tool access","tags":["Swarm / Hive"]}},"/v1/swarm/health":{"get":{"operationId":"swarmHealth","responses":{"200":{"content":{"application/json":{"example":{"message":"Hive research runs directly in the API gateway","mode":"inline","status":"healthy"}}},"description":"Service health status"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"Health check for Hive research (runs inline, no external service)","tags":["Swarm / Hive"]}},"/v1/swarm/hive":{"post":{"operationId":"swarmHive","requestBody":{"content":{"application/json":{"schema":{"properties":{"depth":{"default":"balanced","enum":["quick","balanced","deep"],"type":"string"},"task":{"example":"Research the economic impact of remote work on major cities","type":"string"}},"required":["task"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Hive research results"}},"summary":"Multi-step Hive research with parallel query expansion","tags":["Swarm / Hive"]}},"/v1/tools/":{"get":{"operationId":"listTools","responses":{"200":{"content":{"application/json":{"example":{"count":36,"tools":[{"module":"data","name":"arxiv_search","schema":{}}]}}},"description":"Tool list with names, modules, and schemas"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"List all registered tools with their schemas","tags":["Tools"]}},"/v1/tools/{tool_name}":{"post":{"operationId":"executeTool","parameters":[{"example":"arxiv_search","in":"path","name":"tool_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Tool-specific arguments \u2014 see GET /v1/tools for schemas","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Tool result"}},"summary":"Execute a tool by name","tags":["Tools"]}},"/v1/trove/":{"get":{"operationId":"troveCategories","responses":{"200":{"content":{"application/json":{"example":{"categories":{"economic_billionaires":{"dataset_count":3,"datasets":["billionaires"],"path":"economic/billionaires"}},"description":"Curated static datasets from dr.eamer.dev visualizations","name":"Data Trove","total_categories":26,"usage":{"get_dataset":"/v1/trove/<category>/<dataset>","list_category":"/v1/trove/<category>"}}}},"description":"Category list with dataset names and counts"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"List all Data Trove categories with dataset counts","tags":["Data Trove"]}},"/v1/trove/{category}":{"get":{"operationId":"troveCategory","parameters":[{"example":"economics","in":"path","name":"category","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"category":"economics","datasets":[{"format":"json","id":"gdp-by-country","title":"GDP by Country"}]}}},"description":"Dataset list"}},"security":[],"summary":"List datasets in a category","tags":["Data Trove"]}},"/v1/trove/{category}/{dataset}":{"get":{"operationId":"troveDataset","parameters":[{"in":"path","name":"category","required":true,"schema":{"type":"string"}},{"in":"path","name":"dataset","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{},"text/csv":{}},"description":"Dataset content (JSON or CSV)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Dataset not found"}},"security":[],"summary":"Download a dataset from the trove","tags":["Data Trove"]}},"/v1/utils/archive/create":{"post":{"operationId":"utilitiesArchiveCreate","requestBody":{"content":{"application/json":{"schema":{"properties":{"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"job_id":"spn2-abc123","status":"pending"}}},"description":"Archive job status"}},"summary":"Save a URL to the Wayback Machine","tags":["Utilities"]}},"/v1/utils/archive/wayback":{"get":{"operationId":"utilitiesArchiveWayback","parameters":[{"in":"query","name":"url","required":true,"schema":{"format":"uri","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"first":"20100101000000","last":"20240101000000","snapshot_count":142,"url":"https://example.com"}}},"description":"Snapshot availability"}},"summary":"Check if a URL has Wayback Machine snapshots","tags":["Utilities"]}},"/v1/utils/citations/format":{"post":{"operationId":"formatCitation","requestBody":{"content":{"application/json":{"schema":{"properties":{"source":{"description":"Source metadata (title, author, year, url, etc.)","type":"object"},"style":{"default":"apa","enum":["apa","mla","chicago","harvard"],"type":"string"}},"required":["source"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Formatted citation string"}},"summary":"Format a citation in a standard style","tags":["Utilities"]}},"/v1/utils/external":{"get":{"operationId":"utilsListExternal","responses":{"200":{"content":{"application/json":{"example":{"external_utilities":{"archive":{"description":"Wayback Machine and Archive.is access","endpoints":["/v1/utils/archive/wayback","/v1/utils/archive/create"]},"news":{"description":"News aggregation from multiple sources","endpoints":["/v1/utils/news/headlines","/v1/utils/news/search"]},"tts_proxy":{"description":"Text-to-speech synthesis (external service)","endpoint":"/v1/utils/tts-proxy"},"webcams":{"description":"Live webcam feeds worldwide","endpoint":"/v1/utils/webcams"}}}}},"description":"External utility endpoint catalog with descriptions"}},"security":[{"ApiKeyHeader":[]},{}],"summary":"List available external utility endpoints (proxied to utilities service)","tags":["Utilities"]}},"/v1/utils/format/convert":{"post":{"operationId":"utilsFormatConvert","requestBody":{"content":{"application/json":{"example":{"content":"# Hello","from":"markdown","to":"html"},"schema":{"properties":{"content":{"type":"string"},"from":{"description":"Source format","enum":["markdown","html","rst","text"],"type":"string"},"to":{"description":"Target format","enum":["markdown","html","rst","text"],"type":"string"}},"required":["content","from","to"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"result":"<h1>Hello</h1>"}}},"description":"Converted content"}},"summary":"Convert text between formats (Markdown \u2192 HTML, HTML \u2192 Markdown, etc.)","tags":["Utilities"]}},"/v1/utils/images/convert":{"post":{"operationId":"convertImage","requestBody":{"content":{"application/json":{"schema":{"properties":{"format":{"default":"png","description":"Target format","enum":["png","jpeg","webp","gif","bmp"],"type":"string"},"image":{"description":"Base64 encoded image","type":"string"},"quality":{"default":95,"description":"Quality for lossy formats (JPEG, WebP)","maximum":100,"minimum":1,"type":"integer"}},"required":["image"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"image_data":"iVBOR...","new_format":"jpeg","original_format":"png","size":{"height":600,"width":800}}}},"description":"Converted image as base64 with format metadata"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing image data"}},"summary":"Convert image format (PNG, JPEG, WebP, GIF, BMP)","tags":["Utilities"]}},"/v1/utils/images/resize":{"post":{"operationId":"resizeImage","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"},"format":{"default":"jpeg","enum":["jpeg","png","webp"],"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"image/jpeg":{},"image/png":{},"image/webp":{}},"description":"Resized image bytes"}},"summary":"Resize an image","tags":["Utilities"]}},"/v1/utils/news/headlines":{"get":{"operationId":"utilitiesNewsHeadlines","parameters":[{"example":"technology","in":"query","name":"category","schema":{"type":"string"}},{"in":"query","name":"country","schema":{"default":"us","type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"articles":[{"source":"Reuters","title":"...","url":"https://..."}]}}},"description":"Headlines"}},"summary":"Latest news headlines","tags":["Utilities"]}},"/v1/utils/news/search":{"get":{"operationId":"utilitiesNewsSearch","parameters":[{"example":"renewable energy","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"in":"query","name":"from_date","schema":{"format":"date","type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{}},"description":"Matching articles"}},"summary":"Search news articles by keyword","tags":["Utilities"]}},"/v1/utils/pdf/extract":{"post":{"operationId":"extractPdf","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Extracted text by page"}},"summary":"Extract text from a PDF","tags":["Utilities"]}},"/v1/utils/text/keywords":{"post":{"operationId":"extractKeywords","requestBody":{"content":{"application/json":{"schema":{"properties":{"limit":{"default":10,"type":"integer"},"text":{"type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Keywords"}},"summary":"Extract keywords from text","tags":["Utilities"]}},"/v1/utils/text/summarize":{"post":{"operationId":"summarizeText","requestBody":{"content":{"application/json":{"schema":{"properties":{"max_sentences":{"default":3,"type":"integer"},"style":{"default":"paragraph","enum":["bullet","paragraph"],"type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Summary"}},"summary":"Summarize text","tags":["Utilities"]}},"/v1/utils/tts":{"post":{"operationId":"utilsTts","requestBody":{"content":{"application/json":{"schema":{"properties":{"similarity_boost":{"default":0.75,"type":"number"},"stability":{"default":0.5,"type":"number"},"text":{"type":"string"},"voice_id":{"description":"ElevenLabs voice ID \u2014 omit for default","type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"audio/mpeg":{}},"description":"MP3 audio stream"}},"summary":"Text-to-speech via ElevenLabs","tags":["Utilities"]}},"/v1/utils/tts-proxy":{"post":{"operationId":"utilsTtsProxy","requestBody":{"content":{"application/json":{"schema":{"properties":{"format":{"default":"mp3","description":"Output audio format","enum":["mp3","wav","ogg"],"type":"string"},"speed":{"default":1.0,"description":"Speech speed","maximum":2.0,"minimum":0.5,"type":"number"},"text":{"description":"Text to synthesize","type":"string"},"voice":{"description":"Voice ID (optional)","type":"string"}},"required":["text"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{}},"description":"Synthesized audio data"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing text parameter"}},"summary":"Text-to-speech via external utilities service","tags":["Utilities"]}},"/v1/utils/webcams":{"get":{"operationId":"utilitiesWebcams","parameters":[{"example":"New York","in":"query","name":"location","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"example":{"webcams":[{"id":"abc","title":"Times Square","url":"https://..."}]}}},"description":"Webcam feeds"}},"summary":"Live public webcam feeds","tags":["Utilities"]}}},"security":[{"ApiKeyHeader":[]}],"servers":[{"description":"Production","url":"https://api.dr.eamer.dev"},{"description":"Local development","url":"http://localhost:5200"}],"tags":[{"description":"Health check and capabilities","name":"Status"},{"description":"Language model endpoints \u2014 chat, vision, image gen, embeddings, TTS, transcription","name":"LLM"},{"description":"Anthropic Batch API for high-volume async completions","name":"LLM \u2014 Batch"},{"description":"Manage and query locally hosted Ollama models","name":"Ollama"},{"description":"COCA corpus linguistics \u2014 concordance, collocations, frequency","name":"Corpus"},{"description":"External data sources \u2014 NASA, finance, GitHub, Wikipedia, arXiv, weather, and more","name":"Data"},{"description":"Curated static datasets \u2014 astronomy, economics, geography, history, and more","name":"Data Trove"},{"description":"Clinical reference for 51 complex communication conditions \u2014 conditions, search, and detail","name":"Clinical"},{"description":"Language data \u2014 phonemes, language families, features, and cross-linguistic search","name":"Linguistics"},{"description":"Augmentative and Alternative Communication \u2014 ARASAAC and local symbol libraries, sentence-to-symbols","name":"AAC"},{"description":"Fun content generators \u2014 jokes, insults, colors, compliments","name":"Generators"},{"description":"Multi-agent research workflows \u2014 Dream Cascade (hierarchical) and Dream Swarm (parallel)","name":"Orchestration"},{"description":"Swarm chat and Hive parallel research \u2014 multi-step autonomous reasoning with tool access","name":"Swarm / Hive"},{"description":"Task-specific generation \u2014 alt text, stories, lesson plans, business plans, resumes, itineraries","name":"Generate"},{"description":"Generate PDF, DOCX, and Markdown reports from structured content","name":"Documents"},{"description":"Text summarization, keyword extraction, PDF extraction, image processing, citation formatting, screenshots, TTS, format conversion, news, archive, webcams","name":"Utilities"},{"description":"Dynamic tool registry \u2014 36+ data and provider tools","name":"Tools"},{"description":"D3.js visualization catalogue \u2014 123+ visualizations with live data proxies","name":"DataVis"},{"description":"CORS proxy \u2014 fetch HTTPS URLs server-side to avoid browser CORS restrictions","name":"Proxy"},{"description":"Social media search across Bluesky and Mastodon","name":"Social"},{"description":"Word etymology and historical language data","name":"Etymology"},{"description":"Plan information and Stripe webhook for subscription management","name":"Billing"}]}
