Misar Docs
MisarMailMisar.BlogMisarReachMisarPostMisar.DevMisar PlatformMisar IdentityMisar Posts API
Sdks

JavaScript / TypeScript

Official JavaScript & TypeScript SDK for MisarMail — works in Node.js, Next.js, Bun, and any JS runtime

JavaScript / TypeScript SDK

The misarmail npm package is the official JavaScript SDK for MisarMail. It ships with full TypeScript types, works in Node.js ≥18, Bun, Deno, and any runtime with native fetch.

Installation

npm install misarmail
# or
pnpm add misarmail
# or
yarn add misarmail

Quick Start

import MisarMail from "misarmail";

const client = new MisarMail({ apiKey: "msk_your_key_here" });

const result = await client.send({
  from: { email: "[email protected]", name: "Your App" },
  to: [{ email: "[email protected]" }],
  subject: "Welcome!",
  html: "<p>Welcome aboard!</p>",
});

console.log(result.message_id);

Configuration

const client = new MisarMail({
  apiKey: process.env.MISARMAIL_API_KEY!,
  baseUrl: "https://mail.misar.io",
  headers: { "X-App-Version": "2.0" },
  timeout: 15_000,
});

Add the key to .env.local:

MISARMAIL_API_KEY=msk_your_key_here

Available Methods

MethodDescription
client.email.send(request)Send a transactional email
client.contacts.list({params})List contacts with filters
client.contacts.create(request)Create a contact
client.contacts.get(id)Get a single contact
client.contacts.update(id, request)Update contact fields
client.contacts.delete(id)Delete a contact
client.contacts.import(request)Bulk import/upsert contacts
client.campaigns.list({params})List campaigns
client.campaigns.create(request)Create a draft campaign
client.campaigns.get(id)Get a campaign
client.campaigns.update(id, request)Update a campaign
client.campaigns.send(id)Send/schedule a campaign
client.campaigns.delete(id)Delete a campaign
client.templates.list({params})List email templates
client.templates.create(request)Create a template
client.templates.get(id)Get a template
client.templates.update(id, request)Update a template
client.templates.delete(id)Delete a template
client.templates.render(id, request)Render a template with merge data
client.automations.list({params})List automation workflows
client.automations.create(request)Create an automation
client.automations.get(id)Get an automation
client.automations.update(id, request)Update an automation
client.automations.delete(id)Delete an automation
client.automations.activate(id)Activate/deactivate an automation
client.domains.list()List sending domains
client.domains.create(request)Add a sending domain
client.domains.get(id)Get a domain
client.domains.verify(id)Trigger domain DNS verification
client.domains.delete(id)Delete a domain
client.aliases.list({params})List email aliases
client.aliases.create(request)Create an alias
client.aliases.get(id)Get an alias
client.aliases.update(id, request)Update an alias
client.aliases.delete(id)Delete an alias
client.dedicatedIps.list()List dedicated IPs
client.dedicatedIps.create(request)Purchase a dedicated IP
client.dedicatedIps.update(id, request)Update IP pool assignment
client.dedicatedIps.delete(id)Release a dedicated IP
client.abTests.list({params})List A/B tests
client.abTests.create(request)Create an A/B test
client.abTests.get(id)Get an A/B test
client.abTests.setWinner(id, variant)Manually set the winning variant
client.sandbox.send(request)Send in sandbox mode (no real delivery)
client.sandbox.list({params})List sandbox sent messages
client.sandbox.delete(id)Delete a sandbox message
client.inbound.list({params})List inbound routing rules
client.inbound.create(request)Create an inbound route
client.inbound.get(id)Get an inbound route
client.inbound.delete(id)Delete an inbound route
client.analytics.overview({params})Get send/open/click/bounce analytics
client.track.event(request)Track a custom event
client.track.purchase(request)Track a purchase event
client.keys.list()List API keys
client.keys.create(request)Create an API key
client.keys.get(id)Get an API key
client.keys.revoke(id)Revoke an API key
client.validate.email(address)Validate an email address
client.webhooks.list({params})List webhooks
client.webhooks.create(request)Create a webhook endpoint
client.webhooks.get(id)Get a webhook
client.webhooks.update(id, request)Update a webhook
client.webhooks.delete(id)Delete a webhook
client.webhooks.test(id)Send a test event to a webhook
client.usage.get({params})Get API usage stats
client.billing.subscription()Get current subscription details
client.billing.checkout(request)Create a billing checkout session
client.workspaces.list()List workspaces
client.workspaces.create(request)Create a workspace
client.workspaces.get(id)Get a workspace
client.workspaces.update(id, request)Update a workspace
client.workspaces.delete(id)Delete a workspace
client.workspaces.listMembers(id)List workspace members
client.workspaces.inviteMember(id, request)Invite a member to workspace
client.workspaces.updateMember(id, userId, request)Update member role
client.workspaces.removeMember(id, userId)Remove a member from workspace

Examples

Send email

await client.email.send({
  from: { email: "[email protected]", name: "Your App" },
  to: [{ email: "[email protected]" }],
  subject: "Your receipt",
  html: "<p>Thanks for your order!</p>",
});

Webhooks

// Register a webhook endpoint
const webhook = await client.webhooks.create({
  url: "https://yourapp.com/webhooks/mail",
  events: ["email.delivered", "email.opened", "email.bounced"],
});

// Send a test payload to verify
await client.webhooks.test(webhook.id);

Error Handling

try {
  await client.email.send({ /* ... */ });
} catch (err) {
  if (err instanceof MisarMailAPIError) {
    console.error(err.statusCode, err.message);
  }
}