Public API for WhatsApp Cloud Integration

Public API for WhatsApp Cloud Integration - WOZTELL

Introduction

The Public Integration API enables you to query certain info from your WhatsApp Cloud Integration, or perform certain actions without the need to operate in the platform UI.

API Endpoint

Please use the following Endpoint URL for the Public API:
https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/


NOTE

For example, the endpoint for PUT /whatsapp-message-template:
https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-message-template


Authentication

WhatsApp Cloud Access Token

NOTE

The access token from the WhatsApp Cloud channel can be applied to the public APIs except the GET /conversation-analytics, Business Encryption APIs and Flow APIs.


  1. In "Settings" -> "Channels", click "Edit" to enter the corresponding WhatsApp Cloud channel.
  1. In "Platform", head to the "Advanced Access".
  1. Click "Generate" to generate the access token.
  1. The access token has been generated. The existing access tokens can be managed in the below section.
  1. The access token should be passed as query parameter accessToken, for example:


Payload & Signed Context

NOTE

This authentication method can only be applied to GET /conversation-analyticsGET /whatsapp-displayname-status, Business Encryption APIs and Flow APIs.


To perform authentication for the Public Integration API, it is needed to utilize the corresponding Payload and SignedContext which is required by the integration.

  • Payload{"app":"appId","appIntegration":"appIntegrationId","channel":"channelId"}
  • SignedContext(signature).{{base64(JSON.stringify(payload))}}
  1. Obtain the information related to the corresponding WhatsApp Cloud channel by querying the channel with Open API.

Request:

query {
apiViewer{
channel(channelId:"696327315430a1f98231dfde"){
appId
environment(envId:"7lQNjrXbDO"){
info
integration{
integrationId
}
appIntegrationSignature
}
}
}
}
Copy

Response:

{
"data": {
"apiViewer": {
"channel": {
"appId": "699802d69a73fc555f1c6bc4",
"environment": {
"info": {
"integrationId": "whatsapp-cloud",
"build": 3,
"alias": "dev-whats-app-cloud",
"appIntegrationId": "696327325430a1cbd131dfdf",
"subscribed": true
},
"integration": {
"integrationId": "whatsapp-cloud"
},
"appIntegrationSignature": "1RJ7rKRTHbOBoY95AgtXF5WT2578gy9+b4ekBp727cQ="
}
}
}
}
}
Copy
  1. Create Payload with in the following format:

    {"app":"appId","appIntegration":"appIntegrationId","channel":"channelId"}

Example Payload:

{"app":"699802d69a73fc555f1c6bc4","appIntegration":"696327325430a1cbd131dfdf","channel":"696327315430a1f98231dfde"}
Copy
  1. Encode the Payload Base64 format

  2. Combine the encoded Payload and Signature in order to create the SignedContext in the following format:

    (signature).{{base64(JSON.stringify(payload))}}

Example SignedContext

WAIBCzM6tnzboIwkEPAVVyaVq7VGaIKBaQ/Q+gP6qdA=.eyJhcHAiOiI2MjA2MmMwYjcxNzE5NTMyMDE5MmIxOGY3IiwiYXBwSW50ZWdyYXRpb24iOiI2NDIwZmlnMjhlNjViNDY2ZDQ2MDdlYTIiLCJjaGFubmVsIjoiNzIxZjMyYWM0ZTEyMzYzZGUxMjBkMjlkIg==
Copy
  1. Add them to the header as the X-Woztell-Payload and X-Woztell-SignedContext.


General APIs

GET /waba-info

This API call could get the WABA-related info including WABA namePhone NumberWABA NamespaceWABA ID of a channel.

Parameters

NameTypeDescriptionRequired
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
channelIdstringChannel IDeither this or wabaID
wabaIdstringWABA IDeither this or channelId

Request

curl --location --request GET '/waba-info?accessToken=${ACCESS_TOKEN}&channelId=${CHANNEL_ID}'
Copy

or

curl --location --request GET '/waba-info?accessToken=${ACCESS_TOKEN}&wabaId=${WABA_ID}'
Copy

Response

{
"ok": 1,
"result": {
"waId" : "11111111111",
"phoneNumberId" : "123124123232",
"wabaId" : "422126422872292",
"name" : "My Business",
"phoneNumber" : "85212345678",
"phoneNumberCC" : "1",
"formattedPhoneNumber" : "+1 111-111-1111",
"namespace" : "2dwsa4_e24e_42f8_6b5a_110232ae4d5",
"embeddedSignup" : true
}
}
Copy


