Skip to main content
Use EmailOctopus through Corsair: one client, typed API calls. Create an API key under EmailOctopus account settings, Developer, API keys. A key created before API v2 (labelled legacy) will not authenticate. The key is sent as Authorization: Bearer.
  • Deletes are permanent. lists.delete, contacts.delete, fields.delete and tags.delete remove the resource.
  • Create versus upsert. contacts.create fails when the email is already on the list. contacts.upsert updates that contact instead.
  • Tag updates on a contact. contacts.create takes tags as an array of names. contacts.upsert and contacts.update take tags as { 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 as starting_after. limit is at most 100.
  • Webhooks. This plugin does not receive webhooks.
What you get:
  • 25 typed API operations

Setup

1

Install

2

Add the plugin

corsair.ts
Multi-tenancy is the default — 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 first page of lists
Add a contact to a list
See the full list on the API page.

What’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.