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.
const 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 is typed, but request objects also accept 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
await 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.messageId } — message accepted/queued.

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>).
await 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.messageId } — 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.
await vzaps.messages.sendAudio({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  phone: '5511999999999',
  audio: 'https://cdn.example.com/audio.mp3',
  ptt: false,
});
Return: envelope { code, success, data.messageId } — message accepted/queued.

Document

Function: vzaps.messages.sendDocument() Payload:
FieldTypeRequired
phonestringYes
documentstringYes
fileNamestringYes
captionstringNo
await 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.messageId } — message accepted/queued.

Video

Function: vzaps.messages.sendVideo() Payload:
FieldTypeRequired
phonestringYes
videostringYes
captionstringNo
jpegThumbnailstringNo
await 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.messageId } — message accepted/queued.

Sticker

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

GIF

Function: vzaps.messages.sendGif() Payload:
FieldTypeRequired
phonestringYes
gifstringYes
captionstringNo
await 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.messageId } — message accepted/queued.

Location

Function: vzaps.messages.sendLocation() Payload:
FieldTypeRequired
phonestringYes
latitudenumberYes
longitudenumberYes
namestringNo
addressstringNo
await 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.messageId } — message accepted/queued.

Contact

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

Buttons

Function: vzaps.messages.sendButtons() Payload:
FieldTypeRequired
phonestringYes
messagestringYes
buttonsArray<{ id: string; text: string }>Yes
footerstringNo
await 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.messageId } — message accepted/queued.

List

Function: vzaps.messages.sendList() Payload:
FieldTypeRequired
phonestringYes
titlestringYes
descriptionstringYes
buttonTextstringYes
sectionsMessageListSection[]Yes
footerstringNo
await 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.messageId } — message accepted/queued. Function: vzaps.messages.sendLink() Payload:
FieldTypeRequired
phonestringYes
messagestringYes
linkUrlstringYes
titlestringYes
linkDescriptionstringYes
jpegThumbnailstringNo
await 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.messageId } — message accepted/queued.

Poll

Function: vzaps.messages.sendPoll() Payload:
FieldTypeRequired
phonestringYes
namestringYes
optionsstring[]Yes
selectableOptionsCountnumberNo
hideParticipantNamesbooleanNo
endTimestringNo
allowAddOptionbooleanNo
await 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.messageId } — message accepted/queued.

Vote in a poll

Function: vzaps.messages.pollVote()
await 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()
await vzaps.messages.react({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  phone: '5511999999999',
  messageId: '3EB020510113BAA6561C',
  reaction: '👍',
});

await vzaps.messages.removeReaction({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  phone: '5511999999999',
  messageId: '3EB020510113BAA6561C',
});

Presence and read receipts

Functions:
  • vzaps.messages.presence()
  • vzaps.messages.markRead()
await vzaps.messages.presence({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  phone: '5511999999999',
  state: 'composing',
});

await 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()
await vzaps.messages.edit({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  messageId: '3EB020510113BAA6561C',
  message: 'Edited text',
});

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

Download media

Functions:
  • downloadImage()
  • downloadVideo()
  • downloadAudio()
  • downloadDocument()
const media = await vzaps.messages.downloadImage({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
});

console.dir(media, { depth: null });
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.
const result = await vzaps.messages.sendText({
  instanceId: 'VZ...',
  instanceToken: 'instance-token',
  phone: '5511999999999',
  message: 'Hello',
});

console.dir(result, { depth: null });
See the API reference for the latest response schemas.