# Maileroo

> Send transactional email from your own domain - single, templated, scheduled or in bulk - then follow it through the delivery logs, resend from them, manage templates and suppressions, and read your sending statistics.

App · 20 actions. Web page: https://docs.lodol.com/docs/integrations/maileroo

## Actions

### Add suppression

Stop all email to an address, with an optional reason.

**Inputs**

- Email address (`email_address`, text, required): The address to stop sending to.
- Reason (`reason`, text): Why, for your records, e.g. Asked to be removed.

**Outputs**

- `email_address` (text)
- `id` (number)
- `reason` (text)

**Example output**

```json
{
  "email_address": "jane@example.com",
  "id": 994,
  "reason": "Asked to be removed"
}
```

### Cancel scheduled email

Cancel a scheduled email before it is sent. This cannot be undone.

**Inputs**

- Reference ID (`reference_id`, text, required): The scheduled email's reference id, from the send step or List scheduled emails.

**Outputs**

- `cancelled` (true/false)
- `message` (text)
- `reference_id` (text)

**Example output**

```json
{
  "cancelled": true,
  "message": "The scheduled email has been deleted.",
  "reference_id": "6512a4f8b2c9e01d4f3a7b21"
}
```

### Create template

Save a new email template from HTML, import one from a web page, or create a blank one to design in Maileroo's editor.

**Inputs**

- Name (`name`, text, required): Up to 128 characters.
- Source (`template_type`, text): Where the template's content comes from. One of: `html`, `url` (Imported from a URL), `editor` (Blank, for the drag-and-drop editor). Default: `html`.
- HTML (`html`, text): The template's HTML. Use {{ variable }} for values filled in when sending. A fragment such as <p>Hi</p> is wrapped in a full HTML document, which Maileroo requires. Only when Source is HTML.
- Page URL (`url`, text): The web page to import the HTML from. Only when Source is Imported from a URL.

**Outputs**

- `html` (text)
- `id` (number)
- `plaintext` (text)
- `preview_image` (text)
- `preview_url` (text)
- `processed` (number)
- `template_name` (text)
- `type` (text)

**Example output**

```json
{
  "html": "<p>Hello {{ name }}</p>",
  "id": 4182,
  "plaintext": "Hello {{ name }}",
  "preview_image": "https://maileroo.com/previews/4182.png",
  "preview_url": "https://maileroo.com/previews/4182",
  "processed": 1,
  "template_name": "Welcome",
  "type": "html"
}
```

### Delete template

Delete a template. This cannot be undone.

**Inputs**

- Template (`template_id`, text, required): The template to delete. Pick one, or type its id.

**Outputs**

- `deleted` (true/false)
- `template_id` (number)

**Example output**

```json
{
  "deleted": true,
  "template_id": 4182
}
```

### Get account

Get the account's owner, plan, subscription, and how much of the hourly and monthly sending limits is used.

**Inputs**: None.

**Outputs**

- `billing_information` (object)
- `current_plan` (object)
- `email` (text)
- `name` (text)
- `subscription` (object)
- `usage` (list)
- `user_id` (number)

**Example output**

```json
{
  "billing_information": null,
  "current_plan": {
    "id": 1,
    "name": "Free",
    "quantity": 3000
  },
  "email": "jane@example.com",
  "name": "Jane Doe",
  "subscription": null,
  "usage": [
    {
      "available": 2880,
      "name": "Monthly Outbound Usage",
      "quantity": 3000,
      "used": 120
    }
  ],
  "user_id": 51234
}
```

### Get daily statistics

Get the last month's delivered, bounced, opened, clicked and suppressed totals, one entry per day.

**Inputs**: None.

**Outputs**

- `count` (number)
- `days` (list)

**Example output**

```json
{
  "count": 1,
  "days": [
    {
      "bounced": 3,
      "clicks": 95,
      "countries": [
        {
          "clicks": 60,
          "country_code": "US",
          "opens": 400
        }
      ],
      "date": "2026-10-01",
      "delivered": 1204,
      "opens": 610,
      "suppressions": 2
    }
  ]
}
```

