Base URL
Update your base URL environment variable or HTTP client configuration to the following:Authentication
Pass your Pilot Status API key in theapikey header, exactly as Evolution V2 expects:
Supported operations
Every operation below is accepted in Evolution V2 format and executed against your Pilot Status number. In each path,{instance} is the last path segment and resolves to the display name you gave the number in the Pilot Status dashboard. Send and message operations are load-balanced across the number’s connected instances (sendReaction is the exception — it is not balanced). Any path that is not in this catalog returns 404; global (server-wide) paths return 403 — see Blocked (global) below.
Instance
Message
Send messages of every type through a connected number. Every path ends with/{instance}, the number’s display name (a path param — never put it in the body).
POST /message/sendTemplate/{instance} — Send template
POST /message/sendTemplate/{instance} — Send template
POST /message/sendText/{instance} — Send text
POST /message/sendText/{instance} — Send text
POST /message/sendMedia/{instance} — Send media
POST /message/sendMedia/{instance} — Send media
POST /message/sendPtv/{instance} — Send video note
POST /message/sendPtv/{instance} — Send video note
POST /message/sendWhatsAppAudio/{instance} — Send voice audio
POST /message/sendWhatsAppAudio/{instance} — Send voice audio
POST /message/sendStatus/{instance} — Send status
POST /message/sendStatus/{instance} — Send status
POST /message/sendSticker/{instance} — Send sticker
POST /message/sendSticker/{instance} — Send sticker
POST /message/sendLocation/{instance} — Send location
POST /message/sendLocation/{instance} — Send location
POST /message/sendContact/{instance} — Send contact
POST /message/sendContact/{instance} — Send contact
POST /message/sendReaction/{instance} — Send reaction
POST /message/sendReaction/{instance} — Send reaction
POST /message/sendPoll/{instance} — Send poll
POST /message/sendPoll/{instance} — Send poll
POST /message/sendList/{instance} — Send list
POST /message/sendList/{instance} — Send list
POST /message/sendCarousel/{instance} — Send carousel
POST /message/sendCarousel/{instance} — Send carousel
Chat
Manage chats, messages, contacts, presence and block status for a connected number. In every path,{instance} is the number’s display name (a path parameter), never a body field.
POST /chat/whatsappNumbers/{instance} — Check WhatsApp numbers
POST /chat/whatsappNumbers/{instance} — Check WhatsApp numbers
POST /chat/markMessageAsRead/{instance} — Mark messages as read
POST /chat/markMessageAsRead/{instance} — Mark messages as read
POST /chat/archiveChat/{instance} — Archive or unarchive chat
POST /chat/archiveChat/{instance} — Archive or unarchive chat
POST /chat/markChatUnread/{instance} — Mark chat as unread
POST /chat/markChatUnread/{instance} — Mark chat as unread
DELETE /chat/deleteMessageForEveryone/{instance} — Delete message for everyone
DELETE /chat/deleteMessageForEveryone/{instance} — Delete message for everyone
POST /chat/getBase64FromMediaMessage/{instance} — Get media as base64
POST /chat/getBase64FromMediaMessage/{instance} — Get media as base64
POST /chat/updateMessage/{instance} — Edit sent message
POST /chat/updateMessage/{instance} — Edit sent message
POST /chat/sendPresence/{instance} — Send presence update
POST /chat/sendPresence/{instance} — Send presence update
POST /chat/updateBlockStatus/{instance} — Block or unblock contact
POST /chat/updateBlockStatus/{instance} — Block or unblock contact
GET /chat/findChatByRemoteJid/{instance} — Find chat by JID
GET /chat/findChatByRemoteJid/{instance} — Find chat by JID
remoteJid as a required query parameter (e.g. ?remoteJid=5511999999999@s.whatsapp.net); there is no request body.No request body.POST /chat/findContacts/{instance} — Find contacts
POST /chat/findContacts/{instance} — Find contacts
where clause. Send an empty body to return all contacts.POST /chat/findMessages/{instance} — Find messages
POST /chat/findMessages/{instance} — Find messages
where clause and limited by limit.POST /chat/findStatusMessage/{instance} — Find message statuses
POST /chat/findStatusMessage/{instance} — Find message statuses
where clause and limited by limit.POST /chat/findChats/{instance} — Find chats
POST /chat/findChats/{instance} — Find chats
where clause. Send an empty body to return all chats.Profile
Read and update the connected number’s own profile (name, status, picture), inspect other users’ profiles, and manage privacy settings. In every path{instance} is the number’s display name — never send it in the body.
POST /chat/fetchProfilePictureUrl/{instance} — Get profile picture URL
POST /chat/fetchProfilePictureUrl/{instance} — Get profile picture URL
POST /chat/fetchBusinessProfile/{instance} — Get business profile
POST /chat/fetchBusinessProfile/{instance} — Get business profile
POST /chat/fetchProfile/{instance} — Get contact profile
POST /chat/fetchProfile/{instance} — Get contact profile
POST /chat/updateProfileName/{instance} — Update own display name
POST /chat/updateProfileName/{instance} — Update own display name
POST /chat/updateProfileStatus/{instance} — Update own status text
POST /chat/updateProfileStatus/{instance} — Update own status text
POST /chat/updateProfilePicture/{instance} — Update own profile picture
POST /chat/updateProfilePicture/{instance} — Update own profile picture
DELETE /chat/removeProfilePicture/{instance} — Remove own profile picture
DELETE /chat/removeProfilePicture/{instance} — Remove own profile picture
{instance} path parameter.No request body.GET /chat/fetchPrivacySettings/{instance} — Get privacy settings
GET /chat/fetchPrivacySettings/{instance} — Get privacy settings
{instance} path parameter.No request body.POST /chat/updatePrivacySettings/{instance} — Update privacy settings
POST /chat/updatePrivacySettings/{instance} — Update privacy settings
Group
Create and manage WhatsApp groups. Every path ends with/{instance}, the number’s display name, passed as a path parameter (never in the body).
POST /group/create/{instance} — Create group
POST /group/create/{instance} — Create group
POST /group/updateGroupSubject/{instance} — Update subject
POST /group/updateGroupSubject/{instance} — Update subject
POST /group/updateGroupPicture/{instance} — Update picture
POST /group/updateGroupPicture/{instance} — Update picture
POST /group/updateGroupDescription/{instance} — Update description
POST /group/updateGroupDescription/{instance} — Update description
GET /group/findGroupInfos/{instance} — Get group info
GET /group/findGroupInfos/{instance} — Get group info
groupJid query parameter (e.g. ?groupJid=120363000000000000@g.us).No request body.GET /group/fetchAllGroups/{instance} — List all groups
GET /group/fetchAllGroups/{instance} — List all groups
getParticipants query parameter ("true" or "false") controls whether each group’s participant list is included.No request body.GET /group/participants/{instance} — List participants
GET /group/participants/{instance} — List participants
groupJid query parameter.No request body.GET /group/inviteCode/{instance} — Get invite code
GET /group/inviteCode/{instance} — Get invite code
groupJid query parameter.No request body.GET /group/inviteInfo/{instance} — Get invite info
GET /group/inviteInfo/{instance} — Get invite info
inviteCode query parameter (e.g. ?inviteCode=F1EX5QZxO181L3TMVP31gY).No request body.GET /group/acceptInviteCode/{instance} — Accept invite
GET /group/acceptInviteCode/{instance} — Accept invite
inviteCode query parameter.No request body.POST /group/sendInvite/{instance} — Send invite
POST /group/sendInvite/{instance} — Send invite
POST /group/revokeInviteCode/{instance} — Revoke invite
POST /group/revokeInviteCode/{instance} — Revoke invite
POST /group/updateParticipant/{instance} — Update participants
POST /group/updateParticipant/{instance} — Update participants
POST /group/updateSetting/{instance} — Update setting
POST /group/updateSetting/{instance} — Update setting
POST /group/updateMemberAddMode/{instance} — Update member add mode
POST /group/updateMemberAddMode/{instance} — Update member add mode
POST /group/toggleEphemeral/{instance} — Toggle disappearing messages
POST /group/toggleEphemeral/{instance} — Toggle disappearing messages
DELETE /group/leaveGroup/{instance} — Leave group
DELETE /group/leaveGroup/{instance} — Leave group
groupJid query parameter.No request body.Label
Manage WhatsApp chat labels for a connected number.GET /label/findLabels/{instance} — List labels
GET /label/findLabels/{instance} — List labels
{instance} path parameter (the number’s display name).No request body.POST /label/handleLabel/{instance} — Add or remove label
POST /label/handleLabel/{instance} — Add or remove label
{instance} path parameter.Template
Manage WhatsApp message templates (HSMs) for a connected number. In every path,{instance} is the number’s display name.
POST /template/create/{instance} — Create template
POST /template/create/{instance} — Create template
POST /template/edit/{instance} — Edit template
POST /template/edit/{instance} — Edit template
DELETE /template/delete/{instance} — Delete template
DELETE /template/delete/{instance} — Delete template
GET /template/find/{instance} — List templates
GET /template/find/{instance} — List templates
Settings & Proxy
Configure per-number behavior settings and outbound proxy for the connected instance.POST /settings/set/{instance} — Update settings
POST /settings/set/{instance} — Update settings
{instance} path parameter.GET /settings/find/{instance} — Read settings
GET /settings/find/{instance} — Read settings
{instance} path parameter.No request body.POST /proxy/set/{instance} — Configure proxy
POST /proxy/set/{instance} — Configure proxy
{instance} path parameter.GET /proxy/find/{instance} — Read proxy
GET /proxy/find/{instance} — Read proxy
{instance} path parameter.No request body.Call & Business
Offer a WhatsApp call and read a connected business number’s product catalog and collections.POST /call/offer/{instance} — Offer a call
POST /call/offer/{instance} — Offer a call
POST /business/getCatalog/{instance} — Fetch product catalog
POST /business/getCatalog/{instance} — Fetch product catalog
POST /business/getCollections/{instance} — Fetch collections
POST /business/getCollections/{instance} — Fetch collections
Integrations / chatbots
Each chatbot integration —evolutionBot, typebot, openai, dify, flowise, n8n, and evoai — exposes the same set of endpoints (replace {name} with the integration name):
Event brokers
Each broker —webhook, websocket, rabbitmq, nats, pusher, sqs, and kafka — exposes set/find (replace {name} with the broker name):
Storage (S3)
Retrieve media stored in the S3/MinIO bucket for the connected number ({instance} is the number’s display name).
POST /s3/getMedia/{instance} — List stored media
POST /s3/getMedia/{instance} — List stored media
POST /s3/getMediaUrl/{instance} — Get presigned media URL
POST /s3/getMediaUrl/{instance} — Get presigned media URL
id and returns a temporary presigned download URL along with the media metadata.Blocked (global)
Server-wide (global) paths are not part of the migration layer and always return 403. This includes:GET / (root), POST /verify-creds, GET /manager, GET /metrics, GET /assets/*, POST /instance/create, and GET /instance/fetchInstances. Provision and manage your numbers through the Pilot Status dashboard or the native API instead. Any path not listed in this catalog returns 404.
Events
The layer forwards inbound events to the webhook you configured for the number, in Evolution API V2’s own native format (lowercase, dot-separated event names):call.ringing, call.connected, call.ended, and call.missed, plus number lifecycle events number.created, number.connected, number.disconnected, and number.removed.
Example: send text via Evolution V2 layer
The request below is a standard Evolution V2 send-text call routed through the Pilot Status layer. Notice that the request body uses the Evolution V2 format unchanged.MyInstance with the display name you assigned your number in the Pilot Status dashboard.
Instance name mapping
In Evolution V2, each instance represents a WhatsApp connection identified by a name. Pilot Status uses the same convention — the instance name in your URL path maps to the display name you assigned your number when connecting it through the Pilot Status dashboard. For example, if you named your numberSupportLine in the dashboard, your requests should use: