Feeds API
Feeds are the content sources in your Repurai workspace — blogs, newsletters, YouTube channels, and more. Use these endpoints to list, inspect, delete, and refresh your subscriptions.
The feed model
- Name
id- Type
- string
- Description
Unique identifier for the feed.
- Name
lastFetchedAt- Type
- timestamp
- Description
When the feed was last checked for new posts.
- Name
categoryId- Type
- string
- Description
The category this feed is assigned to.
- Name
title- Type
- string
- Description
The title of the feed subscription.
- Name
userlink- Type
- string
- Description
The user-facing homepage URL of the feed source.
- Name
description- Type
- string
- Description
A short summary or description of the feed content.
- Name
favicon- Type
- string
- Description
URL of the feed's favicon icon asset.
- Name
isLocked- Type
- boolean
- Description
truewhen the feed sits beyond your plan's feed limit. Locked feeds stay in your workspace and are still listed, but their posts are not returned and they are not refreshed. Returned byGET /api/v1/feedsonly.
List all feeds
Returns all feeds in your workspace.
Request
curl https://repurai.com/api/v1/feeds \
-H "Authorization: Bearer [API_Key]"
Response
success
{
"data": [
{
"id": "2b3528dc-d64b...",
"lastFetchedAt": "2026-05-19T13:06:49.016Z",
"categoryId": "b3c8f77e-cd66...",
"title": "AI Engineer",
"userlink": "https://www.youtube.com/@aiDotEngineer",
"description": "Discover insights and updates from this source.",
"favicon": "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.youtube.com/@aiDotEngineer&size=256",
"isLocked": false
}
]
}
Get a feed
Returns the details of a single feed.
Request
curl https://repurai.com/api/v1/feeds/[feedId] \
-H "Authorization: Bearer [API_Key]"
Response
success
{
"id": "2b3528dc-d64b...",
"lastFetchedAt": "2026-05-19T13:06:49.016Z",
"categoryId": "b3c8f77e-cd66...",
"title": "AI Engineer",
"userlink": "https://www.youtube.com/@aiDotEngineer",
"description": "Discover insights and updates from this source.",
"favicon": "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.youtube.com/@aiDotEngineer&size=256"
}
Get feed posts
Returns the paginated list of posts for a single feed, along with feed metadata.
Query parameters
- Name
page- Type
- integer
- Description
The page number to retrieve. Defaults to
1.
- Name
pageSize- Type
- integer
- Description
The number of items to return per page. Defaults to
20.
Request
curl "https://repurai.com/api/v1/feeds/[feedId]/posts?page=1&pageSize=20" \
-H "Authorization: Bearer [API_Key]"
Response
success
{
"feedInfo": {
"id": "2b3528dc-d64b...",
"lastFetchedAt": "2026-05-19T13:06:49.016Z",
"categoryId": "b3c8f77e-cd66...",
"title": "AI Engineer",
"userlink": "https://www.youtube.com/@aiDotEngineer",
"description": "Discover insights and updates from this source.",
"favicon": "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.youtube.com/@aiDotEngineer&size=256"
},
"data": [
{
"id": "f3c97a43-22c9...",
"title": "Rewiring the State — Eoin Mulgrew, 10 Downing Street",
"link": "https://www.youtube.com/watch?v=ObNKGf9YR0g",
"smallDescription": "The cabinet office was about to spend one and a half million pounds on an outside law firm...",
"largeDescription": "The cabinet office was about to spend one and a half million pounds on an outside law firm to analyze the UK statute book. One engineer embedded with the in-house legal team for two weeks instead...",
"publishedDate": "2026-05-18T17:00:06.000Z",
"thumbnailUrl": "https://i4.ytimg.com/vi/ObNKGf9YR0g/maxresdefault.jpg",
"authoruri": "https://www.youtube.com/channel/UCLKPca3kwwd-B59HNr-_lvA",
"authorname": "AI Engineer",
"enclouserurl": null,
"enclousertype": null,
"views": 246,
"isReadLater": false,
"transcript": "[music]\n>> Good to go? Can people hear me okay?...",
"summary": null,
"createdAt": "2026-05-18T19:02:49.424Z",
"updatedAt": "2026-05-19T16:04:18.376Z"
}
],
"page": 1,
"pageSize": 20,
"hasMore": false
}
Refresh a feed
Fetches the source again and stores any posts you do not already have.
Each feed can be refreshed once an hour. Inside that window the call still succeeds, but reports
0 new items rather than hitting the source again.
If the source cannot be reached or parsed, the response is a 502 — the failure is at the
publisher's end, not ours.
Request
curl -X POST https://repurai.com/api/v1/feeds/2b3528dc-d64b/refresh \
-H "Authorization: Bearer [API_Key]"
Response
success
{
"success": true,
"message": "Refreshed. 3 new item(s) found.",
"data": { "newItems": 3 }
}
Refresh all feeds
Refreshes every feed in your workspace in one call.
On-demand full sync requires a Pro plan or higher. Lower tiers get a 403.
Feeds refreshed within the last hour are skipped. The sweep works in batches within a time
budget, so a very large workspace may need a second call to finish — compare feedsRefreshed
against your feed count.
Request
curl -X POST https://repurai.com/api/v1/feeds/refresh \
-H "Authorization: Bearer [API_Key]"
Response
success
{
"success": true,
"message": "Sync completed: 12 new items found across 8 feeds.",
"data": { "totalNewItems": 12, "feedsRefreshed": 8 }
}