Evolution API

SkillCommunication

Evolution API integration for WhatsApp messaging, instance management, webhooks, and chatbot orchestration. Use when: (1) Creating or managing WhatsApp instances via Evolution API, (2) Sending messages (text, media, audio, lists, buttons, reactions), (3) Configuring webhooks or event listeners, (4) Managing groups or contacts, (5) Integrating with Typebot, Chatwoot, Dify, or OpenAI through Evolution API. Triggers on: evolution-api, evolution api, whatsapp api, baileys, whatsapp integration, send whatsapp, whatsapp webhook.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Evolution API skill

What this skill tells your AI

The instructions your AI receives, as published by pedronauck/skills in skills/community/evolution-api/SKILL.md and read by ahel’s review.

Open-source WhatsApp integration API supporting Baileys (WhatsApp Web) and official WhatsApp Business API (Cloud API). Built with Node.js + TypeScript + Express.js + Prisma.

Authentication

All requests use the apikey header. Two levels of keys exist:

  • Global API Key: Set via AUTHENTICATION_API_KEY env var. Has full access to all instances.
  • Instance Token: Per-instance key returned on creation. Scoped to that instance only.
apikey: YOUR_API_KEY

Every request follows this pattern:

curl --request <METHOD> \
  --url https://<SERVER_URL>/<path>/{instanceName} \
  --header 'Content-Type: application/json' \
  --header 'apikey: <api-key>' \
  --data '<json-body>'

Instance Lifecycle

Create Instance

POST /instance/create

{
  "instanceName": "my-instance",
  "integration": "WHATSAPP-BAILEYS",
  "token": "optional-custom-token",
  "qrcode": true,
  "number": "5511999999999",
  "rejectCall": true,
  "msgCall": "I can't answer calls",
  "groupsIgnore": true,
  "alwaysOnline": true,
  "readMessages": true,
  "readStatus": true,
  "syncFullHistory": true,
  "webhook": {
    "url": "https://your-server.com/webhook",
    "byEvents": false,
    "base64": true,
    "headers": { "authorization": "Bearer token" },
    "events": ["MESSAGES_UPSERT", "CONNECTION_UPDATE"]
  }
}

Response (201):

{
  "instance": {
    "instanceName": "my-instance",
    "instanceId": "af6c5b7c-ee27-4f94-9ea8-192393746ddd",
    "status": "created"
  },
  "hash": { "apikey": "generated-instance-token" },
  "qrcode": { "base64": "data:image/png;base64,..." }
}

The integration field accepts:

  • WHATSAPP-BAILEYS — Free, based on WhatsApp Web (Baileys library)
  • WHATSAPP-BUSINESS — Official Meta Cloud API (requires Facebook App setup)

Connect Instance (get QR code)

GET /instance/connect/{instanceName}

Returns QR code as base64 for scanning with WhatsApp mobile app.

Check Connection State

GET /instance/connectionState/{instanceName}

Returns: open, close, or connecting.

Other Instance Operations

MethodEndpointDescription
GET/instance/fetchInstancesList all instances
PUT/instance/restart/{instance}Restart instance
DELETE/instance/logout/{instance}Logout (keep instance)
DELETE/instance/delete/{instance}Delete instance entirely
POST/instance/setPresence/{instance}Set online/offline status

Sending Messages

Text Message

POST /message/sendText/{instanceName}

{
  "number": "5511999999999",
  "text": "Hello from Evolution API!",
  "delay": 1200,
  "linkPreview": true,
  "mentionsEveryOne": false,
  "mentioned": ["5511888888888@s.whatsapp.net"]
}

Response (201):

{
  "key": {
    "remoteJid": "5511999999999@s.whatsapp.net",
    "fromMe": true,
    "id": "BAE594145F4C59B4"
  },
  "message": { "extendedTextMessage": { "text": "Hello from Evolution API!" } },
  "messageTimestamp": "1717689097",
  "status": "PENDING"
}

Number format: Use full international format without + sign. For groups, use the group JID (e.g., 120363025486748009@g.us).

Reply / Quote a Message

Add quoted to any send payload:

{
  "number": "5511999999999",
  "text": "This is a reply",
  "quoted": {
    "key": { "id": "ORIGINAL_MESSAGE_ID" },
    "message": { "conversation": "Original message text" }
  }
}

Media Message

POST /message/sendMedia/{instanceName}

{
  "number": "5511999999999",
  "mediatype": "image",
  "mimetype": "image/png",
  "caption": "Check this out",
  "media": "https://example.com/image.png"
}

mediatype options: image, video, document. media accepts a URL or base64-encoded string.

Audio Message

POST /message/sendWhatsAppAudio/{instanceName}

