evogoComplete WhatsApp automation via Evolution API Go v3 - instances, messages (text/media/polls/carousels), groups, contacts, chats, communities, newsletters, and real-time webhooks
Install via ClawdBot CLI:
clawdbot install impa365/evogoComplete WhatsApp automation via Evolution API Go v3. Send messages, manage groups, automate conversations, and integrate webhooks.
```json5
{
env: {
EVOGO_API_URL: "http://localhost:8080", // Your API URL
EVOGO_GLOBAL_KEY: "your-global-admin-key", // Admin key (instance mgmt)
EVOGO_INSTANCE: "my-bot", // Instance name
EVOGO_API_KEY: "your-instance-token" // Instance token (messaging)
}
}
```
```bash
curl -X POST "$EVOGO_API_URL/instance/create" \
-H "apikey: $EVOGO_GLOBAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-bot",
"token": "my-secret-token",
"qrcode": true
}'
curl -X POST "$EVOGO_API_URL/instance/connect" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"number": ""}'
```
Scan the QR code returned in qrcode.base64.
```bash
curl -X POST "$EVOGO_API_URL/send/text" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "5511999999999",
"text": "Hello from evoGo! ๐"
}'
```
Two authentication levels:
| Type | Header | Usage |
|------|--------|-------|
| Global API Key | apikey: xxx | Admin: create/delete instances, logs |
| Instance Token | apikey: xxx | Messaging: send messages, groups, contacts |
Set via environment or pass directly in headers.
| Context | Format | Example |
|---------|--------|---------|
| Sending messages | International (no +) | 5511999999999 |
| Group participants | JID format | 5511999999999@s.whatsapp.net |
| Groups | Group JID | 120363123456789012@g.us |
| Newsletters | Newsletter JID | 120363123456789012@newsletter |
Add delay (milliseconds) to avoid rate limits:
```json
{
"number": "5511999999999",
"text": "Message with delay",
"delay": 2000
}
```
```bash
POST /instance/create
Header: apikey: $EVOGO_GLOBAL_KEY
{
"name": "bot-name",
"token": "secret-token",
"qrcode": true,
"advancedSettings": {
"rejectCalls": false,
"groupsIgnore": false,
"alwaysOnline": true,
"readMessages": true,
"readStatus": true,
"syncFullHistory": true
}
}
```
Advanced Settings:
rejectCalls - Auto-reject callsgroupsIgnore - Ignore group messagesalwaysOnline - Stay online alwaysreadMessages - Auto-mark messages as readreadStatus - Auto-mark status as viewedsyncFullHistory - Sync full chat history```bash
POST /instance/connect
GET /instance/qr
Header: apikey: $EVOGO_API_KEY
{"number": ""} # Leave empty for QR, or phone number for pairing
```
```bash
GET /instance/status
Header: apikey: $EVOGO_API_KEY
```
Returns: connected, connecting, disconnected
```bash
GET /instance/all
Header: apikey: $EVOGO_GLOBAL_KEY
```
```bash
DELETE /instance/delete/{instance}
Header: apikey: $EVOGO_GLOBAL_KEY
```
```bash
POST /instance/forcereconnect/{instance}
Header: apikey: $EVOGO_GLOBAL_KEY
{"number": "5511999999999"}
```
```bash
GET /instance/logs/{instance}?start_date=2026-01-01&end_date=2026-02-10&level=info&limit=100
Header: apikey: $EVOGO_GLOBAL_KEY
```
Log levels: info, warn, error, debug
```bash
POST /send/text
{
"number": "5511999999999",
"text": "Hello World!",
"delay": 1000,
"mentionsEveryOne": false,
"mentioned": ["5511888888888@s.whatsapp.net"]
}
```
```bash
POST /send/media
{
"number": "5511999999999",
"url": "https://example.com/photo.jpg",
"type": "image",
"caption": "Check this out!",
"filename": "photo.jpg"
}
```
Media types:
image - JPG, PNG, GIF, WEBPvideo - MP4, AVI, MOV, MKVaudio - MP3, OGG, WAV (sent as voice note/PTT)document - PDF, DOC, DOCX, XLS, XLSX, PPT, TXT, ZIPptv - Round video (Instagram-style)```bash
POST /send/media
Content-Type: multipart/form-data
number=5511999999999
type=image
file=@/path/to/file.jpg
caption=Photo caption
filename=custom-name.jpg
```
```bash
POST /send/poll
{
"number": "5511999999999",
"question": "Best language?",
"options": ["JavaScript", "Python", "Go", "Rust"],
"selectableCount": 1
}
```
Get poll results:
```bash
GET /polls/{messageId}/results
```
```bash
POST /send/sticker
{
"number": "5511999999999",
"sticker": "https://example.com/sticker.webp"
}
```
Auto-converts images to WebP format.
```bash
POST /send/location
{
"number": "5511999999999",
"latitude": -23.550520,
"longitude": -46.633308,
"name": "Avenida Paulista",
"address": "Av. Paulista, Sรฃo Paulo - SP"
}
```
```bash
POST /send/contact
{
"number": "5511999999999",
"vcard": {
"fullName": "Joรฃo Silva",
"phone": "5511988888888",
"organization": "Company XYZ",
"email": "joao@example.com"
}
}
```
```bash
POST /send/carousel
{
"number": "5511999999999",
"body": "Main carousel text",
"footer": "Footer text",
"cards": [
{
"header": {
"title": "Card 1",
"subtitle": "Subtitle",
"imageUrl": "https://example.com/img1.jpg"
},
"body": {"text": "Card description"},
"footer": "Card footer",
"buttons": [
{
"displayText": "Click Me",
"id": "btn1",
"type": "REPLY"
}
]
}
]
}
```
Button types:
REPLY - Simple replyURL - Opens linkCALL - Initiates callCOPY - Copies text```bash
POST /message/react
{
"number": "5511999999999",
"reaction": "๐",
"id": "MESSAGE_ID",
"fromMe": false,
"participant": "5511888888888@s.whatsapp.net" # Required in groups
}
```
Reactions: ๐, โค๏ธ, ๐, ๐ฎ, ๐ข, ๐, or "remove"
```bash
POST /message/presence
{
"number": "5511999999999",
"state": "composing",
"isAudio": false
}
```
States:
composing + isAudio: false โ "typing..."composing + isAudio: true โ "recording audio..."paused โ Stops indicator```bash
POST /message/markread
{
"number": "5511999999999",
"id": ["MESSAGE_ID_1", "MESSAGE_ID_2"]
}
```
```bash
POST /message/downloadmedia
{
"message": {} # Full message object from webhook
}
```
Returns base64-encoded media.
```bash
POST /message/edit
{
"chat": "5511999999999@s.whatsapp.net",
"messageId": "MESSAGE_ID",
"message": "Edited text"
}
```
Limitations:
```bash
POST /message/delete
{
"chat": "5511999999999@s.whatsapp.net",
"messageId": "MESSAGE_ID"
}
```
Limitations:
```bash
POST /message/status
{
"id": "MESSAGE_ID"
}
```
Returns delivery/read status.
```bash
GET /group/list # Basic info (JID + name)
GET /group/myall # Full info (participants, settings, etc)
```
```bash
POST /group/info
{
"groupJid": "120363123456789012@g.us"
}
```
```bash
POST /group/create
{
"groupName": "My Team",
"participants": [
"5511999999999@s.whatsapp.net",
"5511888888888@s.whatsapp.net"
]
}
```
Requirements:
```bash
POST /group/participant
{
"groupJid": "120363123456789012@g.us",
"action": "add",
"participants": ["5511999999999@s.whatsapp.net"]
}
```
Actions:
add - Add membersremove - Remove memberspromote - Make admindemote - Remove admin```bash
POST /group/settings
{
"groupJid": "120363123456789012@g.us",
"action": "announcement"
}
```
Settings:
announcement / not_announcement - Only admins send messageslocked / unlocked - Only admins edit group infoapproval_on / approval_off - Require approval to joinadmin_add / all_member_add - Who can add members```bash
POST /group/invitelink
{
"groupJid": "120363123456789012@g.us",
"reset": false
}
```
Set reset: true to revoke old link and generate new one.
```bash
POST /group/join
{
"code": "https://chat.whatsapp.com/XXXXXX"
}
```
Accepts full link or just the code.
```bash
POST /group/leave
{
"groupJid": "120363123456789012@g.us"
}
```
```bash
POST /group/requests
{
"groupJid": "120363123456789012@g.us"
}
POST /group/requests/action
{
"groupJid": "120363123456789012@g.us",
"action": "approve",
"participants": ["5511999999999@s.whatsapp.net"]
}
```
Actions: approve, reject
```bash
POST /group/photo
{
"groupJid": "120363123456789012@g.us",
"image": "https://example.com/photo.jpg"
}
POST /group/name
{
"groupJid": "120363123456789012@g.us",
"name": "New Group Name"
}
POST /group/description
{
"groupJid": "120363123456789012@g.us",
"description": "New description"
}
```
```bash
POST /chat/pin
POST /chat/unpin
{
"chat": "5511999999999@s.whatsapp.net"
}
```
```bash
POST /chat/archive
POST /chat/unarchive
{
"chat": "5511999999999@s.whatsapp.net"
}
```
```bash
POST /chat/mute
POST /chat/unmute
{
"chat": "5511999999999@s.whatsapp.net"
}
```
```bash
POST /chat/history-sync-request
```
Requests full chat history sync (may take time).
```bash
POST /user/info
{
"number": ["5511999999999", "5511888888888"],
"formatJid": true
}
```
Returns: status, profile photo, verified badge, linked devices, etc.
```bash
POST /user/check
{
"number": ["5511999999999", "5511888888888"]
}
```
Returns: isInWhatsapp (true/false) for each number.
```bash
POST /user/avatar
{
"number": "5511999999999",
"preview": false
}
```
Preview options:
false - Full resolutiontrue - Low resolution preview```bash
GET /user/contacts
```
Lists all saved contacts.
```bash
GET /user/privacy
POST /user/privacy
{
"groupAdd": "all",
"lastSeen": "contacts",
"status": "all",
"profile": "all",
"readReceipts": "all",
"callAdd": "all",
"online": "match_last_seen"
}
```
Options: all, contacts, contact_blacklist, none, match_last_seen (online only)
```bash
POST /user/block
POST /user/unblock
{
"number": "5511999999999"
}
GET /user/blocklist
```
```bash
POST /user/profilePicture
{
"image": "https://example.com/photo.jpg"
}
POST /user/profileName
{
"name": "My Name"
}
POST /user/profileStatus
{
"status": "My custom status"
}
```
Limits:
```bash
POST /label/chat
{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1"
}
POST /label/message
{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1",
"messageId": "MESSAGE_ID"
}
```
```bash
POST /unlabel/chat
POST /unlabel/message
{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1",
"messageId": "MESSAGE_ID" # Only for /unlabel/message
}
```
```bash
POST /label/edit
{
"labelId": "1",
"name": "New Label Name"
}
```
```bash
GET /label
```
```bash
POST /community/create
{
"communityName": "My Community",
"description": "Optional description"
}
```
```bash
POST /community/add
{
"communityJID": "120363123456789012@g.us",
"groupJID": ["120363111111111111@g.us"]
}
POST /community/remove
{
"communityJID": "120363123456789012@g.us",
"groupJID": ["120363111111111111@g.us"]
}
```
```bash
POST /newsletter/create
{
"name": "My Channel",
"description": "Optional description"
}
```
```bash
GET /newsletter/list
```
```bash
POST /newsletter/info
{
"jid": "120363123456789012@newsletter"
}
```
```bash
POST /newsletter/subscribe
{
"jid": "120363123456789012@newsletter"
}
```
```bash
POST /newsletter/messages
{
"jid": "120363123456789012@newsletter",
"limit": 50
}
```
```bash
POST /newsletter/link
{
"key": "INVITE_KEY"
}
```
```bash
POST /call/reject
```
Use with webhook automation to auto-reject calls.
```bash
for number in 5511999999999 5511888888888 5511777777777; do
curl -X POST "$EVOGO_API_URL/send/text" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"number\": \"$number\",
\"text\": \"Broadcast message\",
\"delay\": 2000
}"
done
```
```bash
curl -X POST "$EVOGO_API_URL/send/media" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "120363123456789012@g.us",
"url": "https://example.com/report.jpg",
"type": "image",
"caption": "Report ready! @5511999999999 please review",
"mentionedJid": ["5511999999999@s.whatsapp.net"]
}'
```
```bash
GROUP_JID=$(curl -s -X POST "$EVOGO_API_URL/group/create" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"groupName": "Team Alpha",
"participants": ["5511999999999@s.whatsapp.net"]
}' | jq -r '.groupJid')
curl -X POST "$EVOGO_API_URL/send/text" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"number\": \"$GROUP_JID\",
\"text\": \"Welcome to Team Alpha! ๐\"
}"
```
```bash
curl -X POST "$EVOGO_API_URL/user/check" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": [
"5511999999999",
"5511888888888",
"5511777777777"
]
}'
```
Always add delays between messages:
```json
{"delay": 2000} // 2 seconds
```
Recommended:
HTTP Status Codes:
200 - Success400 - Bad request (check parameters)401 - Unauthorized (check API key)404 - Not found (instance/resource doesn't exist)500 - Server errorCommon Issues:
| Error | Solution |
|-------|----------|
| Instance not connected | Run POST /instance/connect |
| Invalid phone format | Use international without +: 5511999999999 |
| Message not sent | Check GET /instance/status |
| Group operation failed | Verify you're admin (for admin operations) |
Configure webhooks to receive real-time events:
Use POST /webhook/set endpoint to configure webhook URL (see Postman collection for details).
```bash
GET /instance/all
POST /instance/forcereconnect/{instance}
GET /instance/logs/{instance}?level=error
```
GET /instance/status+ or spaces)xxxxx@g.usnumber@s.whatsapp.netnumber@s.whatsapp.net for users, xxxxx@g.us for groupsNot Working (v3.0):
/send/button - Interactive buttons (deprecated by WhatsApp)/send/list - Interactive lists (deprecated by WhatsApp)These endpoints exist but are non-functional due to WhatsApp API changes.
evoGo simplifies WhatsApp automation with Evolution API Go v3. For advanced features, check the full Postman collection or API documentation.
AI Usage Analysis
Analysis is being generatedโฆ refresh in a few seconds.
iMessage/SMS CLI for listing chats, history, watch, and sending.
Use when you need to control Discord from Clawdbot via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, fetch permissions or member/role/channel info, or handle moderation actions in Discord DMs or channels.
Use when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
Build or update the BlueBubbles external channel plugin for Clawdbot (extension package, REST send/probe, webhook inbound).
OpenClaw skill for designing Telegram Bot API workflows and command-driven conversations using direct HTTPS requests (no SDKs).