GET /whatsapp-business-profile

This API call could get the business profile of a WhatsApp number.

Parameters

NameTypeDescriptionRequired
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
phoneNumberIdstringPhone number IDtrue

Request

curl --location --request GET '/whatsapp-business-profile?accessToken=${ACCESS_TOKEN}&phoneNumberId=${PHONE_NUMBER_ID}'
Copy

Response

{
"ok": 1,
"data": {
"about": "Hello this is John!",
"address": "ABC Building",
"description": "Testing 123",
"email": "testemail@woztell.com",
"profile_picture_url": "IMAGE_URL",
"websites": [
"https://woztell.com/"
],
"vertical": "PROF_SERVICES",
"messaging_product": "whatsapp"
}
}
Copy


GET /whatsapp-displayname-status

This API call is for retrieving the details related to the WhatsApp number

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
phoneNumberIdstringPhone number IDtrue

Request

Response

{
"ok": 1,
"data": {
"account_mode": "LIVE",
"verified_name": "WozTell Test",
"code_verification_status": "EXPIRED",
"display_phone_number": "+1 123-321-2652",
"quality_rating": "GREEN",
"is_official_business_account": false,
"messaging_limit_tier": "TIER_1K",
"id": "123465061846704"
}
}
Copy


PATCH /whatsapp-business-profile

This API call could update the business profile of a WhatsApp number.

Parameters

NameTypeDescriptionRequired
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
phoneNumberIdstringPhone number IDtrue
profileobjectContent to be updated in the business profiletrue
Profile Object
NameTypeDescriptionRequired
messaging_productstringOnly accept whatsapptrue
aboutstringThe "About" textfalse
addressstringThe address of your businessfalse
descriptionstringThe "Description" textfalse
emailstringEmail address of the your businessfalse
verticalstringIndustry of the business, please refer to here for the accepted valuesfalse
websitearrayURL(s) to the website(s) of your business including http:// or https://;
2 websites max.
false
profile_picture_urlstringURL to the profile picturefalse

Endpoint

Request Body

{
"accessToken": "ACCESS_TOKEN",
"phoneNumberId": "123456890999",
"profile": {
"about": "This is the about text.",
"address": "Office",
"description": "Testing Text",
"email": "test999@woztell.com",
"profile_picture_url": "IMAGE_URL",
"websites": [
"https://woztell.com/blog/", "https://woztell.com/pricing/"
],
"vertical": "PROF_SERVICES",
"messaging_product": "whatsapp"
}
}

Copy

Response

{
"ok": 1
}
Copy


PUT /media-id

This API call could upload a media file to WhatsApp server, in order to obtain a media ID.

NOTE

The uploaded media file will be kept in WhatsApp Cloud server for 30 days. After the expiration, users need to upload again to obtain another media ID.


Parameters

NameTypeDescriptionRequired
phoneNumberIdstringPhone number IDtrue
accessTokenstringAccess token generated from the WhatsAptrue
typestringimageaudiovideofiletrue
urlstringLink to the media filetrue

Endpoint

Request Body

{
"phoneNumberId": "123164329653069",
"accessToken": "ACCESS_TOKEN",
"type": "image",
"url": "MEDIA_URL",
}
Copy

Response

{
"ok": 1,
"mediaId": "5770270532993662",
"fileType": "image"
}
Copy


GET /conversation-analytics

This API is for retrieving the conversation analytics within the selected date range.

Authentication

The Payload & Signed context are required in the header.



Parameters

NameTypeDescriptionRequired
fromUNIX TimestampThe start date for the target date rangeYes
toUNIX TimestampThe end date for the target ate rangeYes
granularitystringThe granularity by which you would like to retrieve the analytics; HALF_HOURDAILY or MONTHLYYes
numbersarrayThe list of phone number(s) to get the analytics fromNo
metric_typesstringList of metrics to retrieve; COST and CONVERSATIONNo
conversation_typesstringList of conversation; FREE_ENTRY_POINTFREE_TIERREGULAR and UNKNOWNNo
conversation_directionsstringList of direction of initiating the conversation; business_initiated and uesr_initiatedNo
dimensionsstringList of breakdown to apply to the analytics; phonecountryconversation_type and conversation_reactionNo

Request

Response

