Whatsapp Business API documentation (2.39)

Download OpenAPI specification:Download

1MSG.IO is the perfect WhatsApp management tool for your business. With us you get full access to the official Whatsapp API/webhooks.

Every API request must contain an Authorize HTTP header with a token. This is your channel token, which can be found in your channel project on your profile page. Please do not give the token to anyone or post it publicly.

The authorization token must be added to each request in the GET parameter 'token' and always passed to query string (?token={jwtToken}). Parameters in GET queries pass query string. Parameters in POST requests — through the JSON-encoded request body.

All 'send' methods (except /sendTemplate) will only work when the dialog session with the user is open. Some of our solutions simplify and avoid such limitations, but we urge you to pay more attention to this detail

Updates from 20 May (all changes are relevant for Cloud API version:

  • added reference to quoted message (quotedMsgId) to methods: sendMessage, sendButton, sendLocation, sendFile, sendLocation, sendContact.
  • added description for creating new Carousel and Catalogue templates to the /addTemplate method.
  • added description for sending new Carousel and Catalogue templates to the /sendTemplate method.

Channel

Manage your WhatsApp Business API channel

Get Profile Info

Use this edge to retrieve your profile's About info

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
{}

Change user info

Change user info

Authorizations:
JWT token
Request Body schema:
about
string

Profile`s About section.

address
string

Address of the business

description
string

Description of the business. Max 256 characters

email
string

Business email

phone
string

Linked phone number

vertical
string
Enum: "Automotive" "Beauty, Spa and Salon" "Clothing and Apparel" "Education" "Entertainment" "Event Planning and Service" "Finance and Banking" "Food and Grocery" "Public Service" "Hotel and Lodging" "Medical and Health" "Non-profit" "Professional Services" "Shopping and Retail" "Travel and Transportation" "Restaurant" "Other"

Industry of the business

photo
string

HTTP link https://...

Or base64-encoded file with mime data, for example data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...

File in form-data input field

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "result": "success"
}

Get Channel statistics

Get channel usage statistics

Authorizations:
JWT token
query Parameters
date
string
Example: date=03.2022

Month and year in format mm.YYYY.

Responses

Response samples

Content type
application/json
{
  • "date": "03.2022",
  • "templates_cost": 400.0313
}

Get Extended Channel statistics

Get channel usage extended statistics

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get Status

Returns the status of your WhatsApp Business API client. Channel statuses:

connected/connecting - everything is ok.

disconnected - The Coreapp is not connected to the WhatsApp servers.

uninitialized - The application could be in the process of upgrading or initializing the database schema. Try again in a few minutes and contact Support if you continue to see this status.

unregistered - You need to register your WhatsApp Business API client. Either you have been blocked and need to take some action (contact Support)

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
{
  • "status": "connected"
}

Get Settings

webhookUrl - Http or https URL for receiving notifications.

Authorizations:
JWT token

Responses

Response samples

Content type
application/json

Set settings

webhookUrl - Http or https URL for receiving notifications.

Authorizations:
JWT token
Request Body schema:
webhookUrl
string or null

Responses

Request samples

Content type
{ }

Response samples

Content type
application/json
{}

Get Commerce Settings

is_catalog_visible - Set to true to show catalog storefront icon or false to hide it. is_cart_enabled - Set to true to enable cart or false to disable it.

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get channel server IP

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
{
  • "result": "213.74.84.72"
}

Webhooks

How to setup webhooks for the WhatsApp Business API

Set webhook

Sets the URL for receiving webhook notifications of new messages, message delivery events (ack), and group events.

API responses in "Callbacks" tab

Authorizations:
JWT token
Request Body schema:
webhookUrl
required
string

Http or https URL for receiving notifications. For testing, we recommend using our RequestBin.

Responses

Callbacks

Request samples

Content type
No sample

Response samples

Content type
application/json
{}

Callback payload samples

Callback
Content type
application/json
{
  • "messages": [
    ]
}

Check ACKs

Authorizations:
JWT token
query Parameters
messageId
required
string
Example: messageId=0XzkmGNn4prUAQlzsHApGNRXQ0U

Message ID. Example: 0XzkmGNn4prUAQlzsHApGNRXQ0U

Responses

Response samples

Content type
application/json
{
  • "hooks": [
    ]
}

Messaging

This part of the documentation describes how to send and receive messages using the WhatsApp Business API

Send List Message

Send Interactive List Message to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
body
required
string

Main message text

header
string

Header will be located above message text

footer
string

Footer will be placed under message text

action
required
string

Action for open list

required
Array of objects

Up to 10 sections from which the client can choose.

Each section is object with fields:

title - Title of section, up to 24 symbols. Required if there are more then 1 section

rows - available options. Required

Each option is object with fields:

id - Unique id for option, up to 200 symbols. Required

title - Title of option, up to 24 symbols. Required

description - Description of option, up to 72 symbols

Example:

[{"title":"Section 1","rows":[{"id":"1","title":"Option 1","description":"Description 1"}]},{"title":"Section 2","rows":[{"id":"2","title":"Option 2","description":"Description 2"}]}]

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send Reply Buttons Message

Send Interactive Reply Buttons Message to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
body
required
string

Main message text

object or object or object or object
footer
string

Footer will be placed under message text

required
Array of objects

Up to 3 sections inclusive.

Each section is an object with a fields:

type - always "reply" Required

reply – reply button objects Required

Each button response is an object with fields:

id - a unique identifier of the button, up to 200 characters. Required

title — Button title, up to 20 characters. Required

Example:

"sections": [{"type": "reply","reply": {"id ": "1","title": "1 Button's Title"}},{"type": "reply", "reply": {"id": "2", "title": "2 Button's Title"}}]

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send Location Request Message

Send Interactive Location Request Message to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
body
required
string

Message text, UTF-8 or UTF-16 string with emoji 🍏. Can be used with mentionedPhones, example: this text for @556123122026

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send WhatsApp Flow Message

Send Interactive WhatsApp Flow message to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Use this method to send a published WhatsApp Flow as a service (interactive) message. If the 24-hour window is closed, send a template with a FLOW button via /sendTemplate.

Authorizations:
JWT token
Request Body schema:
body
required
string

Flow message body text

string or object

Flow header (string or text header object)

footer
string

Footer text

flowId
required
string

Published Flow ID

flowToken
required
string

Flow token generated by the business

flowCta
required
string

CTA button text

flowAction
string
Enum: "navigate" "data_exchange"

Flow action type

object

Required for flowAction=navigate (screen is required). Ignored for data_exchange. If data is provided, it must be a non-empty object.

flowMessageVersion
string

Flow message version (default "3")

mode
string
Enum: "draft" "published"

Flow mode (draft or published). If omitted, provider default applies

object

Shortcut for flowActionPayload.data (optional)

flowActionScreen
string

Shortcut for flowActionPayload.screen (optional)

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send Reaction

Send a reaction (emoji) to a specific message in an existing chat. Use a single emoji character to add/update reaction, or an empty string to remove reaction. Provide either chatId or phone. Reference the target message via quotedMsgId.

Authorizations:
JWT token
Request Body schema:
body
required
string

One emoji to add/update or empty string to remove

quotedMsgId
required
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
body=%F0%9F%91%8D&quotedMsgId=wamid.HBgLdemo-text-001&chatId=12020721369%40c.us

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send a File

Send a file to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
body
required
string

HTTP link https://...

Or base64-encoded file with mime data, for example data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...

File in form-data input field

filename
required
string

File name, for example 1.jpg or hello.xlsx

caption
string

Text under the file. When sending an image сan be used with mentionedPhones, example: this image for @556123122026

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send a Message

Send a message to an existing chat. (Only if the dialogue has an Open Session). The message will be added to the queue for sending and delivered even if the phone is disconnected from the Internet or authorization is not passed.

Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
body
required
string

Message text, UTF-8 or UTF-16 string with emoji 🍏. Can be used with mentionedPhones, example: this text for @556123122026

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send a Location

Send a location to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
lat
required
string

Latitude of the location. Example: 45.018337

lng
required
string

Longitude of the location. Example: -73.968285

address
string

Address of the location. Only displayed if name is present. Example: 9766 Valley View St., New York, NY 10024

name
string

Name of the location. Example: Facebook HQ

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send a Contact

Send a contact to an existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

Authorizations:
JWT token
Request Body schema:
contacts
Array of objects

Array containing contact objects.

Contact object parameters:

name - full contact name. Required. Object with properties:

  • formatted_name - Full name, as it normally appears. Example: Lord Adam John Smith Junior. You have to use at least one additional parameter (first_name, last_name, middle_name, suffix, prefix)

  • first_name - First name. Example: Adam

  • last_name - Last name. Example: Smith

  • middle_name - Middle name. Example: John

  • suffix - Name suffix. Example: Junior

  • prefix - Name prefix. Example: Lord

birthday - YYYY-MM-DD formatted string. Example: 2012-08-18

addresses - array containing address objects with parameters:

  • street - Street number and name. Example: 1 Hacker Way

  • city - City name. Example: Menlo Park

  • state - State abbreviation. Example: CA

  • zip - ZIP code. Example: 94025

  • country - Full country name. Example: United States

  • country_code - Two-letter country abbreviation. Example: us

  • type - Standard Values: HOME, WORK. Example: HOME

emails - array containing email objects with parameters:

  • email - Email address. Example: test@fb.com

  • type - Standard Values: HOME, WORK. Example: WORK

org - object containing parameters:

  • company - Name of the contact's company. Example: WhatsApp

  • department - Name of the contact's department. Example: Design

  • title - Contact's business title. Example: Manager

phones - array containing phone objects with parameters:

  • phone - Automatically populated with the wa_id value as a formatted phone number. Example: +1 (940) 555-1234

  • type - Standard Values: CELL, MAIN, IPHONE, HOME, WORK. Example: HOME

  • wa_id - WhatsApp ID. Example: 19405551234

urls - array containing url objects with parameters:

Example: [{"addresses":[{"city":"Menlo Park","country":"United States","country_code":"us","state":"CA","street":"1 Hacker Way","type":"HOME","zip":"94025"},{"city":"Menlo Park","country":"United States","country_code":"us","state":"CA","street":"200 Jefferson Dr","type":"WORK","zip":"94025"}],"birthday":"2012-08-18","emails":[{"email":"test@fb.com","type":"WORK"},{"email":"test@whatsapp.com","type":"WORK"}],"name":{"first_name":"John","formatted_name":"John Smith","last_name":"Smith"},"org":{"company":"WhatsApp","department":"Design","title":"Manager"},"phones":[{"phone":"+1 (940) 555-1234","type":"HOME"},{"phone":"+1 (650) 555-1234","type":"WORK","wa_id":"16505551234"}],"urls":[{"url":"https://www.facebook.com","type":"WORK"}]}]

quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send Carousel

You can send product cards via Carousel in two ways:

Template messages: do not require a 24-hour customer service window between you and the recipient. Use sendTemplate.

Free-form messages: can be sent only when a customer service window is open between you and the recipient. Use sendCarousel.

The message structure in /sendCarousel is largely similar to sending a template. However, in this case you must explicitly specify all elements that are created in advance when working with templates. This is because the message is sent without using a template.

In /sendCarousel, for sending a Catalog Carousel there can be either 1 URL button or one or more quick reply buttons.

Authorizations:
JWT token
Request Body schema:
body
string

Text shown above the carousel. Optional. If omitted and params include a body component, the body will be taken from params.

params
required
Array of objects

Required. Template-like structure (same as sendTemplate params). Must include a CAROUSEL component and its cards.

Structure:

  • params[] item with type CAROUSEL and cards (2..10)
    • cards[] item:
      • card_index: number
      • components[] items:
        • header: parameters[0] with type image/video/product
          • image: {"image": {"link": "https://..."}}
          • video: {"video": {"link": "https://..."}}
          • product: {"product": {"catalog_id": "...", "product_retailer_id": "..."}}
        • body: parameters[] with {"type": "text", "text": "..."}
        • button: sub_type url or quick_reply
          • url: parameters {"text": "Button", "url": "https://..."}
          • quick_reply: parameters[] of {"id": "...", "text": "..."}
  • Optional params[] item with type body to set the text above the carousel.
quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Get messages list

By default, the message history is not saved for output in the method. To enable the method, write to technical support

Authorizations:
JWT token
query Parameters
last
boolean
Example: last=true

Displays the last messages. If this parameter is passed, then lastMessageNumber is ignored.

lastMessageNumber
integer
Example: lastMessageNumber=100

The lastMessageNumber parameter from the last response. Example: 100

firstMessageNumber
integer
Example: firstMessageNumber=1

The firstMessageNumber parameter from the last response. Example: 1

limit
integer
Example: limit=200

Sets length of the message list. Default 100. With value 0 returns all messages.

chatId
string

Filter messages by chatId

Chat ID from the message list. Example: 556123122026@c.us

min_time
integer
Example: min_time=1665396610

Filter messages received after specified time. Example: 1665396610

max_time
integer
Example: max_time=1665396610

Filter messages received before specified time. Example: 1665396610

msgId
string
Example: msgId=0XzkmGNn4prUAQlzsHApGNRXQ0U

Message ID. Example: 0XzkmGNn4prUAQlzsHApGNRXQ0U

Responses

Response samples

Content type
application/json
{
  • "messages": [
    ]
}

Mark message as read

Authorizations:
JWT token
Request Body schema:
messageId
string

Message ID. Example: 0XzkmGNn4prUAQlzsHApGNRXQ0U

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "result": "success"
}

Groups

Manage WhatsApp group chats

Create a Group

Create a WhatsApp group and return its invite link.

Beta test eligibility for group chats:

  • Limit of company-initiated messages: at least 100,000 within 24 hours.
  • Verified green check.
Authorizations:
JWT token
Request Body schema:
groupName
required
string

Group name

description
string

Group description

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{}

Get Groups List

Get active groups for the account.

Authorizations:
JWT token
query Parameters
limit
integer
Example: limit=100

Limit number of groups returned

before
string
Example: before=MA==

Pagination cursor for groups list (before)

after
string
Example: after=MQ==

Pagination cursor for groups list (after)

Responses

Response samples

Content type
application/json
{
  • "groups": [
    ],
  • "paging": {
    }
}

Get Group Info

Get group metadata and participants.

Authorizations:
JWT token
path Parameters
group_id
required
string
Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Group ID without @g.us suffix. Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

query Parameters
fields
string
Example: fields=subject,description,participants

Comma-separated list of fields to return for group info

Responses

Response samples

Content type
application/json
{
  • "id": "Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD",
  • "subject": "Group name",
  • "description": "Group description",
  • "participants": [
    ],
  • "chatId": "[email protected]"
}

Update Group

Update group name, description, or profile picture.

Authorizations:
JWT token
path Parameters
group_id
required
string
Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Group ID without @g.us suffix. Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Request Body schema:
subject
string

New group name

description
string

New group description

profile_picture_file
string

Profile picture file handle or media ID

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "success": true
}

Delete Group

Leave or delete the group (bot leaves).

Authorizations:
JWT token
path Parameters
group_id
required
string
Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Group ID without @g.us suffix. Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Remove Participants

Remove participants from a group (admin only).

Authorizations:
JWT token
path Parameters
group_id
required
string
Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Group ID without @g.us suffix. Example: Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD

Request Body schema:
participants
required
Array of strings

Array of participant phone numbers or objects like {"user":"..."}

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "success": true
}

Templates

Template messaging via WhatsApp Business API

Send Template Message

Send Template Message to a new or existing chat. Only one of two parameters is needed to determine the destination - chatId or phone.

Use this method for template messages (including Carousel/Catalog templates). If a 24-hour session method (e.g. /sendCarousel) fails because the 24-hour window is closed, send a template via /sendTemplate.

Cyrillic characters in file URLs are not supported. Use URL encoding for non-Latin characters.

Request examples are provided in the payload (requestBody/examples). Available variants:

  • basic template
  • Media Carousel (Cloud API)
  • Catalog Carousel (product cards, Cloud API)
  • Catalog template (catalog button)
  • Coupon Code template (Cloud API)
  • Limited-Time Offer template (Cloud API)
  • WhatsApp Flow template (Cloud API)
Authorizations:
JWT token
Request Body schema:
namespace
required
string

Can be found by method /templates

template
required
string

Name of template

required
object

Object, containing fields "policy" and "code".

policy - now "deterministic" is only available option;

code - one of supported language codes

Array of objects

Array of localizable parameters to be substituted into the template. Each parameter is object contains the following field:

type - section of parameters - header, body, footer, button

parameters - variables for section.

Each variable is an object that can contain the following fields:

type - can be text, currency, date_time, image, document, video or product

video- id (mediaId)

document

  • id (mediaId)

  • filename(optional)

image - object with field link (image url)

product - object with catalog_id and product_retailer_id (for catalog carousel product cards)

currency - object containing parameters currency_code and amount_1000.

  • currency_code - Currency code as defined in ISO 4217.

  • amount_1000 - Amount multiplied by 1000.

  • fallback_value - Default text if localization fails.

date_time - If the date_time object is used, further definition of the date and time is required.

  • component - The time is assembled from components (i.e., day of the week, month, hour, etc.) The time specified will be the same, regardless of the time zone the client is in.

  • unix_epoch - The time to be displayed is dependent on the time zone the client is in.

  • fallback_value - Default text if localization fails.

button - if button has parameter

  • sub_type (url/quick_reply/copy_code)

  • parameters (array to fill button variable)

  • index - button position.

coupon_code - for COPY_CODE buttons use parameters with type coupon_code and coupon_code value.

limited_time_offer - for limited-time offer templates:

  • parameters: [{type: limited_time_offer, limited_time_offer: {expiration_time_ms: }}]

  • If limited_time_offer.has_expiration is true, include limited_time_offer parameters and a copy code button first; URL button required.

cards - filled in if you need to send the Carousel template

  • card_index - card number

  • components - array of card data

    type -  header, body, footer, button 
    
    parameters - variables for the section. 
    
    sub_type - subtype for buttons 
    
    index - button number
    

The number of parameters passed must match the number of parameters in the template

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Create template

Create new template for sending.

Carousel templates (Cloud API only):

  • Media Carousel: image/video cards with text and buttons.
  • Catalog Carousel (product cards): shows items from your catalog; name/description/price are pulled from the catalog; CTA uses SPM button.

Coupon Code Templates (Cloud API only):

  • Marketing templates with a single copy code button.
  • Codes are limited to 15 characters; button text cannot be customized; only one copy code button allowed.
  • Not supported in WhatsApp web client.

Limited-Time Offer Templates (Cloud API only):

  • Only MARKETING category is supported.
  • Footer components are not supported.
  • WhatsApp web/desktop clients show an unsupported message.
  • If limited_time_offer.has_expiration is true, a copy code button is required and must appear first; a URL button is required.

Authentication Templates:

  • Category AUTHENTICATION.
  • BODY: fixed preset text; optional add_security_recommendation.
  • FOOTER: optional, code_expiration_minutes from 1 to 90.
  • BUTTONS: one OTP button (COPY_CODE or ONE_TAP).
  • Button/autofill text max 25 chars, no variables, newlines, emojis, or formatting (* _ ~ `).
  • ONE_TAP requires autofill_text, package_name, signature_hash.

