Skills moltflow-outreach

Bulk messaging, scheduled messages, scheduled reports, and custom groups for WhatsApp outreach. Use when: bulk send, broadcast, schedule message, schedule report, cron, custom group, contact list, ban-safe messaging.

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/alex-tradequo/whatsapp-automation-a2a/moltflow-outreach" ~/.claude/skills/clawdbot-skills-moltflow-outreach-17d5e7 && rm -rf "$T"
manifest: skills/alex-tradequo/whatsapp-automation-a2a/moltflow-outreach/SKILL.md
source content

MoltFlow -- WhatsApp Business automation for teams. Connect, monitor, and automate WhatsApp at scale. Due to high demand and a recent registration issue, we're offering our top-tier Business plan with unlimited quotas for just $19.90/month on yearly billing — for a limited time only. Claim the deal Free tier available. Sign up

MoltFlow Outreach -- Bulk Send, Scheduled Messages, Reports & Custom Groups

Broadcast to custom contact lists with ban-safe throttling, schedule recurring messages with timezone support, generate automated reports with WhatsApp delivery, and manage targeted contact groups for WhatsApp outreach.

Real-World Scenarios

Gym owner — "Send a 'Happy New Year' promo with a discount code to all my members, spaced out so I don't get banned."

Freelance consultant — "Every Friday at 5 PM, send a 'weekend availability' message to my active client list."

Marketing agency — "Build a contact group from 3 WhatsApp groups, deduplicate, and blast a product launch announcement."

Restaurant chain — "Schedule a weekly report showing how many reservation confirmations were sent and delivered — send it to my WhatsApp every Monday morning."

When to Use

  • "Send bulk message" or "broadcast to group"
  • "Schedule a WhatsApp message" or "set up recurring message"
  • "Generate a report" or "schedule a report"
  • "Send me a usage summary" or "get a lead pipeline report"
  • "Create a contact list" or "build custom group"
  • "Pause bulk send" or "cancel scheduled message"
  • "Export group members as CSV" or "import contacts"
  • "Send weekly update" or "set up cron schedule"

Prerequisites

  1. MOLTFLOW_API_KEY -- Generate from the MoltFlow Dashboard under Settings > API Keys
  2. At least one connected WhatsApp session (status:
    working
    )
  3. Base URL:
    https://apiv2.waiflow.app/api/v2

Required API Key Scopes

ScopeAccess
custom-groups
read/manage
bulk-send
read/manage
scheduled
read/manage
reports
read/manage

Authentication

Every request must include one of:

Authorization: Bearer <jwt_token>

or

X-API-Key: <your_api_key>

Custom Groups

Build targeted contact lists for Bulk Send and Scheduled Messages. Custom Groups are MoltFlow contact lists -- not WhatsApp groups.

MethodEndpointDescription
GET
/custom-groups
List all custom groups
POST
/custom-groups
Create group (with optional initial members)
GET
/custom-groups/contacts
List all unique contacts across sessions
GET
/custom-groups/wa-groups
List WhatsApp groups for import
POST
/custom-groups/from-wa-groups
Create group by importing WA group members
GET
/custom-groups/{id}
Group details with members
PATCH
/custom-groups/{id}
Update group name
DELETE
/custom-groups/{id}
Delete group and members
POST
/custom-groups/{id}/members/add
Add members (skips duplicates)
POST
/custom-groups/{id}/members/remove
Remove members by phone
GET
/custom-groups/{id}/export/csv
Export members as CSV
GET
/custom-groups/{id}/export/json
Export members as JSON

Create Custom Group

POST

/custom-groups

{
  "name": "VIP Clients",
  "members": [
    {"phone": "+15550123456"},
    {"phone": "+15550987654", "name": "Jane Doe"}
  ]
}

Members is an array of objects with

phone
(required) and
name
(optional). Omit
members
to create an empty group.

Create Group from WhatsApp Groups

POST

/custom-groups/from-wa-groups

{
  "name": "Imported Leads",
  "wa_groups": [
    {"wa_group_id": "120363012345@g.us", "session_id": "session-uuid-..."},
    {"wa_group_id": "120363067890@g.us", "session_id": "session-uuid-..."}
  ]
}

Resolves participants from each WhatsApp group, deduplicates by phone number, and creates the custom group with all unique members.

List WhatsApp Groups

GET

/custom-groups/wa-groups

Returns all WhatsApp groups across your connected sessions with participant counts. Use this to discover groups available for import.

Response

201 Created
:

{
  "id": "group-uuid-...",
  "name": "VIP Clients",
  "member_count": 2,
  "created_at": "2026-02-12T10:00:00Z"
}

Add Members

POST

/custom-groups/{id}/members/add