{
"ok": 1,
"conversationAnalytics": {
"data_points": [
{
"start": 1672675200,
"end": 1672761600,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "USER_INITIATED",
"cost": 0
},
{
"start": 1664899200,
"end": 1664985600,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "BUSINESS_INITIATED",
"cost": 0
},
{
"start": 1676476800,
"end": 1676563200,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "USER_INITIATED",
"cost": 0
}
]
}
}
Copy


GET /catalogs

This API call could list out the catalogs associated to a specific WABA.

Authentication

The Payload & Signed context are required in the header.

Request

Response

{
"ok": 1,
"data": [
{
"id": "1234577510532066",
"name": "test_products"
}
],
"paging": {
"hasPrevious": false,
"hasNext": false
}
}
Copy


GET /products

This API call could list out the products under a catalog associated to a specific WABA.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
catalogIdstringID of the catalogtrue

Request

Response

{
"ok": 1,
"data": [
{
"name": "Test Product 1",
"price": "HK$900.00",
"image_url": "IMAGE_URL_1",
"retailer_id": "a6y7a9y6f0",
"id": "25233996219581593"
},
{
"name": "Test Product 2",
"price": "HK$2,000.00",
"image_url": "IMAGE_URL_2",
"retailer_id": "yu7q27pbg1",
"id": "7887884911230830"
}
],
"paging": {
"cursors": {
"before": "QVFIUjNtVGtsNzNVRF9sTlhla2JOLVhzUGtlbGdSUURvRDFzelB2MVQwZAHpCb3NieHZAvbXhwZADVud09hZA1pwQVhNMHk4NkNwOEw2ZAEt4MFNpZAk4tR05YVTZAB",
"after": "QVFIUmRwOElZAeHVsWHhiUmk2WlJWcTdnY181UTUzUmx0NEpiSDAzSGdJcHFZALURQSXdmSFZALWHI0ekwyMkx1dU4tXzZAXQnppWjc5MTVWZAmNtb0oyOU9KcEhB"
},
"hasPrevious": false,
"hasNext": false
}
}
Copy


Message Template APIs

GET /whatsapp-message-templates

This API call could list out the WhatsApp message templates of a specific WABA with pagination and optional filters.

Parameters

NameTypeDescriptionRequired
wabaIdstringTarget WABA IDtrue
firstintegerNumber of messages templates; maximum 100true
afterstringCursor for getting pagination result of the next page; either "after" or "before" should be specifiedfalse
beforestringCursor for getting pagination result of the previous page. Either "after" or "before" should be specifiedfalse
statusstringArray of status to filter out; defaults to: ["APPROVED"]["PENDING"]["REJECTED"]["PENDING_DELETION"]["DELETED"] if not specifiedfalse
categorystringCategory of the message template: ["TRANSACTIONAL"]["MARKETING"] or ["OTP"]false
quality_scoreStringQuality rating of the template: GREENYELLOW or REDfalse
languagearrayLanguage of message template; must be in array and in the supported language code such as en_USes.false
namestringName search of the message templatefalse
contentContentContent search of the message templatefalse
name or contentstringName or content search of the message templatesfalse

Request

curl --location --request GET '/whatsapp-message-templates?accessToken=${ACCESS_TOKEN}&wabaId=${WABA_ID}&first=10&after=MAZDZD&status=["APPROVED"]'
Copy

Response

"ok": 1,
"data": [
{
"id": "363730401994967",
"name": "sample_flight_confirmation",
"category": "TICKET_UPDATE",
"languages": [
"pt_BR",
"es",
"id",
"en_US"
],
"statuses": [
{
"language": "pt_BR",
"status": "APPROVED"
},
{
"language": "es",
"status": "APPROVED"
},
{
"language": "id",
"status": "APPROVED"
},
{
"language": "en_US",
"status": "APPROVED"
}
],
"templates": [
{
"language": "pt_BR",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Esta é a sua confirmação de voo para {{1}}-{{2}} em {{3}}."
},
{
"type": "FOOTER",
"text": "Esta mensagem é de uma empresa não verificada."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "es",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Confirmamos tu vuelo a {{1}}-{{2}} para el {{3}}."
},
{
"type": "FOOTER",
"text": "Este mensaje proviene de un negocio no verificado."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "id",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Ini merupakan konfirmasi penerbangan Anda untuk {{1}}-{{2}} di {{3}}."
},
{
"type": "FOOTER",
"text": "Pesan ini berasal dari bisnis yang tidak terverifikasi."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "en_US",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
}
],
"quality_score": {
"score": "UNKNOWN"
}
}
]
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MAZDZD"
},
"hasNext": true,
"hasPrevious": false
}
}
Copy