{
  "number": "5511999999999",
  "audio": "https://example.com/audio.mp3"
}

Audio is automatically converted to WhatsApp PTT (push-to-talk) format.

Other Message Types

EndpointBody fieldsNotes
POST /message/sendLocation/{instance}number, latitude, longitude, name, address
POST /message/sendContact/{instance}number, contact: [{fullName, wuid, phoneNumber}]
POST /message/sendReaction/{instance}key: {remoteJid, fromMe, id}, reactionUse empty string to remove
POST /message/sendPoll/{instance}number, name, values[], selectableCount
POST /message/sendList/{instance}number, title, description, buttonText, footerText, sections[]
POST /message/sendButtons/{instance}number, title, description, buttons[], footer
POST /message/sendSticker/{instance}number, sticker (URL or base64)
POST /message/sendStatus/{instance}type, content, statusJidList[], captionPost to WhatsApp Status

Webhook Configuration

Set Webhook via API

POST /webhook/set/{instanceName}

{
  "webhook": {
    "enabled": true,
    "url": "https://your-server.com/webhook",
    "webhookByEvents": false,
    "webhookBase64": true,
    "events": [
      "MESSAGES_UPSERT",
      "MESSAGES_UPDATE",
      "CONNECTION_UPDATE",
      "SEND_MESSAGE"
    ]
  }
}

When webhookByEvents is true, events are sent to {url}/{EVENT_NAME} (e.g., /webhook/MESSAGES_UPSERT).

Get Webhook Config

GET /webhook/find/{instanceName}

For the complete list of available events, see references/events.md.

Chat Operations

MethodEndpointBodyDescription
POST/chat/checkIsWhatsApp/{instance}numbers: ["5511..."]Verify numbers on WhatsApp
POST/chat/findMessages/{instance}where: {key: {remoteJid}}Search messages
POST/chat/findChats/{instance}{}List all chats
POST/chat/findContacts/{instance}where: {id}Search contacts
POST/chat/markMessageAsRead/{instance}readMessages: [{remoteJid, id}]Mark as read
POST/chat/archiveChat/{instance}chat, archive: trueArchive/unarchive chat
DELETE/chat/deleteMessageForEveryone/{instance}key: {remoteJid, fromMe, id}Delete for everyone
POST/chat/updateMessage/{instance}number, text, key: {id}Edit sent message
POST/chat/sendPresence/{instance}number, presenceShow typing/recording
POST/chat/getBase64/{instance}message: {key}Get media as base64

presence values: composing, recording, paused.

Group Management

MethodEndpointBody / ParamsDescription
POST/group/create/{instance}subject, participants[]Create group
GET/group/fetchAllGroups/{instance}query: getParticipants=trueList all groups
GET/group/findGroupInfos/{instance}?groupJid=query paramGroup details
GET/group/inviteCode/{instance}?groupJid=query paramGet invite link
GET/group/participants/{instance}?groupJid=query paramList members
POST/group/updateParticipant/{instance}groupJid, action, participants[]Add/remove/promote/demote
POST/group/updateSetting/{instance}groupJid, actionLock/unlock group settings
POST/group/toggleEphemeral/{instance}groupJid, expirationSet disappearing messages
DELETE/group/leaveGroup/{instance}groupJidLeave group

action for participants: add, remove, promote, demote.

Profile Settings

MethodEndpointDescription
POST/profile/fetchProfile/{instance}Fetch profile info
POST/profile/updateProfileName/{instance}Update display name
POST/profile/updateProfileStatus/{instance}Update status text
POST/profile/updateProfilePicture/{instance}Update avatar
DELETE/profile/removeProfilePicture/{instance}Remove avatar
GET/profile/fetchPrivacySettings/{instance}Get privacy settings
POST/profile/updatePrivacySettings/{instance}Update privacy

Integrations

Evolution API supports chatbot integrations configured per-instance:

IntegrationEndpoints prefixDescription
Typebot/typebot/Conversational bot flows
Chatwoot/chatwoot/Help desk / CRM
OpenAI/openai/AI-powered bots + audio transcription
Dify/dify/AI agent platform
n8n/n8n/Workflow automation
Flowise/flowise/LLM flow builder
EvoAI/evoai/Evolution's own AI bot

Each integration follows the CRUD pattern: create, find, update, delete, settings, change-status, fetch-session.

Event Delivery Channels

Beyond webhooks, Evolution API can deliver events via:

  • RabbitMQPOST /rabbitmq/set/{instance}
  • Amazon SQSPOST /sqs/set/{instance}
  • WebSocket (Socket.io)POST /websocket/set/{instance}
  • Apache Kafka — Via environment variables

Advanced References

Signals

GitHub stars
611
Forks
88
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
evolution-api
Source
github.com/pedronauck/skills