If you're using this tools to generate income, consider supporting its development by becoming a Patreon member!
Your support helps ensure the library stays maintained and receives regular updates!
Download:
- n8n package
- Go to Settings -> Community Nodes -> Input
@aldinokemal2104/n8n-nodes-gowa-> Install
v6- For REST mode, you need to run
<binary> restinstead of<binary>- for example:
./whatsapp restinstead of./whatsapp
- for example:
- For MCP mode, you need to run
<binary> mcp- for example:
./whatsapp mcp
- for example:
- For REST mode, you need to run
v7- Starting version 7.x we are using goreleaser to build the binary, so you can download the binary from release
-
Send WhatsApp message via http API, docs/reference/api/openapi.yaml for more details
-
Interactive API Documentation with Swagger UI - Built-in Swagger UI for Admin API accessible at
/swaggerendpoint -
MCP (Model Context Protocol) Server Support - Integrate with AI agents and tools using standardized protocol
-
Mention someone
@phoneNumber- example:
Hello @628974812XXXX, @628974812XXXX
-
Post Whatsapp Status
-
Send Stickers - Automatically converts images to WebP sticker format
- Supports JPG, JPEG, PNG, WebP, and GIF formats
- Automatic resizing to 512x512 pixels
- Preserves transparency for PNG images
-
Compress image before send
-
Compress video before send
-
Change OS name become your app (it's the device name when connect via mobile)
--os=Chromeor--os=MyApplication
-
Basic Auth (able to add multi credentials)
--basic-auth=kemal:secret,toni:password,userName:secretPassword, or you can simplify-b=kemal:secret,toni:password,userName:secretPassword
-
Subpath deployment support
--base-path="/gowa"(allows deployment under a specific path like/gowa/sub/path)
-
Customizable port and debug mode
--port 8000--debug true
-
Auto reply message
--autoreply="Don't reply this message"
-
Auto mark read incoming messages
--auto-mark-read=true(automatically marks incoming messages as read)
-
Auto download media from incoming messages
--auto-download-media=false(disable automatic media downloads, default:true)
-
Webhook for received message
--webhook="http://yourwebhook.site/handler", or you can simplify-w="http://yourwebhook.site/handler"- for more detail, see Webhook Documentation
-
Webhook Secret Our webhook will be sent to you with an HMAC header and a sha256 default key
secret.You may modify this by using the option below:
--webhook-secret="secret"
-
Webhook Documentation For detailed webhook payload schemas, security implementation, and integration examples, see Webhook Guides and Webhook Reference
-
Webhook TLS Configuration
If you encounter TLS certificate verification errors when using webhooks (e.g., with Cloudflare tunnels or self-signed certificates):
tls: failed to verify certificate: x509: certificate signed by unknown authorityYou can disable TLS certificate verification using:
--webhook-insecure-skip-verify=true- Or environment variable:
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true
Security Warning: This option disables TLS certificate verification and should only be used in:
- Development/testing environments
- Cloudflare tunnels (which provide their own security layer)
- Internal networks with self-signed certificates
For production environments, it's strongly recommended to use proper SSL certificates (e.g., Let's Encrypt) instead of disabling verification.
You can configure the application using either command-line flags (shown above) or environment variables. Configuration can be set in three ways (in order of priority):
- Command-line flags (highest priority)
- Environment variables
.envfile (lowest priority)
You can configure the application using environment variables. Configuration can be set in three ways (in order of priority):
- Command-line flags (highest priority)
- Environment variables
.envfile (lowest priority)
To use environment variables:
- Copy
.env.exampleto.envin your project root (cp src/.env.example src/.env) - Modify the values in
.envaccording to your needs - Or set the same variables as system environment variables
| Variable | Description | Default | Example |
|---|---|---|---|
APP_PORT |
Application port | 3000 |
APP_PORT=8080 |
APP_DEBUG |
Enable debug logging | false |
APP_DEBUG=true |
APP_OS |
OS name (device name in WhatsApp) | Chrome |
APP_OS=MyApp |
APP_BASIC_AUTH |
Basic authentication credentials | - | APP_BASIC_AUTH=user1:pass1,user2:pass2 |
APP_BASE_PATH |
Base path for subpath deployment | - | APP_BASE_PATH=/gowa |
APP_TRUSTED_PROXIES |
Trusted proxy IP ranges for reverse proxy | - | APP_TRUSTED_PROXIES=0.0.0.0/0 |
DB_URI |
Database connection URI | file:storages/whatsapp.db?_foreign_keys=on |
DB_URI=postgres://user:pass@host/db |
WHATSAPP_AUTO_REPLY |
Auto-reply message | - | WHATSAPP_AUTO_REPLY="Auto reply message" |
WHATSAPP_AUTO_MARK_READ |
Auto-mark incoming messages as read | false |
WHATSAPP_AUTO_MARK_READ=true |
WHATSAPP_AUTO_DOWNLOAD_MEDIA |
Auto-download media from incoming messages | true |
WHATSAPP_AUTO_DOWNLOAD_MEDIA=false |
WHATSAPP_WEBHOOK |
Webhook URL(s) for events (comma-separated) | - | WHATSAPP_WEBHOOK=https://webhook.site/xxx |
WHATSAPP_WEBHOOK_SECRET |
Webhook secret for validation | secret |
WHATSAPP_WEBHOOK_SECRET=super-secret-key |
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY |
Skip TLS verification for webhooks (insecure) | false |
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true |
WHATSAPP_ACCOUNT_VALIDATION |
Enable account validation | true |
WHATSAPP_ACCOUNT_VALIDATION=false |
WHATSAPP_CHAT_STORAGE |
Enable chat storage | true |
WHATSAPP_CHAT_STORAGE=false |
For the Admin API implementation details and complete environment variable mappings for per-instance configuration, see Admin API Guide.
Note: Command-line flags will override any values set in environment variables or .env file.
- For more command
./whatsapp --help
- Go 1.24.0 or higher (for building from source)
- FFmpeg (for media processing)
- Linux (x86_64, ARM64)
- macOS (Intel, Apple Silicon)
- Windows (x86_64) - WSL recommended
- Mac OS:
brew install ffmpegexport CGO_CFLAGS_ALLOW="-Xpreprocessor"
- Linux:
sudo apt updatesudo apt install ffmpeg
- Windows (not recomended, prefer using WSL):
- install ffmpeg, download here
- add to ffmpeg to environment variable
For the best development experience with Admin API support:
-
VS Code Dev Container (Includes everything pre-configured):
- Clone this repo:
git clone https://github.com/chatwoot-br/go-whatsapp-web-multidevice - Open in VS Code
- When prompted, click "Reopen in Container"
- Wait for the container to build and setup automatically
- Use
./.devcontainer/dev.sh helpfor available commands - See
.devcontainer/README.mdfor detailed development guide
- Clone this repo:
-
Features included in Dev Container:
- ✅ Go 1.24+ with all tools
- ✅ FFmpeg pre-installed
- ✅ Supervisord configured and running
- ✅ Admin API ready to use
- ✅ Development helper scripts
- ✅ Port forwarding configured
- ✅ Environment variables pre-set
- Clone this repo:
git clone https://github.com/chatwoot-br/go-whatsapp-web-multidevice - Open the folder that was cloned via cmd/terminal.
- run
cd src - run
go run . rest(for REST API mode) - Open
http://localhost:3000
This repository includes a Helm chart that deploys the Admin API and a supervisord sidecar used to manage WhatsApp instances. See charts/README.md for consolidated configuration, deployment and debugging instructions.
- Clone this repo:
git clone https://github.com/chatwoot-br/go-whatsapp-web-multidevice - Open the folder that was cloned via cmd/terminal.
- run
docker-compose up -d --build - open
http://localhost:3000
- Clone this repo
git clone https://github.com/chatwoot-br/go-whatsapp-web-multidevice - Open the folder that was cloned via cmd/terminal.
- run
cd src - run
- Linux & MacOS:
go build -o whatsapp - Windows (CMD / PowerShell):
go build -o whatsapp.exe
- Linux & MacOS:
- run
- Linux & MacOS:
./whatsapp rest(for REST API mode)- run
./whatsapp --helpfor more detail flags
- run
- Windows:
.\whatsapp.exe rest(for REST API mode)- run
.\whatsapp.exe --helpfor more detail flags
- run
- Linux & MacOS:
- open
http://localhost:3000in browser
For managing multiple WhatsApp instances:
-
Using Dev Container (easiest):
./.devcontainer/dev.sh start-admin ./.devcontainer/dev.sh create 3001
-
Manual setup:
- Install and configure supervisord
- Set required environment variables (see
.src/.env.dev) - Run:
go run . admin --port 8088 - See Admin API Guide for details
Note: The Admin API supports all environment variables listed above. Use GOWA_* prefixed versions to configure defaults for instances (e.g., GOWA_DEBUG=true, GOWA_WEBHOOK=https://webhook.site/xxx). All instances created through the Admin API will inherit these settings and support the full feature set of standalone GOWA instances.
This application can also run as an MCP server, allowing AI agents and tools to interact with WhatsApp through a standardized protocol.
- Clone this repo
git clone https://github.com/chatwoot-br/go-whatsapp-web-multidevice - Open the folder that was cloned via cmd/terminal.
- run
cd src - run
go run . mcpor build the binary and run./whatsapp mcp - The MCP server will start on
http://localhost:8080by default
--host localhost- Set the host for MCP server (default: localhost)--port 8080- Set the port for MCP server (default: 8080)
The WhatsApp MCP server provides comprehensive tools for AI agents to interact with WhatsApp through a standardized protocol. Below is the complete list of available tools:
whatsapp_connection_status- Check whether the WhatsApp client is connected and logged inwhatsapp_login_qr- Initiate QR code based login flow with image outputwhatsapp_login_with_code- Generate pairing code for multi-device login using phone numberwhatsapp_logout- Sign out the current WhatsApp sessionwhatsapp_reconnect- Attempt to reconnect to WhatsApp using stored session
whatsapp_send_text- Send text messages with reply and forwarding supportwhatsapp_send_contact- Send contact cards with name and phone numberwhatsapp_send_link- Send links with custom captionswhatsapp_send_location- Send location coordinates (latitude/longitude)whatsapp_send_image- Send images with captions, compression, and view-once optionswhatsapp_send_sticker- Send stickers with automatic WebP conversion (supports JPG/PNG/GIF)
whatsapp_list_contacts- Retrieve all contacts in your WhatsApp accountwhatsapp_list_chats- Get recent chats with pagination and search filterswhatsapp_get_chat_messages- Fetch messages from specific chats with time/media filteringwhatsapp_download_message_media- Download images/videos from messages
whatsapp_group_create- Create new groups with optional initial participantswhatsapp_group_join_via_link- Join groups using invite linkswhatsapp_group_leave- Leave groups by group IDwhatsapp_group_participants- List all participants in a groupwhatsapp_group_manage_participants- Add, remove, promote, or demote group memberswhatsapp_group_invite_link- Get or reset group invite linkswhatsapp_group_info- Get detailed group informationwhatsapp_group_set_name- Update group display namewhatsapp_group_set_topic- Update group description/topicwhatsapp_group_set_locked- Toggle admin-only group info editingwhatsapp_group_set_announce- Toggle announcement-only modewhatsapp_group_join_requests- List pending join requestswhatsapp_group_manage_join_requests- Approve or reject join requests
- SSE endpoint:
http://localhost:8080/sse - Message endpoint:
http://localhost:8080/message
Make sure you have the MCP server running: ./whatsapp mcp
For AI tools that support MCP with SSE (like Cursor), add this configuration:
{
"mcpServers": {
"whatsapp": {
"url": "http://localhost:8080/sse"
}
}
}Using Docker Hub:
docker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages ghcr.io/chatwoot-br/go-whatsapp-web-multidevice rest --autoreply="Dont't reply this message please"Using GitHub Container Registry:
docker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages ghcr.io/chatwoot-br/go-whatsapp-web-multidevice rest --autoreply="Dont't reply this message please"create docker-compose.yml file with the following configuration:
Using Docker Hub:
services:
whatsapp:
image: ghcr.io/chatwoot-br/go-whatsapp-web-multidevice
container_name: whatsapp
restart: always
ports:
- "3000:3000"
volumes:
- whatsapp:/app/storages
command:
- rest
- --basic-auth=admin:admin
- --port=3000
- --debug=true
- --os=Chrome
- --account-validation=false
volumes:
whatsapp:Using GitHub Container Registry:
services:
whatsapp:
image: ghcr.io/chatwoot-br/go-whatsapp-web-multidevice
container_name: whatsapp
restart: always
ports:
- "3000:3000"
volumes:
- whatsapp:/app/storages
command:
- rest
- --basic-auth=admin:admin
- --port=3000
- --debug=true
- --os=Chrome
- --account-validation=false
volumes:
whatsapp:or with env file (Docker Hub):
services:
whatsapp:
image: ghcr.io/chatwoot-br/go-whatsapp-web-multidevice
container_name: whatsapp
restart: always
ports:
- "3000:3000"
volumes:
- whatsapp:/app/storages
environment:
- APP_BASIC_AUTH=admin:admin
- APP_PORT=3000
- APP_DEBUG=true
- APP_OS=Chrome
- APP_ACCOUNT_VALIDATION=false
volumes:
whatsapp:or with env file (GitHub Container Registry):
services:
whatsapp:
image: ghcr.io/chatwoot-br/go-whatsapp-web-multidevice
container_name: whatsapp
restart: always
ports:
- "3000:3000"
volumes:
- whatsapp:/app/storages
environment:
- APP_BASIC_AUTH=admin:admin
- APP_PORT=3000
- APP_DEBUG=true
- APP_OS=Chrome
- APP_ACCOUNT_VALIDATION=false
volumes:
whatsapp:- download binary from release
You can fork or edit this source code !
- MCP server provides standardized tools for AI agents to interact with WhatsApp
- Supports Server-Sent Events (SSE) transport
- Available tools:
whatsapp_send_text,whatsapp_send_contact,whatsapp_send_link,whatsapp_send_location - Compatible with MCP-enabled AI tools and agents
- API Specification Document.
- Check docs/reference/api/openapi.yaml for detailed API specifications.
- Use SwaggerEditor to visualize the API.
- Generate HTTP clients using openapi-generator.
| Feature | Menu | Method | URL |
|---|---|---|---|
| ✅ | Login with Scan QR | GET | /app/login |
| ✅ | Login With Pair Code | GET | /app/login-with-code |
| ✅ | Logout | GET | /app/logout |
| ✅ | Reconnect | GET | /app/reconnect |
| ✅ | Devices | GET | /app/devices |
| ✅ | User Info | GET | /user/info |
| ✅ | User Avatar | GET | /user/avatar |
| ✅ | User Change Avatar | POST | /user/avatar |
| ✅ | User Change PushName | POST | /user/pushname |
| ✅ | User My Groups | GET | /user/my/groups |
| ✅ | User My Newsletter | GET | /user/my/newsletters |
| ✅ | User My Privacy Setting | GET | /user/my/privacy |
| ✅ | User My Contacts | GET | /user/my/contacts |
| ✅ | User Check | GET | /user/check |
| ✅ | User Business Profile | GET | /user/business-profile |
| ✅ | Send Message | POST | /send/message |
| ✅ | Send Image | POST | /send/image |
| ✅ | Send Audio | POST | /send/audio |
| ✅ | Send File | POST | /send/file |
| ✅ | Send Video | POST | /send/video |
| ✅ | Send Sticker | POST | /send/sticker |
| ✅ | Send Contact | POST | /send/contact |
| ✅ | Send Link | POST | /send/link |
| ✅ | Send Location | POST | /send/location |
| ✅ | Send Poll / Vote | POST | /send/poll |
| ✅ | Send Presence | POST | /send/presence |
| ✅ | Send Chat Presence (Typing Indicator) | POST | /send/chat-presence |
| ✅ | Revoke Message | POST | /message/:message_id/revoke |
| ✅ | React Message | POST | /message/:message_id/reaction |
| ✅ | Delete Message | POST | /message/:message_id/delete |
| ✅ | Edit Message | POST | /message/:message_id/update |
| ✅ | Read Message (DM) | POST | /message/:message_id/read |
| ✅ | Star Message | POST | /message/:message_id/star |
| ✅ | Unstar Message | POST | /message/:message_id/unstar |
| ✅ | Join Group With Link | POST | /group/join-with-link |
| ✅ | Group Info From Link | GET | /group/info-from-link |
| ✅ | Group Info | GET | /group/info |
| ✅ | Leave Group | POST | /group/leave |
| ✅ | Create Group | POST | /group |
| ✅ | List Participants in Group | GET | /group/participants |
| ✅ | Add Participants in Group | POST | /group/participants |
| ✅ | Remove Participant in Group | POST | /group/participants/remove |
| ✅ | Promote Participant in Group | POST | /group/participants/promote |
| ✅ | Demote Participant in Group | POST | /group/participants/demote |
| ✅ | Export Group Participants (CSV) | GET | /group/participants/export |
| ✅ | List Requested Participants in Group | GET | /group/participant-requests |
| ✅ | Approve Requested Participant in Group | POST | /group/participant-requests/approve |
| ✅ | Reject Requested Participant in Group | POST | /group/participant-requests/reject |
| ✅ | Set Group Photo | POST | /group/photo |
| ✅ | Set Group Name | POST | /group/name |
| ✅ | Set Group Locked | POST | /group/locked |
| ✅ | Set Group Announce | POST | /group/announce |
| ✅ | Set Group Topic | POST | /group/topic |
| ✅ | Get Group Invite Link | GET | /group/invite-link |
| ✅ | Unfollow Newsletter | POST | /newsletter/unfollow |
| ✅ | Get Chat List | GET | /chats |
| ✅ | Get Chat Messages | GET | /chat/:chat_jid/messages |
| ✅ | Label Chat | POST | /chat/:chat_jid/label |
| ✅ | Pin Chat | POST | /chat/:chat_jid/pin |
| ✅ | Set Disappearing Messages | POST | /chat/:chat_jid/disappearing |
✅ = Available
❌ = Not Available Yet- Please do this if you have an error (invalid flag in pkg-config --cflags: -Xpreprocessor)
export CGO_CFLAGS_ALLOW="-Xpreprocessor"
The application includes an Admin API for managing multiple GOWA instances with built-in Swagger UI documentation.
- Create, list, update, and delete GOWA instances
- Health and readiness endpoints
- Supervisor-based instance management
- Authentication via bearer token
- Interactive API documentation at
/swaggerendpoint - Real-time testing of Admin API endpoints
- Automatic OpenAPI specification serving
- CORS-enabled for browser access
# Deploy with Swagger UI enabled
helm install my-release charts/gowa --set swaggerUI.enabled=true
# Access Swagger UI (after port forwarding)
kubectl port-forward svc/my-release-gowa 8080:8080
open http://localhost:8080/swaggerFor more details, see:
Complete documentation is available in the docs/ directory. Here's where to find what you need:
- Getting Started - Tutorials for new users
- Quick Start Guide - Get running in 5 minutes
- Installation Guide - Complete installation instructions
- First Message Guide - Send your first WhatsApp message
- Configuration Basics - Essential configuration
- Deployment Guides - Production deployment
- Webhook Guides - Real-time event integration
- MCP Integration - AI agent integration
- Admin API - Multi-instance management
- Media Handling - Send and process media files
- API Documentation
- Webhook Reference
- Configuration Reference - All environment variables
- Troubleshooting Guide - Common issues
- Postmortems - Lessons learned from production issues
Start here: docs/README.md - Comprehensive documentation index with persona-based navigation
- This project is unofficial and not affiliated with WhatsApp.
- Please use official WhatsApp API to avoid any issues.
- We only able to run MCP or REST API, this is limitation from whatsmeow library. independent MCP will be available in the future.
























