Skip to main content
Modify an existing Reddit watchlist without losing its ID or collected posts. Every field is optional, send only the properties you want to change.
Platform: Reddit. This endpoint updates Reddit watchlists only. LinkedIn keyword watchlists are updated with PUT /api-keyword-watchlist (same body shape). See Choose a watchlist type.
Disabled watchlists reject updates. If the watchlist is paused (disabled: true on GET), any PUT except an explicit re-enable returns 409 This watchlist is disabled. Enable it before updating it. Re-enable first with { "id": "...", "disable": false }, then apply your changes.The exception is patch mode only. A prompt-mode PUT is refused even when it is sent alongside disable: false, because prompt mode does not read disable. Re-enable in its own call, then send the new prompt.
The endpoint accepts two body shapes. Either patch fields (documented below) or send a new prompt to have OutX regenerate the entire keyword set in the background (Prompt mode at the bottom of this page).
Extension requirement. Like all /api-reddit-watchlist methods, updates require the team’s OutX Chrome extension to be installed and active, otherwise the request returns 403 Plugin installation required.

Request Body (patch mode)

string
required
Watchlist ID to update.
string
New watchlist name.
number
New fetch frequency. Allowed values: 1, 3, 6, 12, 24, 48, 72.
array
Patch the tracked keywords on the watchlist. Accepts the same shape as the Create endpoint, simple strings or advanced keyword objects with required_keywords, excluded_keywords (NOT), and include_all_required (AND vs OR over the required keywords).Simple format:
Advanced format:
By default this replaces the set: the watchlist’s existing keywords are deleted and recreated from the new list, along with the collection task for each keyword (set append: true to add instead). Updating keywords does not change existing labels. Omit the field to leave keywords untouched.
boolean
default:"false"
When true, the supplied keywords are added to the existing set instead of replacing it. Existing keyword tracking rows and tasks are kept, and only keywords whose primary keyword is not already on the list (case-insensitive) are created. Labels are left untouched unless labels is also provided.
array
Replace the custom labels on the watchlist. Same shape as Create: each label is a name (or key, so a GET response can be echoed back), a description, and an optional default flag marking it as a pre-applied feed filter (at most 2 true; if you set the flag on some labels but mark none true, the first is promoted). This is also how you change which labels are default: send the full array with the default booleans you want. See Intent labels & defaults.
Labels are only changed when this field is sent, and sending it replaces the entire set (start from the current GET output; omitted labels are dropped). Updating keywords alone leaves your existing labels untouched, so a keyword edit will never wipe a hand-built label set. Omit labels to leave them as they are.
boolean
Set to true to pause tracking, false to resume. Pausing stops every collection task on the watchlist and flips disabled to true on the type’s GET endpoint, with disabledAt carrying the timestamp on the list response.
string | null
Update or clear the Slack webhook URL for this watchlist. Pass null to clear.

Semantics

  • Keyword replacement is wipe-and-recreate (default). Existing keyword_tracking rows and the collection task for each keyword are deleted, then new ones are created from the payload. Posts already collected are not deleted, they remain attached to the watchlist and visible via the Posts API.
  • Append mode keeps what you have. With append: true, existing keywords and tasks are kept and only the new, not-yet-present primary keywords are added.
  • Labels are preserved unless you send labels. Updating keywords alone never overwrites existing labels. To change labels, pass a labels array.
  • Keyword replacement only deletes the collection task for each keyword. Other work running on the same watchlist is not removed by a keyword update. (disable is broader: pausing or resuming a watchlist applies to all of its tasks regardless of type.)
  • Partial updates are safe. Sending only { "id": "...", "name": "new name" } changes just the name; keywords, labels, and tasks are untouched.

Response Fields

string
Watchlist ID that was updated.
string
Updated watchlist name (only present when name was in the request).
number
Updated fetch frequency (only present when fetchFreqInHours was in the request).
boolean
Current active/disabled status (only present when disable was in the request).
array
Array of primary keywords after the update (only present when keywords was in the request).
array
Per-keyword creation result (only present when keywords was in the request). Each entry has success, keyword, and either keyword_id or error.
array
Labels persisted on the watchlist (only present when labels or keywords was in the request).
boolean
Whether the update was successful.
string
Success message.

Error Responses

See Error Codes for the full list.

Prompt mode

Replace the prompt on an existing Reddit watchlist. OutX wipes the existing keywords and labels and regenerates them from the new prompt in the background. Use this when you want to redirect a watchlist to a different angle without recreating it.
If you send prompt together with patch fields (name, keywords, labels, disable, fetchFreqInHours, slack_webhook_url), the patch fields are silently ignored, prompt takes precedence. Unlike create (POST), update does not return an error when both are sent.

Request Body

string
required
Watchlist ID to update.
string
required
New natural-language prompt. OutX regenerates keywords and labels from this, replacing the current set.

What is kept and what is replaced

The prompt path is not a patch. It throws away the current keyword set and label set and builds new ones from the new prompt. You cannot change one keyword through the prompt path. Use the keywords field for that (replace by default, or add with append: true). The response confirms only that regeneration started. It carries no keywords and no labels, because they have not been generated yet. There is no completion flag to poll. The old keywords stay in place while the new set is generated, so “keywords is not empty” is true the whole time and tells you nothing. The reliable check:
  1. Before the PUT, call GET /api-reddit-watchlist?id=… and keep the keyword_tracking[].id values.
  2. After the PUT, poll the same call until every id in the response is one you did not see in step 1.
  3. Keep polling until the number of keyword_tracking entries is the same in two consecutive responses. The rows are created one at a time, so a settled count is what says the swap finished.
A prompt-mode update does not backfill. The new keywords start collecting on the next fetch cycle. Reddit watchlists never backfill, on create or on update, so a keywords patch does not refill the feed either. Every Reddit feed fills from its next fetch cycle onward.
The replacement prompt is checked before anything is touched, the same check that runs on create. A prompt that cannot produce a usable feed is refused with 422 prompt_not_specific_enough and the watchlist is left exactly as it was, so a bad prompt can never wipe a working watchlist. When the refusal body carries a question, relay it to your user word for word and retry with their answer. Full contract: When a prompt is refused.

Frequently Asked Questions

name, fetchFreqInHours, keywords, labels, disable, and slack_webhook_url, any combination. Every field except id is optional; unspecified fields are left unchanged.
When you pass a keywords array, the API deletes the watchlist’s existing keyword_tracking rows and the collection task for each keyword, then creates new ones from your payload. The watchlist ID stays the same, and previously collected posts remain accessible via the Posts API.
No. Changing the name, fetch frequency, keywords, or labels does not delete posts that have already been collected. If you update fetchFreqInHours, the new interval takes effect from the next scheduled fetch cycle.
Yes. Send only id and labels. The existing keywords and their tasks are untouched.
No. Each post is classified into a label once, when it is first enriched, so updating or adding labels only changes how future posts are classified, already-classified posts keep their tags. See how intent labels are calculated.