First-party app
Acumbamail

Acumbamail

Manage Acumbamail email marketing: subscriber lists, subscribers, campaigns, templates, transactional email, SMS and list webhooks.

stable MarketingEmail

About

Acumbamail ships in the w6w first-party pack. It declares 32 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.acumbamail
Version
0.1.0
Author
w6w
Licence
MIT
Categories
Marketing · Email

Overview

Acumbamail is an email and SMS marketing platform. This app drives its REST API from a workflow.

Create and delete subscriber lists, read their stats and fields, add merge fields; add, batch-add, search, unsubscribe and delete subscribers; create and send campaigns and read their totals, openers, clickers, links and ISP/browser/OS breakdowns; create and duplicate templates; send a transactional email or SMS; and configure a list’s event webhook.

Acumbamail’s API is a flat set of named functions (https://acumbamail.com/api/1/{function}/) authenticated by a per-account auth token; the vendor documents several functions with per-minute request limits, and answers 429 past them.

Build with Acumbamail

Three routes to the same 32 actions. The Workflow tab is generated from Acumbamail's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Campaign Opens by Browser

campaign-browser-stats-get

Openers of a campaign split by browser (limit: 10 requests per minute).

List Campaign Clickers

campaign-clicks-list

Subscribers who clicked a campaign, with the click date (limit: 10 requests per minute).

Create and Send Campaign

campaign-create

Create a campaign and send it (immediately, or at Send date when scheduled). Returns the campaign ID, or the vendor error text if it could not be sent. Not safe to retry.

Get Campaign

campaign-info-get

Basic information about a campaign (limit: 10 requests per minute).

Get Campaign Opens by ISP

campaign-isp-stats-get

Opened emails of a campaign split by ISP (limit: 10 requests per minute).

Get Campaign Links

campaign-links-get

Every URL in a campaign and who clicked each (limit: 10 requests per minute).

List Campaign Openers

campaign-openers-list

Subscribers who opened a campaign, with the date (limit: 10 requests per minute).

Get Campaign Opens by OS

campaign-os-stats-get

Openers of a campaign split by operating system (limit: 10 requests per minute).

Get Campaign Totals

campaign-totals-get

Delivered, opened, unopened, hard/soft bounces, complaints, unsubscribes, total sent and unique clicks (limit: 10 requests per minute).

List Campaigns

campaigns-list

Names and IDs of campaigns, optionally filtered by date range and status (limit: 10 requests per minute).

Send Transactional Email

email-send

Send one transactional email, with either an HTML body or a template. Not safe to retry (each call sends a message).

Create List

list-create

Create a new subscriber list; returns its ID.

Delete List

list-delete

Permanently delete a subscriber list (limit: 10 requests per minute).

Get List Fields

list-fields-get

Every field of a list: identifier, merge tag, name, type, options (for list-type fields) and visibility.

List Lists

list-get-all

Return every subscriber list in the account, indexed by list ID (limit: 5 requests per second).

Get List Stats

list-stats-get

Name, creation date, subscriber/unsubscribe/bounce/complaint counts and average opens, unique clicks and bounces over the last 20 sent campaigns (limit: 10 requests per minute).

Get List Subscriber Stats

list-subscriber-stats-get

What each subscriber of a list did with each campaign they received, 100 subscribers per block (limit: 10 requests per minute).

Configure List Webhook

list-webhook-configure

Set a list's event webhook (limit: 10 requests per minute). Returns the webhook ID.

Get Merge Fields

merge-fields-get

The merge tags of a list mapped to their field type (limit: 10 requests per minute).

Add Merge Field

merge-tag-add

Add a column (merge field) to a list (limit: 10 requests per minute). Adding an existing name is not documented, so this is not marked safe to retry.

Send SMS

sms-send

Send one or more SMS messages in one call. Returns per-message status in send order. Not safe to retry.

Get List Stats by Date

stats-by-date-get

Grouped statistics of the campaigns sent to a list within a date range (limit: 10 requests per minute).

Add Subscriber

subscriber-add

Add (or, with Update existing, modify) a subscriber on a list. Returns the subscriber ID, or {email, id} with Complete JSON.

Delete Subscriber

subscriber-delete

Remove a subscriber from a list.

Get Subscriber Details

subscriber-details-get

Advanced data about one subscriber of one list (limit: 5 requests per second).

Search Subscriber

subscriber-search

Find a subscriber by email across every list they belong to, with their advanced data (limit: 10 requests per minute).

Unsubscribe Subscriber

subscriber-unsubscribe

Mark a subscriber of a list as unsubscribed (keeps the record).

Batch Add Subscribers

subscribers-batch-add

Add up to 1000 subscribers to a list in one call (limit: 5 requests per second). Returns one entry per subscriber: the new ID or its error.

List Subscribers

subscribers-list

Subscribers of a list, indexed by email, in blocks of up to 10,000 (limit: 10 requests per minute).

Create or Update Template

template-create

Create a template, or update one when Template ID is given. Returns the template ID (empty if not created). Not marked safe to retry as a create.

Duplicate Template

template-duplicate

Copy a template under a new name; returns the new template ID. Each call creates another copy.

List Templates

templates-list

Templates with their ID, name and availability (limit: 1 request per second).

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying Acumbamail's real ids.

{
  "manifestVersion": "2",
  "name": "acumbamail-example",
  "steps": [
    {
      "id": "campaign-browser-stats-get",
      "uses": {
        "app": "io.w6w.acumbamail",
        "action": "campaign-browser-stats-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "campaign_id": "<campaign_id>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get Campaign Opens by Browser

    read
    campaign-browser-stats-get
  • List Campaign Clickers

    search
    campaign-clicks-list
  • Create and Send Campaign

    perform
    campaign-create
  • Get Campaign

    read
    campaign-info-get
  • Get Campaign Opens by ISP

    read
    campaign-isp-stats-get

+27 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for Acumbamail, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to Acumbamail. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "campaign-browser-stats-get",
  payload: {
    campaign_id: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action campaign-browser-stats-get --payload '{"campaign_id":"<value>"}'

Give an AI agent Acumbamail — without giving it Acumbamail's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.acumbamail#campaign-browser-stats-get",
    "input": {
      "campaign_id": "<campaign_id>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's Acumbamail connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

Acumbamail's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. Acumbamail itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

Acumbamail declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

Acumbamail platform status

quota

API request headroom