IntegrationsNo-Code Integrations

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:


Zapier 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

  1. Create a new Zap in Zapier
  2. Search for FormaMail in the app list
  3. Click Connect and authorize your FormaMail account via OAuth
  4. 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:

TriggerDescription
Email SentWhen an email is successfully queued for delivery
Email DeliveredWhen an email reaches the recipient’s mailbox
Email OpenedWhen a recipient opens an email (tracking required)
Link ClickedWhen a recipient clicks a tracked link
Email BouncedWhen an email bounces (hard or soft)
Unsubscribe ReceivedWhen a recipient unsubscribes from emails

Available Actions

Actions let you perform operations in FormaMail:

ActionDescription
Send EmailSend an email using a FormaMail template
Send Email with PDFSend email with auto-generated PDF attachment
Send Email with ExcelSend email with auto-generated Excel attachment
Send Bulk EmailSend personalized emails to multiple recipients

Available Searches

Searches let you find existing data in FormaMail:

SearchDescription
Find EmailSearch 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 name

Configuration:

  1. Select trigger (e.g., “New Form Response” in Google Forms)
  2. Add FormaMail “Send Email” action
  3. Choose your welcome email template
  4. 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 email

Configuration:

  1. Trigger: Stripe “Payment Intent Succeeded”
  2. Action: FormaMail “Send Email with PDF”
  3. Select email template and PDF template
  4. 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 CRM

Weekly Schedule → Report Email with Excel

Trigger: Schedule by Zapier (Weekly) Action: FormaMail - Send Email with Excel

Every Monday 9 AM → Generate report → Send to stakeholders

Trigger 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

  1. Create a new scenario in Make.com
  2. Click the + button to add a module
  3. Search for FormaMail
  4. Select a trigger or action module

Step 2: Connect Your Account

  1. Click Create a connection
  2. Authorize via OAuth 2.0
  3. Grant requested permissions

Step 3: Configure the Module

Set up your trigger/action with the visual interface.

Available Modules

Triggers (Watch Events)

ModuleDescription
Watch Email SentTriggers when email is sent
Watch Email DeliveredTriggers when email is delivered
Watch Email OpenedTriggers when email is opened
Watch Link ClickedTriggers when link is clicked
Watch Email BouncedTriggers when email bounces
Watch UnsubscribeTriggers when user unsubscribes

Actions

ModuleDescription
Send EmailSend email with template
Send Email with PDFEmail + generated PDF
Send Email with ExcelEmail + generated Excel
Send Bulk EmailMultiple recipients

Searches

ModuleDescription
Get EmailRetrieve 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 Welcome

Batch 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 Sheet

n8n Integration

Community Node Available - Install n8n-nodes-formamail for full FormaMail integration.

Installation

  1. Go to SettingsCommunity Nodes
  2. Click Install a community node
  3. Enter: n8n-nodes-formamail
  4. Click Install

Setting Up Credentials

Step 1: Generate API Key in FormaMail

  1. Log in to your FormaMail dashboard at https://app.formamail.com
  2. Go to SettingsAPI Keys
  3. Click Create New API Key
  4. Give it a descriptive name (e.g., “n8n Integration”)
  5. Copy the generated API key (it will only be shown once)

Step 2: Add Credentials in n8n

  1. Go to CredentialsNew
  2. Search for “FormaMail API”
  3. Enter your API Key
  4. Optionally update the API Base URL if self-hosted
  5. Click Save

Available Nodes

FormaMail Trigger Node

Starts workflows on email events:

EventDescription
Email SentEmail queued for delivery
Email DeliveredEmail reached mailbox
Email OpenedRecipient opened email
Link ClickedRecipient clicked link
Email BouncedEmail bounced
UnsubscribeRecipient unsubscribed

FormaMail Action Node

Performs operations:

OperationDescription
SendSend email with template
Send with PDFEmail + PDF attachment
Send with ExcelEmail + Excel attachment
Send BulkMultiple recipients
GetGet email details
SearchSearch 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/sdk
import { 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 formamail
from 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

MethodDescription
client.me()Get authenticated user info
client.verifyApiKey()Verify API key is valid

Emails Resource

MethodDescription
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

MethodDescription
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

MethodDescription
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:

EventDescriptionData Fields
email.sentEmail queued for deliveryemailId, recipient, subject, templateId
email.deliveredEmail reached mailboxemailId, recipient, deliveredAt
email.openedRecipient opened emailemailId, recipient, openedAt, device
email.clickedLink clickedemailId, recipient, linkUrl, clickedAt
email.bouncedEmail bouncedemailId, recipient, bounceType, reason
unsubscribe.createdRecipient unsubscribedemail, 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:

HeaderDescription
X-FormaMail-SignatureHMAC-SHA256 signature (v1=<hex>)
X-FormaMail-TimestampUnix timestamp of request
X-FormaMail-Event-IdUnique event identifier
X-FormaMail-Event-TypeEvent type

Authentication

OAuth 2.0 (Zapier & Make.com)

Zapier and Make.com use OAuth 2.0 for secure authentication.

Scopes:

ScopeDescription
emails:sendSend emails
emails:readRead email status
templates:readAccess templates
webhooks:readView webhook subscriptions
webhooks:writeManage webhook subscriptions
profile:readRead user profile

API Keys (n8n & SDKs)

n8n and native SDKs authenticate using API keys generated in the FormaMail dashboard.

  1. Go to SettingsAPI Keys
  2. Click Create API Key
  3. Copy the key (shown only once)
  4. Store securely in environment variables
# .env
FORMAMAIL_API_KEY=fm_sk_xxxxxxxxxxxx

Rate Limits

TierRequests/SecondEmails/Month
Free1100
Starter1010,000
Pro50100,000
EnterpriseCustomCustom
⚠️

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 Authorization with value Bearer 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


Next Steps