Skip to main content
InstantCampaign has a public API for your own applications, outbound webhooks that tell your servers when something happens, and an MCP server that lets AI assistants work with your workspace. Everything developers need in the app is in one place: Settings → Developers.

What is under Settings → Developers

The API and webhooks act on the workspace that owns the key or the webhook. If you belong to several workspaces, switch to the right one before you create a key.

Where to start

Create an API key

Create a key, pick its permissions and make your first call.

Receive webhooks

Subscribe to events and verify that each delivery really came from InstantCampaign.

Send transactional email

Send receipts, password resets and notifications from your app with a template and a JSON payload.

Read the API log

Find out why an email went out, with which data, and from which key.

Connect an AI assistant

Give Claude, an IDE or an agent framework access to your workspace through MCP.

API reference

Every endpoint, parameter and response.

How requests are authenticated

Every call to the public API sends a workspace API key as a bearer token:
Keys always start with ic_. A missing, unknown or expired key gets 401 Invalid or missing API key (Invalid or expired API key on the transactional endpoints). A key that lacks the permission an endpoint needs gets 403 with code: "insufficient_scope". Most endpoints also name the missing scope in requiredScope. Transactional send and validate, public events and the MCP server don’t, so check code. See API keys for the scopes.

Rate limits

Limits are counted per workspace, not per key, over a one-minute window. Most endpoints allow 60 requests per minute. Recording events allows 300 per minute, and sending, validating or checking the status of transactional email allows 100 per minute each. Going over the limit returns 429 Rate limit exceeded. The API reference lists the limit for each endpoint.

Suspended workspaces

If a workspace is suspended, its API keys stop working too: every call answers 403 with the workspace-suspended code until the suspension is lifted.