WhatsApp Flow templates (Cloud API):

  • Use a BUTTONS component with type FLOW to link a published WhatsApp Flow.

Request examples are provided in the payload (requestBody/examples). Available variants:

  • basic template
  • Media Carousel (Cloud API)
  • Catalog Carousel (product cards, Cloud API)
  • Coupon Code template (Cloud API)
  • Limited-Time Offer template (Cloud API)
  • Authentication template (Cloud API)
  • WhatsApp Flow template (Cloud API)
Authorizations:
JWT token
Request Body schema:
name
string

Name of template

category
string (TemplateCategoryProp)
Enum: "MARKETING" "UTILITY" "AUTHENTICATION"

Template category

Array of objects (TemplateComponentsProp)

Array of template components

language
string (TemplateLanguageProp)
Enum: "af" "sq" "ar" "az" "bn" "bg" "ca" "zh_CN" "zh_HK" "zh_TW" "hr" "cs" "da" "nl" "en" "en_GB" "en_US" "et" "fil" "fi" "fr" "de" "el" "gu" "he" "hi" "hu" "id" "ga" "it" "ja" "kn" "kk" "ko" "lo" "lv" "lt" "mk" "ms" "mr" "nb" "fa" "pl" "pt_BR" "pt_PT" "pa" "ro" "ru" "sr" "sk" "sl" "es" "es_AR" "es_ES" "es_MX" "sw" "sv" "ta" "te" "th" "tr" "uk" "ur" "uz" "vi"

