Reference · Tools

WhatsApp Business Cloud

Send messages (text, media, contacts, location, templates) and manage media files via the WhatsApp Business Cloud API.

Action (binary) Communication v1 Binary data

The WhatsApp Business Cloud node sends messages of every supported kind — text, media, contacts, location and templates — and manages media files. A typical build is sending an order confirmation template with the receipt attached as media.

Node type
Action (binary)
Parameters
27
Outputs
Output, Error
Credentials
WhatsApp Business API

WhatsApp Business Cloud

Send WhatsApp messages and manage media via the Business Cloud API

Overview

The WhatsApp Business Cloud tool uses the Graph API to send messages and manage media. Resources: (1) message — send text messages, media messages (image, video, audio, document, sticker) via link/media-ID/binary upload, contact cards, location messages, and template messages with dynamic components (body, header, button parameters); (2) media — upload binary data to WhatsApp, download media metadata/URL, and delete media. Media messages support three source modes: link (URL), mediaId (existing WhatsApp media), and binary upload (from workflow binary data). Template messages support body parameters (text, currency, date_time), button parameters (quick_reply, url), and header parameters (text, currency, date_time, image). Authentication uses Bearer token via WhatsApp Business API access token.

Category: Communication
Tool Name: whatsapp
Version: 1

Appearance: Icon: si-whatsapp | Color: #25D366

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires WhatsApp Business API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Messagemessage
Mediamedia

Operations

OperationValueDescription
SendsendSend a message (text, media, contact, or location)
Send TemplatesendTemplateSend a template message
UploaduploadUpload media to WhatsApp
DownloaddownloadGet media URL and metadata
DeletedeleteDelete media by ID

send and sendTemplate belong to the Message resource; upload, download and delete belong to Media.

Parameters

Message: Send

ParameterTypeRequiredDefaultDescription
Sender Phone Number IDstringYesThe ID of the phone number to send from. Find this in your WhatsApp Business dashboard under Phone Numbers. Supports expressions.
Recipient’s Phone NumberstringYesPhone number of the recipient (include country code, e.g., +1234567890). Special characters like -, (, ), + will be stripped automatically. Supports expressions.
Message TypeoptionsNotextWhat kind of message to send. Each type reveals its own fields.
Options: audio, contacts, document, image, location, sticker, text, video
Text BodystringYesThe body of the text message (max 4096 characters). Supports expressions. (shown when Message Type is text)
Additional Fields (additionalFieldsText)collectionNo{}Extra options for text messages. (shown when Message Type is text)
— Show URL PreviewsbooleanNofalseWhether to display URL previews in text messages.
Media SourceoptionsNouseMediaLinkWhere the media comes from. (shown when Message Type is audio, document, image, sticker, video)
Options: useMediaLink (WhatsApp downloads the media from a URL), useMediaId (use an already-uploaded WhatsApp media ID), useMediaBinary (upload binary data from the current item)
Media LinkstringYesURL of the media file to send. Supports expressions. (shown when Message Type is audio, document, image, sticker, video and Media Source is useMediaLink)
Media ID (mediaId)stringYesWhatsApp media ID of a previously uploaded file. Supports expressions. (shown when Message Type is audio, document, image, sticker, video and Media Source is useMediaId)
Binary PropertystringYesdataName of the binary property containing the media file to upload and send. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when Message Type is audio, document, image, sticker, video and Media Source is useMediaBinary)
Filename (mediaFilename)stringYesThe filename to display (required when using a media ID for documents). (shown when Message Type is document and Media Source is useMediaId)
Additional Fields (additionalFieldsMedia)collectionNo{}Extra options for media messages. (shown when Message Type is audio, document, image, sticker, video)
— CaptionstringNoCaption for the media (not supported for audio and sticker).
— Filename (filename)stringNoOverride filename for documents. (shown when Message Type is document)
Contact NamefixedCollectionNo{}The contact card’s name. (shown when Message Type is contacts)
— Formatted NamestringYesFull formatted name of the contact.
— First NamestringNoThe contact’s given name.
— Last NamestringNoThe contact’s family name.
— Middle NamestringNoThe contact’s middle name.
— PrefixstringNoName prefix, e.g. Dr.
— SuffixstringNoName suffix, e.g. Jr.
Additional Contact FieldscollectionNo{}Everything else on the contact card. (shown when Message Type is contacts)
— AddressesfixedCollectionNo{}One or more postal addresses.
— — TypeoptionsNoHOMEWhich address this is.
Options: HOME, WORK
— — StreetstringNoStreet line of the address.
— — CitystringNoCity of the address.
— — StatestringNoState or region of the address.
— — ZipstringNoPostal code of the address.
— — CountrystringNoCountry name.
— — Country CodestringNoCountry code for the address.
— BirthdaystringNoContact birthday in YYYY-MM-DD format.
— EmailsfixedCollectionNo{}One or more email addresses.
— — TypeoptionsNoHOMEWhich email this is.
Options: HOME, WORK
— — EmailstringNoThe email address.
— OrganizationfixedCollectionNo{}Where the contact works.
— — CompanystringNoCompany name.
— — DepartmentstringNoDepartment name.
— — TitlestringNoJob title.
— PhonesfixedCollectionNo{}One or more phone numbers.
— — TypeoptionsNoCELLWhich phone this is.
Options: CELL, HOME, IPHONE, MAIN, WORK
— — PhonestringNoThe phone number.
— — WhatsApp User IDstringNoIf omitted, the message will display an Invite to WhatsApp button.
— URLsfixedCollectionNo{}One or more web links.
— — TypeoptionsNoHOMEWhich URL this is.
Options: HOME, WORK
— — URLstringNoThe web address.
LongitudenumberYes0Longitude of the location, between -180 and 180. (shown when Message Type is location)
LatitudenumberYes0Latitude of the location, between -90 and 90. (shown when Message Type is location)
Additional Fields (additionalFieldsLocation)collectionNo{}Labels shown with the pin. (shown when Message Type is location)
— NamestringNoName of the location.
— AddressstringNoAddress of the location.