### Get domain

Get one domain: the DKIM, SPF, DMARC, MX and tracking DNS records to publish and whether each is in place, its settings and its statistics.

**Inputs**

- Domain (`domain_id`, text, required): The domain. Pick one, or type its numeric id.

**Outputs**

- `custom_hostname_tracking` (true/false)
- `dns_records` (object)
- `domain_name` (text)
- `free` (true/false)
- `id` (number)
- `interaction_tracking` (true/false)
- `return_path` (text)
- `sandbox` (true/false)
- `statistics` (object)
- `status` (true/false)
- `user_id` (number)

**Example output**

```json
{
  "custom_hostname_tracking": false,
  "dns_records": {
    "dkim_record": {
      "cname_fallback": "",
      "created": true,
      "host": "mail.example.com",
      "record": "v=spf1 ..."
    },
    "dmarc_record": {
      "created": true,
      "host": "mail.example.com",
      "record": "v=spf1 ..."
    },
    "mx_record": {
      "created": true,
      "host": "mail.example.com",
      "priority": 10,
      "record": "v=spf1 ..."
    },
    "spf_record": {
      "created": true,
      "host": "mail.example.com",
      "record": "v=spf1 ..."
    },
    "tracking_record": {
      "created": true,
      "host": "mail.example.com",
      "record": "v=spf1 ..."
    }
  },
  "domain_name": "mail.example.com",
  "free": false,
  "id": 812,
  "interaction_tracking": true,
  "return_path": "bounce.mail.example.com",
  "sandbox": false,
  "statistics": {
    "bounced": 3,
    "clicked": 95,
    "delivered": 1204,
    "opened": 610
  },
  "status": true,
  "user_id": 51234
}
```

### Get logged email

Get a sent email from the logs: its sender, recipients, when it was collected, and its full raw source.

**Inputs**

- Message ID (`message_id`, text, required): The email's message_id, from Search email logs.

**Outputs**

- `collected_on` (text)
- `from` (text)
- `message_id` (text)
- `raw_email` (text)
- `to` (text)

**Example output**

```json
{
  "collected_on": "2026-10-09 08:53:21",
  "from": "hello@mail.example.com",
  "message_id": "b7e4c2f0a1d3@mail.example.com",
  "raw_email": "From: hello@mail.example.com\r\nTo: jane@example.com",
  "to": "jane@example.com"
}
```

### Get statistics summary

Get this calendar month's delivered, bounced, opened, clicked and suppressed totals, with opens and clicks by country.

**Inputs**: None.

**Outputs**

- `bounced` (number)
- `clicks` (number)
- `countries` (list)
- `delivered` (number)
- `opens` (number)
- `suppressions` (number)

**Example output**

```json
{
  "bounced": 3,
  "clicks": 95,
  "countries": [
    {
      "clicks": 60,
      "country_code": "US",
      "opens": 400
    }
  ],
  "delivered": 1204,
  "opens": 610,
  "suppressions": 2
}
```

### Get template

Get a template with its HTML and plain-text content.

**Inputs**

- Template (`template_id`, text, required): The template. Pick one, or type its id.

**Outputs**

- `html` (text)
- `id` (number)
- `plaintext` (text)
- `preview_image` (text)
- `preview_url` (text)
- `processed` (number)
- `template_name` (text)
- `type` (text)

**Example output**

```json
{
  "html": "<p>Hello {{ name }}</p>",
  "id": 4182,
  "plaintext": "Hello {{ name }}",
  "preview_image": "https://maileroo.com/previews/4182.png",
  "preview_url": "https://maileroo.com/previews/4182",
  "processed": 1,
  "template_name": "Welcome",
  "type": "html"
}
```

### List domains

List the account's sending domains with whether each is verified and its delivered, bounced, opened and clicked counts. Search by name and sort.

**Inputs**

- Search (`search`, text): Only domains whose name contains this.
- Sort by (`sort_by`, text): How to order the domains. One of: `id` (Date added), `domain_name` (Domain name), `delivered`, `bounced`, `opened`, `clicked`.
- Sort direction (`sort_dir`, text): Ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Page (`page`, number): Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): How many to return per page (10 to 100). From 10 to 100.

