No-Code & Low-Code Integrations
Connect FormaMail to thousands of apps using our native integrations. Build automated workflows that send transactional emails and dynamically generate PDF and Excel attachments.
Overview
FormaMail provides native integrations for popular automation platforms:
6,000+ apps, official integration
Zapier1,500+ apps, visual workflows
Make.comSelf-hosted, community node
n8nNode.js & Python
SDKsZapier Integration
Native Integration Available - Find FormaMail in the Zapier app directory with full OAuth 2.0 authentication.
Getting Started with Zapier
Step 1: Connect Your Account
- Create a new Zap in Zapier
- Search for FormaMail in the app list
- Click Connect and authorize your FormaMail account via OAuth
- Your connection is ready to use
Step 2: Choose a Trigger or Action
Select from our available triggers and actions (see tables below).
Step 3: Configure and Test
Map your data fields and test your Zap before publishing.
Available Triggers
Triggers start your Zap when an event occurs in FormaMail:
| Trigger | Description |
|---|---|
| Email Sent | When an email is successfully queued for delivery |
| Email Delivered | When an email reaches the recipient’s mailbox |
| Email Opened | When a recipient opens an email (tracking required) |
| Link Clicked | When a recipient clicks a tracked link |
| Email Bounced | When an email bounces (hard or soft) |
| Unsubscribe Received | When a recipient unsubscribes from emails |
Available Actions
Actions let you perform operations in FormaMail:
| Action | Description |
|---|---|
| Send Email | Send an email using a FormaMail template |
| Send Email with PDF | Send email with auto-generated PDF attachment |
| Send Email with Excel | Send email with auto-generated Excel attachment |
| Send Bulk Email | Send personalized emails to multiple recipients |
Available Searches
Searches let you find existing data in FormaMail:
| Search | Description |
|---|---|
| Find Email | Search for an email by ID, recipient, status, or date |
Common Zapier Workflows
New Form Submission → Welcome Email
Trigger: Google Forms / Typeform / Webflow Action: FormaMail - Send Email
New form submitted → Send welcome email with personalized nameConfiguration:
- Select trigger (e.g., “New Form Response” in Google Forms)
- Add FormaMail “Send Email” action
- Choose your welcome email template
- Map form fields to template variables:
{{email}}→ Form email field{{name}}→ Form name field{{firstName}}→ Form first name field
Payment Received → Invoice Email with PDF
Trigger: Stripe - Payment Succeeded Action: FormaMail - Send Email with PDF
Payment successful → Generate invoice PDF → Send via emailConfiguration:
- Trigger: Stripe “Payment Intent Succeeded”
- Action: FormaMail “Send Email with PDF”
- Select email template and PDF template
- Map payment data:
{{invoiceNumber}}→ Stripe payment ID{{amount}}→ Payment amount{{customerName}}→ Customer name
Email Bounced → Update CRM
Trigger: FormaMail - Email Bounced Action: HubSpot - Update Contact
Email bounces → Mark contact as undeliverable in CRMWeekly Schedule → Report Email with Excel
Trigger: Schedule by Zapier (Weekly) Action: FormaMail - Send Email with Excel
Every Monday 9 AM → Generate report → Send to stakeholdersTrigger Data Fields
When FormaMail triggers fire, they provide these data fields:
{
"event": "email.delivered",
"timestamp": "2025-12-02T10:30:00Z",
"data": {
"emailLogId": "el_abc123...",
"recipient": "user@example.com",
"recipientName": "John Doe",
"subject": "Your Invoice",
"templateId": "tmpl_invoice",
"status": "delivered"
}
}Make.com Integration
Native Integration Available - FormaMail is available in the Make.com (formerly Integromat) app marketplace.
Getting Started with Make.com
Step 1: Add FormaMail to Your Scenario
- Create a new scenario in Make.com
- Click the + button to add a module
- Search for FormaMail
- Select a trigger or action module
Step 2: Connect Your Account
- Click Create a connection
- Authorize via OAuth 2.0
- Grant requested permissions
Step 3: Configure the Module
Set up your trigger/action with the visual interface.
Available Modules
Triggers (Watch Events)
| Module | Description |
|---|---|
| Watch Email Sent | Triggers when email is sent |
| Watch Email Delivered | Triggers when email is delivered |
| Watch Email Opened | Triggers when email is opened |
| Watch Link Clicked | Triggers when link is clicked |
| Watch Email Bounced | Triggers when email bounces |
| Watch Unsubscribe | Triggers when user unsubscribes |
Actions
| Module | Description |
|---|---|
| Send Email | Send email with template |
| Send Email with PDF | Email + generated PDF |
| Send Email with Excel | Email + generated Excel |
| Send Bulk Email | Multiple recipients |
Searches
| Module | Description |
|---|---|
| Get Email | Retrieve email by ID |
Make.com Scenario Examples
Multi-Condition Email Router
Use the Router module to send different emails based on conditions:
Trigger → Router
├─→ [Order > $100] → Send VIP Welcome
├─→ [Trial User] → Send Trial Onboarding
└─→ [Default] → Send Standard WelcomeBatch Processing with Iterator
Process multiple records with intelligent rate limiting:
1. Get Records (from database/sheet)
2. Array Aggregator
3. Iterator
4. FormaMail - Send Email
5. Sleep (rate limit buffer)Error Handling Flow
FormaMail Send Email
├─→ Success → Continue workflow
└─→ Error Handler
├─→ 429 Rate Limit → Wait & Retry
└─→ 400 Bad Request → Log to Sheetn8n Integration
Community Node Available - Install n8n-nodes-formamail for full FormaMail integration.
Installation
- Go to Settings → Community Nodes
- Click Install a community node
- Enter:
n8n-nodes-formamail - Click Install
Setting Up Credentials
Step 1: Generate API Key in FormaMail
- Log in to your FormaMail dashboard at https://app.formamail.com
- Go to Settings → API Keys
- Click Create New API Key
- Give it a descriptive name (e.g., “n8n Integration”)
- Copy the generated API key (it will only be shown once)
Step 2: Add Credentials in n8n
- Go to Credentials → New
- Search for “FormaMail API”
- Enter your API Key
- Optionally update the API Base URL if self-hosted
- Click Save
Available Nodes
FormaMail Trigger Node
Starts workflows on email events:
| Event | Description |
|---|---|
| Email Sent | Email queued for delivery |
| Email Delivered | Email reached mailbox |
| Email Opened | Recipient opened email |
| Link Clicked | Recipient clicked link |
| Email Bounced | Email bounced |
| Unsubscribe | Recipient unsubscribed |
FormaMail Action Node
Performs operations:
| Operation | Description |
|---|---|
| Send | Send email with template |
| Send with PDF | Email + PDF attachment |
| Send with Excel | Email + Excel attachment |
| Send Bulk | Multiple recipients |
| Get | Get email details |
| Search | Search emails |
n8n Workflow Examples
Multi-Step Email Sequence
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Webhook │ ──→ │ Send Email │ ──→ │ Wait 24h │
│ (Signup) │ │ (Welcome) │ │ │
└─────────────┘ └──────────────┘ └──────┬──────┘
│
┌─────────────┐ ┌──────────────┐ ┌──────┴──────┐
│ Wait 48h │ ←── │ Send Email │ ←── │ Send Email │
│ │ │ (Follow-up) │ │ (Onboarding)│
└─────────────┘ └──────────────┘ └─────────────┘Conditional Logic with Switch Node
┌──────────┐ ┌──────────┐ ┌────────────────────┐
│ Trigger │ ──→ │ Switch │ ──→ │ Customer → VIP │
│ │ │ (type) │ │ Partner → Partner │
└──────────┘ └──────────┘ │ Default → Standard │
└────────────────────┘Error Handling & Retry
┌──────────────┐ ┌──────────────┐
│ FormaMail │ ──→ │ Success │
│ Send Email │ │ Continue │
└──────┬───────┘ └──────────────┘
│
│ (Error)
↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Error │ ──→ │ Wait 5min │ ──→ │ Retry │
│ Trigger │ │ │ │ Send Email │
└──────────────┘ └──────────────┘ └──────────────┘Self-Hosted Benefits
- Full API Access: Use all FormaMail API endpoints
- Custom Nodes: Extend functionality as needed
- Data Privacy: Keep workflow data on your infrastructure
- Unlimited Workflows: No execution limits
- Advanced Logic: Complex branching and error handling
Native SDKs
Official SDKs - For developers who want programmatic access with full type support.
FormaMail provides official SDKs for popular programming languages:
Node.js SDK
Package: @formamail/sdk
npm install @formamail/sdkimport { Formamail } from '@formamail/sdk';
const formamail = new Formamail({
apiKey: process.env.FORMAMAIL_API_KEY!,
});
const result = await formamail.emails.send({
templateId: 'tmpl_welcome',
to: 'customer@example.com',
toName: 'John Doe',
variables: {
firstName: 'John',
accountId: '12345',
},
});
console.log('Email sent:', result.id);Webhook Verification (Node.js)
import { verifyWebhookSignature } from '@formamail/sdk';
app.post('/webhooks/formamail', express.raw({ type: 'application/json' }), (req, res) => {
try {
const event = verifyWebhookSignature({
payload: req.body.toString(),
signature: req.headers['x-formamail-signature'] as string,
secret: process.env.WEBHOOK_SECRET!,
});
switch (event.type) {
case 'email.delivered':
console.log('Delivered:', event.data.emailId);
break;
case 'email.bounced':
console.log('Bounced:', event.data.emailId);
break;
}
res.status(200).send('OK');
} catch (error) {
res.status(400).send('Invalid signature');
}
});Python SDK
Package: formamail
pip install formamailfrom formamail import Formamail
client = Formamail(api_key="your_api_key")
# Send email
result = client.emails.send(
template_id="tmpl_welcome",
to="customer@example.com",
to_name="John Doe",
variables={
"firstName": "John",
"accountId": "12345",
},
)
print(f"Email sent: {result['id']}")
# Send with PDF
result = client.emails.send_with_pdf(
template_id="tmpl_invoice_email",
to="customer@example.com",
pdf_template_id="tmpl_invoice_pdf",
pdf_file_name="Invoice-001",
variables={"invoiceNumber": "INV-001"},
)SDK API Reference
Client Methods
| Method | Description |
|---|---|
client.me() | Get authenticated user info |
client.verifyApiKey() | Verify API key is valid |
Emails Resource
| Method | Description |
|---|---|
emails.send() | Send single email |
emails.sendWithPdf() | Send with PDF attachment |
emails.sendWithExcel() | Send with Excel attachment |
emails.sendBulk() | Send bulk emails |
emails.get(id) | Get email by ID |
emails.list() | List/search emails |
Templates Resource
| Method | Description |
|---|---|
templates.get(id) | Get template |
templates.list() | List all templates |
templates.listEmail() | List email templates |
templates.listPdf() | List PDF templates |
templates.listExcel() | List Excel templates |
Webhooks Resource
| Method | Description |
|---|---|
webhooks.create() | Create subscription |
webhooks.get(id) | Get webhook |
webhooks.list() | List webhooks |
webhooks.update() | Update webhook |
webhooks.delete(id) | Delete webhook |
Webhook Events
All integrations can subscribe to these webhook events:
| Event | Description | Data Fields |
|---|---|---|
email.sent | Email queued for delivery | emailId, recipient, subject, templateId |
email.delivered | Email reached mailbox | emailId, recipient, deliveredAt |
email.opened | Recipient opened email | emailId, recipient, openedAt, device |
email.clicked | Link clicked | emailId, recipient, linkUrl, clickedAt |
email.bounced | Email bounced | emailId, recipient, bounceType, reason |
unsubscribe.created | Recipient unsubscribed | email, unsubscribedAt, category |
Webhook Payload Format
{
"event": "email.delivered",
"timestamp": "2025-12-02T10:30:00.000Z",
"data": {
"emailLogId": "el_abc123def456",
"recipient": "user@example.com",
"recipientName": "John Doe",
"subject": "Welcome to FormaMail",
"templateId": "tmpl_welcome",
"status": "delivered",
"deliveredAt": "2025-12-02T10:30:00.000Z"
}
}Webhook Security
All webhooks include security headers for signature verification:
| Header | Description |
|---|---|
X-FormaMail-Signature | HMAC-SHA256 signature (v1=<hex>) |
X-FormaMail-Timestamp | Unix timestamp of request |
X-FormaMail-Event-Id | Unique event identifier |
X-FormaMail-Event-Type | Event type |
Authentication
OAuth 2.0 (Zapier & Make.com)
Zapier and Make.com use OAuth 2.0 for secure authentication.
Scopes:
| Scope | Description |
|---|---|
emails:send | Send emails |
emails:read | Read email status |
templates:read | Access templates |
webhooks:read | View webhook subscriptions |
webhooks:write | Manage webhook subscriptions |
profile:read | Read user profile |
API Keys (n8n & SDKs)
n8n and native SDKs authenticate using API keys generated in the FormaMail dashboard.
- Go to Settings → API Keys
- Click Create API Key
- Copy the key (shown only once)
- Store securely in environment variables
# .env
FORMAMAIL_API_KEY=fm_sk_xxxxxxxxxxxxRate Limits
| Tier | Requests/Second | Emails/Month |
|---|---|---|
| Free | 1 | 100 |
| Starter | 10 | 10,000 |
| Pro | 50 | 100,000 |
| Enterprise | Custom | Custom |
Use bulk endpoints when sending to multiple recipients to avoid rate limits.
Best Practices
1. API Key Security
- Store keys in environment variables
- Use platform secret managers
- Rotate keys periodically
- Use separate keys for development/production
2. Error Handling
Always implement error handling:
try {
await formamail.emails.send({...});
} catch (error) {
if (error.statusCode === 429) {
// Rate limit - implement backoff
} else if (error.statusCode === 400) {
// Validation error - check request
}
}3. Webhook Verification
Always verify webhook signatures to prevent spoofing attacks.
4. Use Bulk Endpoints
For multiple recipients, use bulk send instead of individual requests:
// Bad: Many individual requests
for (const recipient of recipients) {
await formamail.emails.send({ to: recipient.email, ... });
}
// Good: Single bulk request
await formamail.emails.sendBulk({
recipients: recipients.map(r => ({ email: r.email, ... })),
});Troubleshooting
Common Issues
401 Unauthorized
- Verify API key or OAuth token is valid
- Check key has required permissions
- Ensure header is
Authorizationwith valueBearer YOUR_API_KEY
400 Bad Request
- Validate JSON structure
- Check required fields (templateId, to)
- Verify template exists
429 Rate Limit
- Implement exponential backoff
- Use bulk endpoints
- Contact support for limit increase
Webhook Not Receiving Events
- Verify URL is publicly accessible (HTTPS)
- Check subscription is active
- Review delivery logs in dashboard
Getting Help
- Documentation: https://docs.formamail.com
- API Reference: https://docs.formamail.com/api
- Support Email: support@formamail.com
- Status Page: status.formamail.com