Skip to content

Update or pause a feed subscription

PATCH
/v1/feeds/{feedId}
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.

feedId
required
string

Feed ID, from list-feeds or connect-feed

Media typeapplication/json

At least one field is required. Unknown fields are rejected rather than ignored.

object
status

Pause or resume the watcher. Resuming backfills posts published during the pause; see the operation description.

string
Allowed values: active paused
keywords
Array<string>
<= 50 items
designTier
string
Allowed values: basic premium no-template
premiumStyle

Send null when moving off the premium tier, so the stored style is cleared.

string
nullable
Allowed values: image-highlight text-highlight minimalist artistic professional natural
generationFrequency
string
Allowed values: every-3-days weekly every-2-weeks monthly
autoRegenerate
boolean

The updated feed subscription

Media typeapplication/json
object
data
object
feed

A connected RSS feed subscription.

object
id
required

Feed ID. Pass to get-feed, update-feed, delete-feed.

string
accountId
required

Pinterest account the generated Pins are assigned to.

string
feedUrl
required
string
hostname
required
string
title
required

The feed’s own title, when it declares one.

string
nullable
keywords
required

Keywords applied to every Pin this feed generates.

Array<string>
designTier
required

Design treatment for generated Pins. template-match is readable but cannot be set through this API — it is not generally available.

string
Allowed values: basic premium no-template template-match
premiumStyle
required

Set only on the premium tier; null otherwise.

string
nullable
Allowed values: image-highlight text-highlight minimalist artistic professional natural
generationFrequency
required

How often a generated Pin is redesigned, when autoRegenerate is on. Not how often the feed is checked — that is daily.

string
Allowed values: every-3-days weekly every-2-weeks monthly
autoRegenerate
required

Whether generated Pins are periodically redesigned.

boolean
status
required

A paused feed generates nothing, but is also not polled — so posts published while it is paused are treated as new on resume.

string
Allowed values: active paused
lastPolledAt
required

ISO 8601 timestamp of the last watcher run over this feed, or null if it has not run yet.

string
nullable
lastFailureReason
required

Why the last poll failed, or null. A feed that keeps failing here is usually unreachable rather than empty.

string
nullable
smartPinCount
required

SmartPins generated from this feed so far.

number
createdAt
required

ISO 8601

string
updatedAt
required

ISO 8601

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"data": {
"feed": {
"designTier": "basic",
"premiumStyle": "image-highlight",
"generationFrequency": "every-3-days",
"status": "active"
}
}
}

Invalid request

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

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.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request body"
},
"meta": {
"requestId": "abc123"
}
}

Authentication required or invalid bearer credentials

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

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.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
},
"meta": {
"requestId": "abc123"
}
}

Resource not found

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

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.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "NOT_FOUND",
"message": "Account not found"
},
"meta": {
"requestId": "abc123"
}
}

Rate limit exceeded

Media typeapplication/json
object
error
object
code

Error code

string
message

Error message

string
reason

Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.

string
resolve_url

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.

string
meta
object
requestId

Unique request ID for debugging

string
Example
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC."
},
"meta": {
"requestId": "abc123"
}
}