FeedForge

FeedForge API

A tiny REST API. Authenticate with a bearer token (grab it on the dashboard). Public feed output needs no auth — the unguessable feed id is the key.

Quickstart

Create a feed and poll it:

curl -X POST https://feedforge.aiskillhub.info/api/feeds \
  -H "authorization: Bearer $FEEDFORGE_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://news.ycombinator.com"}'
# → { "feed": { "id": "feed_…" }, "feedUrl": "https://feedforge.aiskillhub.info/api/f/feed_…" }
# poll the JSON Feed (1.1)
curl https://feedforge.aiskillhub.info/api/f/feed_xxx

# or RSS 2.0
curl "https://feedforge.aiskillhub.info/api/f/feed_xxx?format=rss"

Endpoints

POST/api/extract

Preview the feed a URL would produce. No auth, rate-limited. Body: { url }.

GET/api/feeds

List your feeds.

POST/api/feeds

Create a feed. Body: { url, title?, refreshSeconds?, webhookUrl? }.

GET/api/feeds/:id

Feed detail with items + recent runs.

PATCH/api/feeds/:id

Update refresh interval, webhook, status, or title.

DELETE/api/feeds/:id

Delete a feed.

POST/api/feeds/:id/refresh

Force an immediate refresh.

GET/api/f/:id

Public feed output. ?format=rss for RSS, default JSON Feed.

Webhooks (Pro)

Set webhookUrl on a feed and FeedForge POSTs you only the new items when something changes:

POST your-endpoint
{
  "event": "feed.updated",
  "feedId": "feed_xxx",
  "healed": false,
  "newItems": [
    { "guid": "…", "title": "…", "url": "…", "date": "2026-06-03T…Z" }
  ]
}

Self-healing

On every refresh FeedForge re-derives the extraction recipe from the live page. If the structure changed, the run is marked healed: true — your feed keeps flowing while brittle scrapers would have returned nothing.

Item shape

{
  "id": "stable-guid",
  "title": "string",
  "url": "https://…",
  "summary": "string",
  "image": "https://…",
  "date_published": "ISO 8601"
}