VOL. I · API v1
Better RSS API
Read your feeds, items, and briefs programmatically. Mark things read, star them, subscribe or unsubscribe. Pro or Ultra tier only.
Base URL
https://www.better-rss.com/api/v1Authentication
Every request sends a bearer token in the Authorization
header:
Authorization: Bearer brss_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Generate tokens from Settings → API. Each token has
read
and/or write scopes and an optional expiry (30d, 90d, 1y, or never). The raw token
is shown once on creation — save it immediately. Revoke any time from the same page.
Tokens belong to you. Don't share them. If one leaks, revoke it. Short-lived tokens are safer for scripts and one-off integrations.
How It Works
- Upgrade the account to Pro or Ultra.
- Open Settings → API and create a token.
- Pick
readfor list/sync clients, or addwritefor clients that mark items read, star items, subscribe, or unsubscribe. - Store the token in your app or script environment as a secret.
- Call
/api/v1/*with the bearer header shown above.
The API checks the token, token expiry, token scope, resource ownership, current Pro/Ultra
status, and daily API cap on every request. If the account leaves Pro or Ultra, existing
tokens stop working with 402 pro_required until API access is active again.
Quick Check
Use /me as a simple integration health check.
curl https://www.better-rss.com/api/v1/me \
-H "Authorization: Bearer $BRSS_TOKEN" {
"email": "<account-email>",
"tier": "pro",
"scopes": ["read", "write"]
}CORS
All /api/v1/* endpoints send
Access-Control-Allow-Origin: *, so browser apps can call them directly with
fetch(). The API uses bearer-token auth — no cookies are ever read — which is
why permissive CORS is safe.
Errors
JSON errors on non-2xx responses:
{
"error": {
"code": "invalid_token",
"message": "Token is invalid or revoked."
}
} 400— malformed request401— missing or bad token402— Pro or Ultra tier required403— token lacks the required scope404— resource not found or not yours429— rate limited500— something broke on our side
Endpoints
GET /me
Who am I? Useful for client health checks.
curl https://www.better-rss.com/api/v1/me \
-H "Authorization: Bearer $BRSS_TOKEN" GET /stats
Reading statistics for the authenticated Pro or Ultra account.
curl https://www.better-rss.com/api/v1/stats \
-H "Authorization: Bearer $BRSS_TOKEN" GET /items
List items from your subscribed feeds. Newest first.
Query params:
feed_id— restrict to one feedunread=true— only unread itemsstarred=true— only starred itemssince— ISO 8601 date; items published after thislimit— 1-100, default 50offset— pagination
curl "https://www.better-rss.com/api/v1/items?unread=true&limit=25" \
-H "Authorization: Bearer $BRSS_TOKEN" POST /items/:id/read
Mark an item read or unread. Scope: write.
curl -X POST "https://www.better-rss.com/api/v1/items/$ID/read" \
-H "Authorization: Bearer $BRSS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"read": true}' POST /items/:id/star
Star or unstar an item. Scope: write.
curl -X POST "https://www.better-rss.com/api/v1/items/$ID/star" \
-H "Authorization: Bearer $BRSS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"starred": true}' GET /feeds
List your subscriptions.
curl https://www.better-rss.com/api/v1/feeds \
-H "Authorization: Bearer $BRSS_TOKEN" POST /feeds/subscribe
Subscribe to a new feed. Returns the existing subscription if you're already subscribed.
Scope: write.
curl -X POST https://www.better-rss.com/api/v1/feeds/subscribe \
-H "Authorization: Bearer $BRSS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/feed.xml", "tag": "tech"}' DELETE /feeds/:id
Unsubscribe. Scope: write.
curl -X DELETE "https://www.better-rss.com/api/v1/feeds/$FEED_ID" \
-H "Authorization: Bearer $BRSS_TOKEN" GET /briefs
List your AI-generated briefs. Newest first.
curl "https://www.better-rss.com/api/v1/briefs?limit=10" \
-H "Authorization: Bearer $BRSS_TOKEN" GET /briefs/:id
Full brief, including the markdown body.
curl "https://www.better-rss.com/api/v1/briefs/$BRIEF_ID" \
-H "Authorization: Bearer $BRSS_TOKEN"Stability
This is v1. If a field changes shape or a resource moves, we'll do it under /api/v2. v1 stays as-is.