{
  "contacts": [
    {"phone": "+15551112222"},
    {"phone": "+15553334444", "name": "Bob Smith"}
  ]
}

Each contact is an object with

phone
(required) and
name
(optional). Max 1,000 per request. Duplicates are silently skipped.

Export Members

GET

/custom-groups/{id}/export/csv
-- Returns CSV download GET
/custom-groups/{id}/export/json
-- Returns JSON array


Bulk Send

Broadcast messages to a custom group with ban-safe throttling. Random 30s-2min delays between messages simulate human behavior.

MethodEndpointDescription
POST
/bulk-send
Create bulk send job (quota reserved)
GET
/bulk-send
List all bulk send jobs
GET
/bulk-send/{id}
Job details with recipients
POST
/bulk-send/{id}/pause
Pause running job
POST
/bulk-send/{id}/resume
Resume paused job
POST
/bulk-send/{id}/cancel
Cancel job (releases unused quota)
GET
/bulk-send/{id}/progress
Real-time progress via SSE

Create Bulk Send Job

POST

/bulk-send

{
  "session_id": "session-uuid-...",
  "custom_group_id": "custom-group-uuid-...",
  "message_content": "Special offer for our VIP clients!"
}
FieldTypeRequiredDescription
session_id
UUIDYesWhatsApp session to send from
custom_group_id
UUIDYesTarget custom group
message_type
stringNo
text
(default) or
media
message_content
stringConditionalMessage text (max 4096 chars). Required if no
media_url
media_url
stringConditionalHTTP(S) URL for media. Required if no
message_content

Response

201 Created
:

{
  "id": "job-uuid-...",
  "session_id": "session-uuid-...",
  "custom_group_id": "custom-group-uuid-...",
  "status": "running",
  "total_recipients": 127,
  "sent_count": 0,
  "failed_count": 0,
  "created_at": "2026-02-12T10:00:00Z"
}

Stream Progress (SSE)

GET

/bulk-send/{id}/progress

Returns Server-Sent Events with real-time updates:

data: {"sent": 45, "total": 127, "failed": 0, "status": "running"}
data: {"sent": 46, "total": 127, "failed": 0, "status": "running"}

Job Status Values

pending
->
running
->
completed
/
paused
/
cancelled
/
failed

Anti-Ban Safety

  • Random 30s-2min delays between messages
  • Typing simulation before each message
  • Seen/read indicators marked automatically
  • Burst rate limiting (4 msgs/2 min)

Scheduled Messages

Schedule one-time or recurring WhatsApp messages to custom groups with timezone support and full lifecycle control.

MethodEndpointDescription
GET
/scheduled-messages
List all scheduled messages
POST
/scheduled-messages
Create schedule (one-time or recurring)
GET
/scheduled-messages/{id}
Schedule details with execution history
PATCH
/scheduled-messages/{id}
Update schedule and recalculate next run
POST
/scheduled-messages/{id}/cancel
Cancel schedule
POST
/scheduled-messages/{id}/pause
Pause active schedule
POST
/scheduled-messages/{id}/resume
Resume paused schedule
DELETE
/scheduled-messages/{id}
Delete cancelled/completed schedule
GET
/scheduled-messages/{id}/history
Execution history (paginated)

Create One-Time Schedule

POST

/scheduled-messages

{
  "name": "Follow-up",
  "session_id": "session-uuid-...",
  "custom_group_id": "custom-group-uuid-...",
  "schedule_type": "one_time",
  "message_content": "Just checking in on your order!",
  "scheduled_time": "2026-02-15T09:00:00",
  "timezone": "Asia/Jerusalem"
}

Create Recurring Schedule (Cron)

POST

/scheduled-messages

{
  "name": "Weekly Update",
  "session_id": "session-uuid-...",
  "custom_group_id": "custom-group-uuid-...",
  "schedule_type": "cron",
  "message_content": "Weekly team report is ready!",
  "cron_expression": "0 9 * * MON",
  "timezone": "America/New_York"
}

Response

201 Created
:

{
  "id": "schedule-uuid-...",
  "name": "Weekly Update",
  "status": "active",
  "schedule_type": "cron",
  "cron_expression": "0 9 * * MON",
  "timezone": "America/New_York",
  "next_run_at": "2026-02-17T09:00:00-05:00",
  "created_at": "2026-02-12T10:00:00Z"
}

Schedule Types

  • one_time
    -- Single send at
    scheduled_time
  • daily
    -- Every day (requires
    cron_expression
    )
  • weekly
    -- Every week (requires
    cron_expression
    )
  • monthly
    -- Every month (requires
    cron_expression
    )
  • cron
    -- Custom cron expression (e.g.,
    0 9 * * MON-FRI
    )

