1. Messaging
Chronox AI API Referance
  • Get Started
    • Introduction
    • Authentication
    • Rate limiting
    • Errors
    • Pagination
    • Campaign
  • Account
    • Get User Details
      GET
    • Get Meta Integration
      GET
    • Get Integrated Channels
      GET
    • Get WABA Catalogs
      GET
  • WhatsApp Templates
    • Getting started
    • Templates
      • Create Whatsapp Template Guide
      • Get Whatsapp Templates
      • Get Whatsapp Template Details
      • Create Whatsapp Template
    • Lookups
      • Get Whatsapp Template Category
      • Get Whatsapp Languages
      • Get Whatsapp Template Type
      • Get Whatsapp Template Interactive Type
      • Get Whatsapp Template Header Type
      • Get Whatsapp Template Button Type
      • Get Whatsapp Template Dynamic Variable Type
  • Messaging
    • Getting started
    • Send Whatsapp Message
      POST
    • Send Whatsapp Template
      POST
    • Send Canned Response
      POST
  • Inbox
    • Get Inbox Data
      GET
    • Get Thread Details
      GET
    • Update Thread Archive
      PUT
    • Assign Thread Tags
      PUT
    • Assign Thread Status
      PUT
    • Update Thread Notes
      PUT
    • Get Canned Responses
      GET
    • Get Tags
      GET
    • Get Thread Status Types
      GET
  • Contact List
    • Getting started
    • Get Contact List
    • Create Contact List
    • Update Contact List
    • Update Contact List Status
    • Delete Contact List
  • Contacts
    • Getting started
    • Get Contacts
    • Create Contacts
    • Update Contact
    • Delete Contact
    • Delete Contact Copy
  • Tags and fields
    • Contact Tags
      • Get contact tags
      • Create contact tags
      • Update contact tag
      • Delete contact tag
    • Contact Fields
      • Get contact fields
      • Create contact fields
      • Update contact field
      • Delete contact field
  • Campaign
    • Getting Started
    • Campaign APIs
      • Create campaign
      • Get campaign
      • Update campaign
      • Delete campaign
      • Run campaign
      • Pause campaign
      • Resume campaign
      • Archive campaign
      • Get campaign Stats
    • Lookup
      • Get Statuses
      • Get campaign execution statuses
      • Get campaign contact filter types
      • Get campaign message types
      • Get contact field types
      • Get template variable types
      • Get country codes
  • Whatsapp Flow
    • Get Whatsapp flows
  • Tickets
    • Getting started
    • Get Tickets
    • Create Ticket
    • Update Ticket
    • Get Ticket Statuses
    • Get Agents
  • Organization Teams
    • Get Organization Teams
  • Template Library
    • Get Template Library
    • Get Template Drafts
  • CRM
    • Import leads (single or bulk)
    • List leads
    • Get lead detail
  • Schemas
    • Thread Execution Data
    • LeadImportField
    • LeadImportContact
    • Single lead
    • LeadImportBulkLead
    • Bulk (leads[])
    • LeadImportWarning
    • Single result
    • Bulk result
    • ApiError
    • ErrorEnvelope
    • Lead detail
    • Lead list row
    • Lead list
  1. Messaging

Getting started

Getting started with messaging#

The Messaging endpoints let your software send WhatsApp messages to your customers through Chronox. Every message you send appears in the customer's conversation in the Chronox inbox, just as if a team member had sent it.
There are two ways to send a message:
EndpointWhat it sendsWhen you can use it
Send Whatsapp MessageA normal message: text, or a file such as an image or document.Only within 24 hours of the customer's last message to you.
Send Whatsapp TemplateOne of your Meta-approved templates.Any time, including to start a new conversation.

WhatsApp's 24-hour rule#