Message: Send Template

ParameterTypeRequiredDefaultDescription
Sender Phone Number IDstringYesThe ID of the phone number to send from. Supports expressions.
Recipient’s Phone NumberstringYesPhone number of the recipient (include country code). Special characters like -, (, ), + will be stripped automatically. Supports expressions.
TemplatestringYesTemplate name and language code, separated by ”|” (e.g., “hello_world|en_US”). Find available templates in your WhatsApp Business Manager. Supports expressions.
ComponentsfixedCollectionNo{}Values for the template’s variable parts. Add one Component per template section.
— TypeoptionsNobodyWhich part of the template this component fills.
Options: body, button, header
— Parameters (bodyParameters)fixedCollectionNo{}Body variables, in template order. (shown when Type is body)
— — TypeoptionsNotextKind of body variable.
Options: text, currency, date_time
— — TextstringNoLiteral text to substitute. (shown when Type is text)
— — Currency CodestringNoISO 4217 currency code (e.g., USD). (shown when Type is currency)
— — AmountnumberNo0Amount value (will be multiplied by 1000 for the API). (shown when Type is currency)
— — Fallback ValuestringNoText shown when the currency cannot be localised. (shown when Type is currency)
— — Date TimestringNoDate/time string to use as the fallback value. (shown when Type is date_time)
— Sub TypeoptionsNoquick_replyWhat the button does. (shown when Type is button)
Options: quick_reply, url
— IndexnumberNo0Position of the button in the template, 0 to 2. (shown when Type is button)
— Parameters (buttonParameters)fixedCollectionNo{}The button’s value. (shown when Type is button)
— — TypeoptionsNopayloadKind of button value.
Options: payload, text
— — PayloadstringNoPayload returned to your webhook when the button is pressed. (shown when Type is payload)
— — TextstringNoText appended to the button’s URL. (shown when Type is text)
— Parameters (headerParameters)fixedCollectionNo{}Header variables. (shown when Type is header)
— — TypeoptionsNotextKind of header variable.
Options: text, currency, date_time, image
— — TextstringNoLiteral text to substitute. (shown when Type is text)
— — Currency CodestringNoISO 4217 currency code. (shown when Type is currency)
— — AmountnumberNo0Amount value (will be multiplied by 1000 for the API). (shown when Type is currency)
— — Date TimestringNoDate/time string to use as the fallback value. (shown when Type is date_time)
— — Image LinkstringNoURL of the header image. (shown when Type is image)

Media: Upload

ParameterTypeRequiredDefaultDescription
Sender Phone Number IDstringYesThe ID of the phone number to associate with the uploaded media. Supports expressions.
Binary PropertystringYesdataName of the binary property containing the file to upload. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use.
Additional Fields (additionalFieldsUpload)collectionNo{}Optional upload settings.
— Filename (mediaFileName)stringNoOverride the filename for the uploaded media.

Media: Download

ParameterTypeRequiredDefaultDescription
Media ID (mediaGetId)stringYesThe ID of the media to retrieve the URL for. Supports expressions.

Media: Delete

ParameterTypeRequiredDefaultDescription
Media ID (mediaDeleteId)stringYesThe ID of the media to delete. Supports expressions.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

One output item per input item — no operation fans out. The WhatsApp Graph API response is merged onto the top level of the item JSON; anything already on the item passes through, and binary data is forwarded.

OperationWhat lands on the item
send, sendTemplateThe send response, including the recipient entry and the created message’s ID
uploadThe uploaded media’s id — feed it into a later Send as Media ID
downloadThe media metadata (including url and mime_type) and the file itself: the bytes are fetched from the returned URL and attached as the data binary property, named whatsapp_media_<mediaId>. Existing binary properties on the item are kept alongside it
deleteThe delete acknowledgement; a 204 reply lands success: true

Recipient numbers are stripped to digits and must end up between 7 and 15 digits long; anything outside that range fails the item before the request is sent.

