Evolution Api Go - Evo Go
by @impa365
Complete WhatsApp automation via Evolution API Go v3 - instances, messages (text/media/polls/carousels), groups, contacts, chats, communities, newsletters, and real-time webhooks
clawhub install evogo๐ About This Skill
name: evogo description: Complete WhatsApp automation via Evolution API Go v3 - instances, messages (text/media/polls/carousels), groups, contacts, chats, communities, newsletters, and real-time webhooks metadata: openclaw: requires: bins: [] env: EVOGO_API_URL: "Evolution API base URL (e.g., http://localhost:8080 or https://api.yourdomain.com)" EVOGO_GLOBAL_KEY: "Global API key for admin operations (instance management)" EVOGO_INSTANCE: "Default instance name" EVOGO_API_KEY: "Instance-specific token for messaging operations"
evoGo - Evolution API Go v3
Complete WhatsApp automation via Evolution API Go v3. Send messages, manage groups, automate conversations, and integrate webhooks.
๐ Quick Start
1. Set Environment Variables
{
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)
}
}
2. Create Instance & Connect
# Create instance
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
}'Connect & get QR code
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.
3. Send First Message
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! ๐"
}'
๐ Authentication
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.
๐ฆ Core Concepts
Phone Number Formats
| 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 |
Message Delay
Add delay (milliseconds) to avoid rate limits:
{
"number": "5511999999999",
"text": "Message with delay",
"delay": 2000
}
๐ฏ Feature Reference
๐ฑ Instance Management
#### Create Instance
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#### Connect / Get QR Code
POST /instance/connect
GET /instance/qr
Header: apikey: $EVOGO_API_KEY{"number": ""} # Leave empty for QR, or phone number for pairing
#### Connection Status
GET /instance/status
Header: apikey: $EVOGO_API_KEY
Returns: connected, connecting, disconnected
#### List All Instances
GET /instance/all
Header: apikey: $EVOGO_GLOBAL_KEY
#### Delete Instance
DELETE /instance/delete/{instance}
Header: apikey: $EVOGO_GLOBAL_KEY
#### Force Reconnect
POST /instance/forcereconnect/{instance}
Header: apikey: $EVOGO_GLOBAL_KEY{"number": "5511999999999"}
#### Logs
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
๐ฌ Send Messages
#### Text Message
POST /send/text{
"number": "5511999999999",
"text": "Hello World!",
"delay": 1000,
"mentionsEveryOne": false,
"mentioned": ["5511888888888@s.whatsapp.net"]
}
#### Media (URL)
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)#### Media (File Upload)
POST /send/media
Content-Type: multipart/form-datanumber=5511999999999
type=image
file=@/path/to/file.jpg
caption=Photo caption
filename=custom-name.jpg
#### Poll
POST /send/poll{
"number": "5511999999999",
"question": "Best language?",
"options": ["JavaScript", "Python", "Go", "Rust"],
"selectableCount": 1
}
Get poll results:
GET /polls/{messageId}/results
#### Sticker
POST /send/sticker{
"number": "5511999999999",
"sticker": "https://example.com/sticker.webp"
}
Auto-converts images to WebP format.
#### Location
POST /send/location{
"number": "5511999999999",
"latitude": -23.550520,
"longitude": -46.633308,
"name": "Avenida Paulista",
"address": "Av. Paulista, Sรฃo Paulo - SP"
}
#### Contact
POST /send/contact{
"number": "5511999999999",
"vcard": {
"fullName": "Joรฃo Silva",
"phone": "5511988888888",
"organization": "Company XYZ",
"email": "joao@example.com"
}
}
#### Carousel
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๐จ Message Operations
#### React to Message
POST /message/react{
"number": "5511999999999",
"reaction": "๐",
"id": "MESSAGE_ID",
"fromMe": false,
"participant": "5511888888888@s.whatsapp.net" # Required in groups
}
Reactions: ๐, โค๏ธ, ๐, ๐ฎ, ๐ข, ๐, or "remove"
#### Typing/Recording Indicator
POST /message/presence{
"number": "5511999999999",
"state": "composing",
"isAudio": false
}
States:
composing + isAudio: false โ "typing..."composing + isAudio: true โ "recording audio..."paused โ Stops indicator#### Mark as Read
POST /message/markread{
"number": "5511999999999",
"id": ["MESSAGE_ID_1", "MESSAGE_ID_2"]
}
#### Download Media
POST /message/downloadmedia{
"message": {} # Full message object from webhook
}
Returns base64-encoded media.
#### Edit Message
POST /message/edit{
"chat": "5511999999999@s.whatsapp.net",
"messageId": "MESSAGE_ID",
"message": "Edited text"
}
Limitations:
#### Delete Message
POST /message/delete{
"chat": "5511999999999@s.whatsapp.net",
"messageId": "MESSAGE_ID"
}
Limitations:
#### Get Message Status
POST /message/status{
"id": "MESSAGE_ID"
}
Returns delivery/read status.
๐ฅ Group Management
#### List Groups
GET /group/list # Basic info (JID + name)
GET /group/myall # Full info (participants, settings, etc)
#### Get Group Info
POST /group/info{
"groupJid": "120363123456789012@g.us"
}
#### Create Group
POST /group/create{
"groupName": "My Team",
"participants": [
"5511999999999@s.whatsapp.net",
"5511888888888@s.whatsapp.net"
]
}
Requirements:
#### Manage Participants
POST /group/participant{
"groupJid": "120363123456789012@g.us",
"action": "add",
"participants": ["5511999999999@s.whatsapp.net"]
}
Actions:
add - Add membersremove - Remove memberspromote - Make admindemote - Remove admin#### Update Group Settings
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#### Get Invite Link
POST /group/invitelink{
"groupJid": "120363123456789012@g.us",
"reset": false
}
Set reset: true to revoke old link and generate new one.
#### Join Group
POST /group/join{
"code": "https://chat.whatsapp.com/XXXXXX"
}
Accepts full link or just the code.
#### Leave Group
POST /group/leave{
"groupJid": "120363123456789012@g.us"
}
#### Manage Join Requests
# Get pending requests
POST /group/requests
{
"groupJid": "120363123456789012@g.us"
}Approve/Reject
POST /group/requests/action
{
"groupJid": "120363123456789012@g.us",
"action": "approve",
"participants": ["5511999999999@s.whatsapp.net"]
}
Actions: approve, reject
#### Update Group Metadata
# Set photo
POST /group/photo
{
"groupJid": "120363123456789012@g.us",
"image": "https://example.com/photo.jpg"
}Set name
POST /group/name
{
"groupJid": "120363123456789012@g.us",
"name": "New Group Name"
}Set description
POST /group/description
{
"groupJid": "120363123456789012@g.us",
"description": "New description"
}
๐ฌ Chat Management
#### Pin/Unpin Chat
POST /chat/pin
POST /chat/unpin{
"chat": "5511999999999@s.whatsapp.net"
}
#### Archive/Unarchive Chat
POST /chat/archive
POST /chat/unarchive{
"chat": "5511999999999@s.whatsapp.net"
}
#### Mute/Unmute Chat
POST /chat/mute
POST /chat/unmute{
"chat": "5511999999999@s.whatsapp.net"
}
#### Sync History
POST /chat/history-sync-request
Requests full chat history sync (may take time).
๐ค User & Profile
#### Get User Info
POST /user/info{
"number": ["5511999999999", "5511888888888"],
"formatJid": true
}
Returns: status, profile photo, verified badge, linked devices, etc.
#### Check WhatsApp Registration
POST /user/check{
"number": ["5511999999999", "5511888888888"]
}
Returns: isInWhatsapp (true/false) for each number.
#### Get Profile Picture
POST /user/avatar{
"number": "5511999999999",
"preview": false
}
Preview options:
false - Full resolutiontrue - Low resolution preview#### Get Contacts
GET /user/contacts
Lists all saved contacts.
#### Privacy Settings
# Get privacy settings
GET /user/privacySet privacy settings
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)
#### Block/Unblock Contact
POST /user/block
POST /user/unblock{
"number": "5511999999999"
}
Get block list
GET /user/blocklist
#### Update Profile
# Set profile picture
POST /user/profilePicture
{
"image": "https://example.com/photo.jpg"
}Set profile name
POST /user/profileName
{
"name": "My Name"
}Set status/about
POST /user/profileStatus
{
"status": "My custom status"
}
Limits:
๐ท๏ธ Labels (Tags)
#### Add Label
# To chat
POST /label/chat
{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1"
}To message
POST /label/message
{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1",
"messageId": "MESSAGE_ID"
}
#### Remove Label
POST /unlabel/chat
POST /unlabel/message{
"jid": "5511999999999@s.whatsapp.net",
"labelId": "1",
"messageId": "MESSAGE_ID" # Only for /unlabel/message
}
#### Edit Label
POST /label/edit{
"labelId": "1",
"name": "New Label Name"
}
#### List Labels
GET /label
๐๏ธ Communities
#### Create Community
POST /community/create{
"communityName": "My Community",
"description": "Optional description"
}
#### Add/Remove Groups
POST /community/add
{
"communityJID": "120363123456789012@g.us",
"groupJID": ["120363111111111111@g.us"]
}POST /community/remove
{
"communityJID": "120363123456789012@g.us",
"groupJID": ["120363111111111111@g.us"]
}
๐ข Newsletters (Channels)
#### Create Newsletter
POST /newsletter/create{
"name": "My Channel",
"description": "Optional description"
}
#### List Newsletters
GET /newsletter/list
#### Get Newsletter Info
POST /newsletter/info{
"jid": "120363123456789012@newsletter"
}
#### Subscribe
POST /newsletter/subscribe{
"jid": "120363123456789012@newsletter"
}
#### Get Newsletter Messages
POST /newsletter/messages{
"jid": "120363123456789012@newsletter",
"limit": 50
}
#### Get Invite Link Info
POST /newsletter/link{
"key": "INVITE_KEY"
}
๐ Call Management
#### Reject Call
POST /call/rejectWebhook payload from call event
Use with webhook automation to auto-reject calls.
๐ฌ Common Workflows
Broadcast Message to Multiple Contacts
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
Send Image with Mentions (Groups)
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"]
}'
Auto-Create Group + Welcome Message
# 1. Create group
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')2. Send welcome message
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! ๐\"
}"
Check Multiple Numbers
curl -X POST "$EVOGO_API_URL/user/check" \
-H "apikey: $EVOGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": [
"5511999999999",
"5511888888888",
"5511777777777"
]
}'
โ ๏ธ Rate Limits & Best Practices
Delays
Always add delays between messages:{"delay": 2000} // 2 seconds
Recommended:
Error Handling
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) |
๐ Webhooks
Configure webhooks to receive real-time events:
Use POST /webhook/set endpoint to configure webhook URL (see Postman collection for details).
๐งช Troubleshooting
Instance Won't Connect
# 1. Check if instance exists
GET /instance/all2. Force reconnect
POST /instance/forcereconnect/{instance}3. Check logs
GET /instance/logs/{instance}?level=error
Messages Not Sending
1. Verify connection:GET /instance/status
2. Check phone format (no + or spaces)
3. Ensure recipient has WhatsApp
4. Verify API key is correctGroup Operations Failing
1. Check you're admin (for admin operations) 2. Verify group JID format:xxxxx@g.us
3. Ensure participants use format: number@s.whatsapp.net๐ Resources
number@s.whatsapp.net for users, xxxxx@g.us for groups๐ Known Limitations
Not 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.
๐ก Tips
1. Always check status before operations 2. Use delays to avoid rate limits (1-2s minimum) 3. Store tokens securely in environment variables 4. Handle disconnects with automatic reconnection 5. Validate numbers before sending 6. Use webhooks for real-time event handling 7. Monitor logs for troubleshooting 8. Test with small groups before mass operations
evoGo simplifies WhatsApp automation with Evolution API Go v3. For advanced features, check the full Postman collection or API documentation.