Skip to main content

Public API for WhatsApp Cloud Integration

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:
curl --location --request GET 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.1/api/whatsapp-message-templates?accessToken=${ACCESS_TOKEN}&wabaId=${WABA_ID}&first=10'


Payload & Signed Context

NOTE

This authentication method can only be applied to GET /conversation-analytics, GET /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
}
}
}
}

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="
}
}
}
}
}
  1. Create Payload with in the following format:

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

Example Payload:

{"app":"699802d69a73fc555f1c6bc4","appIntegration":"696327325430a1cbd131dfdf","channel":"696327315430a1f98231dfde"}
  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==
  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 name, Phone Number, WABA Namespace, WABA 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}'

or

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

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
}
}

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}'

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"
}
}

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-displayname-status?phoneNumberId=110765061846704&accessToken=eyAbcGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJBUEkiLCJhcHAiOiI2MzE4MDJkNjlhNzNmYzU1NWYxYzZiYzQiLCJqdGkiOiI3M2VhN2UwOC00N2Q3LTU1MGYtOGQ1Yi1jNmVkYTIwZGU3YjIiLCJpc3MiOiJpbnRlcm5hbCIsImlhdCI6MTcwNzk5MTEwMjgwNX0.vzhViZuPVDafMfD6NpPSvy6ab5Rs-lV63bCLeE9gu5M' 

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"
}
}

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-business-profile

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"
}
}

Response

{
"ok": 1
}

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
typestringimage, audio, video, filetrue
urlstringLink to the media filetrue

Endpoint

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/media-id

Request Body

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

Response

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

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_HOUR, DAILY 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_POINT, FREE_TIER, REGULAR and UNKNOWNNo
conversation_directionsstringList of direction of initiating the conversation; business_initiated and uesr_initiatedNo
dimensionsstringList of breakdown to apply to the analytics; phone, country, conversation_type and conversation_reactionNo

Request

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/conversation-analytics?from=1651200978632&to=1851220649059&granularity=MONTHLY&numbers=14132521446&metric_types=COST%2CCONVERSATION&conversation_directions=business_initiated%2Cuser_initiated&dimensions=phone%2Ccountry%2Cconversation_type%2Cconversation_direction'

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
}
]
}
}

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/catalogs'

Response

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

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
fieldsstringcomma-separated fields of the product to fetch. Please see the availble fields here: https://developers.facebook.com/docs/marketing-api/reference/product-item/#fields . Defaults to name,price,image_url,retailer_idfalse
limitintegernumber of results to fetch for pagination. Maximum 100.false
afterstringafter cursor for paginationfalse
beforestringbefore cursor for paginationfalse

Request

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/products?catalogId=1234567510532066'

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
}
}

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: GREEN, YELLOW or REDfalse
languagearrayLanguage of message template; must be in array and in the supported language code such as en_US, es.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"]'

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
}
}

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: TRANSACTIONAL, MARKETING 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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-message-template

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"]}
}
]
}

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/"
}
]
}
]
}

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"
}
]
}
]
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-message-template

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!"
}
]
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/whatsapp-message-template

Request Body

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

Response

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

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flows?limit=10'

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
}
}

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/flow?flowId=1332875717353551'

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"
}
}
]
}
}

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flow-preview?flowId=994520121646941'

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"
}
}

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

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flow-detail?fields=id%2Cname%2Ccategories%2Cpreview%2Cstatus%2Cvalidation_errors%2Cjson_version%2Cdata_api_version%2Cendpoint_uri%2Cwhatsapp_business_account%2Capplication&flowId=678952344393952'

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"
}
}

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_UP, SIGN_IN, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHERtrue
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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flow

Request Body

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

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flow-metadata

Request Body

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

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2-dev/api/flow-json

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}"
}
}
}
]
}
]
}
}
]
}
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/flow

Request Body

{
"flowId": "913687770028833"
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/publish-flow

Request Body

{
"flowId": "913687770028833"
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/deprecate-flow

Request Body

{
"flowId": "913687770028833"
}

Response

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

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

https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/whatsapp-business-encryption

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-----"
}

Response

{
"ok": 1
}

GET /whatsapp-business-encryption

This API is for retrieving the business public key.

Authentication

The Payload & Signed context are required in the header.

Request

curl --location 'https://api.whatsapp-cloud.woztell.sanuker.com/v1.2-dev/whatsapp-business-encryption'

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"
}
]
}