Template language

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{ }

Remove template

Deleted template can not be restored.

Authorizations:
JWT token
Request Body schema:
name
string

Template name

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "result": "success"
}

Get templates list

Authorizations:
JWT token

Responses

Response samples

Content type
application/json
{
  • "total": 3,
  • "templates": [
    ]
}

Products & Catalogs

How to build and send messages with single and multiple products.

You can send product cards via Carousel in two ways:

Template messages: do not require a 24-hour customer service window between you and the recipient. Use sendTemplate.

Free-form messages: can be sent only when a customer service window is open between you and the recipient. Use sendCarousel.

The message structure in /sendCarousel is largely similar to sending a template. However, in this case you must explicitly specify all elements that are created in advance when working with templates. This is because the message is sent without using a template.

In /sendCarousel, for sending a Catalog Carousel there can be either 1 URL button or one or more quick reply buttons.

Set Commerce Settings

is_catalog_visible - Set to true to show catalog storefront icon or false to hide it. is_cart_enabled - Set to true to enable cart or false to disable it.

Authorizations:
JWT token
Request Body schema:
object

Responses

Request samples

Content type
{ }

Response samples

Content type
application/json
{
  • "success": true
}

Send Carousel

You can send product cards via Carousel in two ways:

Template messages: do not require a 24-hour customer service window between you and the recipient. Use sendTemplate.

