SDKs
Dart SDK
Install and use the MisarMail Dart SDK
Installation
Add to pubspec.yaml:
dependencies:
misarmail: ^0.1.0Then run:
dart pub getQuick Start
import 'package:misarmail/misarmail.dart';
void main() async {
final client = MisarMailClient(apiKey: Platform.environment['MISARMAIL_API_KEY']!);
final result = await client.send(SendRequest(
from: Address(email: 'hello@misar.io', name: 'Misar'),
to: [Address(email: 'user@example.com')],
subject: 'Welcome',
html: '<p>Hello from MisarMail!</p>',
));
print('Sent: ${result.messageId}');
client.close();
}Available Methods
| Method | Description |
|---|---|
client.send(request) | Send a transactional email |
client.contacts.list({params}) | List contacts |
client.contacts.create(request) | Create a contact |
client.contacts.get(id) | Get a contact |
client.contacts.update(id, request) | Update a contact |
client.contacts.delete(id) | Delete a contact |
client.contacts.importContacts(request) | Bulk import/upsert contacts |
client.campaigns.list({params}) | List campaigns |
client.campaigns.create(request) | Create a 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 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 automations |
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.channels.sendWhatsapp(request) | Send a WhatsApp message |
client.channels.sendPush(request) | Send a push notification |
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 |
client.sandbox.list({params}) | List sandbox 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.leads.search(request) | Start an async lead search job |
client.leads.getJob(jobId) | Get lead search job status |
client.leads.listJobs({params}) | List all lead search jobs |
client.leads.results(jobId, {params}) | Fetch results for a completed job |
client.leads.importLeads(request) | Import leads directly to contacts |
client.leads.credits() | Get lead finder credits balance |
client.autopilot.start(request) | Start an AI Autopilot campaign run |
client.autopilot.get(id) | Get Autopilot run status |
client.autopilot.list({params}) | List Autopilot runs |
client.autopilot.dailyPlan({params}) | Get today's AI-suggested outreach plan |
client.salesAgent.getConfig() | Get Sales Agent AI configuration |
client.salesAgent.updateConfig(request) | Update Sales Agent configuration |
client.salesAgent.getActions({params}) | List Sales Agent actions taken |
client.crm.listConversations({params}) | List CRM conversations |
client.crm.getConversation(id) | Get a CRM conversation |
client.crm.updateConversation(id, request) | Update conversation status/notes |
client.crm.listMessages(conversationId, {params}) | List messages in a conversation |
client.crm.listDeals({params}) | List deals in pipeline |
client.crm.createDeal(request) | Create a new deal |
client.crm.getDeal(id) | Get a deal |
client.crm.updateDeal(id, request) | Update a deal |
client.crm.deleteDeal(id) | Delete a deal |
client.crm.listClients({params}) | List CRM clients/accounts |
client.crm.createClient(request) | Create a CRM client |
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
Lead finder
final job = await client.leads.search(LeadSearchRequest(
query: 'VP Engineering at fintech companies',
limit: 100,
));
final status = await client.leads.getJob(job.id);
if (status.state == 'completed') {
final results = await client.leads.results(job.id);
print(results.leads);
}Autopilot
final run = await client.autopilot.start(AutopilotRequest(
goal: 'Book 20 demo calls with HR directors',
audience: 'HR directors at mid-size companies',
dailyLimit: 30,
));
final status = await client.autopilot.get(run.id);
print('${status.state} — sent: ${status.emailsSent}');CRM conversations & deals
final convs = await client.crm.listConversations(status: 'open', limit: 20);
final deal = await client.crm.createDeal(CreateDealRequest(
title: 'Enterprise contract',
amount: 25000,
currency: 'USD',
contactId: convs.conversations.first.contactId,
));Webhooks
final webhook = await client.webhooks.create(CreateWebhookRequest(
url: 'https://yourapp.com/webhooks/mail',
events: ['email.delivered', 'email.opened', 'email.bounced'],
));
await client.webhooks.test(webhook.id);Error Handling
try {
await client.send(request);
} on MisarMailApiException catch (e) {
print('${e.statusCode}: ${e.message}');
}