PUT /whatsapp-message-template

This API call could create a brand new WhatsApp message template.

NOTE

Each WhatsApp Business account is allowed to create 100 message templates per hour.


Parameters

NameTypeDescriptionRequired
wabaIdstringWABA IDtrue
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
namestringName of the message templatetrue
languagestringLanguage of the message templatetrue
categorystringCategory of the message template: TRANSACTIONALMARKETING or OTPtrue
componentsarrayContent of the message template. Please refer to here for the structure of the component.true
NOTES

By inserting the image URL into "example":{"header_handle":["IMAGE_URL"]}, this API will automatically upload the example while creating the message template for you.


Endpoint

Request Body

Sample Request (Image Header)

{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "Hi there! Are you interested in our latest promotional sale?"
},
{
"type": "HEADER",
"format": "IMAGE",
"example":{"header_handle":["IMAGE_URL"]}
}
]
}
Copy

Sample Request (Parameters, Footer and Call to Actions Buttons)

{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "hello {{1}} this is body template",
"example":{"body_text":[["Test"]]}
},
{
"type": "FOOTER",
"text": "this is footer template"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER",
"text": "Call",
"phone_number":"+85212769072"
},
{
"type": "URL",
"text": "URL",
"url":"https://www.woztell.com/"
}
]
}
]
}
Copy

Sample Request (Parameters and Quick Reply Buttons)

{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "hello {{1}} this is body template",
"example":{
"body_text":[["Test"]]
}
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "yes"
},
{
"type": "QUICK_REPLY",
"text": "no"
}
]
}
]
}
Copy

Response

{
"ok": 1,
"id": "516723536625510",
"language": "en_US"
}
Copy


PATCH /whatsapp-message-template

This API call could edit an existing message template.

NOTE

A message template can only be edited once in a 24 hour window, and up to 10 times in a 30 day window.


Parameters

NameTypeDescriptionRequired
wabaIdstringWABA IDtrue
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
messageTemplateNamestringName of the message templatetrue
messageTemplateLanguagestringLanguage of the message templatetrue
messageTemplateIdstringUnique ID of the message templatetrue
componentsarrayContent to be updated to the message templatetrue
NOTES

Each language version of a message template has its own ID. In order edit a message template with PATCH /whatsapp-message-templates, you will need to specify the language version of the template.

Normally, GET /whatsapp-message-templates will only return the ID of the most recent language. Therefore, you should first obtain the ID of a particular language by applying the language filter in GET /whatsapp-message-templates.


Endpoint

Request Body

{
"wabaId": "12986521265530",
"accessToken": "ACCESS_TOKEN",
"messageTemplateLanguage": "en_US",
"messageTemplateName": "test_template",
"messageTemplateId": "1748340935544945",
"components": [
{
"type": "BODY",
"text": "Winter's coming, it's time to check out our latest winter collection!"
}
]
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


DEL /whatsapp-message-template

This API call could delete an existing message template.

Parameters

NameTypeDescriptionRequired
wabaIdstringWABA IDtrue
accessTokenstringAccess token generated from the WhatsApp Cloud channeltrue
namestringName of the message templatetrue

Endpoint

Request Body

{
"wabaId": "12986521265530",
"accessToken": "ACCESS_TOKEN",
"name": "test_template"
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


Flow APIs

GET /flow

This API is for retrieving the list of flows.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
limitintegerNumber of flows to gettrue
afterstringFor getting next batch of threads, can be obtained from paging.cursors in the responseNo
beforestringFor getting next batch of threads, can be obtained from paging.cursors in the responseNo

Request

Response

{
"ok": 1,
"data": [
{
"label": "TEST FLOW (DRAFT)",
"value": "885692686603466",
"status": "draft",
"assets": [
{
"id": "SIGN_UP",
"label": "Customer Success (SIGN_UP)",
"data": "{}",
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/885692686603466/preview/?token=abdfac6c-1319-4a01-a896-d26482f44659",
"expires_at": "2024-03-08T04:52:37+0000"
}
}
],
"triggerMatchingObject": null
}
],
"paging": {
"cursors": {
"before": "QVFIUnJEbERTSFN1TEM5THFDdkJYNjExaF9xSUxjNjVGazJUWHBWTWV3Ukx0V2JQSFlMYmRzT0RXanpMeUVnd1VnSUlnQVBkamVyNkQ5dW9Ocm5YNVpoY2VR",
"after": "QVFIUnJEbERTSFN1TEM5THFDdkJYNjExaF9xSUxjNjVGazJUWHBWTWV3Ukx0V2JQSFlMYmRzT0RXanpMeUVnd1VnSUlnQVBkamVyNkQ5dW9Ocm5YNVpoY2VR"
},
"hasNext": false,
"hasPrevious": false
}
}
Copy


GET /flow-screen-payload

This API is for retrieving the flow screen payload of a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringThe unique ID of a flow.true

Request

Response

{
"ok": 1,
"payload": {
"id": "screen_with_data",
"label": "Feedback With Data (screen_with_data)",
"data": "{\n \"would_recommend\": \"\",\n \"how_to_do_better\": \"\"\n}",
"screens": [
{
"id": "screen_with_data",
"label": "Feedback With Data (screen_with_data)",
"data": "{\n \"would_recommend\": \"\",\n \"how_to_do_better\": \"\"\n}",
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/1332875717353551/preview/?token=ed47bb0a-f749-4a0f-87f3-889f003b53ed",
"expires_at": "2024-03-06T03:56:10+0000"
}
}
]
}
}
Copy


