---
title: "Get News Sources"
method: GET
path: "/api/v1/news/sources"
tags: ["Market-Moving News"]
---

# Get News Sources

`GET /api/v1/news/sources`

## Request

- Base URL: `https://cryptodataapi.com`
- URL: `https://cryptodataapi.com/api/v1/news/sources`
- Auth: API key in header `X-API-Key`

Per-feed health, the funnel counts, and the published coverage gap.

`sources[].not_modified` distinguishes "answered 304, nothing new" from
"dead" — both look like zero fresh items otherwise, which is how a silently
broken feed hides.

`funnel_24h` is hourly counts only (`ingested`, `dropped_noise`,
`dropped_no_catalyst`, `dropped_no_entity`, `dropped_below_threshold`,
`qualified`) with no titles or URLs. It exists so the filter can be seen over-tightening and swallowing
real catalysts, without keeping a news archive to check against.

`unresolvable` lists active perps whose ticker is a common English word and
which have no safe project name — they can only ever be matched by a cashtag.
Published as a field rather than left as a silent blind spot.

## Response `200`

Successful Response

- NewsSourcesResponse: Feed health plus the published coverage gap. ``unresolvable`` lists active perps with no safe project name and an ambiguous ticker — nothing short of a cashtag can match them. It is a field rather than a silent blind spot on purpose.
  - `sources` object[], required
  - `universe_size` integer, required
  - `project_feed_symbols` string[], required
  - `unresolvable` string[], required
  - `missing_names` string[], required
  - `impact_threshold` number, required
  - `funnel_24h` object[], required
  - `store` object, required
  - `last_refresh` string, nullable

---

[API](https://skmtc.dev/cryptodataapi/apis/crypto-data-api.md) · [All operations](https://skmtc.dev/cryptodataapi/apis/crypto-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cryptodataapi/apis/crypto-data-api/revisions/8628b754ca81?raw)