When a customer sends you a message, WhatsApp opens a 24-hour window. During that window you can reply with normal messages. Each new message from the customer restarts the 24 hours.
Once the window has closed, or if the customer has never messaged you, WhatsApp only lets you send an approved template. When the customer replies to it, a new window opens and you can send normal messages again.
INFO
The 24-hour rule is Meta's rule for WhatsApp, not a Chronox limit. Chronox doesn't block a normal message outside the window; it passes the message to WhatsApp, and WhatsApp refuses to deliver it.
TIP
Not sure whether the window is open? Use Get Thread Details to see when the customer last messaged you. If it was more than 24 hours ago, send a template instead.

Before you send#

You need two things for every message:
WhatWhere to find it
The customer's WhatsApp numberInclude the country code and use digits only, with no +, spaces or dashes. For example, the Indian number +91 98765 43210 is written 919876543210.
Your WhatsApp number's integrated_channel_idCall Get Meta Integration. Each connected WhatsApp number has its own integrated_channel_id. It tells Chronox which of your numbers to send from.
If no conversation with that customer exists yet, Chronox creates one automatically.
NOTE
If you already have the conversation's ID from Get Inbox Data, you can send that instead of the phone number. It's called thread_id in Send Whatsapp Message and user_thread_id in Send Whatsapp Template.

Send a normal message#

Use Send Whatsapp Message to reply to a customer within the 24-hour window.

Text#

A file#

Set type to media and list your files in media. Each file needs a type and a public url that WhatsApp can download. A caption is optional.
File typeUse it for
imagePhotos and pictures
videoVideo clips
audioVoice notes and audio files
documentPDFs and other documents
stickerWhatsApp stickers
NOTE
If you include more than one file, each one arrives as a separate message.
WARNING
The file link must be publicly reachable. If WhatsApp can't download the file, the message isn't delivered. WhatsApp also sets its own limits on file types and sizes.

Send a template#

Use Send Whatsapp Template to start a conversation, or to contact a customer after the 24-hour window has closed. The template must have the status Approved. See Getting started with WhatsApp templates.
whatsapp_template_id is the ID of your template, which you can find with Get Whatsapp Templates.
CAUTION
The two endpoints use different names for the customer's number: end_user_phone_number in Send Whatsapp Message and user_wa_phone_number in Send Whatsapp Template. Make sure you use the right one.

Filling in template variables#

Most templates contain blanks (also called variables), such as {{customer_name}}, that you fill in each time you send. Provide a value for each one in template_variable_data:
{
  "integrated_channel_id": 101,
  "user_wa_phone_number": "919876543210",
  "whatsapp_template_id": 25,
  "template_variable_data": [
    { "variable_id": 301, "variable_value": "Priya" },
    { "variable_id": 302, "variable_value": "ORD-10045" }
  ]
}
FieldWhat to put
variable_idThe blank's whatsapp_template_dynamic_variable_id. Find it with Get Whatsapp Template Details: every blank in the body, header and buttons has one.
variable_valueThe text to put in the blank.
If the template has no blanks, send an empty list: "template_variable_data": [].
CAUTION
On a basic template, a missing body value doesn't produce an error. Chronox leaves the blank out and sends the message anyway, and WhatsApp then refuses it: you get "status": true with "wa_message_id": null. Always send a value for every blank. Missing header values, and any missing value on a carousel, fail straight away with Invalid body!.

Finding the IDs#

Call Get Whatsapp Template Details for your template. Every blank has its own whatsapp_template_dynamic_variable_id, and it sits in a different place depending on which part of the template it belongs to. The tables below show where.
You send one entry per blank, in any order. Chronox matches each entry to its blank by variable_id.
Named or numbered blanks make no difference to what you send. Chronox handles that from the template.
Blanks that aren't in the template don't need entries, and entries for blanks that aren't there are ignored.

Basic templates#