**Outputs**

- `count` (number)
- `domains` (list)
- `page` (number)
- `per_page` (number)
- `total` (number)
- `total_pages` (number)

**Example output**

```json
{
  "count": 1,
  "domains": [
    {
      "domain_name": "mail.example.com",
      "id": 812,
      "statistics": {
        "bounced": 3,
        "clicked": 95,
        "delivered": 1204,
        "opened": 610
      },
      "status": true
    }
  ],
  "page": 1,
  "per_page": 10,
  "total": 1,
  "total_pages": 1
}
```

### List scheduled emails

List emails waiting to be sent at their scheduled time, with each one's reference id, subject, recipients and send time.

**Inputs**

- Domain (`domain`, text): Only this domain's emails. Required when the Sending Key was issued to an Application.
- Page (`page`, number): Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): How many to return per page (1 to 100). From 1 to 100.

**Outputs**

- `count` (number)
- `page` (number)
- `per_page` (number)
- `scheduled_emails` (list)
- `total_count` (number)
- `total_pages` (number)

**Example output**

```json
{
  "count": 1,
  "page": 1,
  "per_page": 10,
  "scheduled_emails": [
    {
      "from": "\"Acme\" <hello@mail.example.com>",
      "headers": {},
      "recipients": [
        "jane@example.com"
      ],
      "reference_id": "6512a4f8b2c9e01d4f3a7b21",
      "scheduled_at": "2026-10-20T09:00:00Z",
      "subject": "Your trial ends soon",
      "tags": {
        "campaign": "trial"
      }
    }
  ],
  "total_count": 1,
  "total_pages": 1
}
```

### List suppressions

List the addresses Maileroo will not send to, with why each was suppressed. Search by address.

**Inputs**

- Search (`search`, text): Only addresses containing this.
- Page (`page`, number): Which page to return, starting at 1. At least 1.
- Page size (`per_page`, number): How many to return per page (10 to 100). From 10 to 100.

**Outputs**

- `count` (number)
- `page` (number)
- `per_page` (number)
- `suppressions` (list)
- `total` (number)
- `total_pages` (number)

**Example output**

```json
{
  "count": 1,
  "page": 1,
  "per_page": 10,
  "suppressions": [
    {
      "email_address": "jane@example.com",
      "id": 993,
      "reason": "bounce"
    }
  ],
  "total": 1,
  "total_pages": 1
}
```

### List templates

List saved email templates, optionally only those matching a name.

**Inputs**

- Search (`search`, text): Only templates whose name contains this.

**Outputs**

- `count` (number)
- `templates` (list)

**Example output**

```json
{
  "count": 1,
  "templates": [
    {
      "id": 4182,
      "preview_image": "https://maileroo.com/previews/4182.png",
      "preview_url": "https://maileroo.com/previews/4182",
      "processed": 1,
      "template_name": "Welcome",
      "type": "html"
    }
  ]
}
```

### Remove suppression

Allow email to a suppressed address again.

**Inputs**

- Email address or suppression ID (`identifier`, text, required): The suppressed address, or the suppression's id.

**Outputs**

- `identifier` (text)
- `removed` (true/false)

**Example output**

```json
{
  "identifier": "jane@example.com",
  "removed": true
}
```

### Resend logged email

Send an email from the logs again, exactly as it was. Maileroo allows 1,000 resends a day.

**Inputs**

- Message ID (`message_id`, text, required): The email's message_id, from Search email logs.

**Outputs**

- `message_id` (text)
- `reference_id` (text)

**Example output**

```json
{
  "message_id": "b7e4c2f0a1d3@mail.example.com",
  "reference_id": "6512a4f8b2c9e01d4f3a7b99"
}
```

### Search email logs

Search the last 14 days of sent email by reference id, message id, subject, sender, recipient, outcome, tags or time, with each email's delivery events.

**Inputs**

