{"openapi":"3.1.0","info":{"title":"Monity Network API","version":"1.0.0","description":"Read the public Monity Network: watches people publish, the changes they catch (with evidence), watchlists and hunters, and \"what changed on a site since a date\". Everything here is what the public Network pages show; nothing private. Authenticate with an account API key (Account → Integrations): `Authorization: Bearer mk_live_…` or `X-Api-Key`. Every key can read the Network."},"servers":[{"url":"https://api.monity.ai"}],"security":[{"bearer":[]},{"apiKey":[]}],"paths":{"/api/v1/network/search":{"get":{"summary":"Search watches, watchlists and hunters","parameters":[{"name":"q","in":"query","required":false,"description":"Words, or a page address.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"all | watches | watchlists | hunters","schema":{"type":"string","enum":["all","watches","watchlists","hunters"]}},{"name":"limit","in":"query","required":false,"description":"Per type (1–50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResults"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/changes":{"get":{"summary":"What changed, newest first: on a site, in a watchlist or on a watch, since a date","parameters":[{"name":"domain","in":"query","required":false,"description":"A site, e.g. nike.com (www. is the same site).","schema":{"type":"string"}},{"name":"watchlist","in":"query","required":false,"description":"A watchlist slug or id.","schema":{"type":"string"}},{"name":"watch","in":"query","required":false,"description":"A watch slug or id.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"ISO 8601 date or time.","schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","required":false,"description":"From the previous page's nextCursor.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page (1–50, default 20).","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["items","nextCursor"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Update"}},"nextCursor":{"type":["string","null"],"description":"Pass back as `cursor` for the next page; null at the end."}}}}}},"400":{"description":"Give one of domain, watchlist or watch; since must be a date."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/records":{"get":{"summary":"Structured change records (schema monity.network.change/1) for one page, site or watch, newest first","parameters":[{"name":"page","in":"query","required":false,"description":"A page address in any form (www., tracking parameters and a trailing slash do not matter) or a page id (pg_…).","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Every page on a site, e.g. nike.com.","schema":{"type":"string"}},{"name":"watch","in":"query","required":false,"description":"A watch slug or id.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"From this ISO 8601 date or time.","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Before this ISO 8601 date or time.","schema":{"type":"string","format":"date-time"}},{"name":"kind","in":"query","required":false,"description":"CHANGED | AVAILABLE | UNAVAILABLE | PRICE_CHANGED | CONDITION_MET","schema":{"type":"string"}},{"name":"origin","in":"query","required":false,"description":"DETECTED (Monity saw it, with evidence) | HUNTER (posted by the hunter)","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"json (default) or ndjson (one record per line; the next cursor is in X-Next-Cursor)","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"From the previous page's nextCursor.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page (1–50, default 20).","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"schema":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ChangeRecord"}},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Give exactly one of page, site or watch; dates must be dates."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watches/{ref}":{"get":{"summary":"A watch","parameters":[{"name":"ref","in":"path","required":true,"description":"Watch slug or id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Watch"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watches/{ref}/updates":{"get":{"summary":"A watch's changes, newest first, with evidence","parameters":[{"name":"ref","in":"path","required":true,"description":"Watch slug or id.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"From the previous page's nextCursor.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page (1–50, default 20).","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["items","nextCursor"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Update"}},"nextCursor":{"type":["string","null"],"description":"Pass back as `cursor` for the next page; null at the end."}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/updates/{publicId}":{"get":{"summary":"One change, with its evidence","parameters":[{"name":"publicId","in":"path","required":true,"description":"The change id (publicId of an Update).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Update"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/starter-packs":{"get":{"summary":"Curated starter packs: watchlists to follow first, most followed first","parameters":[{"name":"category","in":"query","required":false,"description":"Only this topic, e.g. deals.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1–24 (default 12).","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Watchlist"}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watchlists/{ref}":{"get":{"summary":"A public watchlist and its watches","parameters":[{"name":"ref","in":"path","required":true,"description":"Watchlist slug or id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Watchlist"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/hunters/{handle}":{"get":{"summary":"A hunter and their watches","parameters":[{"name":"handle","in":"path","required":true,"description":"The @handle, without @.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hunter"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/summaries":{"get":{"summary":"A short AI summary of what changed on a watch, watchlist or site over the last days, every sentence citing a change record; text is null when nothing changed or nothing grounded could be said","parameters":[{"name":"watch","in":"query","required":false,"description":"Watch slug or id.","schema":{"type":"string"}},{"name":"watchlist","in":"query","required":false,"description":"Watchlist slug or id.","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"A site, e.g. notion.so.","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"1–90 (default 7).","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":["string","null"]},"citations":{"type":"array"},"changes":{"type":"integer"},"since":{"type":"string"}}}}}},"400":{"description":"Give exactly one of watch, watchlist or site."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/products/{ref}":{"get":{"summary":"One product at every store that confirmed it (by a product code or a hunter): each store's watch, latest value and availability, how many stores have it, and the cheapest when every price uses the same currency. Not found with fewer than two public stores.","parameters":[{"name":"ref","in":"path","required":true,"description":"A change record's thing.id, or a watch slug or id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"publicId":{"type":"string"},"title":{"type":"string"},"availableAt":{"type":"integer"},"cheapest":{"type":["object","null"],"properties":{"host":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}}},"members":{"type":"array","items":{"type":"object","properties":{"watch":{"type":"object","properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"host":{"type":"string"}}},"latestValue":{"type":["string","null"]},"price":{"type":["number","null"]},"availability":{"type":["string","null"],"enum":["AVAILABLE","UNAVAILABLE",null]},"state":{"type":"string","enum":["CONFIRMED"]},"source":{"type":"string"}}}}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/ask":{"post":{"summary":"Ask Network: a question in plain words, answered only from public change records, each claim numbered to its change (citations). No coverage: says so, with a link to request a watch.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","maxLength":300}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"answer":{"type":"string"},"citations":{"type":"array","items":{"type":"object","properties":{"n":{"type":"integer"},"record":{"$ref":"#/components/schemas/ChangeRecord"}}}},"noCoverage":{"type":"boolean"},"requestUrl":{"type":["string","null"]},"mode":{"type":"string","enum":["AI","LIST","NONE"]},"coverage":{"type":"object"}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/follows":{"get":{"summary":"The watches the key's owner follows, with their alert settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}},"post":{"summary":"Follow a watch, watchlist or hunter as the key's owner (write scope), optionally with a personal condition on a watch","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ref"],"properties":{"targetType":{"type":"string","enum":["WATCH","WATCHLIST","HUNTER"],"default":"WATCH"},"ref":{"type":"string"},"condition":{"$ref":"#/components/schemas/Condition"}}}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/follows/{targetType}/{ref}":{"delete":{"summary":"Unfollow (write scope)","parameters":[{"name":"targetType","in":"path","required":true,"description":"WATCH, WATCHLIST or HUNTER.","schema":{"type":"string"}},{"name":"ref","in":"path","required":true,"description":"Slug, id or handle.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watches/{ref}/condition":{"put":{"summary":"The key owner's own condition on a watch (write scope): which of its changes alert them. An empty body means every change.","parameters":[{"name":"ref","in":"path","required":true,"description":"Watch slug or id.","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Condition"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"condition":{"type":["object","null"]},"words":{"type":["string","null"]}}}}}},"400":{"description":"Not a usable condition, or plain words that could not be turned into one."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/reuse/match":{"post":{"summary":"Before creating a monitor: public watches that already check this page the same way (follow one instead), and ones that check it differently","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["websiteUrl"],"properties":{"websiteUrl":{"type":"string"},"compareType":{"type":"string"},"keywords":{"type":"string"},"keywordsAction":{"type":"string"},"notifyConditions":{"type":"string"},"notifyConditionsEnabled":{"type":"boolean"},"crop":{"type":"object"},"compareDomElement":{"type":"object"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"shareable":{"type":"boolean"},"same":{"type":"array"},"samePage":{"type":"array"}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watches/preview":{"post":{"summary":"Publish a watch, step 1 of 2 (network:publish scope): what would become public for one of your monitors, and a revisionId. Nothing is public yet.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["monitorUuid"],"properties":{"monitorUuid":{"type":"string","description":"A monitor of this account (see /api/v1/monitors)."},"title":{"type":"string"},"description":{"type":"string"},"scope":{"type":"string","description":"What exactly it watches, e.g. \"UK store, size 10\"."},"category":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"eligible":{"type":"boolean"},"reasons":{"type":"array"},"revisionId":{"type":"integer"},"preview":{"type":"object","description":"Exactly the public page: title, slug, scope, sourceHost, cadence, shares[], doesNotShare[]."},"samePage":{"type":"array","description":"Public watches of the same page: follow one instead, or say how yours differs in scope."}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"403":{"description":"The key lacks network:publish."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/watches/publish":{"post":{"summary":"Publish a watch, step 2 of 2 (network:publish scope): publish exactly what the preview showed. At most 5 per key per 24 hours.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["monitorUuid","revisionId"],"properties":{"monitorUuid":{"type":"string"},"revisionId":{"type":"integer"}}}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Watch"}}}},"400":{"description":"No revisionId (preview first), or the monitor is no longer publishable."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"409":{"description":"That preview was already published."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/subscriptions":{"get":{"summary":"The key owner's webhook subscriptions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Subscription"}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}},"post":{"summary":"Subscribe an https URL to a watch, watchlist, hunter or site (write scope). Each new public change arrives as a signed POST.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","target"],"properties":{"url":{"type":"string","description":"https only; must be on the public internet."},"target":{"type":"object","required":["type","ref"],"properties":{"type":{"type":"string","enum":["WATCH","WATCHLIST","HUNTER","SITE"]},"ref":{"type":"string","description":"Watch or watchlist slug/id, hunter handle, or a site such as nike.com."}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscription"}}}},"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscription"}}}},"400":{"description":"Bad URL or target, or the account has 25 webhooks already."},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/subscriptions/{id}":{"delete":{"summary":"Unsubscribe (write scope)","parameters":[{"name":"id","in":"path","required":true,"description":"Subscription id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/subscriptions/{id}/test":{"post":{"summary":"Send the latest matching change, marked test: true (write scope)","parameters":[{"name":"id","in":"path","required":true,"description":"Subscription id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"sent":{"type":"boolean"},"message":{"type":"string"}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/openapi.json":{"get":{"summary":"This description","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/network/templates":{"get":{"summary":"Monitor setups people share for others to use on their own pages. Popular first, or newest; filter by platform, category or words.","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"platform","in":"query","schema":{"type":"string"},"description":"e.g. shopify, greenhouse, github-releases (see platforms in the response)"},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["popular","new"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"worksOn":{"type":"string","enum":["ANY","PLATFORM","SITE"]},"platform":{"type":["object","null"],"properties":{"key":{"type":"string"},"label":{"type":"string"}}},"siteHost":{"type":["string","null"]},"exampleUrl":{"type":["string","null"]},"setup":{"type":"object","description":"The monitor setup: comparison, schedule, rendering, element locator, keywords, extraction, conditions and AI instructions. Never a page, cookies, headers, actions or notifications."},"lines":{"type":"array","items":{"type":"string"},"description":"The setup in plain words."},"useCount":{"type":"integer","description":"Distinct people who made a monitor from it."},"author":{"type":"object","properties":{"handle":{"type":"string"},"displayName":{"type":"string"}}},"watch":{"type":["object","null"],"description":"The author's public watch with this setup."}}}},"platforms":{"type":"array","items":{"type":"object"}}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/templates/{ref}":{"get":{"summary":"One template.","parameters":[{"name":"ref","in":"path","required":true,"description":"Template slug or id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"worksOn":{"type":"string","enum":["ANY","PLATFORM","SITE"]},"platform":{"type":["object","null"],"properties":{"key":{"type":"string"},"label":{"type":"string"}}},"siteHost":{"type":["string","null"]},"exampleUrl":{"type":["string","null"]},"setup":{"type":"object","description":"The monitor setup: comparison, schedule, rendering, element locator, keywords, extraction, conditions and AI instructions. Never a page, cookies, headers, actions or notifications."},"lines":{"type":"array","items":{"type":"string"},"description":"The setup in plain words."},"useCount":{"type":"integer","description":"Distinct people who made a monitor from it."},"author":{"type":"object","properties":{"handle":{"type":"string"},"displayName":{"type":"string"}}},"watch":{"type":["object","null"],"description":"The author's public watch with this setup."}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}},"/api/v1/network/templates/{ref}/monitors":{"post":{"summary":"Create a monitor on your own page with this template's setup (write scope). Plan limits apply as for POST /api/v1/monitors.","parameters":[{"name":"ref","in":"path","required":true,"description":"Template slug or id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"name":{"type":"string"},"workspaceId":{"type":"integer"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"template":{"type":"object"},"monitor":{"type":"object"}}}}}},"401":{"description":"Missing, invalid or revoked API key."},"404":{"description":"Not found, or not public."},"429":{"description":"Rate limit: 120 requests a minute per key, shared with the rest of /api/v1."}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An account API key: mk_live_…"},"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"schemas":{"Watch":{"type":"object","required":["publicId","slug","title","sourceUrl","sourceHost","health","followerCount"],"properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"scope":{"type":["string","null"]},"category":{"type":["string","null"]},"sourceUrl":{"type":"string"},"sourceHost":{"type":"string"},"health":{"type":"string","enum":["ACTIVE","PAUSED","STALE","ERROR","SOURCE_LOST"]},"acceptingUpdates":{"type":"boolean"},"lastUpdateAt":{"type":["string","null"],"format":"date-time"},"followerCount":{"type":"integer"},"updateCount":{"type":"integer"},"hunter":{"type":["object","null"],"properties":{"handle":{"type":"string"},"displayName":{"type":"string"}}}}},"Update":{"type":"object","required":["publicId","title","publishedAt","origin"],"properties":{"publicId":{"type":"string"},"title":{"type":"string"},"summary":{"type":["string","null"]},"previousValue":{"type":["string","null"]},"currentValue":{"type":["string","null"]},"origin":{"type":"string","enum":["DETECTED","HUNTER"],"description":"DETECTED: Monity saw it, with evidence. HUNTER: the hunter posted it."},"detectedAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time"},"evidence":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"url":{"type":"string"}}}},"watch":{"type":"object","properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}}}}},"Watchlist":{"type":"object","required":["publicId","title","items"],"properties":{"publicId":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"itemCount":{"type":"integer"},"followerCount":{"type":"integer"},"items":{"type":"array","items":{"type":"object"}}}},"Hunter":{"type":"object","required":["handle","displayName","watches"],"properties":{"handle":{"type":"string"},"displayName":{"type":"string"},"bio":{"type":["string","null"]},"watches":{"type":"array","items":{"$ref":"#/components/schemas/Watch"}}}},"Condition":{"type":"object","description":"Either a structured condition or plain words (translated once, shown back as words).","properties":{"kind":{"type":"string","enum":["BELOW","ABOVE","DROPS","RISES","CONTAINS","NOT_CONTAINS","AVAILABLE","UNAVAILABLE"]},"amount":{"type":"number","description":"For BELOW / ABOVE."},"text":{"type":"string","description":"For CONTAINS / NOT_CONTAINS."},"words":{"type":"string","description":"Instead of kind: the condition in plain words."}}},"ChangeRecord":{"type":"object","description":"One public change. Built only from what the public change page shows: values are bounded scalars, evidence is links to Monity's own copies.","properties":{"schema":{"type":"string","const":"monity.network.change/1"},"id":{"type":"string"},"url":{"type":"string"},"page":{"type":"object","properties":{"id":{"type":["string","null"],"description":"pg_ + base64url of the normalised address; the same for every way of writing it."},"url":{"type":"string"},"host":{"type":"string"}}},"thing":{"type":["object","null"],"description":"The same product across stores, once matched."},"watch":{"type":"object"},"hunter":{"type":["object","null"]},"change":{"type":"object","properties":{"kind":{"type":"string"},"origin":{"type":"string","enum":["DETECTED","HUNTER"]},"title":{"type":"string"},"summary":{"type":["string","null"]},"before":{"type":["string","null"]},"after":{"type":["string","null"]}}},"observedAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time"},"evidence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"},"mediaType":{"type":"string"}}}}}},"Subscription":{"type":"object","description":"Deliveries: POST application/json {type: \"network.change\", id, subscription, change: {id, url, title, summary, previousValue, currentValue, origin, publishedAt, watch, hunter}, sentAt}. Verify X-Monity-Signature = \"sha256=\" + hex(HMAC-SHA256(secret, X-Monity-Timestamp + \".\" + raw body)) with the account webhook secret (returned as signing.secret on subscribe; also in Account → Integrations). Retries with backoff on 5xx/429/timeouts, up to 5 times; a 410 or other 4xx stops the subscription.","properties":{"publicId":{"type":"string"},"kind":{"type":"string","enum":["WEBHOOK"]},"label":{"type":"string"},"targetType":{"type":"string","enum":["WATCH","WATCHLIST","HUNTER","SITE"]},"targetRef":{"type":"string"},"targetTitle":{"type":["string","null"]},"state":{"type":"string","enum":["ACTIVE","PAUSED","STOPPED"]},"stoppedReason":{"type":["string","null"]},"lastSentAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"signing":{"type":"object","description":"On subscribe only."}}},"SearchResults":{"type":"object","properties":{"watches":{"type":"array"},"watchlists":{"type":"array"},"hunters":{"type":"array"}}}}}}