Part of the templateWhere its ID is in the template detailsWhat to sendIf you leave it out
Body blankwhatsapp_template_body → whatsapp_template_body_variable_dataThe text for the blank.No error, but WhatsApp refuses the message.
Text header blankwhatsapp_template_header → whatsapp_template_header_data → whatsapp_template_header_variable_dataThe text. A header can have only one blank.Invalid body!
Media header (image, video, document)Same place as the text headerThe public link to the file.Invalid body!
Website button, dynamic linkwhatsapp_template_button → whatsapp_template_button_data → whatsapp_template_button_sub_type_field_data → whatsapp_template_button_field_data_variableEither the changing part of the link, or the whole link.No error, but WhatsApp refuses the message.
Copy Offer Code button (marketing templates only)Same place as the website buttonThe code the customer copies.No error, but WhatsApp refuses the message.
Authentication (OTP)whatsapp_template_body → whatsapp_template_body_variable_data (the {{1}} blank)The code. Send it once: Chronox uses it for the body and the Copy Code button.Invalid OTP error.
Flow buttonYou don't look these up in the template. See Flow inputs below.Optional.Nothing. The Flow opens without them.
TIP
Document headers: WhatsApp shows the file name taken from your link. Chronox turns underscores into spaces and drops a number on the end, so price_list_1748419007.pdf appears as price list.pdf. Name your files the way you want them to appear.
No value needed for: website buttons with a fixed link, call phone number buttons, quick reply buttons, View Catalog buttons, or any button label. These are fixed when the template is created.

Carousel templates#

A carousel is returned as several entries in whatsapp_template_data: one per card, each with its own whatsapp_template_carousel_variation_id. Each card has its own blanks, so look at every entry.
Part of the templateWhere its ID isWhat to sendIf you leave it out
Text above the cardswhtatsapp_carousel_header_variable_data, at the top level of the templateThe text for the blank.Invalid body!
Card headerIn each card: whatsapp_template_header → whatsapp_template_header_data → whatsapp_template_header_variable_dataThe public link to the image or video.Invalid body!
Card body blankIn each card: whatsapp_template_body → whatsapp_template_body_variable_dataThe text for the blank.Invalid body!
Card website button, dynamic linkIn each card, in the button's whatsapp_template_button_field_data_variableEither the changing part of the link, or the whole link.No error, but WhatsApp refuses the message.
NOTE
The field name whtatsapp_carousel_header_variable_data is spelled that way in the API response, with an extra t. Use it exactly as it appears.
CAUTION
Carousels are stricter than basic templates. A missing body value on a basic template slips through and WhatsApp refuses it, but on a carousel it fails straight away with Invalid body!.
Copy Offer Code buttons can't be used on carousels.

Catalog templates#

Only the body can contain blanks: send one entry per blank, as for a basic template. The View Catalog button is fixed, and there are no header or button values to send.

Call Permission Request templates#

These never contain blanks. Send an empty list: "template_variable_data": [].

Interactive messages#

Interactive messages aren't approved templates, so WhatsApp only delivers them inside the 24-hour window. Outside it, send an approved template instead.
Chronox puts your values into the saved message first, then sends the finished message as a live WhatsApp message.
Part of the messageWhat to send
Body blankThe text for the blank.
Text header blankThe text. Missing values fail with Invalid body!.
Media headerThe public link to the file.
Flow buttonOptional Flow inputs. See below.
Catalog messages can't have a header. List rows, reply button titles and website links aren't variables: they come from the saved message.

Flow inputs#

If a template or interactive message opens a WhatsApp Flow, you can pass values into the Flow. These entries look different from ordinary blanks:
{
  "variable_id": 42,
  "variable_value": "gold",
  "flag_flow_variable": true
}
FieldWhat to put
variable_idThe Flow variable's ID. This is not a template blank ID, and it doesn't appear in the template details.
variable_valueThe value to pass into the Flow.
flag_flow_variableMust be true.
Flow inputs are optional. An ID that doesn't match a Flow variable fails with Invalid body!. You can mix Flow inputs with ordinary entries in the same list.

One request with every kind of value#

