Skip to main content
All send functions live under $vzaps->messages(). In the SDK, the instance id becomes instanceId, and the X-Instance-Token header becomes instanceToken.
$base = [
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
];

Common fields

Most send operations accept these fields:
FieldTypeRequiredDescription
instanceIdstringYesVZaps instance ID.
instanceTokenstringYesInstance token.
phonestringYesDestination phone in international digits-only format.
idstringNoOptional message identifier for the request.
delaynumberNoSend delay, when supported by the API.
mentionedIdsstring[]NoWhatsApp IDs to mention.
replyToMessageIdstringNoWhatsApp message ID to reply to or quote.
The SDK supports DTOs for main requests and arrays for additional public API fields. Use the fields documented here when you need advanced options such as id, delay, or replyToMessageId.

Text

Function: $vzaps->messages()->sendText() Payload:
FieldTypeRequired
phonestringYes
messagestringYes
$vzaps->messages()->sendText([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'message' => 'Hello, your instance is connected.',
    'id' => 'MSG-TXT-001',
    'replyToMessageId' => '3EB020510113BAA6561C',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued. You can also use the DTO:
use VZaps\Sdk\Models\Messages\SendTextMessageRequest;

$vzaps->messages()->sendText(new SendTextMessageRequest(
    instanceId: 'VZ...',
    instanceToken: 'instance-token',
    phone: '5511999999999',
    message: 'Hello, your instance is connected.',
));

Image

Function: $vzaps->messages()->sendImage() Payload:
FieldTypeRequired
phonestringYes
imagestringYes
captionstringNo
image accepts a public https://... URL or a base64 data URL (data:image/<mime>;base64,<data>).
$vzaps->messages()->sendImage([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'image' => 'https://cdn.example.com/photo.jpg',
    'caption' => 'Optional caption',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Audio

Function: $vzaps->messages()->sendAudio() Payload:
FieldTypeRequired
phonestringYes
audiostringYes
pttbooleanNo
audio accepts a public URL or base64 data URL (data:audio/<mime>;base64,...). Use ptt: true when you want to send a voice note, if supported by the account flow.
$vzaps->messages()->sendAudio([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'audio' => 'https://cdn.example.com/audio.mp3',
    'ptt' => false,
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Document

Function: $vzaps->messages()->sendDocument() Payload:
FieldTypeRequired
phonestringYes
documentstringYes
fileNamestringYes
captionstringNo
$vzaps->messages()->sendDocument([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'document' => 'https://cdn.example.com/contract.pdf',
    'fileName' => 'contract.pdf',
    'caption' => 'Here is the contract',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Video

Function: $vzaps->messages()->sendVideo() Payload:
FieldTypeRequired
phonestringYes
videostringYes
captionstringNo
jpegThumbnailstringNo
$vzaps->messages()->sendVideo([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'video' => 'https://cdn.example.com/video.mp4',
    'caption' => 'Demo video',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Sticker

Function: $vzaps->messages()->sendSticker() Payload:
FieldTypeRequired
phonestringYes
stickerstringYes
pngThumbnailstringNo
$vzaps->messages()->sendSticker([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'sticker' => 'https://cdn.example.com/sticker.webp',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

GIF

Function: $vzaps->messages()->sendGif() Payload:
FieldTypeRequired
phonestringYes
gifstringYes
captionstringNo
$vzaps->messages()->sendGif([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'gif' => 'https://media.giphy.com/media/example/giphy.gif',
    'caption' => 'Animated GIF',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Location

Function: $vzaps->messages()->sendLocation() Payload:
FieldTypeRequired
phonestringYes
latitudenumberYes
longitudenumberYes
namestringNo
addressstringNo
$vzaps->messages()->sendLocation([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'latitude' => -23.55052,
    'longitude' => -46.633308,
    'name' => 'Sao Paulo',
    'address' => 'Sao Paulo, SP',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Contact

Function: $vzaps->messages()->sendContact() Payload:
FieldTypeRequired
phonestringYes
contactNamestringYes
contactPhonestringYes
$vzaps->messages()->sendContact([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'contactName' => 'Maria Silva',
    'contactPhone' => '5511888888888',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Buttons

Function: $vzaps->messages()->sendButtons() Payload:
FieldTypeRequired
phonestringYes
messagestringYes
buttonsarray<int, array{id: string, text: string}>Yes
footerstringNo
$vzaps->messages()->sendButtons([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'message' => 'Choose an option',
    'footer' => 'VZaps',
    'buttons' => [
        ['id' => 'sales', 'text' => 'Sales'],
        ['id' => 'support', 'text' => 'Support'],
    ],
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

List

Function: $vzaps->messages()->sendList() Payload:
FieldTypeRequired
phonestringYes
titlestringYes
descriptionstringYes
buttonTextstringYes
sectionsarrayYes
footerstringNo
$vzaps->messages()->sendList([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'title' => 'Main menu',
    'description' => 'Choose an option',
    'buttonText' => 'Open menu',
    'sections' => [
        [
            'title' => 'Departments',
            'rows' => [
                ['id' => 'sales', 'title' => 'Sales', 'description' => 'Talk to sales'],
                ['id' => 'support', 'title' => 'Support', 'description' => 'Talk to support'],
            ],
        ],
    ],
]);
Return: envelope { code, success, data.message_id } — message accepted/queued. Function: $vzaps->messages()->sendLink() Payload:
FieldTypeRequired
phonestringYes
messagestringYes
linkUrlstringYes
titlestringYes
linkDescriptionstringYes
jpegThumbnailstringNo
$vzaps->messages()->sendLink([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'message' => 'Check this link',
    'linkUrl' => 'https://vzaps.com',
    'title' => 'VZaps',
    'linkDescription' => 'WhatsApp API for integrations',
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Poll

Function: $vzaps->messages()->sendPoll() Payload:
FieldTypeRequired
phonestringYes
namestringYes
optionsstring[]Yes
selectableOptionsCountnumberNo
hideParticipantNamesbooleanNo
endTimestringNo
allowAddOptionbooleanNo
$vzaps->messages()->sendPoll([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'name' => 'Which channel do you prefer?',
    'options' => ['WhatsApp', 'Email', 'Phone'],
    'selectableOptionsCount' => 1,
]);
Return: envelope { code, success, data.message_id } — message accepted/queued.

Vote in a poll

Function: $vzaps->messages()->pollVote()
$vzaps->messages()->pollVote([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'messageId' => '3EB020510113BAA6561C',
    'selectedOptions' => ['WhatsApp'],
]);

React and remove reaction

Functions:
  • $vzaps->messages()->react()
  • $vzaps->messages()->removeReaction()
$vzaps->messages()->react([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'messageId' => '3EB020510113BAA6561C',
    'reaction' => '+1',
]);

$vzaps->messages()->removeReaction([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'messageId' => '3EB020510113BAA6561C',
]);

Presence and read receipts

Functions:
  • $vzaps->messages()->presence()
  • $vzaps->messages()->markRead()
$vzaps->messages()->presence([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'state' => 'composing',
]);

$vzaps->messages()->markRead([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'id' => ['3EB020510113BAA6561C'],
    'chat' => '5511999999999@s.whatsapp.net',
]);
Return: envelope { code, success, data.details }.

Edit and delete message

Functions:
  • $vzaps->messages()->edit()
  • $vzaps->messages()->delete()
$vzaps->messages()->edit([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'messageId' => '3EB020510113BAA6561C',
    'message' => 'Edited text',
]);

$vzaps->messages()->delete([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'messageId' => '3EB020510113BAA6561C',
]);
Return: envelope { code, success, data.details }.

Download media

Functions:
  • downloadImage()
  • downloadVideo()
  • downloadAudio()
  • downloadDocument()
$media = $vzaps->messages()->downloadImage([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
]);

print_r($media);
Return: envelope { code, success, data } with data.mimetype and data.data (base64 or data URL).

Standard response

Send methods return an API envelope indicating that the message was accepted/queued.
$result = $vzaps->messages()->sendText([
    'instanceId' => 'VZ...',
    'instanceToken' => 'instance-token',
    'phone' => '5511999999999',
    'message' => 'Hello',
]);

print_r($result);
See the API reference for the latest response schemas.