{"id":14986953,"url":"https://github.com/aldinokemal/go-whatsapp-web-multidevice","last_synced_at":"2026-02-28T00:24:22.688Z","repository":{"id":39907434,"uuid":"457435290","full_name":"aldinokemal/go-whatsapp-web-multidevice","owner":"aldinokemal","description":"API for Whatsapp Web Multi Device Version, Support UI \u0026 Webhook","archived":false,"fork":false,"pushed_at":"2025-05-09T14:37:30.000Z","size":544,"stargazers_count":839,"open_issues_count":14,"forks_count":357,"subscribers_count":24,"default_branch":"main","last_synced_at":"2025-05-12T01:31:33.571Z","etag":null,"topics":["bot","go","golang","golang-whatsapp","golang-whatsapp-api","rest","rest-api","whatsapp","whatsapp-api","whatsapp-api-go","whatsapp-multi-device","whatsapp-web-multi-device"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aldinokemal.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":"aldinokemal","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"custom":null}},"created_at":"2022-02-09T16:19:30.000Z","updated_at":"2025-05-11T19:51:35.000Z","dependencies_parsed_at":"2023-10-11T05:29:57.195Z","dependency_job_id":"ae353c7c-ad6e-4d41-9bc1-2c1140cb04ba","html_url":"https://github.com/aldinokemal/go-whatsapp-web-multidevice","commit_stats":{"total_commits":209,"total_committers":10,"mean_commits":20.9,"dds":0.04784688995215314,"last_synced_commit":"f86453b6f4d2450316e42066419819a289697796"},"previous_names":[],"tags_count":80,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldinokemal%2Fgo-whatsapp-web-multidevice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldinokemal%2Fgo-whatsapp-web-multidevice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldinokemal%2Fgo-whatsapp-web-multidevice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldinokemal%2Fgo-whatsapp-web-multidevice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aldinokemal","download_url":"https://codeload.github.com/aldinokemal/go-whatsapp-web-multidevice/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254080024,"owners_count":22011310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","go","golang","golang-whatsapp","golang-whatsapp-api","rest","rest-api","whatsapp","whatsapp-api","whatsapp-api-go","whatsapp-multi-device","whatsapp-web-multi-device"],"created_at":"2024-09-24T14:13:51.983Z","updated_at":"2026-02-13T00:59:18.395Z","avatar_url":"https://github.com/aldinokemal.png","language":"Go","funding_links":["https://patreon.com/aldinokemal","https://www.patreon.com/c/aldinokemal"],"categories":["MCP","Go","📚 Projects (1974 total)"],"sub_categories":["MCP Servers"],"readme":"\u003c!-- markdownlint-disable MD041 --\u003e\n\u003c!-- markdownlint-disable-next-line MD033 --\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- markdownlint-disable-next-line MD033 --\u003e\n  \u003cimg src=\"src/views/assets/gowa.svg\" alt=\"GoWA Logo\" width=\"200\" height=\"200\"\u003e\n\n## Golang WhatsApp - Built with Go for efficient memory use\n\n\u003c/div\u003e\n\n[![Patreon](https://img.shields.io/badge/Support%20on-Patreon-orange.svg)](https://www.patreon.com/c/aldinokemal)\n**If you're using this tools to generate income, consider supporting its development by becoming a Patreon member!**\nYour support helps ensure the library stays maintained and receives regular updates!\n___\n\n![release version](https://img.shields.io/github/v/release/aldinokemal/go-whatsapp-web-multidevice)\n![Build Image](https://github.com/aldinokemal/go-whatsapp-web-multidevice/actions/workflows/build-docker-image.yaml/badge.svg)\n![Binary Release](https://github.com/aldinokemal/go-whatsapp-web-multidevice/actions/workflows/release.yml/badge.svg)\n\n## Support for `ARM` \u0026 `AMD` Architecture along with `MCP` Support\n\nDownload:\n\n- [Release](https://github.com/aldinokemal/go-whatsapp-web-multidevice/releases/latest)\n- [Docker Hub](https://hub.docker.com/r/aldinokemal2104/go-whatsapp-web-multidevice/tags)\n- [GitHub Container Registry](https://github.com/aldinokemal/go-whatsapp-web-multidevice/pkgs/container/go-whatsapp-web-multidevice)\n\n## Support n8n package (n8n.io)\n\n- [n8n package](https://www.npmjs.com/package/@aldinokemal2104/n8n-nodes-gowa)\n- Go to Settings -\u003e Community Nodes -\u003e Input `@aldinokemal2104/n8n-nodes-gowa` -\u003e Install\n\n## Breaking Changes\n\n- `v6`\n  - For REST mode, you need to run `\u003cbinary\u003e rest` instead of `\u003cbinary\u003e`\n    - for example: `./whatsapp rest` instead of ~~./whatsapp~~\n  - For MCP mode, you need to run `\u003cbinary\u003e mcp`\n    - for example: `./whatsapp mcp`\n- `v7`\n  - Starting version 7.x we are using goreleaser to build the binary, so you can download the binary\n      from [release](https://github.com/aldinokemal/go-whatsapp-web-multidevice/releases/latest)\n- `v8`\n  - **Multi-device support**: You can now connect and manage multiple WhatsApp accounts simultaneously in a single\n      server instance\n  - **New Device Management API**: New endpoints under `/devices` for managing multiple devices\n  - **Device scoping required**: All device-scoped REST API calls now require either:\n    - `X-Device-Id` header, or\n    - `device_id` query parameter\n    - If only one device is registered, it will be used as the default\n  - **WebSocket device scoping**: Connect to `/ws?device_id=\u003cid\u003e` to scope WebSocket to a specific device\n  - **Webhook payload changes**: All webhook payloads now include a top-level `device_id` field identifying which\n      device received the event:\n\n        ```json\n        {\n          \"event\": \"message\",\n          \"device_id\": \"628123456789@s.whatsapp.net\",\n          \"payload\": { ... }\n        }\n        ```\n\n## Feature\n\n- Send WhatsApp message via http API, [docs/openapi.yml](./docs/openapi.yaml) for more details\n- **MCP (Model Context Protocol) Server Support** - Integrate with AI agents and tools using standardized protocol\n- Mention someone\n  - `@phoneNumber`\n  - example: `Hello @628974812XXXX, @628974812XXXX`\n- **Ghost Mentions (Mention All)** - Mention group participants without showing `@phone` in message text\n  - Pass phone numbers in `mentions` field to mention users without visible `@` in message\n  - Use special keyword `@everyone` to automatically mention ALL group participants\n  - UI checkbox available in Send Message modal for groups\n- Post Whatsapp Status\n- **Send Stickers** - Automatically converts images to WebP sticker format\n  - Supports JPG, JPEG, PNG, WebP, and GIF formats\n  - Automatic resizing to 512x512 pixels\n  - Preserves transparency for PNG images\n  - **Animated WebP stickers** are supported but must meet WhatsApp requirements:\n    - Must be exactly **512x512 pixels**\n    - Must be under **500KB** file size\n    - Maximum **10 seconds** duration\n    - If your animated sticker doesn't meet these requirements, please resize it before uploading using tools like [ezgif.com](https://ezgif.com/resize)\n- Compress image before send\n- Compress video before send\n- Change OS name become your app (it's the device name when connect via mobile)\n  - `--os=Chrome` or `--os=MyApplication`\n- Basic Auth (able to add multi credentials)\n  - `--basic-auth=kemal:secret,toni:password,userName:secretPassword`, or you can simplify\n  - `-b=kemal:secret,toni:password,userName:secretPassword`\n- Subpath deployment support\n  - `--base-path=\"/gowa\"` (allows deployment under a specific path like `/gowa/sub/path`)\n- Customizable port and debug mode\n  - `--port 8000`\n  - `--debug true`\n- Auto reply message\n  - `--autoreply=\"Don't reply this message\"`\n- Auto mark read incoming messages\n  - `--auto-mark-read=true` (automatically marks incoming messages as read)\n- Auto download media from incoming messages\n  - `--auto-download-media=false` (disable automatic media downloads, default: `true`)\n- Auto reject incoming calls\n  - `--auto-reject-call=true` or `WHATSAPP_AUTO_REJECT_CALL=true` (see [Webhook Payload](./docs/webhook-payload.md#call-events) for call events)\n- Configurable presence on connect\n  - `--presence-on-connect=unavailable` or `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`\n  - `available` — mark as online (suppresses phone notifications)\n  - `unavailable` — register pushname without going online (default, preserves phone notifications)\n  - `none` — skip presence entirely (pushname won't be registered, contacts may see \"-\" as name)\n- Webhook for received message\n  - `--webhook=\"http://yourwebhook.site/handler\"`, or you can simplify\n  - `-w=\"http://yourwebhook.site/handler\"`\n  - for more detail, see [Webhook Payload Documentation](./docs/webhook-payload.md)\n- Webhook Secret\n  Our webhook will be sent to you with an HMAC header and a sha256 default key `secret`.\n\n  You may modify this by using the option below:\n  - `--webhook-secret=\"secret\"`\n- **Webhook Payload Documentation**\n  For detailed webhook payload schemas, security implementation, and integration examples,\n  see [Webhook Payload Documentation](./docs/webhook-payload.md)\n- **Webhook Event Filtering**\n  You can filter which events are forwarded to your webhook using:\n  - `--webhook-events=\"message,message.ack\"` (comma-separated list)\n  - Or environment variable: `WHATSAPP_WEBHOOK_EVENTS=message,message.ack`\n\n  **Available Webhook Events:**\n\n  | Event                | Description                                   |\n  |----------------------|-----------------------------------------------|\n  | `message`            | Text, media, contact, location messages       |\n  | `message.reaction`   | Emoji reactions to messages                   |\n  | `message.revoked`    | Deleted/revoked messages                      |\n  | `message.edited`     | Edited messages                               |\n  | `message.ack`        | Delivery and read receipts                    |\n  | `message.deleted`    | Messages deleted for the user                 |\n  | `group.participants` | Group member join/leave/promote/demote events |\n  | `group.joined`       | You were added to a group                     |\n  | `newsletter.joined`  | You subscribed to a newsletter/channel        |\n  | `newsletter.left`    | You unsubscribed from a newsletter            |\n  | `newsletter.message` | New message(s) posted in a newsletter         |\n  | `newsletter.mute`    | Newsletter mute setting changed               |\n  | `call.offer`         | Incoming call received                        |\n\n  If not configured (empty), all events will be forwarded.\n- **Webhook TLS Configuration**\n\n  If you encounter TLS certificate verification errors when using webhooks (e.g., with Cloudflare tunnels or self-signed\n  certificates):\n\n  ```\n  tls: failed to verify certificate: x509: certificate signed by unknown authority\n  ```\n\n  You can disable TLS certificate verification using:\n  - `--webhook-insecure-skip-verify=true`\n  - Or environment variable: `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`\n\n  **Security Warning**: This option disables TLS certificate verification and should only be used in:\n  - Development/testing environments\n  - Cloudflare tunnels (which provide their own security layer)\n  - Internal networks with self-signed certificates\n\n  **For production environments**, it's strongly recommended to use proper SSL certificates (e.g., Let's Encrypt)\n  instead of disabling verification.\n\n## Configuration\n\nYou can configure the application using either command-line flags (shown above) or environment variables. Configuration\ncan be set in three ways (in order of priority):\n\n1. Command-line flags (highest priority)\n2. Environment variables\n3. `.env` file (lowest priority)\n\n### Environment Variables\n\nYou can configure the application using environment variables. Configuration can be set in three ways (in order of\npriority):\n\n1. Command-line flags (highest priority)\n2. Environment variables\n3. `.env` file (lowest priority)\n\nTo use environment variables:\n\n1. Copy `.env.example` to `.env` in your project root (`cp src/.env.example src/.env`)\n2. Modify the values in `.env` according to your needs\n3. Or set the same variables as system environment variables\n\n#### Available Environment Variables\n\n| Variable                                | Description                                                   | Default                                      | Example                                       |\n|-----------------------------------------|---------------------------------------------------------------|----------------------------------------------|-----------------------------------------------|\n| `APP_PORT`                              | Application port                                              | `3000`                                       | `APP_PORT=8080`                               |\n| `APP_HOST`                              | Host address to bind the server                               | `0.0.0.0`                                    | `APP_HOST=127.0.0.1`                          |\n| `APP_DEBUG`                             | Enable debug logging                                          | `false`                                      | `APP_DEBUG=true`                              |\n| `APP_OS`                                | OS name (device name in WhatsApp)                             | `Chrome`                                     | `APP_OS=MyApp`                                |\n| `APP_BASIC_AUTH`                        | Basic authentication credentials                              | -                                            | `APP_BASIC_AUTH=user1:pass1,user2:pass2`      |\n| `APP_BASE_PATH`                         | Base path for subpath deployment                              | -                                            | `APP_BASE_PATH=/gowa`                         |\n| `APP_TRUSTED_PROXIES`                   | Trusted proxy IP ranges for reverse proxy                     | -                                            | `APP_TRUSTED_PROXIES=0.0.0.0/0`               |\n| `DB_URI`                                | Database connection URI                                       | `file:storages/whatsapp.db?_foreign_keys=on` | `DB_URI=postgres://user:pass@host/db`         |\n| `WHATSAPP_AUTO_REPLY`                   | Auto-reply message                                            | -                                            | `WHATSAPP_AUTO_REPLY=\"Auto reply message\"`    |\n| `WHATSAPP_AUTO_MARK_READ`               | Auto-mark incoming messages as read                           | `false`                                      | `WHATSAPP_AUTO_MARK_READ=true`                |\n| `WHATSAPP_AUTO_DOWNLOAD_MEDIA`          | Auto-download media from incoming messages                    | `true`                                       | `WHATSAPP_AUTO_DOWNLOAD_MEDIA=false`          |\n| `WHATSAPP_WEBHOOK`                      | Webhook URL(s) for events (comma-separated)                   | -                                            | `WHATSAPP_WEBHOOK=https://webhook.site/xxx`   |\n| `WHATSAPP_WEBHOOK_SECRET`               | Webhook secret for validation                                 | `secret`                                     | `WHATSAPP_WEBHOOK_SECRET=super-secret-key`    |\n| `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY` | Skip TLS verification for webhooks (insecure)                 | `false`                                      | `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`  |\n| `WHATSAPP_WEBHOOK_EVENTS`               | Whitelist of events to forward (comma-separated, empty = all) | -                                            | `WHATSAPP_WEBHOOK_EVENTS=message,message.ack` |\n| `WHATSAPP_ACCOUNT_VALIDATION`           | Enable account validation                                     | `true`                                       | `WHATSAPP_ACCOUNT_VALIDATION=false`           |\n| `WHATSAPP_PRESENCE_ON_CONNECT`          | Presence on connect: `available`, `unavailable`, or `none`    | `unavailable`                                | `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`    |\n| `CHATWOOT_ENABLED`                      | Enable Chatwoot integration                                   | `false`                                      | `CHATWOOT_ENABLED=true`                       |\n| `CHATWOOT_URL`                          | Chatwoot instance URL                                         | -                                            | `CHATWOOT_URL=https://app.chatwoot.com`       |\n| `CHATWOOT_API_TOKEN`                    | Chatwoot API access token                                     | -                                            | `CHATWOOT_API_TOKEN=your-api-token`           |\n| `CHATWOOT_ACCOUNT_ID`                   | Chatwoot account ID                                           | -                                            | `CHATWOOT_ACCOUNT_ID=12345`                   |\n| `CHATWOOT_INBOX_ID`                     | Chatwoot inbox ID                                             | -                                            | `CHATWOOT_INBOX_ID=67890`                     |\n| `CHATWOOT_DEVICE_ID`                    | WhatsApp device ID for Chatwoot (multi-device setup)          | -                                            | `CHATWOOT_DEVICE_ID=628xxx@s.whatsapp.net`    |\n| `CHATWOOT_IMPORT_MESSAGES`              | Enable message history sync to Chatwoot                       | `false`                                      | `CHATWOOT_IMPORT_MESSAGES=true`               |\n| `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES`   | Days of history to import                                     | `3`                                          | `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7`       |\n\n**Documentation:**\n\n- For detailed webhook payload schemas, security implementation, and integration examples, see [Webhook Payload Documentation](./docs/webhook-payload.md)\n- For comprehensive Chatwoot integration guide, see [Chatwoot Integration Documentation](./docs/chatwoot.md)\n\nNote: Command-line flags will override any values set in environment variables or `.env` file.\n\n- For more command `./whatsapp --help`\n\n## Requirements\n\n### System Requirements\n\n- **Go 1.24.0 or higher** (for building from source)\n- **FFmpeg** (for media processing)\n\n### Platform Support\n\n- Linux (x86_64, ARM64)\n- macOS (Intel, Apple Silicon)\n- Windows (x86_64) - WSL recommended\n\n### Dependencies (without docker)\n\n- Mac OS:\n  - `brew install ffmpeg webp`\n  - `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n- Linux:\n  - `sudo apt update`\n  - `sudo apt install ffmpeg webp`\n- Windows (not recommended, prefer using [WSL](https://docs.microsoft.com/en-us/windows/wsl/install)):\n  - Install ffmpeg: [download here](https://www.ffmpeg.org/download.html#build-windows)\n  - Install libwebp: [download here](https://developers.google.com/speed/webp/download) (extract and add `bin` folder to PATH)\n  - Add both to [environment variable](https://www.google.com/search?q=windows+add+to+environment+path)\n\n\u003e **Note**: The `webp` package provides `cwebp` (encoder), `dwebp` (decoder), and `webpmux` (frame extractor) tools.\n\u003e FFmpeg is required for media processing. The libwebp tools (`webpmux` + `dwebp`) are used for animated WebP sticker support.\n\n## How to use\n\n### Basic\n\n1. Clone this repo: `git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd/terminal.\n3. run `cd src`\n4. run `go run . rest` (for REST API mode)\n5. Open `http://localhost:3000`\n\n### Docker (you don't need to install in required)\n\n1. Clone this repo: `git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd/terminal.\n3. run `docker-compose up -d --build`\n4. open `http://localhost:3000`\n\n### Build your own binary\n\n1. Clone this repo `git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd/terminal.\n3. run `cd src`\n4. run\n    1. Linux \u0026 MacOS: `go build -o whatsapp`\n    2. Windows (CMD / PowerShell): `go build -o whatsapp.exe`\n5. run\n    1. Linux \u0026 MacOS: `./whatsapp rest` (for REST API mode)\n        1. run `./whatsapp --help` for more detail flags\n    2. Windows: `.\\whatsapp.exe rest` (for REST API mode)\n        1. run `.\\whatsapp.exe --help` for more detail flags\n6. open `http://localhost:3000` in browser\n\n### MCP Server (Model Context Protocol)\n\nThis application can also run as an MCP server, allowing AI agents and tools to interact with WhatsApp through a\nstandardized protocol.\n\n1. Clone this repo `git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd/terminal.\n3. run `cd src`\n4. run `go run . mcp` or build the binary and run `./whatsapp mcp`\n5. The MCP server will start on `http://localhost:8080` by default\n\n#### MCP Server Options\n\n- `--host localhost` - Set the host for MCP server (default: localhost)\n- `--port 8080` - Set the port for MCP server (default: 8080)\n\n#### Available MCP Tools\n\nThe WhatsApp MCP server provides comprehensive tools for AI agents to interact with WhatsApp through a standardized\nprotocol. Below is the complete list of available tools:\n\n##### **📱 Connection Management**\n\n- `whatsapp_connection_status` - Check whether the WhatsApp client is connected and logged in\n- `whatsapp_login_qr` - Initiate QR code based login flow with image output\n- `whatsapp_login_with_code` - Generate pairing code for multi-device login using phone number\n- `whatsapp_logout` - Sign out the current WhatsApp session\n- `whatsapp_reconnect` - Attempt to reconnect to WhatsApp using stored session\n\n##### **💬 Messaging \u0026 Communication**\n\n- `whatsapp_send_text` - Send text messages with reply and forwarding support\n- `whatsapp_send_contact` - Send contact cards with name and phone number\n- `whatsapp_send_link` - Send links with custom captions\n- `whatsapp_send_location` - Send location coordinates (latitude/longitude)\n- `whatsapp_send_image` - Send images with captions, compression, and view-once options\n- `whatsapp_send_sticker` - Send stickers with automatic WebP conversion (supports JPG/PNG/GIF)\n\n##### **📋 Chat \u0026 Contact Management**\n\n- `whatsapp_list_contacts` - Retrieve all contacts in your WhatsApp account\n- `whatsapp_list_chats` - Get recent chats with pagination and search filters\n- `whatsapp_get_chat_messages` - Fetch messages from specific chats with time/media filtering\n- `whatsapp_download_message_media` - Download images/videos from messages\n- `whatsapp_archive_chat` - Archive or unarchive a chat conversation\n\n##### **👥 Group Management**\n\n- `whatsapp_group_create` - Create new groups with optional initial participants\n- `whatsapp_group_join_via_link` - Join groups using invite links\n- `whatsapp_group_leave` - Leave groups by group ID\n- `whatsapp_group_participants` - List all participants in a group\n- `whatsapp_group_manage_participants` - Add, remove, promote, or demote group members\n- `whatsapp_group_invite_link` - Get or reset group invite links\n- `whatsapp_group_info` - Get detailed group information\n- `whatsapp_group_set_name` - Update group display name\n- `whatsapp_group_set_topic` - Update group description/topic\n- `whatsapp_group_set_locked` - Toggle admin-only group info editing\n- `whatsapp_group_set_announce` - Toggle announcement-only mode\n- `whatsapp_group_join_requests` - List pending join requests\n- `whatsapp_group_manage_join_requests` - Approve or reject join requests\n\n#### MCP Endpoints\n\n- SSE endpoint: `http://localhost:8080/sse`\n- Message endpoint: `http://localhost:8080/message`\n\n### MCP Configuration\n\nMake sure you have the MCP server running: `./whatsapp mcp`\n\nFor AI tools that support MCP with SSE (like Cursor), add this configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"whatsapp\": {\n      \"url\": \"http://localhost:8080/sse\"\n    }\n  }\n}\n```\n\n### Production Mode REST (docker)\n\nUsing Docker Hub:\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages aldinokemal2104/go-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\nUsing GitHub Container Registry:\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages ghcr.io/aldinokemal/go-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\n### Production Mode REST (docker compose)\n\ncreate `docker-compose.yml` file with the following configuration:\n\nUsing Docker Hub:\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104/go-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:/app/storages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\nUsing GitHub Container Registry:\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:/app/storages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\nor with env file (Docker Hub):\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104/go-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:/app/storages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\nor with env file (GitHub Container Registry):\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:/app/storages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\n### Production Mode (binary)\n\n- download binary from [release](https://github.com/aldinokemal/go-whatsapp-web-multidevice/releases)\n\nYou can fork or edit this source code !\n\n## Current API\n\n### MCP (Model Context Protocol) API\n\n- MCP server provides standardized tools for AI agents to interact with WhatsApp\n- Supports Server-Sent Events (SSE) transport\n- Available tools: `whatsapp_send_text`, `whatsapp_send_contact`, `whatsapp_send_link`, `whatsapp_send_location`\n- Compatible with MCP-enabled AI tools and agents\n\n### HTTP REST API\n\n- [API Specification Document](https://bump.sh/aldinokemal/doc/go-whatsapp-web-multidevice).\n- Check [docs/openapi.yml](./docs/openapi.yaml) for detailed API specifications.\n- Use [SwaggerEditor](https://editor.swagger.io) to visualize the API.\n- Generate HTTP clients using [openapi-generator](https://openapi-generator.tech/#try).\n\n| Feature  | Menu                                   | Method | URL                                 |\n|----------|----------------------------------------|--------|-------------------------------------|\n| ✅       | List Devices                           | GET    | /devices                            |\n| ✅       | Add Device                             | POST   | /devices                            |\n| ✅       | Get Device Info                        | GET    | /devices/:device_id                 |\n| ✅       | Remove Device                          | DELETE | /devices/:device_id                 |\n| ✅       | Login Device (QR)                      | GET    | /devices/:device_id/login           |\n| ✅       | Login Device (Code)                    | POST   | /devices/:device_id/login/code      |\n| ✅       | Logout Device                          | POST   | /devices/:device_id/logout          |\n| ✅       | Reconnect Device                       | POST   | /devices/:device_id/reconnect       |\n| ✅       | Get Device Status                      | GET    | /devices/:device_id/status          |\n| ✅       | Login with Scan QR                     | GET    | /app/login                          |\n| ✅       | Login With Pair Code                   | GET    | /app/login-with-code                |\n| ✅       | Logout                                 | GET    | /app/logout                         |\n| ✅       | Reconnect                              | GET    | /app/reconnect                      |\n| ✅       | Devices                                | GET    | /app/devices                        |\n| ✅       | Connection Status                      | GET    | /app/status                         |\n| ✅       | User Info                              | GET    | /user/info                          |\n| ✅       | User Avatar                            | GET    | /user/avatar                        |\n| ✅       | User Change Avatar                     | POST   | /user/avatar                        |\n| ✅       | User Change PushName                   | POST   | /user/pushname                      |\n| ✅       | User My Groups*                        | GET    | /user/my/groups                     |\n| ✅       | User My Newsletter                     | GET    | /user/my/newsletters                |\n| ✅       | User My Privacy Setting                | GET    | /user/my/privacy                    |\n| ✅       | User My Contacts                       | GET    | /user/my/contacts                   |\n| ✅       | User Check                             | GET    | /user/check                         |\n| ✅       | User Business Profile                  | GET    | /user/business-profile              |\n| ✅       | Send Message                           | POST   | /send/message                       |\n| ✅       | Send Image                             | POST   | /send/image                         |\n| ✅       | Send Audio                             | POST   | /send/audio                         |\n| ✅       | Send File                              | POST   | /send/file                          |\n| ✅       | Send Video                             | POST   | /send/video                         |\n| ✅       | Send Sticker                           | POST   | /send/sticker                       |\n| ✅       | Send Contact                           | POST   | /send/contact                       |\n| ✅       | Send Link                              | POST   | /send/link                          |\n| ✅       | Send Location                          | POST   | /send/location                      |\n| ✅       | Send Poll / Vote                       | POST   | /send/poll                          |\n| ✅       | Send Presence                          | POST   | /send/presence                      |\n| ✅       | Send Chat Presence (Typing Indicator)  | POST   | /send/chat-presence                 |\n| ✅       | Revoke Message                         | POST   | /message/:message_id/revoke         |\n| ✅       | React Message                          | POST   | /message/:message_id/reaction       |\n| ✅       | Delete Message                         | POST   | /message/:message_id/delete         |\n| ✅       | Edit Message                           | POST   | /message/:message_id/update         |\n| ✅       | Read Message (DM)                      | POST   | /message/:message_id/read           |\n| ✅       | Star Message                           | POST   | /message/:message_id/star           |\n| ✅       | Unstar Message                         | POST   | /message/:message_id/unstar         |\n| ✅       | Download Message Media                 | GET    | /message/:message_id/download       |\n| ✅       | Join Group With Link                   | POST   | /group/join-with-link               |\n| ✅       | Group Info From Link                   | GET    | /group/info-from-link               |\n| ✅       | Group Info                             | GET    | /group/info                         |\n| ✅       | Leave Group                            | POST   | /group/leave                        |\n| ✅       | Create Group                           | POST   | /group                              |\n| ✅       | List Participants in Group             | GET    | /group/participants                 |\n| ✅       | Add Participants in Group              | POST   | /group/participants                 |\n| ✅       | Remove Participant in Group            | POST   | /group/participants/remove          |\n| ✅       | Promote Participant in Group           | POST   | /group/participants/promote         |\n| ✅       | Demote Participant in Group            | POST   | /group/participants/demote          |\n| ✅       | Export Group Participants (CSV)        | GET    | /group/participants/export          |\n| ✅       | List Requested Participants in Group   | GET    | /group/participant-requests         |\n| ✅       | Approve Requested Participant in Group | POST   | /group/participant-requests/approve |\n| ✅       | Reject Requested Participant in Group  | POST   | /group/participant-requests/reject  |\n| ✅       | Set Group Photo                        | POST   | /group/photo                        |\n| ✅       | Set Group Name                         | POST   | /group/name                         |\n| ✅       | Set Group Locked                       | POST   | /group/locked                       |\n| ✅       | Set Group Announce                     | POST   | /group/announce                     |\n| ✅       | Set Group Topic                        | POST   | /group/topic                        |\n| ✅       | Get Group Invite Link                  | GET    | /group/invite-link                  |\n| ✅       | Unfollow Newsletter                    | POST   | /newsletter/unfollow                |\n| ✅       | Get Chat List                          | GET    | /chats                              |\n| ✅       | Get Chat Messages                      | GET    | /chat/:chat_jid/messages            |\n| ✅       | Label Chat                             | POST   | /chat/:chat_jid/label               |\n| ✅       | Pin Chat                               | POST   | /chat/:chat_jid/pin                 |\n| ✅       | Archive Chat                           | POST   | /chat/:chat_jid/archive             |\n| ✅       | Set Disappearing Messages              | POST   | /chat/:chat_jid/disappearing        |\n\n```\n✅ = Available\n❌ = Not Available Yet\n* = Has known limitations (see notes below)\n```\n\n**Notes:**\n\n- `*User My Groups`: Returns a maximum of 500 groups due to WhatsApp protocol limitation. This is enforced by WhatsApp servers, not this API. See [whatsmeow source](https://github.com/tulir/whatsmeow/blob/main/group.go) for details.\n\n## User Interface\n\n### MCP UI\n\n- Setup MCP (tested in cursor)\n  ![Setup MCP](https://i.ibb.co/vCg4zNWt/mcpsetup.png)\n- Test MCP\n  ![Test MCP](https://i.ibb.co/B2LX38DW/mcptest.png)\n- Successfully setup MCP\n  ![Success MCP](https://i.ibb.co/1fCx0Myc/mcpsuccess.png)\n\n### HTTP REST API UI\n\n| Description          | Image                                                         |\n|----------------------|---------------------------------------------------------------|\n| Homepage             | ![Homepage](./gallery/homepage.png?v=1)                       |\n| Login                | ![Login](./gallery/login.png)                                 |\n| Login With Code      | ![Login With Code](./gallery/login-with-code.png)             |\n| Send Message         | ![Send Message](./gallery/send-message.png)                   |\n| Send Image           | ![Send Image](./gallery/send-image.png)                       |\n| Send File            | ![Send File](./gallery/send-file.png)                         |\n| Send Video           | ![Send Video](./gallery/send-video.png)                       |\n| Send Sticker         | ![Send Sticker](./gallery/send-sticker.png)                   |\n| Send Contact         | ![Send Contact](./gallery/send-contact.png)                   |\n| Send Location        | ![Send Location](./gallery/send-location.png)                 |\n| Send Audio           | ![Send Audio](./gallery/send-audio.png)                       |\n| Send Poll            | ![Send Poll](./gallery/send-poll.png)                         |\n| Send Presence        | ![Send Presence](./gallery/send-presence.png)                 |\n| Send Link            | ![Send Link](./gallery/send-link.png)                         |\n| My Group             | ![My Group](./gallery/group-list.png)                         |\n| Group Info From Link | ![Group Info From Link](./gallery/group-info-from-link.png)   |\n| Create Group         | ![Create Group](./gallery/group-create.png)                   |\n| Join Group with Link | ![Join Group with Link](./gallery/group-join-link.png)        |\n| Manage Participant   | ![Manage Participant](./gallery/group-manage-participant.png) |\n| My Newsletter        | ![My Newsletter](./gallery/newsletter-list.png)               |\n| My Contacts          | ![My Contacts](./gallery/contact-list.png)                    |\n| Business Profile     | ![Business Profile](./gallery/business-profile.png)           |\n\n### Mac OS NOTE\n\n- Please do this if you have an error (invalid flag in pkg-config --cflags: -Xpreprocessor)\n  `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n\n## Important\n\n- This project is unofficial and not affiliated with WhatsApp.\n- Please use official WhatsApp API to avoid any issues.\n- We only able to run MCP or REST API, this is limitation from whatsmeow library. independent MCP will be available in\n  the future.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faldinokemal%2Fgo-whatsapp-web-multidevice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faldinokemal%2Fgo-whatsapp-web-multidevice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faldinokemal%2Fgo-whatsapp-web-multidevice/lists"}