Free-form messages: can be sent only when a customer service window is open between you and the recipient. Use sendCarousel.

The message structure in /sendCarousel is largely similar to sending a template. However, in this case you must explicitly specify all elements that are created in advance when working with templates. This is because the message is sent without using a template.

In /sendCarousel, for sending a Catalog Carousel there can be either 1 URL button or one or more quick reply buttons.

Authorizations:
JWT token
Request Body schema:
body
string

Text shown above the carousel. Optional. If omitted and params include a body component, the body will be taken from params.

params
required
Array of objects

Required. Template-like structure (same as sendTemplate params). Must include a CAROUSEL component and its cards.

Structure:

  • params[] item with type CAROUSEL and cards (2..10)
    • cards[] item:
      • card_index: number
      • components[] items:
        • header: parameters[0] with type image/video/product
          • image: {"image": {"link": "https://..."}}
          • video: {"video": {"link": "https://..."}}
          • product: {"product": {"catalog_id": "...", "product_retailer_id": "..."}}
        • body: parameters[] with {"type": "text", "text": "..."}
        • button: sub_type url or quick_reply
          • url: parameters {"text": "Button", "url": "https://..."}
          • quick_reply: parameters[] of {"id": "...", "text": "..."}
  • Optional params[] item with type body to set the text above the carousel.
