RSS API

RSS API and RSS-to-JSON architecture.

Turn mixed syndication formats into a stable developer-facing schema with guarded fetching, transparent warnings, cursor-based history, and explicit freshness.

RequestSource ID or guarded URL
ResponseCanonical JSON model
SyncOpaque history cursor
EvidenceFreshness and warnings
Contract first

A converter should explain every result.

Clients need to know what was requested, where it resolved, when it was observed, which format was parsed, and which fallbacks were applied.

1
Stable source resourceRegister recurring sources once and separate read traffic from controlled refresh work.
2
Versioned schemaDocument nullability, ordering, identity, date precedence, and update semantics.
3
Structured errorsDistinguish caller input, network failure, unsupported format, invalid content, and rate policy.
4
Snapshot freshnessReturn the last successful observation even when the publisher is temporarily unavailable.
GET /v1/sources/src_01J/items
{
  "source": {
    "id": "src_01J...",
    "format": "rss2",
    "fetched_at": "2026-10-23T18:42:12Z",
    "freshness": "current"
  },
  "items": [{
    "id": "itm_01J...",
    "title": "Release 4.8.0",
    "change_type": "created"
  }],
  "next_cursor": null
}
API surface

Keep resources small and composable.

Use separate endpoints for configuration, snapshots, history, refresh commands, and delivery state.

Entries

Stable internal ID, publisher identity, canonical link, content, dates, tags, attachments, and provenance.

Build the schema →

Changes

Cursor-ordered created, updated, or withdrawn events for incremental synchronization.

Design sync →

Errors

Stable codes, safe diagnostic context, request IDs, retry guidance, and no leaked internal network details.

Debug feeds →
RSS, Atom, and JSON Feed normalization illustration
Normalization

Do not flatten away provenance.

A canonical model should simplify client work while preserving enough original information to explain edge cases.

Store the source format, original identifiers, requested and resolved URLs, publisher dates, observation dates, extension data, and parser warnings. Keep a debug representation behind authorization rather than bloating every response.

Make every response replayable and explainable.

Use registered sources, immutable observations, deterministic adapters, stable cursors, and idempotent downstream events.

Discuss an API project