Update or pause a feed subscription
const url = 'https://api-v1.tailwind.ai/v1/feeds/example';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"status":"active","keywords":["example"],"designTier":"basic","premiumStyle":"image-highlight","generationFrequency":"every-3-days","autoRegenerate":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api-v1.tailwind.ai/v1/feeds/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "status": "active", "keywords": [ "example" ], "designTier": "basic", "premiumStyle": "image-highlight", "generationFrequency": "every-3-days", "autoRegenerate": true }'Change the defaults applied to Pins this feed generates, or pause and resume it with status.
Pausing preserves the subscription, but the watcher does not poll a paused feed, so its record of already-seen posts stops advancing. Anything the site publishes during the pause therefore counts as new when you resume, and will generate Pins (up to 25 per feed per daily run) until the backlog clears. To stop a feed permanently without that catch-up, delete it instead.
Resuming re-checks the feed’s Pinterest account and is refused with 400 if it is no longer connected, since the watcher would skip the feed and generate nothing. Pausing, editing and deleting are always allowed, which is what you need when an account has gone away.
At least one field is required. The Pinterest account a feed is assigned to cannot be changed.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Feed ID, from list-feeds or connect-feed
Request Bodyrequired
Section titled “Request Bodyrequired”At least one field is required. Unknown fields are rejected rather than ignored.
object
Pause or resume the watcher. Resuming backfills posts published during the pause; see the operation description.
Send null when moving off the premium tier, so the stored style is cleared.
Responses
Section titled “Responses”The updated feed subscription
object
object
A connected RSS feed subscription.
object
Feed ID. Pass to get-feed, update-feed, delete-feed.
Pinterest account the generated Pins are assigned to.
The feed’s own title, when it declares one.
Keywords applied to every Pin this feed generates.
Design treatment for generated Pins. template-match is readable but cannot be set through this API — it is not generally available.
Set only on the premium tier; null otherwise.
How often a generated Pin is redesigned, when autoRegenerate is on. Not how often the feed is checked — that is daily.
Whether generated Pins are periodically redesigned.
A paused feed generates nothing, but is also not polled — so posts published while it is paused are treated as new on resume.
ISO 8601 timestamp of the last watcher run over this feed, or null if it has not run yet.
Why the last poll failed, or null. A feed that keeps failing here is usually unreachable rather than empty.
SmartPins generated from this feed so far.
ISO 8601
ISO 8601
object
Unique request ID for debugging
Example
{ "data": { "feed": { "designTier": "basic", "premiumStyle": "image-highlight", "generationFrequency": "every-3-days", "status": "active" } }}Invalid request
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "BAD_REQUEST", "message": "Invalid request body" }, "meta": { "requestId": "abc123" }}Authentication required or invalid bearer credentials
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" }, "meta": { "requestId": "abc123" }}Resource not found
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "NOT_FOUND", "message": "Account not found" }, "meta": { "requestId": "abc123" }}Rate limit exceeded
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}