{"openapi":"3.1.0","info":{"title":"AsherCore API","version":"1.1.0","summary":"One API for every market’s data — and the news that moves it.","description":"Normalized market data (OHLCV candles, quotes, funding, order books, instrument catalog) across crypto, equities and forex, plus Asher Wire: a news feed where every story carries a machine-readable market signal. One key, one quota, one bill. All data is served from our own store — no live-exchange call sits on your request path.","contact":{"name":"AsherCore","email":"hello@ashercore.com","url":"https://ashercore.com"},"license":{"name":"Commercial","url":"https://ashercore.com/terms.html"}},"servers":[{"url":"https://ashercore.com","description":"Production"}],"externalDocs":{"description":"Full documentation","url":"https://ashercore.com/docs.html"},"tags":[{"name":"Market data","description":"Candles, quotes, funding, order books, catalog."},{"name":"Asher Wire","description":"News, per-asset signals, economic calendar. Included on every plan."}],"security":[{"bearerAuth":[]},{"apiKeyQuery":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Authorization: Bearer YOUR_ASHERCORE_KEY"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"key"}},"schemas":{"Article":{"type":"object","properties":{"id":{"type":"string"},"headline":{"type":"string"},"summary":{"type":"string","description":"Original Asher Wire brief. Not the source article text."},"category":{"type":"string","enum":["markets","economy","crypto","tech"],"nullable":true},"source":{"type":"string","nullable":true,"description":"Publisher. Must be preserved when displaying the story."},"url":{"type":"string","nullable":true,"description":"Link to the original. Must be preserved when displaying the story."},"image":{"type":"string","nullable":true},"video":{"type":"string","nullable":true},"published":{"type":"string","format":"date-time","nullable":true},"lead":{"type":"boolean"},"lang":{"type":"string","enum":["en","es"]},"signal":{"type":"object","nullable":true,"description":"Machine-readable market call attached to the story.","properties":{"bias":{"type":"string","enum":["bullish","bearish","neutral","mixed"]},"assets":{"type":"array","items":{"type":"string"},"description":"Assets the story moves, as named by the analysis."},"rationale":{"type":"string"}}}}},"Signal":{"type":"object","nullable":true,"description":"Machine-readable market call attached to the story.","properties":{"bias":{"type":"string","enum":["bullish","bearish","neutral","mixed"]},"assets":{"type":"array","items":{"type":"string"},"description":"Assets the story moves, as named by the analysis."},"rationale":{"type":"string"}}},"AssetSignal":{"type":"object","properties":{"asset":{"type":"string"},"symbol":{"type":"string","nullable":true,"description":"Ticker to join against /api/market/* — null when the label could not be mapped."},"mentions":{"type":"integer"},"score":{"type":"number","minimum":-1,"maximum":1,"description":"Net direction of coverage: -1 uniformly bearish, +1 uniformly bullish."},"bias":{"type":"string","enum":["bullish","bearish","neutral"]},"breakdown":{"type":"object","properties":{"bullish":{"type":"integer"},"bearish":{"type":"integer"},"neutral":{"type":"integer"},"mixed":{"type":"integer"}}},"articles":{"type":"array","items":{"type":"object"}}}}}},"paths":{"/api/market/candles":{"get":{"tags":["Market data"],"operationId":"getCandles","summary":"OHLCV candles for any instrument.","parameters":[{"name":"coin","in":"query","description":"Ticker, e.g. BTC.","schema":{"type":"string"},"required":true},{"name":"interval","in":"query","description":"Timeframe from 1m to 1W.","schema":{"type":"string","default":"1h"}},{"name":"limit","in":"query","description":"Number of candles.","schema":{"type":"integer","default":500}},{"name":"before","in":"query","description":"Unix seconds cursor for older history.","schema":{"type":"integer"}},{"name":"venue","in":"query","description":"Venue override — see /api/market/venues.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string"},"interval":{"type":"string"},"exchange":{"type":"string"},"source":{"type":"string"},"candles":{"type":"array","items":{"type":"object","properties":{"time":{"type":"integer"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volume":{"type":"number"}}}}}}}}}}}},"/api/market/catalog":{"get":{"tags":["Market data"],"operationId":"getCatalog","summary":"Every instrument we ingest, tagged with venue and asset class.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/coins":{"get":{"tags":["Market data"],"operationId":"getCoins","summary":"Priced majors — cached snapshot with last price and change.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/quote":{"get":{"tags":["Market data"],"operationId":"getQuote","summary":"Latest quote for one instrument.","parameters":[{"name":"coin","in":"query","description":"Ticker.","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/mids":{"get":{"tags":["Market data"],"operationId":"getMids","summary":"Live mid prices.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/funding":{"get":{"tags":["Market data"],"operationId":"getFunding","summary":"Perpetual funding rates by instrument.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/orderbook":{"get":{"tags":["Market data"],"operationId":"getOrderbook","summary":"Order-book depth snapshot.","parameters":[{"name":"coin","in":"query","description":"Ticker.","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/screener":{"get":{"tags":["Market data"],"operationId":"getScreener","summary":"Ranked, filterable slice of the universe.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/market/venues":{"get":{"tags":["Market data"],"operationId":"getVenues","summary":"Venues we ingest and their coverage metadata.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/wire/headlines":{"get":{"tags":["Asher Wire"],"operationId":"getWireHeadlines","summary":"The live wire, filtered however you like.","description":"Passing q, since, until or page switches the query to the rolling archive instead of the current feed. Responses report `scanned` and `matched` so you can see how much your filter kept.","parameters":[{"name":"stream","in":"query","description":"A saved filter set from /api/wire/stream. Explicit params below override it.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Free text across headline and summary.","schema":{"type":"string"}},{"name":"category","in":"query","description":"Comma-separated categories.","schema":{"type":"string","example":"crypto,markets"}},{"name":"not_category","in":"query","description":"Categories to exclude.","schema":{"type":"string"}},{"name":"sources","in":"query","description":"Publisher substring match, comma-separated.","schema":{"type":"string","example":"Reuters,CoinDesk"}},{"name":"not_sources","in":"query","description":"Publishers to exclude.","schema":{"type":"string"}},{"name":"assets","in":"query","description":"Assets named by a story signal — matches the label or the mapped ticker.","schema":{"type":"string","example":"BTC,oil"}},{"name":"bias","in":"query","description":"Comma-separated biases.","schema":{"type":"string","example":"bullish,mixed"}},{"name":"has_signal","in":"query","description":"Only stories carrying a signal (or only those without).","schema":{"type":"boolean"}},{"name":"lead_only","in":"query","description":"Lead stories only.","schema":{"type":"boolean"}},{"name":"since","in":"query","description":"ISO 8601 timestamp, or relative shorthand: 30m, 12h, 7d, 2w.","schema":{"type":"string","example":"12h"}},{"name":"until","in":"query","description":"ISO 8601 timestamp, or relative shorthand.","schema":{"type":"string"}},{"name":"exclude_duplicates","in":"query","description":"Collapse the same story filed by several outlets.","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"Ordering.","schema":{"type":"string","enum":["date","relevance"],"default":"date"}},{"name":"lang","in":"query","description":"Response language.","schema":{"type":"string","enum":["en","es"],"default":"en"}},{"name":"limit","in":"query","description":"Stories to return, 1–100.","schema":{"type":"integer","default":20}},{"name":"page","in":"query","description":"Archive page, 24 per page.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","enum":["wire","archive"]},"updated":{"type":"string","format":"date-time","nullable":true},"scanned":{"type":"integer"},"matched":{"type":"integer"},"count":{"type":"integer"},"hasMore":{"type":"boolean"},"filters":{"type":"object"},"articles":{"type":"array","items":{"$ref":"#/components/schemas/Article"}}}}}}}}}},"/api/wire/signals":{"get":{"tags":["Asher Wire"],"operationId":"getWireSignals","summary":"Per-asset news bias, rolled up across the wire.","description":"The endpoint that makes news joinable to market data: each row carries a score from -1 to +1 against a ticker you can pull candles for. Note that `asset` and `bias` here narrow the rolled-up rows; use `assets` to scope the underlying stories.","parameters":[{"name":"stream","in":"query","description":"A saved filter set from /api/wire/stream. Explicit params below override it.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Free text across headline and summary.","schema":{"type":"string"}},{"name":"category","in":"query","description":"Comma-separated categories.","schema":{"type":"string","example":"crypto,markets"}},{"name":"not_category","in":"query","description":"Categories to exclude.","schema":{"type":"string"}},{"name":"sources","in":"query","description":"Publisher substring match, comma-separated.","schema":{"type":"string","example":"Reuters,CoinDesk"}},{"name":"not_sources","in":"query","description":"Publishers to exclude.","schema":{"type":"string"}},{"name":"assets","in":"query","description":"Assets named by a story signal — matches the label or the mapped ticker.","schema":{"type":"string","example":"BTC,oil"}},{"name":"bias","in":"query","description":"Comma-separated biases.","schema":{"type":"string","example":"bullish,mixed"}},{"name":"has_signal","in":"query","description":"Only stories carrying a signal (or only those without).","schema":{"type":"boolean"}},{"name":"lead_only","in":"query","description":"Lead stories only.","schema":{"type":"boolean"}},{"name":"since","in":"query","description":"ISO 8601 timestamp, or relative shorthand: 30m, 12h, 7d, 2w.","schema":{"type":"string","example":"12h"}},{"name":"until","in":"query","description":"ISO 8601 timestamp, or relative shorthand.","schema":{"type":"string"}},{"name":"exclude_duplicates","in":"query","description":"Collapse the same story filed by several outlets.","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"Ordering.","schema":{"type":"string","enum":["date","relevance"],"default":"date"}},{"name":"lang","in":"query","description":"Response language.","schema":{"type":"string","enum":["en","es"],"default":"en"}},{"name":"asset","in":"query","description":"Narrow to one rolled-up row (case-insensitive, matches label or ticker).","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Rows to return, 1–200.","schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"string","format":"date-time","nullable":true},"scanned":{"type":"integer"},"articles":{"type":"integer"},"signalled":{"type":"integer"},"count":{"type":"integer"},"filters":{"type":"object"},"assets":{"type":"array","items":{"$ref":"#/components/schemas/AssetSignal"}}}}}}}}}},"/api/wire/live":{"get":{"tags":["Asher Wire"],"operationId":"streamWire","summary":"Push the wire over Server-Sent Events.","description":"Same filters as /api/wire/headlines, delivered as they land instead of polled. Events: `ready` (once, with the resolved filters), `story` (one per matching article), `ping` (keepalive), `bye` (reconnect). Every `story` carries an SSE `id:`; send it back as `Last-Event-ID` to resume without duplicates. Browsers get reconnection free via EventSource.","parameters":[{"name":"stream","in":"query","description":"A saved filter set from /api/wire/stream. Explicit params below override it.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Free text across headline and summary.","schema":{"type":"string"}},{"name":"category","in":"query","description":"Comma-separated categories.","schema":{"type":"string","example":"crypto,markets"}},{"name":"not_category","in":"query","description":"Categories to exclude.","schema":{"type":"string"}},{"name":"sources","in":"query","description":"Publisher substring match, comma-separated.","schema":{"type":"string","example":"Reuters,CoinDesk"}},{"name":"not_sources","in":"query","description":"Publishers to exclude.","schema":{"type":"string"}},{"name":"assets","in":"query","description":"Assets named by a story signal — matches the label or the mapped ticker.","schema":{"type":"string","example":"BTC,oil"}},{"name":"bias","in":"query","description":"Comma-separated biases.","schema":{"type":"string","example":"bullish,mixed"}},{"name":"has_signal","in":"query","description":"Only stories carrying a signal (or only those without).","schema":{"type":"boolean"}},{"name":"lead_only","in":"query","description":"Lead stories only.","schema":{"type":"boolean"}},{"name":"since","in":"query","description":"ISO 8601 timestamp, or relative shorthand: 30m, 12h, 7d, 2w.","schema":{"type":"string","example":"12h"}},{"name":"until","in":"query","description":"ISO 8601 timestamp, or relative shorthand.","schema":{"type":"string"}},{"name":"exclude_duplicates","in":"query","description":"Collapse the same story filed by several outlets.","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"Ordering.","schema":{"type":"string","enum":["date","relevance"],"default":"date"}},{"name":"lang","in":"query","description":"Response language.","schema":{"type":"string","enum":["en","es"],"default":"en"}},{"name":"backfill","in":"query","description":"Matching stories to replay on connect, 0–50.","schema":{"type":"integer","default":10}},{"name":"interval","in":"query","description":"Seconds between polls of our store, 5–120.","schema":{"type":"integer","default":20}},{"name":"Last-Event-ID","in":"header","description":"Resume after this story id.","schema":{"type":"string"}}],"responses":{"200":{"description":"An event stream.","content":{"text/event-stream":{"schema":{"type":"string"}}}}}}},"/api/wire/article":{"get":{"tags":["Asher Wire"],"operationId":"getWireArticle","summary":"Fetch stories by id.","parameters":[{"name":"id","in":"query","description":"Article id, or up to 25 comma-separated.","schema":{"type":"string"},"required":true},{"name":"lang","in":"query","description":"Language.","schema":{"type":"string","enum":["en","es"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"article":{"$ref":"#/components/schemas/Article"},"articles":{"type":"array","items":{"$ref":"#/components/schemas/Article"}}}}}}},"404":{"description":"No story matched that id."}}}},"/api/wire/calendar":{"get":{"tags":["Asher Wire"],"operationId":"getWireCalendar","summary":"Economic calendar with forecast, previous and actual.","parameters":[{"name":"impact","in":"query","description":"Filter by impact.","schema":{"type":"string","enum":["high","medium","low"]}},{"name":"limit","in":"query","description":"Events to return.","schema":{"type":"integer","default":200}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"string"},"count":{"type":"integer"},"events":{"type":"array","items":{"type":"object"}}}}}}}}}},"/api/wire/stream":{"get":{"tags":["Asher Wire"],"operationId":"mintWireStream","summary":"Mint or inspect a stream token.","description":"Pass filters to mint a token; pass ?stream= to decode one back to the filters it holds. Tokens are stateless, never expire, and are not credentials.","parameters":[{"name":"stream","in":"query","description":"A saved filter set from /api/wire/stream. Explicit params below override it.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Free text across headline and summary.","schema":{"type":"string"}},{"name":"category","in":"query","description":"Comma-separated categories.","schema":{"type":"string","example":"crypto,markets"}},{"name":"not_category","in":"query","description":"Categories to exclude.","schema":{"type":"string"}},{"name":"sources","in":"query","description":"Publisher substring match, comma-separated.","schema":{"type":"string","example":"Reuters,CoinDesk"}},{"name":"not_sources","in":"query","description":"Publishers to exclude.","schema":{"type":"string"}},{"name":"assets","in":"query","description":"Assets named by a story signal — matches the label or the mapped ticker.","schema":{"type":"string","example":"BTC,oil"}},{"name":"bias","in":"query","description":"Comma-separated biases.","schema":{"type":"string","example":"bullish,mixed"}},{"name":"has_signal","in":"query","description":"Only stories carrying a signal (or only those without).","schema":{"type":"boolean"}},{"name":"lead_only","in":"query","description":"Lead stories only.","schema":{"type":"boolean"}},{"name":"since","in":"query","description":"ISO 8601 timestamp, or relative shorthand: 30m, 12h, 7d, 2w.","schema":{"type":"string","example":"12h"}},{"name":"until","in":"query","description":"ISO 8601 timestamp, or relative shorthand.","schema":{"type":"string"}},{"name":"exclude_duplicates","in":"query","description":"Collapse the same story filed by several outlets.","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"Ordering.","schema":{"type":"string","enum":["date","relevance"],"default":"date"}},{"name":"lang","in":"query","description":"Response language.","schema":{"type":"string","enum":["en","es"],"default":"en"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"stream":{"type":"string"},"describes":{"type":"string"},"filters":{"type":"object"},"urls":{"type":"object","properties":{"headlines":{"type":"string"},"signals":{"type":"string"}}},"curl":{"type":"string"}}}}}}}},"post":{"tags":["Asher Wire"],"operationId":"mintWireStreamJson","summary":"Mint a stream token from a JSON body.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"category":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"not_category":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"sources":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"not_sources":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"assets":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"bias":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"has_signal":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"lead_only":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"since":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"until":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"lang":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"sort":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"exclude_duplicates":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"interval":{"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}