✓ Verified 💻 Development ✓ Enhanced Data

Gowa

Interact with WhatsApp via GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation.

Rating
4.3 (455 reviews)
Downloads
42,997 downloads
Version
1.0.0

Overview

Interact with WhatsApp via GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation.

Complete Documentation

View Source →

GOWA - WhatsApp Automation via REST API

Interact with WhatsApp through GOWA (Go WhatsApp Web Multi-Device) REST API for personal automation tasks.

Installation & Setup

GOWA is available at: https://github.com/aldinokemal/go-whatsapp-web-multidevice

Download

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)

Run REST Server

bash
./gowa rest

The server starts on http://localhost:3000 by default.

Login (First Time)

Open http://localhost:3000 in a browser, scan the QR code with WhatsApp on your phone to link the device.

Production Setup

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.

Quick Examples

Ghost Mention (mention all without @)

bash
curl -X POST http://localhost:3000/send/message \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "[email protected]",
    "message": "Important announcement",
    "mentions": ["@everyone"]
  }'

Send Text Message

bash
curl -X POST http://localhost:3000/send/message \
  -H "Content-Type: application/json" \
  -d '{"phone": "628123456789", "message": "Hello!"}'

Send Image

bash
curl -X POST http://localhost:3000/send/image \
  -F "phone=628xxx" \
  -F "caption=Photo" \
  -F "image=@/path/to/image.jpg"

Check Status

bash
curl http://localhost:3000/app/status | jq .

Complete API Operations

Messages

Send Text with Ghost Mention:

  • Endpoint: POST /send/message
  • Body: {"phone": "[email protected]", "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}

Media

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"]}

Connection & Status

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

Groups

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: Create Group: Get Group Participants: Add Participant:
  • POST /group/participants
  • Body: {"group_jid": "...", "participants": ["[email protected]"]}
Remove Participant:
  • POST /group/participants/remove
  • Body: {"group_jid": "...", "participants": ["[email protected]"]}
Promote to Admin:
  • POST /group/participants/promote
  • Body: {"group_jid": "...", "participants": ["[email protected]"]}
Demote from Admin:
  • POST /group/participants/demote
  • Body: {"group_jid": "...", "participants": ["[email protected]"]}
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: Join via Link:
  • POST /group/join-with-link
  • Body: {"link": "https://chat.whatsapp.com/..."}

Contacts & Chats

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

Message Operations

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

Phone Number Format

Ghost Mention Feature

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:
bash
curl -s -X POST http://localhost:3000/send/message \
  -H 'Content-Type: application/json' \
  -d '{"phone": "[email protected]", "message": "Reminder text", "mentions": ["@everyone"]}' | jq .

API Reference

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

Notes

  • 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

Installation

Terminal bash

openclaw install gowa
    
Copied!

💻Code Examples

./gowa rest

gowa-rest.txt
The server starts on `http://localhost:3000` by default.

### Login (First Time)

Open `http://localhost:3000` in a browser, scan the QR code with WhatsApp on your phone to link the device.

## Production Setup

**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.

## Quick Examples

### Ghost Mention (mention all without @)

curl http://localhost:3000/app/status | jq .

curl-httplocalhost3000appstatus--jq-.txt
## Complete API Operations

### Messages

**Send Text with Ghost Mention:**
- Endpoint: `POST /send/message`
- Body: `{"phone": "[email protected]", "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}`

### Media

**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"]}`

### Connection & Status

**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`

### Groups

**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/[email protected]`

**Create Group:**
- `POST /group`
- Body: `{"name": "Group Name", "participants": ["[email protected]"]}`

**Get Group Participants:**
- `GET /group/[email protected]`

**Add Participant:**
- `POST /group/participants`
- Body: `{"group_jid": "...", "participants": ["[email protected]"]}`

**Remove Participant:**
- `POST /group/participants/remove`
- Body: `{"group_jid": "...", "participants": ["[email protected]"]}`

**Promote to Admin:**
- `POST /group/participants/promote`
- Body: `{"group_jid": "...", "participants": ["[email protected]"]}`

**Demote from Admin:**
- `POST /group/participants/demote`
- Body: `{"group_jid": "...", "participants": ["[email protected]"]}`

**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/[email protected]`

**Join via Link:**
- `POST /group/join-with-link`
- Body: `{"link": "https://chat.whatsapp.com/..."}`

### Contacts & Chats

**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`

### Message Operations

**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`

## Phone Number Format

- **User JID:** `[email protected]`
- **Group JID:** `[email protected]`
- **Phone only:** `628123456789` (without +)

## Ghost Mention Feature

**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:**
example.sh
curl -X POST http://localhost:3000/send/message \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "[email protected]",
    "message": "Important announcement",
    "mentions": ["@everyone"]
  }'
example.sh
curl -X POST http://localhost:3000/send/message \
  -H "Content-Type: application/json" \
  -d '{"phone": "628123456789", "message": "Hello!"}'
example.sh
curl -X POST http://localhost:3000/send/image \
  -F "phone=628xxx" \
  -F "caption=Photo" \
  -F "image=@/path/to/image.jpg"
example.sh
curl -s -X POST http://localhost:3000/send/message \
  -H 'Content-Type: application/json' \
  -d '{"phone": "[email protected]", "message": "Reminder text", "mentions": ["@everyone"]}' | jq .

Tags

#web_and-frontend-development #api #automation #web

Quick Info

Category Development
Model Claude 3.5
Complexity Multi-Agent
Author aldinokemal
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install gowa