Outbound Notifications API

Outbound Notifications API

The Outbound Notifications API, a Talkdesk Digital Engagement™ solution, allows you to send notification messages at scale through multiple channels, utilizing various message types. You can proactively reach your customers by sending messages via WhatsApp or SMS 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 or SMS sender you control and can:

  • Target multiple recipients in a single request
  • Use free-form content for WhatsApp (within a 24-hour reply window)
  • Use pre-approved WhatsApp templates
  • Send plain text for SMS

Access and Authentication


Channel Support

The API supports the following channels:

  • WhatsApp: Two message types:

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

  • SMS: One message type:

    • Plain text messages via the body field

Sender Configuration

ChannelSender Requirement
WhatsAppMust be configured as a WhatsApp touchpoint in Channels App, following this process.
SMSSMS sender identifier. Must be a valid Talkdesk touchpoint (phone number) registered with the PROACTIVE use type.

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
Authentication Scopeoutbound-notifications:write

Request Body

Content-Type: application/json

Top-level Schema

FieldTypeRequiredDescription
channelstringYesThe channel used to send the notification. Allowed values: WHATSAPP, SMS.
senderstringYesSender identifier applied to all messages in the request.
messagesarrayYesMessages to send. Minimum 1, maximum 500. The message schema depends on the channel.
optionsobjectNoOptional batch-level settings, such as grouping metadata and conversation binding

messages[].destinations[] (Common)

Each message must include a destinations array with at least one recipient. This schema is shared across all channels:

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

WhatsApp message format

When channel is WHATSAPP, each item in messages[] must include exactly one of:

  • content: Direct content message
  • template: Template-based message
FieldTypeRequiredDescription
destinationsarrayYesRecipient list. See destinations[] above.
contentobjectConditionallyRequired when sending a direct content message.
templateobjectConditionallyRequired when sending a template-based message.

Direct Content Messages

📘

Due to Meta restrictions, direct content messages only apply 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.

When using template, provide the WhatsApp template metadata:

FieldTypeRequiredDescription
template.namestringYesTemplate name.
template.languagestringYesTemplate language code (e.g., en).
template.variablesobject<string,string>NoOptional variables keyed by numeric string (e.g., "1", "2").

Example:

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

Available Language Codes

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

WhatsApp 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,
      "ttl_in_minutes": 1440
    }
  }
}

SMS Message Format

When channel is SMS, each item in messages[] must include a body field with the plain text content.

FieldTypeRequiredDescription
destinationsarrayYesRecipient list. See destinations[] above.
bodystringYesThe text content of the SMS message. Must not be empty.
📘

SMS does not support content or template fields. Use body only.

SMS Example Request

{
  "channel": "SMS",
  "sender": "+123456789",
  "messages": [
    {
      "destinations": [
        {
          "to": "+987654321",
          "message_id": "sms-msg-1"
        }
      ],
      "body": "Your order #12345 has been shipped. Track at: https://example.com/track/12345"
    }
  ],
  "options": {
    "bulk_id": "sms-bulk-456",
    "group_id": "shipping-notifications",
    "group_name": "Order updates"
  }
}

Request Options

The optional options object applies settings to the whole request:

FieldTypeRequiredDescription
bulk_idstringNoOptional bulk identifier. If omitted, the service generates a UUID.
group_idstringNoOptional logical group identifier. If omitted, bulk_id is used.
group_namestringNoOptional logical group name.
group_infoobject<string,string>NoOptional metadata map for the group.
bind_conversationobjectNoOptional conversation binding settings (WhatsApp only). Has no effect for SMS.

options.bind_conversation

FieldTypeRequiredDescription
enabledbooleanNoWhether sent messages should be bound to conversations. Default: false (WhatsApp only).
ttl_in_minutesintegerNoTime-to-live for the conversation binding, in minutes. Valid range: 30–21600 (30 minutes to 15 days). Only applicable when enabled is true (WhatsApp only).

Success Response

Status code: 202 Accepted

FieldTypeRequiredDescription
bulk_idstringYesUnique bulk identifier for the accepted request.
messagesarrayYesPer-destination acceptance results.

messages[] in the Response

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

Example:

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

Error Responses

StatusMeaningExample Body
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.
  • Message grouping and conversation binding are controlled at the request level via options.
  • WhatsApp messages are delivered via the Infobip provider. SMS messages are delivered via the Twilio provider.
  • SMS does not support template-based messages or direct content messages (content). Use the body field for SMS.
  • The bind_conversation option only applies to WhatsApp. It has no effect for SMS.