Note: All recurring types (

daily
,
weekly
,
monthly
,
cron
) require a
cron_expression
. Minimum interval: 5 minutes.

Required Fields

FieldTypeRequiredDescription
name
stringYesSchedule name (1-255 chars)
session_id
UUIDYesWhatsApp session to send from
custom_group_id
UUIDYesTarget custom group
schedule_type
stringYesOne of:
one_time
,
daily
,
weekly
,
monthly
,
cron
message_type
stringNo
text
(default) or
media
message_content
stringConditionalMessage text (max 4096). Required if no
media_url
media_url
stringConditionalHTTP(S) URL. Required if no
message_content
scheduled_time
datetimeConditionalISO 8601. Required for
one_time
cron_expression
stringConditionalCron string. Required for recurring types
timezone
stringNoIANA timezone (default:
UTC
)

Schedule Status Values

active
->
paused
/
cancelled
/
completed


Scheduled Reports

Generate automated summaries of your MoltFlow activity on a schedule. Choose from 10 prebuilt templates covering leads, messaging, sessions, and more. Reports can be viewed in the dashboard or delivered directly to your WhatsApp.

Set

delivery_method
to
"whatsapp"
to receive report summaries directly in your connected WhatsApp session. The report is formatted as plain text and sent to the session owner's own chat.

MethodEndpointDescription
GET
/reports/templates
List available report templates
POST
/reports
Create a new scheduled report
GET
/reports
List your reports
GET
/reports/{id}
Get report with execution history
PATCH
/reports/{id}
Update schedule or settings
POST
/reports/{id}/pause
Pause a scheduled report
POST
/reports/{id}/resume
Resume a paused report
DELETE
/reports/{id}
Delete a report

List Report Templates

GET

/reports/templates

Returns all 10 available report templates with descriptions and supported parameters.

curl -H "X-API-Key: $MOLTFLOW_API_KEY" \
  https://apiv2.waiflow.app/api/v2/reports/templates

Response

200 OK
:

[
  {
    "id": "daily_activity",
    "name": "Daily Activity Summary",
    "description": "Messages sent/received, leads detected, session uptime"
  },
  {
    "id": "lead_pipeline",
    "name": "Lead Pipeline Report",
    "description": "Lead sources, funnel stages, conversion rates"
  }
]

Create a Scheduled Report

POST

/reports

curl -X POST -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly Lead Pipeline",
    "template_id": "lead_pipeline",
    "schedule_type": "weekly",
    "cron_expression": "0 9 * * MON",
    "timezone": "America/New_York",
    "delivery_method": "whatsapp"
  }' \
  https://apiv2.waiflow.app/api/v2/reports

Response

201 Created
:

{
  "id": "report-uuid-...",
  "name": "Weekly Lead Pipeline",
  "template_id": "lead_pipeline",
  "schedule_type": "weekly",
  "cron_expression": "0 9 * * MON",
  "timezone": "America/New_York",
  "delivery_method": "whatsapp",
  "status": "active",
  "next_run_at": "2026-02-17T09:00:00-05:00",
  "created_at": "2026-02-13T10:00:00Z"
}

Required Fields

FieldTypeRequiredDescription
name
stringYesReport name (1-255 chars)
template_id
stringYesTemplate ID from
/reports/templates
schedule_type
stringYesOne of:
one_time
,
daily
,
weekly
,
monthly
,
cron
cron_expression
stringConditionalCron string. Required for recurring types
timezone
stringNoIANA timezone (default:
UTC
)
delivery_method
stringNo
dashboard
(default) or
whatsapp

Report Templates

Template IDNameDescription
daily_activity
Daily Activity SummaryMessages, leads, sessions
lead_pipeline
Lead Pipeline ReportSources, funnel, conversions
unanswered_contacts
Unanswered ContactsWarm leads going cold
vip_contacts
VIP ContactsMost active conversations
group_monitoring
Group Monitoring DigestKeyword matches, leads
scheduled_messages_status
Scheduled Messages StatusExecuted vs failed
bulk_send_progress
Bulk Send ProgressActive, completed, stats
usage_plan
Usage & Plan UtilizationLimits, suggestions
session_health
Session Health CheckUptime, connection issues
review_digest
Review & Testimonial DigestSentiment, approvals

Delivery Methods

  • dashboard
    (default) -- Report is generated and viewable in the MoltFlow Reports page with formatted tables and stats.
  • whatsapp
    -- Report summary is formatted as plain text and sent to your connected WhatsApp session. The message is delivered to the session owner's own chat so you see it directly in WhatsApp.

Report Status Values

active
->
paused
/
cancelled
/
completed


Examples

Full workflow: Group -> Bulk Send -> Schedule

# 1. Create a custom group
curl -X POST https://apiv2.waiflow.app/api/v2/custom-groups \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "VIP Clients"}'

