Outbound Notifications API (WhatsApp Channel)

Outbound Notifications API

The Outbound Notifications API, a Talkdesk Digital Engagement™ solution, allows you to send notification messages at scale through multiple channels using different message types. You can proactively reach your customers by sending WhatsApp messages to multiple recipients in a single batch request.

Use Case

Send bulk notifications such as:

  • Order confirmations
  • Appointment reminders
  • Promotional messages

Messages are sent from a WhatsApp sender you control and can:

  • Target multiple recipients
  • Use free-form content (within a 24-hour window)
  • Use pre-approved WhatsApp templates

Access & Authentication


Supported Channels

  • WHATSAPP

The current request schema supports the WHATSAPP channel and allows either:

  • direct content messages
  • template-based messages

For contacts without a reply in the last 24 hours, only WhatsApp template messages are permitted. See this process to register templates.

The sender identifier needs to be configured as a WhatsApp touchpoint in the Channels App, following this process.

This operation is asynchronous. A successful call returns 202 Accepted with provider message identifiers and an initial delivery status.


Endpoint

POST https://api.talkdeskapp.com/outbound/notifications

PropertyValue
MethodPOST
Path/outbound/notifications
Operation IDSendOutboundNotificationMessage
TagOutbound Messaging

Request Body

Content-Type: application/json


Top-level Schema

FieldTypeRequiredDescription
channelstringYesChannel used. Allowed value: WHATSAPP
senderstringYesSender identifier applied to all messages in the request.
messagesarrayYesMessages to send. Minimum 1, maximum 500.
optionsobjectNoOptional batch-level settings, such as grouping metadata and conversation binding.

messages[]

FieldTypeRequiredDescription
destinationsarrayYesAt least one recipient
contentobjectConditionallyRequired for direct messages
templateobjectConditionallyRequired for template messages

Each message must include exactly one of:

  • content
  • template

destinations[]

FieldTypeRequiredDescription
tostringYesRecipient destination identifier, such as a phone number.
message_idstringNoOptional client-provided message identifier for tracking.

Direct Content Messages

Due to Meta restrictions, this only applies to contact numbers that have sent messages to the touchpoint sender within the last 24 hours.

When using content, the payload shape follows the WhatsApp content model.

Example

{
  "content": {
    "body": {
      "type": "TEXT",
      "text": "Hello, how can I help you?"
    }
  }
}

Supported Direct Body Variants

FieldTypeRequiredNotes
content.body.typestringYesTEXT
content.body.textstringDependsRequired for TEXT

Template Messages

Templates must be approved by Meta.

The sending success rate depends on the quality of the sender and the template.

Template Fields

FieldTypeRequiredDescription
template.namestringYesTemplate name
template.languagestringYesLanguage code (e.g., en)
template.variablesobject\<string,string>NoVariables for personalization

Available Language Codes

Here’s the available language code for the template:

