Skip to main content
Use Kadoa through Corsair: one client, typed API calls. Create a key in Kadoa under Settings, General, Generate API Key. It starts with tk- and belongs to the whole team, so every workflow that team owns is reachable with it. Things to know before you call:
  • A workflow is built, then run. workflows.create builds one from a natural-language prompt, an existing schema, inline fields, or a published template. Kadoa takes a sample and holds it for review, so a new workflow starts in PREVIEW. workflows.resume approves the preview and makes it ACTIVE.
  • Sources must share one website. Several URLs in one workflow have to be the same site, counting subdomains and country domains. Two unrelated sites are rejected with a 422.
  • Runs are asynchronous. workflows.run answers at once with a jobId and spends credits. Read it back with workflows.jobStatus({ workflowId, jobId }): IN_PROGRESS is not final, FINISHED is, and FAILED, NOT_SUPPORTED and FAILED_INSUFFICIENT_FUNDS ended without data. The plugin declares no job metadata because reading one back needs both IDs.
  • Reading the rows. workflows.data returns the rows of the latest published run: pagination.totalPages says whether another page exists, and limit above 0 pages. limit: 0 streams every row in one answer and no next page exists. A workflow whose first run has not published data answers 409 DATA_NOT_PUBLISHED.
  • Paging. workflows.list and changes.list page by offset, so they return nextSkip while a page comes back full; pass it back as skip. workflows.history and workflows.data page by number and return nextPage.
  • Deletes cannot be undone. workflows.delete, schemas.delete and variables.delete are permanent. A workflow delete also removes its run history and stored data.
  • Secrets. A SECRET variable created with a value is written once and read back without it. A CUSTOMER_MANAGED secret instead names a Google Secret Manager connection and a resource, and takes no value. variables.delete answers 409 while a secret is still bound to a connection.
  • Rate limits. Kadoa answers 429 with reason PIPELINE_CROWDED when too many runs queue on the team, or USER_RATE_LIMIT when calls come too fast. Both are retried three times with backoff, and a real Retry-After is honoured. Only reads are replayed after a 5xx, because a create that failed mid-way could otherwise run twice.
  • Webhooks. The plugin does not receive deliveries. Notifications are configured in Kadoa itself.
What you get:
  • 28 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

List the workflows tagged pricing
Start a run
See the full list on the API page.

What’s next

API reference

Every kadoa.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.