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:
| Field | Type | Required | Description |
|---|
instanceId | string | Yes | VZaps instance ID. |
instanceToken | string | Yes | Instance token. |
phone | string | Yes | Destination phone in international digits-only format. |
id | string | No | Optional message identifier for the request. |
delay | number | No | Send delay, when supported by the API. |
mentionedIds | string[] | No | WhatsApp IDs to mention. |
replyToMessageId | string | No | WhatsApp 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:
| Field | Type | Required |
|---|
phone | string | Yes |
message | string | Yes |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
image | string | Yes |
caption | string | No |
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:
| Field | Type | Required |
|---|
phone | string | Yes |
audio | string | Yes |
ptt | boolean | No |
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:
| Field | Type | Required |
|---|
phone | string | Yes |
document | string | Yes |
fileName | string | Yes |
caption | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
video | string | Yes |
caption | string | No |
jpegThumbnail | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
sticker | string | Yes |
pngThumbnail | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
gif | string | Yes |
caption | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
latitude | number | Yes |
longitude | number | Yes |
name | string | No |
address | string | No |
$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.
Function: $vzaps->messages()->sendContact()
Payload:
| Field | Type | Required |
|---|
phone | string | Yes |
contactName | string | Yes |
contactPhone | string | Yes |
$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.
Function: $vzaps->messages()->sendButtons()
Payload:
| Field | Type | Required |
|---|
phone | string | Yes |
message | string | Yes |
buttons | array<int, array{id: string, text: string}> | Yes |
footer | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
title | string | Yes |
description | string | Yes |
buttonText | string | Yes |
sections | array | Yes |
footer | string | No |
$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.
Link preview
Function: $vzaps->messages()->sendLink()
Payload:
| Field | Type | Required |
|---|
phone | string | Yes |
message | string | Yes |
linkUrl | string | Yes |
title | string | Yes |
linkDescription | string | Yes |
jpegThumbnail | string | No |
$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:
| Field | Type | Required |
|---|
phone | string | Yes |
name | string | Yes |
options | string[] | Yes |
selectableOptionsCount | number | No |
hideParticipantNames | boolean | No |
endTime | string | No |
allowAddOption | boolean | No |
$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 }.
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.