evolution-api-v2
Complete WhatsApp automation via Evolution API v2.3 - instances, messages (text/media/polls/lists/buttons/status), groups, labels, chatbots (Typebot/OpenAI/Dify/Flowise/N8N/EvoAI), webhooks, proxy, S3 storage, and Chatwoot integration
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:clawskills~impa365-evolution-apicURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aclawskills~impa365-evolution-api/file -o impa365-evolution-api.md# Evolution API v2.3
Complete WhatsApp automation via Evolution API v2.3. Send messages, manage groups, integrate chatbots (Typebot, OpenAI, Dify, Flowise, N8N, Evo AI), configure webhooks, and connect with Chatwoot.
---
## Quick Start
### 1. Set Environment Variables
```json5
{
env: {
EVO_API_URL: "http://localhost:8080", // Your API URL
EVO_GLOBAL_KEY: "your-global-admin-key", // Admin key (instance mgmt)
EVO_INSTANCE: "my-bot", // Instance name
EVO_API_KEY: "your-instance-token" // Instance token (messaging)
}
}
```
### 2. Create Instance & Connect
```bash
# Create instance (supports Baileys, Business, or Evolution integration)
curl -X POST "$EVO_API_URL/instance/create" \
-H "apikey: $EVO_GLOBAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"instanceName": "my-bot",
"qrcode": true,
"integration": "WHATSAPP-BAILEYS"
}'
# Connect & get QR code
curl -X GET "$EVO_API_URL/instance/connect/$EVO_INSTANCE" \
-H "apikey: $EVO_API_KEY"
```
Scan the QR code returned in `base64` field. Alternately pass `?number=5511999999999` for pairing code.
### 3. Send First Message
```bash
curl -X POST "$EVO_API_URL/message/sendText/$EVO_INSTANCE" \
-H "apikey: $EVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "5511999999999",
"text": "Hello from Evolution API v2! 🚀"
}'
```
---
## Authentication
Two authentication levels:
| Type | Header | Usage |
|------|--------|-------|
| **Global API Key** | `apikey: $EVO_GLOBAL_KEY` | Admin: create/delete instances, fetch all |
| **Instance API Key** | `apikey: $EVO_API_KEY` | Messaging, groups, chat, profile, labels |
All instance endpoints use the path pattern: `/{resource}/{action}/{instanceName}`
---
## Core Concepts
### Phone Number Formats
| Context | Format | Example |
|---------|--------|---------|
| **Sending messages** | Country code + number | `5511999999999` |
| **Group JID** | Group ID | `999999999999999999@g.us` |
| **User JID** | Number + suffix | `5511999999999@s.whatsapp.net` |
### Integration Types
| Value | Description |
|-------|-------------|
| `WHATSAPP-BAILEYS` | Unofficial (default, full features) |
| `WHATSAPP-BUSINESS` | Official Cloud API |
| `EVOLUTION` | Evolution channel |
### Message Delay
Add `delay` (milliseconds) to avoid rate limits:
```json
{ "delay": 1200 }
```
---
## Feature Reference
### Instance Management
#### Create Instance
```bash
POST /instance/create
Header: apikey: $EVO_GLOBAL_KEY
{
"instanceName": "my-bot",
"qrcode": true,
"integration": "WHATSAPP-BAILEYS",
// Optional
"token": "custom-api-key",
"number": "5511999999999",
// Settings (optional)
"rejectCall": false,
"msgCall": "",
"groupsIgnore": false,
"alwaysOnline": false,
"readMessages": false,
"readStatus": false,
"syncFullHistory": false,
// Proxy (optional)
"proxyHost": "",
"proxyPort": "",
"proxyProtocol": "",
"proxyUsername": "",
"proxyPassword": ""
}
```
**Inline webhook** (optional during creation):
```json
{
"webhook": {
"url": "https://webhook.site/your-id",
"byEvents": false,
"base64": true,
"headers": {
"autorization": "Bearer TOKEN"
},
"events": ["MESSAGES_UPSERT", "CONNECTION_UPDATE"]
}
}
```
**Inline RabbitMQ / SQS** (optional during creation):
```json
{
"rabbitmq": { "enabled": true, "events": ["MESSAGES_UPSERT"] },
"sqs": { "enabled": true, "events": ["MESSAGES_UPSERT"] }
}
```
**Inline Chatwoot** (optional during creation):
```json
{
"chatwootAccountId": "1",
"chatwootToken": "TOKEN",
"chatwootUrl": "https://chatwoot.com",
"chatwootSignMsg": true,
"chatwootReopenConversation": true,
"chatwootConversationPending": false,
"chatwootImportContacts": true,
"chatwootNameInbox": "evolution",
"chatwootMergeBrazilContacts": true,
"chatwootImportMessages": true,
"chatwootDaysLimitImportMessages": 3
}
```
#### Fetch Instances
```bash
GET /instance/fetchInstances
Header: apikey: $EVO_GLOBAL_KEY
# Optional query params:
# ?instanceName=my-bot
# ?instanceId=INSTANCE_ID
```
#### Connect Instance (QR Code)
```bash
GET /instance/connect/{instance}
Header: apikey: $EVO_API_KEY
# Optional: ?number=5511999999999 (for pairing code)
```
#### Connection Status
```bash
GET /instance/connectionState/{instance}
Header: apikey: $EVO_API_KEY
```
#### Restart Instance
```bash
POST /instance/restart/{instance}
Header: apikey: $EVO_API_KEY
```
#### Set Presence
```bash
POST /instance/setPresence/{instance}
Header: apikey: $EVO_API_KEY
{ "presence": "available" }
```
**Options:** `available`, `unavailable`
#### Logout Instance
```bash
DELETE /instance/logout/{instance}
Header: apikey: $EVO_API_KEY
```
#### Delete Instance
```bash
DELETE /instance/delete/{instance}
Header: apikey: $EVO_GLOBAL_KEY
```
---
### Settings
#### Set Settings
```bash
POST /settings/set/{instance}
Header: apikey: $EVO_API_KEY
{
"rejectCall": true,
"msgCall": "I do not accept calls",
"groupsIgnore": false,
"alwaysOnline": true,
"readMessages": false,
"syncFullHistory": false,
"readStatus": false
}
```
#### Find Settings
```bash
GET /settings/find/{instance}
Header: apikey: $EVO_API_KEY
```
---
### Proxy
#### Set Proxy
```bash
POST /proxy/set/{instance}
Header: apikey: $EVO_API_KEY
{
"enabled": true,
"host": "0.0.0.0",
"port": "8000",
"protocol": "http",
"username": "user",
"password": "pass"
}
```
#### Find Proxy
```bash
GET /proxy/find/{instance}
Header: apikey: $EVO_API_KEY
```
---
### Send Messages
#### Send Text
```bash
POST /message/sendText/{instance}
{
"number": "5511999999999",
"text": "Hello World!"
// Options:
// "delay": 1200,
// "linkPreview": false,
// "mentionsEveryOne": false,
// "mentioned": ["5511888888888"],
// "quoted": { "key": { "id": "MESSAGE_ID" }, "message": { "conversation": "quoted text" } }
}
```
#### Send Media (URL)
```bash
POST /message/sendMedia/{instance}
{
"number": "5511999999999",
"mediatype": "image",
"mimetype": "image/png",
"caption": "Caption text",
"media": "https://example.com/photo.jpg",
"fileName": "photo.png"
// Options: delay, quoted, mentionsEveryOne, mentioned
}
```
**Media types:** `image`, `video`, `document`
#### Send Media (File Upload)
```bash
POST /message/sendMedia/{instance}
Content-Type: multipart/form-data
# Use form-data with file field
```
#### Send PTV (Round Video)
```bash
POST /message/sendPtv/{instance}
{
"number": "5511999999999",
"video": "https://example.com/video.mp4"
// Options: delay, quoted, mentionsEveryOne, mentioned
}
```
Also supports file upload via form-data.
#### Send Narrated Audio (Voice Note)
```bash
POST /message/sendWhatsAppAudio/{instance}
{
"number": "5511999999999",
"audio": "https://example.com/audio.mp3"
// Options: delay, quoted, encoding (true/false)
}
```
#### Send Status/Stories
```bash
POST /message/sendStatus/{instance}
{
"type": "text",
"content": "My status update!",
"backgroundColor": "#008000",
"font": 1,
"allContacts": false,
"statusJidList": ["5511999999999@s.whatsapp.net"]
}
```
**Types:** `text`, `image`, `video`, `audio`
**Fonts (text only):** `1` SERIF, `2` NORICAN_REGULAR, `3` BRYNDAN_WRITE, `4` BEBASNEUE_REGULAR, `5` OSWALD_HEAVY
For image/video: use `content` as URL and `caption` for text.
#### Send Sticker
```bash
POST /message/sendSticker/{instance}
{
"number": "5511999999999",
"sticker": "https://example.com/sticker.webp"
// Options: delay, quoted
}
```
#### Send Location
```bash
POST /message/sendLocation/{instance}
{
"number": "5511999999999",
"name": "Bora Bora",
"address": "French Polynesia",
"latitude": -16.505538,
"longitude": -151.742277
// Options: delay, quoted
}
```
#### Send Contact (vCard)
```bash
POST /message/sendContact/{instance}
{
"number": "5511999999999",
"contact": [
{
"fullName": "Contact Name",
"wuid": "559999999999",
"phoneNum