Search all guides

Reference · Tools

WhatsApp Business Cloud integration

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.

Works as
Action (binary)
Tool name
whatsapp
Operations
5 — Send , Send Template , Upload , Download , Delete
Parameters
27
Outputs
Output, Error
Credentials
WhatsApp Business API
Official docs
WhatsApp Business Cloud docs developers.facebook.com

What you can build with WhatsApp Business Cloud

  • 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.

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.

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 IDstringYes—The ID of the phone number to send from. Find this in your WhatsApp Business dashboard under Phone Numbers. Supports expressions.
Recipient’s Phone NumberstringYes—Phone 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 BodystringYes—The 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 LinkstringYes—URL 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)stringYes—WhatsApp 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)stringYes—The 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)
— CaptionstringNo—Caption for the media (not supported for audio and sticker).
— Filename (filename)stringNo—Override filename for documents. (shown when Message Type is document)
Contact NamefixedCollectionNo{}The contact card’s name. (shown when Message Type is contacts)
— Formatted NamestringYes—Full formatted name of the contact.
— First NamestringNo—The contact’s given name.
— Last NamestringNo—The contact’s family name.
— Middle NamestringNo—The contact’s middle name.
— PrefixstringNo—Name prefix, e.g. Dr.
— SuffixstringNo—Name 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
— — StreetstringNo—Street line of the address.
— — CitystringNo—City of the address.
— — StatestringNo—State or region of the address.
— — ZipstringNo—Postal code of the address.
— — CountrystringNo—Country name.
— — Country CodestringNo—Country code for the address.
— BirthdaystringNo—Contact birthday in YYYY-MM-DD format.
— EmailsfixedCollectionNo{}One or more email addresses.
— — TypeoptionsNoHOMEWhich email this is.
Options: HOME, WORK
— — EmailstringNo—The email address.
— OrganizationfixedCollectionNo{}Where the contact works.
— — CompanystringNo—Company name.
— — DepartmentstringNo—Department name.
— — TitlestringNo—Job title.
— PhonesfixedCollectionNo{}One or more phone numbers.
— — TypeoptionsNoCELLWhich phone this is.
Options: CELL, HOME, IPHONE, MAIN, WORK
— — PhonestringNo—The phone number.
— — WhatsApp User IDstringNo—If omitted, the message will display an Invite to WhatsApp button.
— URLsfixedCollectionNo{}One or more web links.
— — TypeoptionsNoHOMEWhich URL this is.
Options: HOME, WORK
— — URLstringNo—The 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)
— NamestringNo—Name of the location.
— AddressstringNo—Address of the location.

Message: Send Template

ParameterTypeRequiredDefaultDescription
Sender Phone Number IDstringYes—The ID of the phone number to send from. Supports expressions.
Recipient’s Phone NumberstringYes—Phone number of the recipient (include country code). Special characters like -, (, ), + will be stripped automatically. Supports expressions.
TemplatestringYes—Template 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
— — TextstringNo—Literal text to substitute. (shown when Type is text)
— — Currency CodestringNo—ISO 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 ValuestringNo—Text shown when the currency cannot be localised. (shown when Type is currency)
— — Date TimestringNo—Date/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
— — PayloadstringNo—Payload returned to your webhook when the button is pressed. (shown when Type is payload)
— — TextstringNo—Text 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
— — TextstringNo—Literal text to substitute. (shown when Type is text)
— — Currency CodestringNo—ISO 4217 currency code. (shown when Type is currency)
— — AmountnumberNo0Amount value (will be multiplied by 1000 for the API). (shown when Type is currency)
— — Date TimestringNo—Date/time string to use as the fallback value. (shown when Type is date_time)
— — Image LinkstringNo—URL of the header image. (shown when Type is image)

Media: Upload

ParameterTypeRequiredDefaultDescription
Sender Phone Number IDstringYes—The 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)stringNo—Override the filename for the uploaded media.

Media: Download

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

Media: Delete

ParameterTypeRequiredDefaultDescription
Media ID (mediaDeleteId)stringYes—The 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.

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

This tool sends messages and manages media using the WhatsApp Business Cloud. It is ideal for sending text, media, contact, location, or template messages, and for uploading, downloading, or deleting media files. It produces sent messages and managed media resources.

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 WhatsApp Business Cloud

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 reviewed . Spotted something wrong? Tell us.