Skip to main content
The Pilot Status Evolution V2 API Layer is a transparent compatibility bridge for applications built on Evolution API V2. Changing your base URL to the Pilot Status layer endpoint is all it takes to move your infrastructure — your request bodies, response parsing, webhook handlers, and authentication headers all stay exactly as they are.

Base URL

Update your base URL environment variable or HTTP client configuration to the following:
Every path you currently call on your Evolution V2 server appends to this base URL without any modification.

Authentication

Pass your Pilot Status API key in the apikey header, exactly as Evolution V2 expects:
You do not need to change any authentication logic in your application — only the API key value itself needs to be replaced with your Pilot Status key.

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).
Sends an approved WhatsApp template message to a recipient.
Sends a plain text message, optionally with a link preview and mentions.
Sends an image, video, document, or audio file by public URL (base64 and multipart file upload are also supported).
Sends a PTV (round video note) by public URL (base64 and multipart file upload are also supported).
Sends a WhatsApp voice/PTT audio by public URL (base64 and multipart file upload are also supported).
Publishes a status (story) as text or media by public URL (media file upload is also supported).
Sends a sticker by public URL (base64 and multipart file upload are also supported).
Sends a geographic location pin with a name and address.
Sends one or more contact cards (vCards).
Reacts to an existing message with an emoji.
Sends a poll with selectable options.
Sends an interactive list message with sections and selectable rows.
Sends an interactive buttons message. Each button type is one of reply, copy, url, call, pix.
Sends a carousel of cards, each with text, an optional thumbnail, and its own buttons.

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.
Checks whether one or more numbers are registered on WhatsApp.
Marks one or more messages as read (sends read receipts).
Archives or unarchives a chat.
Marks a chat as unread.
Deletes a message for all participants in the chat.
Downloads a media message and returns it as a base64 string.
Edits the text of a message previously sent by this number.
Sends a presence indicator (typing, recording, etc.) to a chat.
Blocks or unblocks a contact.
Returns the chat matching the given remote JID. Pass remoteJid as a required query parameter (e.g. ?remoteJid=5511999999999@s.whatsapp.net); there is no request body.No request body.
Searches stored contacts, optionally filtered by a where clause. Send an empty body to return all contacts.
Searches stored messages, optionally filtered by a where clause and limited by limit.
Searches message delivery/read status updates, optionally filtered by a where clause and limited by limit.
Returns stored chats, optionally filtered by a 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.
Fetches the profile picture URL of a WhatsApp contact.
Fetches the WhatsApp Business profile (category, description, email, website) of a number.
Fetches the full profile (name, status, picture, business flag) of a contact.
Updates the connected number’s own WhatsApp display name.
Updates the connected number’s own “about” / status text.
Updates the connected number’s own profile picture from a URL or base64 image.
Removes the connected number’s own profile picture. Targets the number identified by the {instance} path parameter.No request body.
Returns the connected number’s current privacy settings. Targets the number identified by the {instance} path parameter.No request body.
Updates the connected number’s privacy settings; all six fields are required.

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).
Creates a new WhatsApp group with a subject and an initial list of participants.
Changes the name/subject of an existing group.
Sets the group profile picture from an image URL.
Updates the group’s description text.
Returns metadata for a single group. Pass the group JID as the groupJid query parameter (e.g. ?groupJid=120363000000000000@g.us).No request body.
Returns every group the number belongs to. The required getParticipants query parameter ("true" or "false") controls whether each group’s participant list is included.No request body.
Returns the participant list of a group. Pass the group JID as the groupJid query parameter.No request body.
Returns the current invite code/link for a group. Pass the group JID as the groupJid query parameter.No request body.
Returns the group information behind an invite code. Pass the code as the inviteCode query parameter (e.g. ?inviteCode=F1EX5QZxO181L3TMVP31gY).No request body.
Joins a group using an invite code. Pass the code as the inviteCode query parameter.No request body.
Sends the group invite link to one or more phone numbers.
Revokes the current invite link and generates a new one.
Adds, removes, promotes, or demotes group participants.
Updates a group’s messaging and editing permissions.
Controls who is allowed to add new members to the group.
Enables or disables disappearing messages for the group.
Removes the connected number from the group. Pass the group JID as the groupJid query parameter.No request body.

Label

Manage WhatsApp chat labels for a connected number.
Returns all labels defined on the number identified by the {instance} path parameter (the number’s display name).No request body.
Adds or removes a label on a chat for the number identified by the {instance} path parameter.

Template

Manage WhatsApp message templates (HSMs) for a connected number. In every path, {instance} is the number’s display name.
Creates a new message template for the instance.
Updates an existing template identified by its Meta template ID.
Deletes a template by name (optionally scoped by its HSM ID).
Returns all templates registered for the instance. The instance display name is taken from the path.No request body.

Settings & Proxy

Configure per-number behavior settings and outbound proxy for the connected instance.
Sets the behavior settings for the instance named in the {instance} path parameter.
Returns the current settings for the instance named in the {instance} path parameter.No request body.
Sets the outbound proxy for the instance named in the {instance} path parameter.
Returns the current proxy configuration for the instance named in the {instance} path parameter.No request body.

Call & Business

Offer a WhatsApp call and read a connected business number’s product catalog and collections.
Offers a voice or video call to a recipient number for a bounded ringing duration.
Fetches the product catalog for a business WhatsApp number.
Fetches the catalog collections for a business WhatsApp number.

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): Integration-specific extras:

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).
Returns the stored media records for the instance, optionally filtered by the given fields.
Resolves a media record by 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): In addition, Pilot Status can deliver its own normalized events alongside the native ones: the call lifecycle events 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.
Replace 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 number SupportLine in the dashboard, your requests should use:
If you have multiple numbers, each one has its own display name and behaves as a separate instance — consistent with how Evolution V2 manages multiple instances.
For new projects, consider using the native Pilot Status API — it provides full access to all features including official Meta integration and advanced analytics.
For general migration guidance and an overview of all supported providers, see the API Layer overview.