- Reference ID (`reference_id`, text): The reference id a send step returned.
- Message ID (`message_id`, text): The email's Message-ID header.
- Recipient (`recipient`, text): Emails sent to this address.
- Sender (`sender`, text): Emails sent from this address.
- Subject (`subject`, text): Emails with this subject.
- Outcome (`log_type`, text): Only emails with this outcome. One of: `Delivered`, `Deferred`, `Suppressed`, `Bounced`, `Complained`.
- Tags (`tags`, object): Emails carrying these tags, e.g. campaign = welcome.
- Match tags (`tags_operator`, text): Whether an email needs all of the tags or any. One of: `AND` (All of the tags), `OR` (Any of the tags). Default: `AND`.
- Application ID (`application_id`, number): Only emails sent by this Maileroo Application. At least 1.
- From (`datetime_from`, date and time): Only emails sent at or after this time.
- To (`datetime_to`, date and time): Only emails sent at or before this time.
- Order (`order`, text): Newest or oldest first. One of: `newest` (Newest first), `oldest` (Oldest first). Default: `newest`.
- Page (`page`, number): Which page to return, starting at 1. At least 1.

**Outputs**

- `count` (number)
- `has_more` (true/false)
- `items` (list)
- `page` (number)

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "application_id": 0,
      "datetime": "2026-10-09 08:53:20",
      "events": [
        {
          "data": {},
          "event_type": "delivered",
          "message": "250 OK",
          "timestamp": 1760000000
        }
      ],
      "instance_id": "mx-04",
      "ip_address": "203.0.113.24",
      "message_id": "b7e4c2f0a1d3@mail.example.com",
      "recipients": [
        "jane@example.com"
      ],
      "reference_id": "6512a4f8b2c9e01d4f3a7b21",
      "sender": "hello@mail.example.com",
      "subject": "Welcome aboard",
      "tags": [
        {
          "name": "campaign",
          "value": "welcome"
        }
      ]
    }
  ],
  "page": 1
}
```

### Send bulk emails

Send up to 500 separate emails in one request - one per recipient - from an HTML body, a plain-text body or a template, with per-recipient template variables. Bulk sends cannot be scheduled.

**Inputs**

- From address (`from_address`, text, required): The sender, on a domain this Sending Key belongs to, e.g. hello@mail.example.com. 'Acme <hello@mail.example.com>' also works.
- From name (`from_name`, text): The sender's name, shown in the inbox, e.g. Acme Support.
- Subject (`subject`, text, required): Up to 255 characters. It can use the template's variables, e.g. 'Your order {{ order_id }}'.
- Recipients (`recipients`, text): Each address gets its own email. Separate them with commas, or pass a list from an earlier step.
- Messages (advanced) (`messages`, list): One object per email, for per-recipient values: 'to', and optionally 'template_data', 'cc', 'bcc', 'reply_to', 'from' and 'reference_id'. Sent alongside any Recipients above.
- HTML body (`html`, text): The email as HTML. Give exactly one of this, a plain-text body or a template.
- Plain-text body (`plain`, text): The email as plain text. Give exactly one of this, an HTML body or a template.
- Template (`template_id`, text): A saved template instead of a body. Pick one, or type its id.
- Attachments (`attachments`, list): Files to attach - upload them or pick files from earlier steps. Up to 32 files, 25 MB in all.
- Open and click tracking (`tracking`, text): Whether to track opens and clicks for this email. One of: `account` (Use my account setting), `on` (Track opens and clicks), `off` (Do not track). Default: `account`.
- Tags (`tags`, object): Labels to find this email by later in the logs, e.g. campaign = welcome.
- Extra headers (`headers`, object): Additional email headers, e.g. X-Campaign-Id = 42.

**Outputs**

- `count` (number)
- `message` (text)
- `reference_ids` (list)

**Example output**

```json
{
  "count": 2,
  "message": "The emails have been scheduled for delivery.",
  "reference_ids": [
    "6512a4f8b2c9e01d4f3a7b21",
    "6512a4f8b2c9e01d4f3a7b22"
  ]
}
```

### Send email

Send an email now or schedule it, with an HTML and/or plain-text body, Cc, Bcc, reply-to, attachments, tags and headers. Returns the reference id to track it by.

**Inputs**

- From address (`from_address`, text, required): The sender, on a domain this Sending Key belongs to, e.g. hello@mail.example.com. 'Acme <hello@mail.example.com>' also works.
- From name (`from_name`, text): The sender's name, shown in the inbox, e.g. Acme Support.
- To (`to`, text, required): Recipients, separated by commas. Each can be an address or 'Name <address>'.
- Subject (`subject`, text, required): Up to 255 characters.
- HTML body (`html`, text): The email as HTML. Give this, a plain-text body, or both.
- Plain-text body (`plain`, text): The email as plain text. Leave it empty to have Maileroo make one from the HTML.
- Cc (`cc`, text): Copy recipients, separated by commas.
- Bcc (`bcc`, text): Hidden recipients, separated by commas.
- Reply-to (`reply_to`, text): Where replies go, if not the sender.
- Attachments (`attachments`, list): Files to attach - upload them or pick files from earlier steps. Up to 32 files, 25 MB in all.
- Send at (`scheduled_at`, date and time): Schedule the email for later, up to 21 days ahead. Leave empty to send now.
- Open and click tracking (`tracking`, text): Whether to track opens and clicks for this email. One of: `account` (Use my account setting), `on` (Track opens and clicks), `off` (Do not track). Default: `account`.
- Tags (`tags`, object): Labels to find this email by later in the logs, e.g. campaign = welcome.
- Extra headers (`headers`, object): Additional email headers, e.g. X-Campaign-Id = 42.
- Reference ID (`reference_id`, text): Your own 24-character hexadecimal id for this email. Leave empty and Maileroo makes one.

**Outputs**

- `message` (text)
- `reference_id` (text)
- `scheduled_at` (text)

**Example output**

```json
{
  "message": "The email has been scheduled for delivery.",
  "reference_id": "6512a4f8b2c9e01d4f3a7b21",
  "scheduled_at": null
}
```

### Send templated email

Send an email built from a saved Maileroo template, filling its {{ variables }}. It can be scheduled, and takes Cc, Bcc, attachments, tags and headers.

**Inputs**

- From address (`from_address`, text, required): The sender, on a domain this Sending Key belongs to, e.g. hello@mail.example.com. 'Acme <hello@mail.example.com>' also works.
- From name (`from_name`, text): The sender's name, shown in the inbox, e.g. Acme Support.
- To (`to`, text, required): Recipients, separated by commas. Each can be an address or 'Name <address>'.
- Subject (`subject`, text, required): Up to 255 characters. It can use the template's variables, e.g. 'Your order {{ order_id }}'.
- Template (`template_id`, text, required): The template. Pick one, or type its id from the Templates page.
- Template variables (`template_data`, object): Values for the template's {{ variables }}, e.g. name = Jane.
- Cc (`cc`, text): Copy recipients, separated by commas.
- Bcc (`bcc`, text): Hidden recipients, separated by commas.
- Reply-to (`reply_to`, text): Where replies go, if not the sender.
- Attachments (`attachments`, list): Files to attach - upload them or pick files from earlier steps. Up to 32 files, 25 MB in all.
- Send at (`scheduled_at`, date and time): Schedule the email for later, up to 21 days ahead. Leave empty to send now.
- Open and click tracking (`tracking`, text): Whether to track opens and clicks for this email. One of: `account` (Use my account setting), `on` (Track opens and clicks), `off` (Do not track). Default: `account`.
- Tags (`tags`, object): Labels to find this email by later in the logs, e.g. campaign = welcome.
- Extra headers (`headers`, object): Additional email headers, e.g. X-Campaign-Id = 42.
- Reference ID (`reference_id`, text): Your own 24-character hexadecimal id for this email. Leave empty and Maileroo makes one.

**Outputs**

- `message` (text)
- `reference_id` (text)
- `scheduled_at` (text)

**Example output**

```json
{
  "message": "The email has been scheduled for delivery.",
  "reference_id": "6512a4f8b2c9e01d4f3a7b21",
  "scheduled_at": null
}
```
