RSS & Feed API
RSS & Feed API
/feed-gateway/v1/fetch1 creditFetch ONE feed URL (RSS 2.0/0.9x, RSS 1.0/RDF, Atom, JSON-Feed 1.1 — auto-detected) and normalise it into one clean JSON schema. Broken XML, HTML entities, encoding mess and truncated feeds are repaired automatically (recovery step reported in meta).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| url | required | — | Feed URL (RSS/Atom/JSON-Feed). Bare hosts get https:// prefixed. Private/internal/metadata targets are SSRF-blocked. |
| limit = 50 | optional | 1–100 | Max items returned (1-100, default 50). Out-of-range values are clamped, never rejected. |
| sort_by = feed_order | optional | feed_order · published · title · author | Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free. |
| sort_dir = desc | optional | desc · asc | Sort direction (applies when sort_by is not feed_order). |
| include_content = false | optional | — | Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text. |
| since | optional | — | Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z). |
| until | optional | — | Only items published at/before this date (ISO 8601). |
/feed-gateway/v1/discover1 creditFind the feeds of ANY website: parses <link rel=alternate> tags + visible anchor hints, then probes common feed paths at BOTH the host root (/feed, /rss.xml, /atom.xml, /index.xml, …) AND under the given path (e.g. /r/programming/.rss). Every candidate is fetched and VERIFIED as a real parseable feed before being returned — so it works even on sites that don't declare a feed link-tag.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| url | required | — | Website URL (homepage or any page). |
| probe = true | optional | — | Also probe common feed paths (/feed, /rss.xml, /atom.xml, …) beyond the page's declared link tags. |
| limit = 10 | optional | 1–20 | Max feeds returned (1-20, default 10). |
/feed-gateway/v1/merge1 creditMerge up to 10 feeds into ONE de-duplicated, date-sorted stream. Duplicates are detected on a canonical link key (tracking params stripped) falling back to guid/title. Each item carries its source_feed.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| urls | required | — | Feed URLs to merge (max 10). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call. |
| limit = 100 | optional | 1–200 | Max items returned (1-200, default 100). Out-of-range values are clamped, never rejected. |
| sort_dir = desc | optional | desc · asc | Sort direction (applies when sort_by is not feed_order). |
| dedup = true | optional | — | Remove duplicate stories across feeds (default true). |
| since | optional | — | Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z). |
| until | optional | — | Only items published at/before this date (ISO 8601). |
| include_content = false | optional | — | Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text. |
/feed-gateway/v1/search1 creditKeyword-filter feed items (like RSSHub filter / Feedly search, but no account). Searches title/summary/author/categories (and content_html when include_content=true); multi-word queries match any or all terms; exclude= drops unwanted items.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| url | optional | — | Single feed URL to search. (search needs url OR urls.) |
| urls | optional | — | Multiple feed URLs to search at once (max 10). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call. |
| query | optional | — | Keyword(s) to match, space-separated. Empty query + exclude acts as a pure exclusion filter. Case-insensitive substring match. |
| exclude | optional | — | Keyword(s) that DROP an item when present (RSSHub filter_out equivalent). |
| fields = title,summary | optional | title · summary · content · author · categories | Which item fields to match against (default title+summary). |
| match = any | optional | any · all | Multi-term combination mode. |
| limit = 50 | optional | 1–100 | Max items returned (1-100, default 50). Out-of-range values are clamped, never rejected. |
| sort_by = feed_order | optional | feed_order · published · title · author | Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free. |
| sort_dir = desc | optional | desc · asc | Sort direction (applies when sort_by is not feed_order). |
| include_content = false | optional | — | Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text. |
| since | optional | — | Only items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z). |
| until | optional | — | Only items published at/before this date (ISO 8601). |
/feed-gateway/v1/batch1 creditFetch up to 20 feeds in ONE call (concurrent, fault-isolated): each feed returns independently with its own ok/error — one dead feed never fails the batch.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| urls | required | — | Feed URLs to fetch (max 20). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call. |
| limit = 20 | optional | 1–100 | Max items returned (1-100, default 20). Out-of-range values are clamped, never rejected. |
| include_content = false | optional | — | Include the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text. |
| sort_by = feed_order | optional | feed_order · published · title · author | Item ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free. |
| sort_dir = desc | optional | desc · asc | Sort direction (applies when sort_by is not feed_order). |
curl -X POST https://api.reefapi.com/feed-gateway/v1/fetch \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"url":"https://feeds.bbci.co.uk/news/world/rss.xml","limit":10}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}