First-party app
Sender

Sender

Send campaigns, manage subscribers, groups, segments and custom events on Sender (sender.net).

stable MarketingEmail

About

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

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

Overview

Sender (sender.net) is an email (and SMS) marketing platform. This app covers the parts of its REST API v2 (api.sender.net/v2) confirmed against the vendor’s own published documentation at api.sender.net: subscribers (create, read, update, delete, group membership, phone removal, event history), groups, segments (read-only — the API exposes no segment-creation endpoint), custom fields, custom events (for triggering automations from outside data), campaigns (create, send, schedule, copy, cancel, delete, pre-send error checks), and account webhooks (a paid-plan feature).

Transactional campaigns, workflow management and the statistics endpoints are documented by the vendor but not implemented in this first pass — see the README for what was deliberately left out and why.

Sender’s docs host (api.sender.net) answers HTTP 200 with its own homepage for ANY unrecognized path rather than a 404, so every endpoint here was verified against the sitemap’s actual documentation page and its worked request/response example, never against path liveness.

Build with Sender

Three routes to the same 39 actions. The Workflow tab is generated from Sender'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.

Cancel Follow-Up Campaign

campaign-cancel-followup

Cancel the automatic follow-up campaign, if it is enabled.

Cancel Scheduled Campaign

campaign-cancel-schedule

Cancel a campaign that is scheduled to be sent.

Copy Campaign

campaign-copy

Create a copy of the specified campaign.

Create Campaign

campaign-create

Create a new campaign. Only plain text and HTML content are settable via the API; drag-and-drop templates require the Sender web app.

Delete Campaign

campaign-delete

Delete one or more campaigns by ID. Pass "all" as the only ID to delete every campaign in the account.

Get Campaign Errors

campaign-errors-get

List the reasons this campaign cannot currently be sent.

Get Campaign

campaign-get

Get a specific campaign's details.

List Campaigns

campaign-list

List all campaigns, optionally filtered by status.

Schedule Campaign Send

campaign-schedule

Specify a date and time when the campaign should be sent.

Send Campaign

campaign-send

Start sending the campaign now.

Create Custom Event

event-create

Record a custom event against a subscriber, e.g. to trigger an automation.

Create Field

field-create

Create a new custom subscriber field.

Delete Field

field-delete

Delete the specified custom field.

List Fields

field-list

List all custom subscriber fields in the account.

Rename Field

field-update

Rename a field and/or show or hide it in the subscribers dashboard. Field type cannot be changed.

Create Group

group-create

Create a new subscriber group.

Delete Group

group-delete

Delete the specified group.

Get Group

group-get

Get a group's details.

List Groups

group-list

List all groups in the account.

List Subscribers In Group

group-subscribers-list

List every subscriber in the specified group.

Rename Group

group-update

Change a group's name.

Delete Segment

segment-delete

Delete a segment.

Get Segment

segment-get

Get a segment's details, including its filter conditions.

List Segments

segment-list

List all segments in the account. Segments are created in the Sender app; the API exposes no create-segment endpoint.

List Subscribers In Segment

segment-subscribers-list

List every subscriber matching the specified segment.

Add Subscriber To Group

subscriber-add-group

Add one or more subscribers to the specified group.

Create Subscriber

subscriber-create

Create a new subscriber, providing basic information, custom fields and groups.

Delete Subscriber

subscriber-delete

Delete one or more subscribers by email address.

Get Subscriber Events

subscriber-events-get

Get the list of actions a subscriber has performed.

Get Subscriber

subscriber-get

Get a subscriber's profile by email address, phone number, or subscriber ID.

List Subscribers

subscriber-list

List all subscribers in the account.

Remove Subscriber From Group

subscriber-remove-group

Remove one or more subscribers from a group.

Remove Subscriber Phone

subscriber-remove-phone

Remove the phone number from a specific subscriber.

Update Subscriber

subscriber-update

Update a subscriber's information, custom fields, groups or status.

Create Webhook

webhook-create

Create a new account webhook for a given URL and topic. Paid plans only.

Delete Webhook

webhook-delete

Delete an account webhook by ID. Paid plans only.

Get Webhook

webhook-get

Get a single account webhook by ID. Paid plans only.

List Webhooks

webhook-list

List all account webhooks. Paid plans only.

Update Webhook

webhook-update

Update a webhook's URL, topic, relation_id, or status. Paid plans only.

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 Sender's real ids.

{
  "manifestVersion": "2",
  "name": "sender-example",
  "steps": [
    {
      "id": "campaign-copy",
      "uses": {
        "app": "io.w6w.sender",
        "action": "campaign-copy",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "id": "<id>"
      }
    }
  ]
}

Here are some of the things you can do

  • Copy Campaign

    perform
    campaign-copy
  • Create Campaign

    perform
    campaign-create
  • Get Campaign Errors

    read
    campaign-errors-get
  • Get Campaign

    read
    campaign-get
  • List Campaigns

    search
    campaign-list

+34 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 Sender, 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 Sender. 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-copy",
  payload: {
    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-copy --payload '{"id":"<value>"}'

Give an AI agent Sender — without giving it Sender'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.sender#campaign-copy",
    "input": {
      "id": "<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 Sender 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

Sender'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. Sender itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

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

service

Sender platform status

Sender publishes no status page reachable from this search (checked 2026-09-05: status.sender.net does not resolve, sender.statuspage.io is an unclaimed redirect, sender.freshstatus.io is a 200-with-404-payload decoy, and sender.net/status 404s).

quota

API rate-limit headroom