Developers
The Continuum API, all resources.
Authenticate with your API key as a Bearer token or x-api-key header. All responses are JSON. Webhooks are HMAC-signed.
NODE.JS SDK — npm
npm install continuum-email
import { Continuum } from 'continuum-email';
const client = new Continuum({ apiKey: 'cont_live_...' });
// Verify a single email
const result = await client.verify.single('user@example.com');
// Send (add test: true to simulate without sending — no SES call, no charge)
const msg = await client.send.send({ to: 'alex@acme.com', subject: 'Hi', html_body: '<p>Hello</p>' });
// Send with MJML template (auto-compiled server-side)
const msg2 = await client.send.send({ to: 'alex@acme.com', subject: 'Hi', mjml_body: '<mjml>...</mjml>' });MCP SERVER — CLAUDE, CURSOR & OTHER MCP CLIENTS
Continuum runs as a Streamable HTTP MCP server. Point an MCP-compatible client at the URL below with your API key and it can verify, send, and check deliverability as native tool calls — no separate SDK integration.
https://api.continuumapi.com/mcp Authorization: Bearer YOUR_API_KEY
QUICKSTARTS
VERIFY BEFORE SEND
const r = await client.verify.single(email);
if (r.score >= 70 && r.result === 'deliverable') {
await client.send.send({
to: email,
subject: 'Welcome',
html_body: '<p>You're in.</p>',
});
}BULK VERIFY A LIST
// Submit CSV, poll until done
const job = await client.bulk.submit(csvFile);
let result;
do {
await new Promise(r => setTimeout(r, 5000));
result = await client.bulk.get(job.id);
} while (result.status !== 'complete');
// result.download_url — filtered by statusCOLD OUTREACH SEQUENCE
const seq = await client.sequences.create({
mailbox_id: 'mbx_...',
stop_on_reply: true,
});
await client.sequences.addStep(seq.id, {
delay_days: 0, html_body: '<p>Hi {{first_name}}</p>',
});
await client.sequences.enroll(seq.id, {
emails: ['ceo@acme.com'],
});FIND & ENROLL LEADS — RAW REST (not yet in the Node SDK)
const { runId } = await fetch(BASE + '/v1/finder/search', {
method: 'POST', headers,
body: JSON.stringify({
personTitleIncludes: ['Head of Growth'],
personLocationCountryIncludes: ['United States'],
}),
}).then(r => r.json());
// poll GET /v1/finder/jobs/:runId/status until phase is "verified"
const { results } = await fetch(`${BASE}/v1/finder/jobs/${runId}/results`, { headers }).then(r => r.json());
await fetch(`${BASE}/v1/finder/jobs/${runId}/import`, {
method: 'POST', headers,
body: JSON.stringify({ emails: results.map(r => r.email), sequenceId: seq.id }),
});NEWSLETTER CAMPAIGN
const list = await client.lists.create({ name: 'Waitlist' });
await client.lists.subscribe(list.id, { email, firstName });
const campaign = await client.campaigns.create({
subject: 'We launched 🎉',
html_body: '<p>Hello {{first_name}}</p>',
list_ids: [list.id],
});
await client.campaigns.send(campaign.id);QUICK START — REST
curl -X POST https://api.continuumapi.com/v1/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to": "alex@acme.com", "subject": "Welcome", "html_body": "<p>Hi Alex!</p>", "verify_before_send": true }'Verification
Transactional
Templates
Sending domains
Lists & contacts
Campaigns
Sequences
Mailboxes
Lead Finder
AI
Analytics & usage
Suppressions & monitoring
Get your API key from the dashboard — free plan includes 1,000 verifications and 1,000 sends per month.