Usage Examples

  • Send a text message via WhatsApp
  • Send an image with caption via WhatsApp
  • Upload a document and send it to a WhatsApp contact
  • Send a template message with dynamic parameters
  • Upload media to WhatsApp and get a media ID
  • Get download URL for WhatsApp media
  • Send a location message via WhatsApp

Example Configuration

Send a text message:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "text",
    "textBody": "Hello, this is a test message!",
    "additionalFieldsText": {
      "previewUrl": true
    }
  }
}

Send an image from a public URL:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "image",
    "mediaPath": "useMediaLink",
    "mediaLink": "https://example.com/image.jpg",
    "additionalFieldsMedia": {
      "caption": "Check out this image!"
    }
  }
}

Send a document by media ID:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "document",
    "mediaPath": "useMediaId",
    "mediaId": "1234567890",
    "mediaFilename": "report.pdf",
    "additionalFieldsMedia": {
      "caption": "Monthly report",
      "filename": "report.pdf"
    }
  }
}

Send a contact card:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "contacts",
    "contactName": {
      "data": {
        "formatted_name": "John Doe",
        "first_name": "John",
        "last_name": "Doe"
      }
    },
    "additionalFieldsContact": {
      "phones": {
        "data": [
          { "type": "CELL", "phone": "+1234567890" }
        ]
      },
      "emails": {
        "data": [
          { "type": "WORK", "email": "john.doe@example.com" }
        ]
      }
    }
  }
}

Send a location:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "location",
    "longitude": -122.4194,
    "latitude": 37.7749,
    "additionalFieldsLocation": {
      "name": "San Francisco City Hall",
      "address": "1 Dr Carlton B Goodlett Pl, San Francisco, CA 94102"
    }
  }
}

Send a template message with one body variable:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "sendTemplate",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "template": "hello_world|en_US",
    "components": {
      "component": [
        {
          "type": "body",
          "bodyParameters": {
            "parameter": [
              { "type": "text", "text": "John" }
            ]
          }
        }
      ]
    }
  }
}

Send a template with header, body and button components:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "sendTemplate",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "template": "order_confirmation|en_US",
    "components": {
      "component": [
        {
          "type": "header",
          "headerParameters": {
            "parameter": [
              { "type": "text", "text": "Order #12345" }
            ]
          }
        },
        {
          "type": "body",
          "bodyParameters": {
            "parameter": [
              { "type": "text", "text": "John" },
              { "type": "text", "text": "$29.99" }
            ]
          }
        },
        {
          "type": "button",
          "sub_type": "quick_reply",
          "index": 0,
          "buttonParameters": {
            "parameter": { "type": "payload", "payload": "view_order_12345" }
          }
        }
      ]
    }
  }
}

Upload a file from an upstream node:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "media",
    "operation": "upload",
    "phoneNumberId": "123456789012345",
    "binaryPropertyName": "data",
    "additionalFieldsUpload": {
      "mediaFileName": "image.jpg"
    }
  }
}

Send the file you just uploaded, using the media ID from the previous node’s output:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "document",
    "mediaPath": "useMediaId",
    "mediaId": "{{ $json.id }}",
    "mediaFilename": "document.pdf"
  }
}

Fetch a media file’s URL and bytes:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "media",
    "operation": "download",
    "mediaGetId": "1234567890"
  }
}

Delete a media file:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "media",
    "operation": "delete",
    "mediaDeleteId": "1234567890"
  }
}

Send an image straight from an upstream node’s binary data:

{
  "type": "whatsapp",
  "parameters": {
    "resource": "message",
    "operation": "send",
    "phoneNumberId": "123456789012345",
    "recipientPhoneNumber": "+1234567890",
    "messageType": "image",
    "mediaPath": "useMediaBinary",
    "binaryPropertyName": "imageData",
    "additionalFieldsMedia": {
      "caption": "Uploaded image"
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Send WhatsApp messages (text, media, contacts, location, templates) and manage media via the WhatsApp Business Cloud API.

Media Workflow Pattern

A common pattern is to upload media first, then use the returned media ID to send messages:

  1. Upload media with Resource media / Operation upload and the binary property holding the file.
  2. Send the message with Media Source useMediaId and Media ID set to {{ $json.id }} from the upload step.

Choosing useMediaBinary instead does both in one node — the file is uploaded and sent in the same run — at the cost of re-uploading it on every send.

Sending Failures

A first message to a brand-new test number often fails until you have messaged that number from the Meta developer portal at least once; the node surfaces that case with an explicit hint.

Frequently asked questions

How do I send a file?

Upload it first with the media resource and the upload operation, pointing at the binary property holding the file, then send the message referencing the returned media ID.

Why do I need templates?

WhatsApp restricts business-initiated messages to approved templates outside an active conversation window, which is why template sending is a distinct path.

Can it handle inbound messages?

Not directly — use the WhatsApp Trigger for incoming messages and status updates, and this node to reply.

Which credential does it need?

A WhatsApp Business API credential.

Build with the WhatsApp Business Cloud node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need WhatsApp Business API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.