GET /flow-preview

This API is for retrieving teh URL to the preview of a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringThe unique ID of a flow.true

Request

Response

{
"ok": 1,
"data": {
"preview_url": "https://business.facebook.com/wa/manage/flows/994520121646941/preview/?token=5615e315-899c-4787-b211-a512c35f83aa",
"expires_at": "2024-03-06T03:46:30+0000"
}
}
Copy


GET /flow-detail

This API is for retrieving the details of a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringThe unique ID of a flow.true

Request

Response

{
"ok": 1,
"id": "678952344393952",
"name": "Test Flow 2",
"categories": [
"OTHER"
],
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/678952344393952/preview/?token=90fd19f9-edf7-4a6a-8fea-8da4cbb687f7",
"expires_at": "2024-03-06T07:39:50+0000"
},
"status": "DRAFT",
"validation_errors": [],
"json_version": "3.1",
"whatsapp_business_account": {
"id": "619018099309339",
"name": "Test Group Limited (UAT)",
"currency": "USD",
"timezone_id": "42",
"message_template_namespace": "a02e2441_69dd_4ea2_a90b_4aca392f0afa"
},
"application": {
"link": "https://platform.woztell.com/",
"name": "Woztell",
"id": "689996742158814"
}
}
Copy


PUT /create-flow

This API is for creating a new flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
namestringName of the new flow.true
categoriesarrayA list of Flow categories. Multiple values are possible, but at least one is required: SIGN_UPSIGN_INAPPOINTMENT_BOOKINGLEAD_GENERATIONCONTACT_USCUSTOMER_SUPPORTSURVEYOTHERtrue
clone_flow_idstringID of the flow to be cloned fromfalse
endpoint_urlstringThe URL of the flow endpoint. Do not provide this field if you are cloning a Flow with Flow JSON version below 3.0.false

Endpoint

Request Body

{
"data": {
"name": "Test Flow 2",
"categories": [ "SURVEY" ],
"clone_flow_id": "368669698913502",
"endpoint_url": "https://webhook.site/ff434d70-465c-4c79-90cc-333adfa858b5"
}
}
Copy

Response

{
"ok": 1,
"id": "1557286081777970"
}
Copy


PATCH /flow-metadata

This API is for updating the metadata of a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringID of the flow that is being updatedtrue
namestringNew name of the flowfalse
categoriesarrayNew categories of the flowfalse
endpoint_urlstringThe URL of the WA Flow Endpoint. Do not provide this field if you are updating a Flow with Flow JSON version below 3.0false

Endpoint

Request Body

