Authorization: Bearer.
- Deletes are permanent.
lists.delete,contacts.delete,fields.deleteandtags.deleteremove the resource. - Create versus upsert.
contacts.createfails when the email is already on the list.contacts.upsertupdates that contact instead. - Tag updates on a contact.
contacts.createtakestagsas an array of names.contacts.upsertandcontacts.updatetaketagsas{ tagName: true | false }. - Rate limits. The account has a bucket of 100 requests, refilled at 10 per second. A 429 includes
X-RateLimit-Retry-After. The plugin retries that up to three times. Writes are not retried on 5xx. - Paging. Collection calls return
paging.next.starting_after. Pass that cursor back asstarting_after.limitis at most 100. - Webhooks. This plugin does not receive webhooks.
- 25 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup call is required to register the plugin. A request with no saved key throws More: API Key
AuthMissingError. When a connect link can be minted, that error includes connectUrl. Redirect the tenant to connectUrl, or show error.message.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 first page of listsWhat’s next
API reference
Every
emailoctopus.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.