docs / feed-gateway

RSS & Feed API

RSS & Feed API

base /feed-gateway/v15 endpoints
post/feed-gateway/v1/fetch1 credit

Fetch 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).

ParameterAllowed / rangeDescription
urlrequiredFeed URL (RSS/Atom/JSON-Feed). Bare hosts get https:// prefixed. Private/internal/metadata targets are SSRF-blocked.
limit = 50optional1–100Max items returned (1-100, default 50). Out-of-range values are clamped, never rejected.
sort_by = feed_orderoptionalfeed_order · published · title · authorItem ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free.
sort_dir = descoptionaldesc · ascSort direction (applies when sort_by is not feed_order).
include_content = falseoptionalInclude the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.
sinceoptionalOnly items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z).
untiloptionalOnly items published at/before this date (ISO 8601).
Try in playground →
post/feed-gateway/v1/discover1 credit

Find 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.

ParameterAllowed / rangeDescription
urlrequiredWebsite URL (homepage or any page).
probe = trueoptionalAlso probe common feed paths (/feed, /rss.xml, /atom.xml, …) beyond the page's declared link tags.
limit = 10optional1–20Max feeds returned (1-20, default 10).
Try in playground →
post/feed-gateway/v1/merge1 credit

Merge 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.

ParameterAllowed / rangeDescription
urlsrequiredFeed URLs to merge (max 10). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call.
limit = 100optional1–200Max items returned (1-200, default 100). Out-of-range values are clamped, never rejected.
sort_dir = descoptionaldesc · ascSort direction (applies when sort_by is not feed_order).
dedup = trueoptionalRemove duplicate stories across feeds (default true).
sinceoptionalOnly items published at/after this date (ISO 8601, e.g. 2026-06-01 or 2026-06-01T12:00:00Z).
untiloptionalOnly items published at/before this date (ISO 8601).
include_content = falseoptionalInclude the raw item HTML body as content_html (capped 30 KB). Off by default: summary is always returned as clean plain text.
Try in playground →
post/feed-gateway/v1/batch1 credit

Fetch 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.

ParameterAllowed / rangeDescription
urlsrequiredFeed URLs to fetch (max 20). Each URL is independently SSRF-guarded and fetched concurrently; one bad feed never fails the whole call.
limit = 20optional1–100Max items returned (1-100, default 20). Out-of-range values are clamped, never rejected.
include_content = falseoptionalInclude 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_orderoptionalfeed_order · published · title · authorItem ordering. Competitors paywall sorting (rss2json needs an api_key for order_by) — here it is free.
sort_dir = descoptionaldesc · ascSort direction (applies when sort_by is not feed_order).
Try in playground →