quotedMsgId
string

Quoted message ID (Cloud API)

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Send a Product

Send a single product or product list to a new or existing chat. (Only if the dialogue has an Open Session). Only one of two parameters is needed to determine the destination - chatId or phone.

First, you need to upload your inventory to Facebook. You can use the API or Facebook’s Commerce Manager to do that. If you already have a Facebook catalog set up, we suggest that you leverage that catalog for WhatsApp commerce use cases.

You can not send products to Business WhatsApp clients.

Authorizations:
JWT token
Request Body schema:
required
object

Object containing info about product or catalog. Can contain the following fields:

catalog_id - id of catalog

product_retailer_id - id of product. Only for sending single product.

sections - used for sending multiply products. It`s array containing objects with catalog info. See example below.

Example: {"catalog_id":"{{catalog_id}}","sections":[{"title":"the-section-title","product_items":[{"product_retailer_id":"{{SKU-1}}"},{"product_retailer_id":"{{SKU-2}}"}]},{"title":"the-section-title2","product_items":[{"product_retailer_id":"{{SKU-1}}"}]}]}

body
string

Text of message. Example: Some text.

footer
string

Located under the message text. Example: Footer.

header
string

Header of catalog. Example: Header.

Required when sending the catalog.

chatId
string

Required if phone is not set

Chat ID from the message list. Examples: 12020721369@c.us or 120363046942338209@g.us (group). Used instead of the phone parameter.

phone
integer

Required if chatId is not set

A phone number starting with the country code. You do not need to add your number.

USA example: 12020721369.

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "sent": true,
  • "id": "gBGGeRhGZTEfAgkJCh2wAz4ZH-8",
  • "message": "Sent to [email protected]",
  • "description": "Message has been sent to the provider"
}

Media

Use the media node to upload, retrieve, or delete media

Upload media & get mediaId

Upload media and get mediaId. Uploaded media can be sent in template

Authorizations:
JWT token
Request Body schema:
body
required
string

HTTP link https://...

Or base64-encoded file with mime data, for example data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...

File in form-data input field

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "mediaId": "ed2c7be7-b779-4ba8-a17c-6722f37be2a7"
}

Template Analytics

Limitations

  • Button click analytics are available only for MARKETING and UTILITY template categories.
  • WhatsApp Business accounts owned by or shared with Meta Business Accounts in the European Union (EU), United Kingdom (UK), and Japan, as well as accounts with a business phone number containing the country code of the UK, Japan, or an EU country/region, are not supported.
  • Read and click event data for WhatsApp template messages is available only for 7 days from the date the message was sent. After this 7-day period, the respective read and click counters are zeroed out, and no further updates are recorded for those messages.

Get Template Analytics Settings

Returns WABA-level template analytics settings.

  • enable: enable/disable template analytics on the WABA.
Authorizations:
JWT token

Responses

Request samples

curl -X GET 'https://api.1msg.io/{instanceId}/settings/templateAnalytics?token={token}'

Response samples

Content type
application/json
{
  • "enable": true,
  • "cta_url_link_tracking_opted_out": false,
  • "external_id": "external_id"
}

Update Template Analytics Settings

Enable/disable template analytics on the WABA.

Authorizations:
JWT token
Request Body schema:
enable
boolean

Enable template analytics on the WABA

cta_url_link_tracking_opted_out
boolean

Disable URL button click tracking for a specific template

external_id
string

Template external_id (required when setting cta_url_link_tracking_opted_out)

Responses

Request samples

Content type
{ }

Response samples

Content type
application/json
{
  • "enable": true,
  • "cta_url_link_tracking_opted_out": false,
  • "external_id": "external_id"
}

Get Template Analytics Opt-Out

Returns per-template URL button click tracking opt-out settings.

Authorizations:
JWT token
path Parameters
template_external_id
required
string
Example: external_id

Template external_id for per-template analytics setting (cta_url_link_tracking_opted_out).

Responses

Request samples

curl -X GET 'https://api.1msg.io/{instanceId}/settings/templateAnalyticsOptOut/<template_id>?token={token}'

Response samples

Content type
application/json
{
  • "enable": true,
  • "cta_url_link_tracking_opted_out": false,
  • "external_id": "external_id"
}

Update Template Analytics Opt-Out

Enable/disable URL button click tracking for a specific template.

Authorizations:
JWT token
path Parameters
template_external_id
required
string
Example: external_id

Template external_id for per-template analytics setting (cta_url_link_tracking_opted_out).

Request Body schema:
enable
boolean

Enable template analytics on the WABA

cta_url_link_tracking_opted_out
boolean

Disable URL button click tracking for a specific template

external_id
string

Template external_id (required when setting cta_url_link_tracking_opted_out)

Responses

Request samples

Content type
{ }

Response samples

Content type
application/json
{
  • "enable": true,
  • "cta_url_link_tracking_opted_out": false,
  • "external_id": "external_id"
}

Get Template Analytics

Template analytics are reported with daily granularity. Data is returned in UTC by default, or in the WABA timezone when use_waba_timezone=true.

Limitations:

  • Button click analytics are available only for MARKETING or UTILITY templates.
  • Maximum 10 template_ids per request.

If template analytics is disabled for the channel, the API returns an error: Template analytics is disabled for this channel.

Authorizations:
JWT token
query Parameters
start
required
string
Example: start=2024-01-01

Start time for the date range. Unix timestamp or YYYY-MM-DD. If using use_waba_timezone=true, use YYYY-MM-DD.

end
required
string
Example: end=2024-01-07

End time for the date range. Unix timestamp or YYYY-MM-DD. If using use_waba_timezone=true, use YYYY-MM-DD.

granularity
required
string
Value: "DAILY"
Example: granularity=DAILY

Analytics granularity. Only DAILY is supported.

template_ids
required
Array of strings
Example: template_ids=1156697826259690&template_ids=1309207764213383

Array of template IDs to retrieve analytics for. Maximum 10.

metric_types
Array of strings
Items Enum: "COST" "CLICKED" "DELIVERED" "READ" "SENT" "APP_ACTIVATIONS" "APP_ADD_TO_CART" "APP_CHECKOUTS_INITIATED" "APP_PURCHASES" "APP_PURCHASES_CONVERSION_VALUE" "WEBSITE_ADD_TO_CART" "WEBSITE_CHECKOUTS_INITIATED" "WEBSITE_PURCHASES" "WEBSITE_PURCHASES_CONVERSION_VALUE"
Example: metric_types=SENT&metric_types=DELIVERED&metric_types=READ

Types of metrics to retrieve. If omitted, all metric types are returned.

product_type
string
Enum: "CLOUD_API" "MARKETING_MESSAGES_LITE_API"
Example: product_type=CLOUD_API

Filter metrics by product type. If omitted, only Cloud API metrics are returned.

use_waba_timezone
boolean
Example: use_waba_timezone=true

Show metrics in the WABA timezone. If true, start and end must be YYYY-MM-DD.

Responses

Request samples

curl -X GET 'https://api.1msg.io/{instanceId}/templateAnalytics?start=2024-01-01&end=2024-01-07&granularity=DAILY&template_ids=<template_id>&metric_types=SENT&product_type=CLOUD_API&token={token}'

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "paging": {
    }
}

WhatsApp Flows

Manage WhatsApp Flow lifecycle: create, preview, publish, deprecate.

Create WhatsApp Flow

Create a new WhatsApp Flow in draft state. Supports optional flow.json upload and immediate publish.

Authorizations:
JWT token
Request Body schema: multipart/form-data
name
required
string

Flow name

categories
required
Array of strings (FlowCategory)
Items Enum: "SIGN_UP" "SIGN_IN" "APPOINTMENT_BOOKING" "LEAD_GENERATION" "CONTACT_US" "CUSTOMER_SUPPORT" "SURVEY" "OTHER"

Categories (comma or array)

endpointUri
string <uri>

Data endpoint URL

cloneFlowId
string

Clone existing flow id

publish
boolean

Publish immediately

string or object

Flow JSON definition (string or object)

file
string <binary>

Optional flow.json upload

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "success": true,
  • "flowJson": {
    },
  • "publish": { }
}

Get WhatsApp Flows List

Returns all flows for the instance.

Authorizations:
JWT token
query Parameters
fields
string

Comma list of fields to return (id,name,status,categories,preview,validation_errors,json_version,data_api_version,endpoint_uri,data_channel_uri,whatsapp_business_account)

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "paging": { },
  • "count": 0,
  • "total": 0
}

Get WhatsApp Flow Details

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

query Parameters
fields
string

Comma list of fields to return (id,name,status,categories,preview,validation_errors,json_version,data_api_version,endpoint_uri,data_channel_uri,whatsapp_business_account)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "status": "DRAFT",
  • "categories": [
    ],
  • "validationErrors": [
    ],
  • "jsonVersion": "string",
  • "dataApiVersion": "string",
  • "endpointUri": "http://example.com",
  • "dataChannelUri": "http://example.com",
  • "preview": {},
  • "whatsappBusinessAccount": { }
}

Delete WhatsApp Flow (draft only)

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Update WhatsApp Flow Metadata

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

Request Body schema: application/json
name
string
categories
Array of strings (FlowCategory)
Items Enum: "SIGN_UP" "SIGN_IN" "APPOINTMENT_BOOKING" "LEAD_GENERATION" "CONTACT_US" "CUSTOMER_SUPPORT" "SURVEY" "OTHER"
endpointUri
string <uri>

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "success": true
}

Update WhatsApp Flow JSON

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

Request Body schema: multipart/form-data
required
string or object

Flow JSON definition

file
string <binary>

flow.json upload

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "validationErrors": [
    ]
}

Get WhatsApp Flow Preview

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

query Parameters
invalidate
boolean

Force regenerate preview

Responses

Response samples

Content type
application/json
{}

Publish WhatsApp Flow

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Deprecate WhatsApp Flow

Authorizations:
JWT token
path Parameters
flowId
required
string

Flow identifier

Responses

Response samples

Content type
application/json
{
  • "success": true
}