Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Interact with WhatsApp via GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation. Supports sending messages with ghost mentions (@everyone), images, documents, group management, and more. Always use REST mode (http://localhost:3000) for production.
Interact with WhatsApp via GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation. Supports sending messages with ghost mentions (@everyone), images, documents, group management, and more. Always use REST mode (http://localhost:3000) for production.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Interact with WhatsApp through GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation tasks.
GOWA is available at: https://github.com/aldinokemal/go-whatsapp-web-multidevice
Go to the releases page and download the zip matching your OS and architecture. Release files are named: whatsapp_VERSION_OS_ARCH.zip Available platforms: linux (amd64/arm64/386), darwin (amd64/arm64), windows (amd64/386)
./gowa rest The server starts on http://localhost:3000 by default.
Open http://localhost:3000 in a browser, scan the QR code with WhatsApp on your phone to link the device.
GOWA runs in REST mode: Base URL: http://localhost:3000 GOWA auto-connects to the device stored in the database โ no X-Device-Id header needed for single-device setups. โ ๏ธ Important: Use REST API (port 3000) only. Do NOT use MCP mode - all schedulers and automation depend on REST.
curl -X POST http://localhost:3000/send/message \ -H "Content-Type: application/json" \ -d '{ "phone": "120363040656010581@g.us", "message": "Important announcement", "mentions": ["@everyone"] }'
curl -X POST http://localhost:3000/send/message \ -H "Content-Type: application/json" \ -d '{"phone": "628123456789", "message": "Hello!"}'
curl -X POST http://localhost:3000/send/image \ -F "phone=628xxx" \ -F "caption=Photo" \ -F "image=@/path/to/image.jpg"
curl http://localhost:3000/app/status | jq .
Send Text with Ghost Mention: Endpoint: POST /send/message Body: {"phone": "group@g.us", "message": "text", "mentions": ["@everyone"]} @everyone mentions all members without showing @ in text โ Reply to Message: Body: {"phone": "...", "message": "...", "reply_message_id": "msg_id"} Disappearing Message: Body: {"phone": "...", "message": "...", "duration": 86400} (seconds) Forward Message: Body: {"phone": "...", "message": "...", "is_forwarded": true}
Send Image: Endpoint: POST /send/image Form data: phone, caption, image (file), compress (bool) Send Document: Endpoint: POST /send/file Form data: phone, caption, file Send Video: Endpoint: POST /send/video Form data: phone, caption, video, compress (bool) Send Audio: Endpoint: POST /send/audio Form data: phone, audio Send Sticker: Endpoint: POST /send/sticker Form data: phone, sticker (auto-converts to WebP) Send Contact: Endpoint: POST /send/contact Body: {"phone": "...", "contact_name": "...", "contact_phone": "..."} Send Location: Endpoint: POST /send/location Body: {"phone": "...", "latitude": 0.0, "longitude": 0.0} Send Link: Endpoint: POST /send/link Body: {"phone": "...", "link": "...", "caption": "..."} Send Poll: Endpoint: POST /send/poll Body: {"phone": "...", "question": "...", "options": ["A", "B"]}
Get Status: GET /app/status Returns: {"is_connected": true, "is_logged_in": true} Reconnect: GET /app/reconnect Logout: GET /app/logout Get QR Code (for login): GET /app/login Returns: PNG image (QR code to scan) Login with Pairing Code: GET /app/login-with-code?phone=628xxx
List My Groups: GET /user/my/groups Returns: {results: {data: [...]}} - groups array is at .results.data Example: curl ... | jq '.results.data[] | {Name, JID, Members: .Participants | length}' Max 500 groups (WhatsApp protocol limit) Get Group Info: GET /group/info?group_jid=xxx@g.us Create Group: POST /group Body: {"name": "Group Name", "participants": ["628xxx@s.whatsapp.net"]} Get Group Participants: GET /group/participants?group_jid=xxx@g.us Add Participant: POST /group/participants Body: {"group_jid": "...", "participants": ["628xxx@s.whatsapp.net"]} Remove Participant: POST /group/participants/remove Body: {"group_jid": "...", "participants": ["628xxx@s.whatsapp.net"]} Promote to Admin: POST /group/participants/promote Body: {"group_jid": "...", "participants": ["628xxx@s.whatsapp.net"]} Demote from Admin: POST /group/participants/demote Body: {"group_jid": "...", "participants": ["628xxx@s.whatsapp.net"]} Leave Group: POST /group/leave Body: {"group_jid": "..."} Set Group Photo: POST /group/photo Form data: group_jid, photo Set Group Name: POST /group/name Body: {"group_jid": "...", "name": "..."} Set Group Description: POST /group/topic Body: {"group_jid": "...", "topic": "..."} Get Invite Link: GET /group/invite-link?group_jid=xxx@g.us Join via Link: POST /group/join-with-link Body: {"link": "https://chat.whatsapp.com/..."}
List Contacts: GET /user/my/contacts Get Chats: GET /chats Get User Info: GET /user/info?phone=628xxx Check if User Exists: GET /user/check?phone=628xxx
Revoke/Delete Message: POST /message/{message_id}/revoke React to Message: POST /message/{message_id}/reaction Body: {"emoji": "๐"} Edit Message: POST /message/{message_id}/update Body: {"message": "edited text"} Mark as Read: POST /message/{message_id}/read Star Message: POST /message/{message_id}/star Download Media: GET /message/{message_id}/download
User JID: 628123456789@s.whatsapp.net Group JID: 120363040656010581@g.us Phone only: 628123456789 (without +)
How it works: Use "mentions": ["@everyone"] in /send/message All group members get notification No @ symbol shown in message text (true ghost mention) Tested and confirmed working โ Example for schedulers: curl -s -X POST http://localhost:3000/send/message \ -H 'Content-Type: application/json' \ -d '{"phone": "120363040656010581@g.us", "message": "Reminder text", "mentions": ["@everyone"]}' | jq .
Full OpenAPI 3.0 spec available at: OpenAPI: https://raw.githubusercontent.com/aldinokemal/go-whatsapp-web-multidevice/refs/heads/main/docs/openapi.yaml GitHub: https://github.com/aldinokemal/go-whatsapp-web-multidevice
Auto-compresses images and videos before sending Auto-converts images to WebP for stickers Max 500 groups can be retrieved (WhatsApp protocol limit) All media files can be sent as file upload or URL Supports disappearing messages with custom duration Multi-device support available via X-Device-Id header when running multiple devices Built by @aldinokemal: https://github.com/aldinokemal/go-whatsapp-web-multidevice
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.