Skip to main content
Use Wachete through Corsair: one client, typed API calls. Find your userId and apiKey in the Wachete profile; those are what the API trades for a bearer token.
  • Two-step auth. POST /thirdparty/v1/user/apilogin exchanges { userId, apiKey } for a token, and every other call sends Authorization: bearer <token> — the word bearer lowercased, as Wachete’s own docs write it. The plugin accepts a packed <userId>\n<apiKey> key and does the login itself, caching the token until it expires, or a bare token if you already have one.
  • Creating and updating are one call, but the two use different methods. tasks.upsert is a PUT on the collection and folders.upsert is a POST on the same collection; in both, the body’s id decides between creating and updating, not the route.
  • The enums are ambiguous, and the plugin accepts both forms. Wachete’s OpenAPI document declares alert, job and messaging types as integers, but that same document’s own example payload sends names ("Error", "NotEq", "Webhook", "SinglePage") and the prose docs do too. The plugin accepts a name or the number and sends what you give it, so either contract works.
  • Alert names. Error, Changed, NotEq, Eq, Contains, NotContains, StartsWith, EndsWith, Regex, Lower, Greater, Exists, NotExists. Messaging names: Email, Webhook, Sms, Slack, Teams, Telegram, Pushover, Discord.
  • A SinglePage monitor takes no crawling settings. crawlingDepth, urlFilter, crawlBinaryContent and crawlPagesFromAllDomains only apply to a Portal monitor, so sending them on a SinglePage one is rejected before the request rather than silently ignored.
  • tasks.search sits after /task/{id} in the API’s path table. A router that matched {id} first would treat “search” as a monitor id; Wachete’s own routing resolves it, and the plugin calls /task/search explicitly.
  • Deleting a folder deletes its contents. folders.delete removes every subfolder and monitor inside it, which makes it the most destructive call here — far more than tasks.delete, which removes one monitor.
  • The last value lives in data. A monitor’s data.raw is what the last check read, data.valueChangedTimestamp is when it last differed, and data.error is set when the check failed — so a monitor can be failedCount without any notification arriving.
  • History and notifications page by continuation token. Both answer continuationToken, which is null on the last page. data.list can return a Google-style diff per entry with returnDiff, which is much larger than the raw values.
  • notifications.get carries the sent HTML. It answers JSON with the monitor’s name, url, timestampUtc and the alert as the html that was sent. The plugin’s event log records the HTML’s length, never its content, which is the watched page’s text.
What you get:
  • 12 typed API operations

Setup

1

Install

2

Add the plugin

corsair.ts
With multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.
3

Choose authentication

4

Connect a tenant

Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.

Example API calls

Read a monitor
Watch a page daily
See the full list on the API page.

What’s next

API reference

Every wachete.api.* operation with input and output types.

Connect / OAuth

createLink, Hub delivery, and tenant connect flows.

Use with agents

Expose this plugin’s operations as MCP tools.