{
"flowId": "1005133727262236",
"data": {
"name": "Test Flow ABC"
},
"endpoint_url": "https://webhook.site/ff434d70-465c-4c79-90cc-333adfa858b5"
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


PATCH /flow-json

This API is for updating the JSON of a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
namestringName of the flowtrue
versionstringFlow JSON versiontrue
screensJSONThe screens of the flow that can be input in the flow builder in WhatsApp Managertrue

Endpoint

Request Body

{
"flowId": "910367050421850",
"data": {
"version": "3.1",
"screens": [
{
"id": "PREFERENCES",
"title": "Update Preferences",
"data": {},
"terminal": true,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "form",
"children": [
{
"type": "CheckboxGroup",
"label": "Communication types",
"required": true,
"name": "communicationTypes",
"data-source": [
{
"id": "0",
"title": "Special offers and promotions"
},
{
"id": "1",
"title": "Changes to my subscription"
},
{
"id": "2",
"title": "News and events"
},
{
"id": "3",
"title": "New products"
}
]
},
{
"type": "CheckboxGroup",
"label": "Contact Preferences",
"required": false,
"name": "contactPrefs",
"data-source": [
{
"id": "0",
"title": "Whatsapp"
},
{
"id": "1",
"title": "Email"
},
{
"id": "2",
"title": "SMS"
}
]
},
{
"type": "Footer",
"label": "Done",
"on-click-action": {
"name": "complete",
"payload": {
"communicationTypes": "${form.communicationTypes}",
"contactPrefs": "${form.contactPrefs}"
}
}
}
]
}
]
}
}
]
}
}
Copy

Response

{
"ok": 1,
"success": true,
"validation_errors": []
}
Copy


DEL /flow

This API is for deleting a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringID of the flow to be deletedtrue

Endpoint

Request Body

{
"flowId": "913687770028833"
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


POST /publish-flow

This API is for publishing a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringID of the flow to be publishedtrue

Endpoint

Request Body

{
"flowId": "913687770028833"
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


POST /deprecate-flow

This API is for deprecating a flow.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
flowIdstringID of the flow to be deprecatedtrue

Endpoint

Request Body

{
"flowId": "913687770028833"
}
Copy

Response

{
"ok": 1,
"success": true
}
Copy


Business Encryption APIs

POST /whatsapp-business-encryption

This API is for setting the business public key.

Authentication

The Payload & Signed context are required in the header.

Parameters

NameTypeDescriptionRequired
publicKeystring2048-bit RSA business public key generated. Please refer to here for how to generate the public keytrue

Endpoint

Request Body

{
"publicKey": "-----BEGIN PUBLIC KEY-----\nABCDIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAls1409DedWXmHnt0Pb6s\nIdGkL6pFXxd5vPxrk/CChQssCGLK7jEPQwzhAZ/La7Cg/IvxjxvgC8DD3v8ZniU7\nHu5xPftKm3rEvNRwstRHaoPF+CNxHzHMy2DkgdVxvnBI6qtEjn+yZXdEOHhGHejH\nEf0EfFSMoyCaXea4E3LqvOE8iJ42uNtC7D4TmyeE+dTKudclswNA3QDA0zLH1M+Y\n9Oxv06FgD9S8gmvSwJgn3hfwLc/j5Dj5Qr6NAd9dRMQGLGeFEbg/JJXAVaAAxFlb\nvITHRG1ynRZDcrAri377Z+HS8G43o3TmrPyD0zRXQFbHCu+kOH5DBs3yFRcFjA7L\nwQIDAQAB\n-----END PUBLIC KEY-----"
}
Copy

Response

{
"ok": 1
}
Copy


GET /whatsapp-business-encryption

This API is for retrieving the business public key.

Authentication

The Payload & Signed context are required in the header.

Request

Response

{
"ok": 1,
"data": [
{
"business_public_key": "-----BEGIN PUBLIC KEY-----\nABCDIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAls1409DedWXmHnt0Pb6s\nIdGkL6pFXxd5vPxrk/CChQssCGLK7jEPQwzhAZ/La7Cg/IvxjxvgC8DD3v8ZniU7\nHu5xPftKm3rEvNRwstRHaoPF+CNxHzHMy2DkgdVxvnBI6qtEjn+yZXdEOHhGHejH\nEf0EfFSMoyCaXea4E3LqvOE8iJ42uNtC7D4TmyeE+dTKudclswNA3QDA0zLH1M+Y\n9Oxv06FgD9S8gmvSwJgn3hfwLc/j5Dj5Qr6NAd9dRMQGLGeFEbg/JJXAVaAAxFlb\nvITHRG1ynRZDcrAri377Z+HS8G43o3TmrPyD0zRXQFbHCu+kOH5DBs3yFRcFjA7L\nwQIDAQAB\n-----END PUBLIC KEY-----",
"business_public_key_signature_status": "VALID"
}
]
}
Copy