LanguageCodeLanguageCode
AfrikaansafArabicar
Arabic (UAE)ar_AEArabic (EGY)ar_EG
Arabic (LBN)ar_LBArabic (MAR)ar_MA
Arabic (QAT)ar_QAAzerbaijaniaz
Belarusianbe_BYBulgarianbg
BengalibnBengali (IND)bn_IN
CatalancaCzechcs
DanishdaGermande
German (AUT)de_ATGerman (CHE)de_CH
GreekelEnglishen
English (UAE)en_AEEnglish (AUS)en_AU
English (CAN)en_CAEnglish (UK)en_GB
English (GHA)en_GHEnglish (IRL)en_IE
English (IND)en_INEnglish (JAM)en_JM
English (MYS)en_MYEnglish (NZL)en_NZ
English (QAT)en_QAEnglish (SGP)en_SG
English (UGA)en_UGEnglish (US)en_US
English (ZAF)en_ZASpanishes
Spanish (ARG)es_ARSpanish (CHL)es_CL
Spanish (COL)es_COSpanish (CRI)es_CR
Spanish (DOM)es_DOSpanish (ECU)es_EC
Spanish (SPA)es_ESSpanish (HND)es_HN
Spanish (MEX)es_MXSpanish (PAN)es_PA
Spanish (PER)es_PESpanish (URY)es_UY
EstonianetPersianfa
FinnishfiFilipinofil
FrenchfrFrench (BEL)fr_BE
French (CAN)fr_CAFrench (CHE)fr_CH
French (CIV)fr_CIFrench (MAR)fr_MA
IrishgaGujaratigu
HausahaHebrewhe
HindihiCroatianhr
HungarianhuIndonesianid
ItalianitJapaneseja
GeorgiankaKazakhkk
KannadaknKoreanko
Kyrgyz (Kyrgyzstan)ky_KGLaolo
LithuanianltLatvianlv
MacedonianmkMalayalamml
MarathimrMalayms
NorwegiannbDutchnl
Dutch (BEL)nl_BEPunjabipa
PolishplDariprs_AF
Pashtops_AFPortuguese (BR)pt_BR
Portuguese (POR)pt_PTRomanianro
RussianruKinyarwandarw_RW
Sinhalasi_LKSlovaksk
SlovenianslAlbaniansq
SerbiansrSwedishsv
SwahiliswTamilta
TeluguteThaith
TurkishtrUkrainianuk
UrduurUzbekuz
VietnameseviChinese (CHN)zh_CN
Chinese (HKG)zh_HKChinese (TAI)zh_TW
Zuluzu

🌐 Template Example

{
  "template": {
    "name": "welcome_message",
    "language": "en",
    "variables": {
      "1": "Talkdesk",
      "2": "Support Team"
    }
  }
}

Request Options

The optional options object applies settings to the whole request:

FieldTypeRequiredDescription
bulk_idstringNoCustom bulk ID
group_idstringNoLogical group ID
group_namestringNoGroup name
group_infoobject<string,string>NoMetadata
bind_conversationobjectNoConversation binding

options.bind_conversation

FieldTypeRequiredDescription
enabledbooleanNoDefault false

Example Request

{
  "channel": "WHATSAPP",
  "sender": "+123456789",
  "messages": [
    {
      "destinations": [
        {
          "to": "+987654321",
          "message_id": "client-msg-1"
        },
        {
          "to": "+5551234567"
        }
      ],
      "template": {
        "name": "welcome_message",
        "language": "en",
        "variables": {
          "1": "Talkdesk",
          "2": "Support Team"
        }
      }
    }
  ],
  "options": {
    "bulk_id": "bulk-123",
    "group_id": "campaign-42",
    "group_name": "Spring promo",
    "group_info": {
      "source": "crm",
      "segment": "vip"
    },
    "bind_conversation": {
      "enabled": true
    }
  }
}

Success Response

Status: 202 Accepted

Response Schema

FieldTypeRequiredDescription
bulk_idstringYesUnique request ID
messagesarrayYesPer-destination results

messages[]

FieldTypeDescription
message_idstringUnique provider message identifier.
destinationstringDestination that the message was accepted for.
statusstringInitial message status. Current documented value: PENDING.

Example Response

{
  "bulk_id": "0f0d3c86-2355-4409-9968-ac871cdf88d0",
  "messages": [
    {
      "message_id": "infobip-msg-id-123",
      "destination": "+987654321",
      "status": "PENDING"
    }
  ]
}

Error Responses

StatusMeaningExample
400Bad Request{"code":"2140001","message":"Bad Request"}
401Unauthorized{"code":"2140002","message":"Unauthorized"}
403Forbidden{"code":"2140003","message":"Forbidden"}
500Internal Server Error{"code":"2140007","message":"Internal Server Error"}

Notes

  • The request is batch-oriented: One call can submit up to 500 messages.
  • The response confirms acceptance, not final delivery.
  • A destination can include a client-side message_id for correlation.
  • Grouping and binding are controlled via options.