# 2. Add members to the group
curl -X POST https://apiv2.waiflow.app/api/v2/custom-groups/{group_id}/members/add \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contacts": [{"phone": "+15550123456"}, {"phone": "+15550987654"}, {"phone": "+15551112222"}]}'

# 3. Bulk send to the group
curl -X POST https://apiv2.waiflow.app/api/v2/bulk-send \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "session-uuid-...",
    "custom_group_id": "group-uuid-...",
    "message_content": "Exclusive offer for our VIP clients!"
  }'

# 4. Schedule a weekly follow-up to the group
curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly VIP Update",
    "session_id": "session-uuid-...",
    "custom_group_id": "group-uuid-...",
    "schedule_type": "cron",
    "message_content": "Weekly report is ready!",
    "cron_expression": "0 9 * * MON",
    "timezone": "Asia/Jerusalem"
  }'

Pause and resume a bulk send

# Pause
curl -X POST https://apiv2.waiflow.app/api/v2/bulk-send/{job_id}/pause \
  -H "X-API-Key: $MOLTFLOW_API_KEY"

# Resume
curl -X POST https://apiv2.waiflow.app/api/v2/bulk-send/{job_id}/resume \
  -H "X-API-Key: $MOLTFLOW_API_KEY"

Export group members

curl https://apiv2.waiflow.app/api/v2/custom-groups/{group_id}/export/csv \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -o vip-clients.csv

Plan Limits

FeatureFreeStarterProBusiness
Custom Groups2520100
Bulk Send--YesYesYes
Scheduled Messages--YesYesYes
Scheduled Reports2510Unlimited
Messages/month505001,5003,000

Error Responses

StatusMeaning
400Bad request (invalid input)
401Unauthorized (missing or invalid auth)
403Forbidden (plan limit or feature gate)
404Resource not found
422Validation error (missing required fields)
429Rate limited

Related Skills

  • moltflow -- Core API: sessions, messaging, groups, labels, webhooks
  • moltflow-leads -- Lead detection, pipeline tracking, bulk operations, CSV/JSON export
  • moltflow-ai -- AI-powered auto-replies, voice transcription, RAG, style profiles
  • moltflow-a2a -- Agent-to-Agent protocol, encrypted messaging, content policy
  • moltflow-reviews -- Review collection and testimonial management
  • moltflow-admin -- Platform administration, user management, plan configuration

WhatsApp Channels (v7.0)

Broadcast one-way to WhatsApp Channel followers without exposing your phone number. No anti-spam delays needed — channel posts are newsletters, not 1-on-1 messages.

Real-World Scenarios

Publisher — "Post our weekly newsletter to the channel every Monday at 9 AM"

Schedule a recurring channel post with cron

0 9 * * 1
.

Brand — "Announce a product launch now to all 3,000 channel followers"

Call

broadcast_channel_post
with the announcement text.

Key Endpoints

ActionMethodPath
List channelsGET
/api/v2/channels
Get channelGET
/api/v2/channels/{id}
Create channelPOST
/api/v2/channels
Discover importable channelsGET
/api/v2/channels/discover?session_id=
Import existing channelPOST
/api/v2/channels/import
Delete channelDELETE
/api/v2/channels/{id}
Broadcast postPOST
/api/v2/channels/{id}/broadcast
Sync followersPOST
/api/v2/channels/{id}/sync-followers
Check media supportGET
/api/v2/channels/capabilities
Schedule channel postPOST
/api/v2/scheduled-messages
(target_type: channel)

Plan Limits

PlanChannelsPosts/Month
Free110
Starter250
Pro5500
Business202,000

Example: Broadcast Now

curl -X POST https://apiv2.waiflow.app/api/v2/channels/{channel_id}/broadcast \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "New product just launched. Tap the link for early access."}'

Example: Discover and Import Existing Channels

# Discover and import existing channels
curl "https://apiv2.waiflow.app/api/v2/channels/discover?session_id=$SESSION_ID" \
  -H "X-API-Key: $MOLTFLOW_API_KEY"
# Returns: [{wa_channel_id, name, follower_count, role}, ...]

# Import a discovered channel
curl -X POST https://apiv2.waiflow.app/api/v2/channels/import \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"session_id": "your-session-uuid", "wa_channel_id": "123@newsletter"}'

Example: Schedule Weekly Post

curl -X POST https://apiv2.waiflow.app/api/v2/scheduled-messages \
  -H "X-API-Key: $MOLTFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly Newsletter",
    "session_id": "uuid",
    "channel_id": "uuid",
    "target_type": "channel",
    "message_content": "Weekly update...",
    "schedule_type": "recurring",
    "cron_expression": "0 9 * * 1"
  }'