Snag Watcher API https://watcher-api-staging.manwhas.shop

API reference

Errors

JSON
{
  "error": { "code": "burst_needs_date", "message": "A burst near release_date needs something that gives that date: a release_date condition or attribute, or a site that reports it.", "field": "schedule.burst.near" },
  "errors": [{ "code": "burst_needs_date", "message": "...", "field": "schedule.burst.near" }]
}

error is the first problem. On a 422, errors lists all of them, so you can fix a request in one pass. field is the path in your body.

Status codes

Statuscode
400bad_jsonThe body isn't JSON
401unauthorizedMissing, unknown or revoked key
403limit_reached1,000 active or paused watchers
404not_foundNo such watcher, or not yours
409watcher_finishedResuming a matched or expired watcher
409idempotency_conflictSame Idempotency-Key, different body
422see belowA rule failed
429rate_limitedOver 120 requests a minute. See Retry-After
500internalOur fault

Validation codes

Shape

code
invalid_requestA field is missing, misspelled or the wrong type
value_missingThe op needs a value
value_not_listin and not_in need a list
value_not_numberprice, price_drop and quantity need a number, "$20" or "10%"
value_not_dateDates look like 2026-12-15
value_unknownNot a status we know, for availability or release_status

Target and sites

code
match_query_shapeurl needs a full link on a listed site; sku needs an identifier
exact_needs_versionexact needs a version in the name; use line to follow every version
version_needs_lineversion conditions need match: line or category
site_unknownWe can't read that site
site_cant_matchThat site doesn't support the match mode
site_not_reviewedThe site's terms haven't been reviewed. Sites
site_terms_not_acceptedSet fetch.accept_site_terms for this site
field_unsupportedNone of the sites gives that field
target_fixedtarget can't be updated

Conditions

code
compare_to_needs_numericcompare_to works on price, price_drop, quantity, or availability with changed
percent_needs_compareA percentage needs compare_to
min_n_needs_nrequire: min_n needs n, no more than the values listed
over_needs_valuesover needs values: a size list, a date range or a listing
over_too_manyAt most 20 values under over
same_seller_needs_sitessame: seller needs two sites, or a site with several sellers

Location and schedule

code
zip_needs_usZIPs are US only
radius_needs_zipA radius needs a zip
radius_unreadableUse "25mi" or "40km"
currency_unsupportedUSD only
start_at_unreadablestart_at isn't a date
start_after_untilstart_at must be before until
until_unreadableA date, "+30d", "after_first_match" or "never"
until_in_pastuntil already passed
until_too_farAt most a year
burst_needs_dateA burst needs a date to center on
burst_faster_than_everyburst.every must be shorter than every

Notify and follow-ups

code
webhook_channel_without_configchannels has webhook but there's no notify.webhook
webhook_config_without_channelnotify.webhook is set but channels doesn't have webhook
webhook_needs_httpsWebhook URLs use https
channel_needs_sessionAPI keys use webhook
then_nestedA then can't hold another then
then_needs_single_matchthen needs until: after_first_match or aggregate: first