Назад към всички

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.

$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namemoltflow-outreach
descriptionBulk 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.
sourceMoltFlow Team
version2.16.1
risksafe
requiredEnvMOLTFLOW_API_KEY
primaryEnvMOLTFLOW_API_KEY
disable-model-invocationtrue

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-groupsread/manage
bulk-sendread/manage
scheduledread/manage
reportsread/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-groupsList all custom groups
POST/custom-groupsCreate group (with optional initial members)
GET/custom-groups/contactsList all unique contacts across sessions
GET/custom-groups/wa-groupsList WhatsApp groups for import
POST/custom-groups/from-wa-groupsCreate 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/addAdd members (skips duplicates)
POST/custom-groups/{id}/members/removeRemove members by phone
GET/custom-groups/{id}/export/csvExport members as CSV
GET/custom-groups/{id}/export/jsonExport 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-sendCreate bulk send job (quota reserved)
GET/bulk-sendList all bulk send jobs
GET/bulk-send/{id}Job details with recipients
POST/bulk-send/{id}/pausePause running job
POST/bulk-send/{id}/resumeResume paused job
POST/bulk-send/{id}/cancelCancel job (releases unused quota)
GET/bulk-send/{id}/progressReal-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_idUUIDYesWhatsApp session to send from
custom_group_idUUIDYesTarget custom group
message_typestringNotext (default) or media
message_contentstringConditionalMessage text (max 4096 chars). Required if no media_url
media_urlstringConditionalHTTP(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-messagesList all scheduled messages
POST/scheduled-messagesCreate 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}/cancelCancel schedule
POST/scheduled-messages/{id}/pausePause active schedule
POST/scheduled-messages/{id}/resumeResume paused schedule
DELETE/scheduled-messages/{id}Delete cancelled/completed schedule
GET/scheduled-messages/{id}/historyExecution 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
namestringYesSchedule name (1-255 chars)
session_idUUIDYesWhatsApp session to send from
custom_group_idUUIDYesTarget custom group
schedule_typestringYesOne of: one_time, daily, weekly, monthly, cron
message_typestringNotext (default) or media
message_contentstringConditionalMessage text (max 4096). Required if no media_url
media_urlstringConditionalHTTP(S) URL. Required if no message_content
scheduled_timedatetimeConditionalISO 8601. Required for one_time
cron_expressionstringConditionalCron string. Required for recurring types
timezonestringNoIANA 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/templatesList available report templates
POST/reportsCreate a new scheduled report
GET/reportsList your reports
GET/reports/{id}Get report with execution history
PATCH/reports/{id}Update schedule or settings
POST/reports/{id}/pausePause a scheduled report
POST/reports/{id}/resumeResume 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
namestringYesReport name (1-255 chars)
template_idstringYesTemplate ID from /reports/templates
schedule_typestringYesOne of: one_time, daily, weekly, monthly, cron
cron_expressionstringConditionalCron string. Required for recurring types
timezonestringNoIANA timezone (default: UTC)
delivery_methodstringNodashboard (default) or whatsapp

Report Templates

Template IDNameDescription
daily_activityDaily Activity SummaryMessages, leads, sessions
lead_pipelineLead Pipeline ReportSources, funnel, conversions
unanswered_contactsUnanswered ContactsWarm leads going cold
vip_contactsVIP ContactsMost active conversations
group_monitoringGroup Monitoring DigestKeyword matches, leads
scheduled_messages_statusScheduled Messages StatusExecuted vs failed
bulk_send_progressBulk Send ProgressActive, completed, stats
usage_planUsage & Plan UtilizationLimits, suggestions
session_healthSession Health CheckUptime, connection issues
review_digestReview & 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"
  }'