{
  "integrated_channel_id": 101,
  "user_wa_phone_number": "919876543210",
  "whatsapp_template_id": 25,
  "template_variable_data": [
    { "variable_id": 301, "variable_value": "Priya" },
    { "variable_id": 302, "variable_value": "ORD-10045" },
    { "variable_id": 310, "variable_value": "https://example.com/invoice_ORD-10045.pdf" },
    { "variable_id": 311, "variable_value": "order/10045" },
    { "variable_id": 312, "variable_value": "SAVE20" },
    { "variable_id": 42, "variable_value": "gold", "flag_flow_variable": true }
  ]
}
Here 301 and 302 are body blanks, 310 is a document header link, 311 is the changing part of a website link, 312 is an offer code and 42 is a Flow input. A real template wouldn't use all of these at once.

WhatsApp's character limits#

WARNING
Chronox doesn't check these before sending. Going over one doesn't give you a clear error: the message goes to WhatsApp, WhatsApp refuses it, and you get "status": true with "wa_message_id": null. Check them in your own code.
Lengths are measured after your values are filled in, and include spaces, punctuation and emojis. A 60-character header containing Order {{order_id}} must still be 60 characters or fewer once the order number is in it.
TemplatePartLimit
BasicBody1024 characters
BasicText header60 characters
BasicDynamic website link (whole URL)2000 characters
BasicOffer code20 characters
BasicOTP code15 characters
CarouselText above the cards1024 characters
CarouselEach card's body160 characters
CarouselDynamic website link (whole URL)2000 characters
Catalog templateBody1024 characters
Call Permission RequestValuesNone to send
InteractiveBody — reply buttons, CTA URL, catalog1024 characters
InteractiveBody — list, text, flow4096 characters
InteractiveText header60 characters
There's no length limit on links to media files (basic template headers, carousel card headers and interactive headers) or on values passed into a Flow.
For a dynamic website link, the whole URL counts: the fixed part plus the value you send.
The few things Chronox checks itself when sending:
CheckWhat happens
Catalog message body over 1024, or footer over 60The request fails with an error.
Header blank with no value, or any missing value on a carouselThe request fails with Invalid body!.
Flow input that matches no Flow variableThe request fails with Invalid body!.

Check that WhatsApp accepted the message#

A response with "status": true means Chronox handled your request. It doesn't always mean WhatsApp accepted the message. Check the response as follows:
EndpointThe message was accepted if…
Send Whatsapp Message (text)data.wa_message_response.status is true. If it's false, WhatsApp's reason is inside data.wa_message_response.error.
Send Whatsapp Message (files)data.wa_message_response is a list with one entry per file, in the order you sent them. An entry containing messages was accepted. An empty entry {} means WhatsApp didn't accept that file, and no reason is given.
Send Whatsapp Templatedata.wa_message_id has a value. If it's null, the message wasn't sent, and the response doesn't say why. The usual causes are a missing value, a limit above, or a closed 24-hour window.
Even after WhatsApp accepts a message, it can still fail to deliver it later. You can follow a message's progress in the conversation using Get Thread Details.
See Errors for more detail.

Things to watch out for#

Don't send twice by accident. If a request times out, the message may still have been sent. Check the conversation with Get Thread Details before trying again. See Errors.
Keep to your rate limit. Sending many messages quickly counts towards your API key's limit. See Rate limiting.
Respect customer choices. Meta can pause your templates or limit your account if customers block or report your messages. Only message customers who expect to hear from you.
Your workspace must be active. If your workspace is paused, sending fails with Your organization is paused by admin. Please contact your admin.

What this section doesn't cover#

Creating templates. See the WhatsApp Templates section.
Reading conversations. See the Inbox section.
Broadcasts and campaigns. Sending one message to a large list of customers is done with campaigns in the Chronox dashboard, not through the API.
Other channels. This section covers WhatsApp only.
Modified at 2026-10-12 11:49:36
Previous
Get Whatsapp Template Dynamic Variable Type
Next
Send Whatsapp Message
Built with