---
title: "Update an RSS feed"
method: PATCH
path: "/rss-feeds/{id}"
tags: ["RSS feeds"]
---

# Update an RSS feed

`PATCH /rss-feeds/{id}`

## Request

- Base URL: `https://post.adaptlypost.com/post/api/v1`
- URL: `https://post.adaptlypost.com/post/api/v1/rss-feeds/{id}`
- Auth: HTTP bearer

Changes only the fields sent. The URL cannot change. The feed then posts as the key's member, so the key needs the permission of the resulting post mode, plus `posts.others` when someone else set the feed up. Requires the `posts.draft` permission.

## Path parameters

- `id` string, required

## Headers

- `X-Workspace-Id` string

## Request body

- UpdateRssFeedRequest
  - `name` string: Defaults to the feed's title
  - `targets` RssFeedTarget[]
    - `platform` 'FACEBOOK' | 'INSTAGRAM' | 'THREADS' | 'TWITTER' | 'BLUESKY' | 'LINKEDIN' | 'MASTODON' | 'TELEGRAM' | 'GOOGLE_BUSINESS', required
    - `connectionId` string, required: Account ID from `GET /social-accounts`
    - `pageId` string: Facebook page ID. Required for FACEBOOK
    - `displayName` string
  - `postMode` 'DRAFT' | 'SCHEDULE' | 'PUBLISH': DRAFT creates a draft and needs `posts.draft`; SCHEDULE schedules the post `publishDelayMinutes` after the item is found and needs `posts.schedule`; PUBLISH publishes it right away and needs `posts.publish`
  - `publishDelayMinutes` integer: Required when `postMode` is SCHEDULE
  - `contentMode` 'TEMPLATE' | 'AI': TEMPLATE fills `template`; AI writes one caption per platform from the article, appends the link, spends 1 AI credit per platform per item and needs `ai.generate`
  - `template` string: Post text with `{title}`, `{link}`, `{description}`, `{author}` and `{feed}`. The description, then the title, is shortened to fit each platform; the link is never cut
  - `aiInstructions` string: Extra instructions for AI captions
  - `includeImage` boolean: Attach the item's image, or the article's preview image
  - `twitterKeepLinks` boolean: Keep links in X posts clickable. Lifetime-deal plans only; each X post with a link then costs more credits. Without it, links on X go out as plain text
  - `includeKeywords` string[]: Post only items whose title or summary contains one of these
  - `excludeKeywords` string[]: Skip items whose title or summary contains one of these
  - `maxPostsPerCheck` integer: New items are posted oldest first; the rest wait for the next check
  - `checkIntervalMinutes` 15 | 30 | 60 | 180 | 360 | 720 | 1440

## Response `200`

The updated RSS feed

- RssFeed
  - `id` string
  - `userId` string: Member the feed posts as: whoever last saved it
  - `accountGroupId` string
  - `name` string
  - `url` string
  - `siteUrl` string
  - `status` 'ACTIVE' | 'PAUSED'
  - `pauseReason` 'USER' | 'FETCH_FAILURES' | 'CONSECUTIVE_FAILURES' | 'ACCESS_LOST' | 'SUBSCRIPTION_INACTIVE' | 'CONNECTION_REMOVED': Why the feed stopped: USER (paused by hand), FETCH_FAILURES (5 failed fetches in a row), CONSECUTIVE_FAILURES (3 items in a row failed to post), ACCESS_LOST (its owner lost the permission its post mode needs), SUBSCRIPTION_INACTIVE (the plan no longer covers publishing) or CONNECTION_REMOVED (every target account was disconnected)
  - `lastError` string
  - `postMode` 'DRAFT' | 'SCHEDULE' | 'PUBLISH': DRAFT creates a draft and needs `posts.draft`; SCHEDULE schedules the post `publishDelayMinutes` after the item is found and needs `posts.schedule`; PUBLISH publishes it right away and needs `posts.publish`
  - `publishDelayMinutes` integer
  - `contentMode` 'TEMPLATE' | 'AI': TEMPLATE fills `template`; AI writes one caption per platform from the article, appends the link, spends 1 AI credit per platform per item and needs `ai.generate`
  - `template` string
  - `aiInstructions` string
  - `includeImage` boolean
  - `twitterKeepLinks` boolean
  - `includeKeywords` string[]
  - `excludeKeywords` string[]
  - `maxPostsPerCheck` integer
  - `checkIntervalMinutes` integer
  - `targets` RssFeedTarget[]
    - `platform` 'FACEBOOK' | 'INSTAGRAM' | 'THREADS' | 'TWITTER' | 'BLUESKY' | 'LINKEDIN' | 'MASTODON' | 'TELEGRAM' | 'GOOGLE_BUSINESS', required
    - `connectionId` string, required: Account ID from `GET /social-accounts`
    - `pageId` string: Facebook page ID. Required for FACEBOOK
    - `displayName` string
  - `nextCheckAt` string, date-time
  - `lastCheckedAt` string, date-time
  - `lastPostedAt` string, date-time
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Other responses

- `400`: Invalid settings
- `401`: Invalid or missing API key
- `403`: The key's role does not hold `posts.draft`
- `404`: RSS feed not found
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/adaptlypost/apis/adaptlypost-public-api.md) · [All operations](https://skmtc.dev/adaptlypost/apis/adaptlypost-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adaptlypost/apis/adaptlypost-public-api/revisions/8390a5fa9a0d?raw)
