Skip to contentSkip to navigationSkip to topbar
On this page

WhatsApp Tech Provider Program Integration Guide


Before you begin this process, read and complete the pre-requisites in the WhatsApp Tech Provider Program overview.

The Twilio WhatsApp onboarding team is here to guide you through the process. Reach out for help using the same support ticket created after you submitted the WhatsApp Tech Provider Program request form(link takes you to an external page).

Let's get started!


Create a Meta app and fill out app details

create-a-meta-app-and-fill-out-app-details page anchor

It is recommended to start with a new Meta app (even if you already have another Meta app). If you already have another Meta app, there is little benefit to reusing it unless you already have completed the Meta App review for the whatsapp_business_management permission.

(information)

Info

Meta Business Manager — sometimes referred to as Facebook Business Manager, Meta BM, or Meta Business Account — has been renamed to Business Portfolio by Meta. All terms refer to the same business entity within Meta's systems and IDs are consistent. We are in process of updating the Twilio documentation to use Meta's new term.

Create a Meta app

create-a-meta-app page anchor
  1. Visit Meta's app creation page(link takes you to an external page) to create a new app.
  2. In the Which business portfolio do you want to connect to this app section, select your Meta Business Portfolio.
  3. On the next page, in the What do you want your app to do section, select Other as you will be using it for WhatsApp.
  4. Select Business as the app type.
  5. Finally, fill out the app name and contact email fields. Once again, select your Meta Business Portfolio under Business portfolio if it was not automatically selected.
(warning)

Warning

The name of the app, not the name of your business portfolio, will be shown to users in the Embedded Signup pop-up window. Do not include Meta's trademarks, such as WhatsApp, in this name.

  1. Click on Create app to continue.
  1. Once you are at your Meta app's Dashboard page, find the WhatsApp widget and click on Set Up.
  2. On the left-side navigation, go to WhatsApp > Quickstart. In the Quickstart, navigate to the Scale your Business section and click Start Onboarding. Please note that by doing so, you will be accepting Meta's Tech Provider Terms(link takes you to an external page) and any other associated terms from Meta.
  3. Navigate to App settings > Basic on the left-side navigation. Here, you should add the following information:
  • Your App Icon, which represents your app in Meta's App Center. This is required for launching your app. Do not use any Meta logos or trademarks on the icon (e.g. "WA", "WhatsApp"). This will be visible to customers in Embedded Signup.
  • Your "Privacy Policy" and "Terms of Service" links. These will also be provided to your customers for their information in Embedded Signup. Now, scroll down and click on the "Add Platform" button. Here, you will need to specify the platform you're using (e.g., a website app, etc.).

Turn on 2FA in your business portfolio

turn-on-2fa-in-your-business-portfolio page anchor

Meta requires your business manager to have 2FA enabled to complete the rest of this process. For guidance on how to enable it, follow the steps provided in Meta's official documentation(link takes you to an external page) to make sure this is enabled for your business.


Integrate with Embedded Signup

integrate-with-embedded-signup page anchor

Get your coding gloves ready!

At the end of this section, you will have completed a prototype of Embedded Signup. You will need to submit a screen recording of your prototype to Meta as part of App Review in the following section.

First, familiarize yourself with the desired user flow:

  1. Client business will choose the phone number that they wish to use on WhatsApp (unless you assign numbers automatically). The WhatsApp Tech Provider Program supports both Twilio phone numbers and non-Twilio phone numbers (i.e. bringing your own phone number, or BYON) on WhatsApp.

  2. Client business will click the "Login with Facebook" button within your UI and the Embedded Signup popup window will launch.

  3. In the popup window, they will follow Meta's flow and complete the following:

  • Create or select a Meta Business Portfolio
  • Create a WhatsApp Business Account ("WABA") or select the existing one if onboarding an additional number
  • If using a Twilio voice-only or non-Twilio phone number they will need to verify ownership of the phone number with Meta by entering in an OTP sent by either SMS or Voice
  1. Once they complete the flow within the Meta popup window, it will close and you will register their WhatsApp Sender using the Twilio Senders API.

Remember this user flow as you will need to provide Meta with this user flow in the next section.

Get your Configuration ID

get-your-configuration-id page anchor
  1. Let's start by getting permissions to manage WhatsApp business accounts. This is done by creating a "Configuration" with the whatsapp_business_management permission. It is recommended to use a new configuration for Embedded Signup.

  2. In the Meta app dashboard, navigate to the left menu and click on Add Product. From the options that appear, select Set Up in the Facebook Login for Business card. Once you've done that, go back to the left navigation, and go to Configurations, then click on Create Configuration. Important: Do not switch to "Facebook Login". Only "Facebook Login for Business" is accepted.

  3. Navigate back to the left menu, click Configurations > Create a Configuration.

  4. In this section, assign a name to your configuration. Remember, this name will not be visible to your customers. After you've entered a name, select Next.

  5. In the login variation section, select the WhatsApp Embedded Signup option and click Next.

  6. Choose Access Token: This section refers to your Meta Graph API access token. Since you are working with Twilio and using Twilio's APIs and will not be calling Meta's Graph API directly, you do not need to worry about this page and can use the recommended option. Select the recommended 60 days option and click Next.

  7. Under the Assets section, select the WhatsApp accounts option.

  8. Make sure you have the whatsapp_business_management permission before you finalize the configuration. Since you are working with Twilio's APIs, you don't need to add other permissions. Adding other permissions may also slow down the Meta app approval process.

Save the Configuration ID that Meta provides. You will need this when adding the JavaScript code to your website.

Add the Login button to your site

add-the-login-button-to-your-site page anchor

With the configuration ID handy, you're now ready to integrate the Login with Facebook button ("Login button") onto your site or web app.

Allowlist your domains

Before we start the development process, on the left navigation menu, go to Facebook Login for Business > Settings. There, add your website's domain into both Valid OAuth Redirect URIs and Allowed Domains for the JavaScript SDK. For more information, follow this link(link takes you to an external page).

Add the Facebook JavaScript SDK to your website

  1. Add the snippet below after the opening <body> tag on the page you intend to add the "Login with Facebook" button. Make sure you replace the value with your App ID.
1
<script>
2
window.fbAsyncInit = function() {
3
FB.init({
4
appId: 'APP_ID', // Your Meta app ID
5
version: 'v18.0' // Meta Graph API version
6
})
7
};
8
</script>
9
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script>
  1. Add the following HTML to where you want to surface the "Login with Facebook" button. Styles are included to match Meta's style guide.
1
<button onclick="launchEmbeddedSignup()" style="background-color: #1877f2; border: 0; border-radius: 4px; color: #fff; cursor: pointer; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; height: 40px; padding: 0 24px;">
2
Login with Facebook
3
</button>
  1. Add the following event handler for when the user finishes Embedded Signup and the pop-up window closes. Make sure you replace the value with your Configuration ID.

Make a note of this file, as you will need to come back and edit this after your app is approved by Meta.

1
// Handle WhatsApp Embedded Signup
2
function launchEmbeddedSignup() {
3
// Launch Facebook login
4
FB.login(
5
function (response) {
6
// Since you are using Twilio's APIs, you do not need to do anything with the response here.
7
},
8
{
9
config_id: "KEEP_IN_QUOTES_BUT_REPLACE_WITH_YOUR_CONFIG_ID",
10
auth_type: "rerequest", // Avoids "user is already logged" in errors if users click the button again before refreshing the page
11
response_type: "code",
12
override_default_response_type: true,
13
extras: {
14
sessionInfoVersion: 2, // Required to get WABA ID
15
// Leave below commented for now, you will need to replace this once your app is approved by Meta
16
// setup: {
17
// solutionID: "KEEP_IN_QUOTES_BUT_REPLACE_WITH_YOUR_SOLUTION_ID",
18
// }
19
}
20
}
21
);
22
}
23
24
// Define session handler
25
const embeddedSignupInfoListener = (event) => {
26
if (!event.origin.endsWith("facebook.com")) return;
27
try {
28
const data = JSON.parse(event.data);
29
if (data.type === "WA_EMBEDDED_SIGNUP") {
30
// if user finishes the Embedded Signup flow and the popup window closes
31
if (data.event === "FINISH"|| data.event === "FINISH_ONLY_WABA") {
32
const { phone_number_id, waba_id } = data.data;
33
console.log({ phone_number_id, waba_id });
34
// For now, you do not need to do anything here. Once App Review has been completed, then you
35
// will pass the WABA ID to your backend service to use the Twilio Senders API to register the WhatsApp Sender.
36
// Not that Meta only returns their phone_number_id, not the full phone number. Make sure to collect the
37
// full phone number in your own user interface before the user clicks on this button.
38
}
39
else {
40
// Otherwise the user canceled the Embedded Signup flow by closing the popup window before the last step.
41
// We recommend you show an error to the user here.
42
const { current_step } = data.data;
43
console.log(`User did not finish ESU. Last step: ${current_step}`);
44
}
45
}
46
} catch {
47
return;
48
}
49
};
50
51
// Listen for Embedded Signup events
52
window.addEventListener("message", embeddedSignupInfoListener);
53
54
// When the user navigates away from the page, remove the event listener
55
window.addEventListener ("beforeunload" , () =>
56
window.removeEventListener ("message", embeddedSignupInfoListener);
57
);

Test and deploy your prototype

test-and-deploy-your-prototype page anchor

You should now be able to test the Login button flow.

  • Test: Make sure the button launches the Embedded Signup flow when clicked, and that your front-end receives a WABA ID when the flow finishes.
  • Deploy: Your prototype needs to be available on an externally accessible site that Meta can access. You will need to provide the URL to Meta for review.

Finally, set your App Mode to Live in the Meta app dashboard.

The final step in the user flow is to register the number in the customer's WABA using Twilio's Senders API. However, before you can do so, your Meta app needs to be approved by Meta.


Submit your Meta app for review

submit-your-meta-app-for-review page anchor

Meta requires submitting for Meta app Review so that your App can use the whatsapp_business_management permission in production with Twilio. This is a required Meta compliance step to safeguard the ecosystem. As part of this process, your business needs to complete a data handling questionnaire.

Review to make sure your Meta app's icon, app category, legal documentation links, and platform are all accurate within App settings > Basic. Updating these details after App Review submission may trigger a re-review.

If you haven't already, use the Graph API explorer tool(link takes you to an external page) to make at least 1 successful API call using the whatsapp_business_management permission no more than 30 days prior to submitting for App Review.

Request advanced permissions

request-advanced-permissions page anchor

Request advanced access to the whatsapp_business_management permission: Under App Review > Permissions and Features, look for whatsapp_business_management and click to "Request advanced access". Follow the steps to continue to App Review. To streamline the App Review process, do not request any advanced access to any additional permissions.

(information)

Info

If you're having trouble finding the whatsapp_business_management permission, try using your browser's find function rather than Meta's search bar.

Navigate to the App Review > Requests section. Scroll down to the bottom of the Request for App Review page, there you will find the Data Handing questions section. Click on the arrow to answer the data handling questions.

Meta will require you to:

  • Indicate if you have a data controller located in the European Economic Area (EEA) or the United Kingdom (UK) that will be responsible for all data Meta shares with you.
  • For each data processor, provide the company name, purpose of data access and countries where data will be obtained. A data processor is a company that will have access to users' personal data obtained from Meta.
  • Share which processes you have in place to adhere to requests from public authorities for the personal data of users. For more information, see Meta's Data Handling Questions FAQs documentation(link takes you to an external page)

Provide details on your user flow

provide-details-on-your-user-flow page anchor

The final step prior to submitting is to share a written description and a screen recording of your user flow, along with your prototype. Meta's integrity team's concern is how your business will use the whatsapp_business_management permission, so focus on the core user flow for WhatsApp onboarding. You do not need to give a complete product demo. Omit audio as Meta's reviewers will not listen to it.

In the App Verification Details, describe the user flow that uses the whatsapp_business_management permission as noted above.

Share your prototype with Meta. Meta requires that the app be publicly available or with instructions on how to access it (e.g. test credentials). The step by step guide lets reviewers demo your integration.

Next, you will upload the screen recording and provide details on the requested permission. The screen recording should match the descriptions you already provided. Show the user flow that uses the whatsapp_business_management permission. You must show a user granting your app this permission. Meta recommends that the screen recording be approximately 30 seconds to 2 minutes long, and in high-resolution (1080 or better).

Click to "Submit for Review". Meta generally provides a review decision within a week.

Let Twilio know that you have submitted your App to Meta. Twilio is here to help you along the way and we want to know how it's going!

Once Meta has reviewed your App, you will receive an email and Alert in your Meta app dashboard. Go to Alerts > Inbox and review the submission results.


Complete Meta's access verification

complete-metas-access-verification page anchor

Once your Meta app is approved, you will need to complete Meta's Access Verification to verify that your business is a Tech Provider. You can do this in your App Dashboard by navigating to App Settings > Basic. There you should see an option to complete Access Verification. Fill out the steps below and submit. Meta typically takes 5 business days to review this, but if it's taking a while then let Twilio know to escalate it on your behalf.


Connect your Meta app to Twilio (Partner Solution)

connect-your-meta-app-to-twilio-partner-solution page anchor

Congratulations on getting all of the Meta approvals completed! Now let's connect your Meta app to Twilio.

Submit your Meta app ID to Twilio

submit-your-meta-app-id-to-twilio page anchor

If you haven't already, you will need to copy the Meta app ID shown in the top of your App Dashboard to send to Twilio's WhatsApp onboarding team.

Accept Twilio's "Partner Solution" request

accept-twilios-partner-solution-request page anchor

This allows you to continue to use Twilio's APIs and platform for WhatsApp.

On the left navigation within the Meta app, select Products > WhatsApp > Partner Solutions. Click to "Accept" Twilio's request.

Update Embedded Signup to use your unique solution ID

update-embedded-signup-to-use-your-unique-solution-id page anchor

Copy your unique Solution ID. Find the file where you are calling the FB.login function. Use your unique Solution ID for the solutionID field — yes solutionID not solution_id as it will not work correctly.

1
// Handle WhatsApp Signup
2
function launchEmbeddedSignup() {
3
// Launch Facebook login
4
FB.login(
5
function (response) {
6
// Since you are using Twilio's APIs, you do not need to do anything with the response here.
7
},
8
{
9
config_id: "KEEP_IN_QUOTES_BUT_REPLACE_WITH_YOUR_CONFIG_ID",
10
auth_type: "rerequest", // avoids "user is already logged" in errors if users click the button again before refreshing the page
11
response_type: "code",
12
override_default_response_type: true,
13
extras: {
14
sessionInfoVersion: 2, // required to get WABA ID
15
setup: {
16
solutionID: "KEEP_IN_QUOTES_BUT_REPLACE_WITH_YOUR_SOLUTION_ID",
17
}
18
}
19
}
20
);
21
}

Once you add the Solution ID, you should notice that when you go through Embedded Signup, it displays that your company is working with Twilio to enable your customers on WhatsApp during the pop-up window flow. This is required by Meta's legal team, and cannot be removed.


Integrate with Twilio's APIs to register the Sender

integrate-with-twilios-apis-to-register-the-sender page anchor

Once your Meta app review is approved, you can finish your integration with Twilio:

  • Skip the phone number verification steps in Embedded Signup when the client business is using a Twilio SMS-capable phone number
  • Create a subaccount for each new business using the Accounts API docs. Each subaccount will be mapped to a WABA.
  • Use the Twilio Senders API to connect new WABAs to new subaccounts and register phone numbers with WhatsApp.

Skip phone number in embedded signup when using Twilio SMS-capable phone numbers

skip-phone-number-in-embedded-signup-when-using-twilio-sms-capable-phone-numbers page anchor

Up until this point, when the Embedded Signup window opens, the default configuration for Embedded Signup will have your users do the following:

  1. Create or select their Meta Business Portfolio
  2. Create or select their WhatsApp Business Account (WABA)
  3. Enter a phone number to add to their WABA and verify the phone number by entering an one-time-passcode (OTP) sent via SMS or a voice call

If you are using Twilio SMS-capable phone numbers for your customers, it's against Twilio policy to display OTPs. As a result, Twilio's Senders API will do (3) automatically when you make the API call to create the WhatsApp Sender and you need to turn off those steps within Embedded Signup.

If you are using a combination of Twilio SMS-capable phone numbers, as well as Twilio voice-only numbers or non-Twilio numbers (i.e. BYON), then you will need to configure Embedded Signup dynamically based on the type of phone number the client business choose.

To configure Embedded Signup to not prompt your customers to provide a phone number and skip those steps, update where you make your FB.login call to include featureType: 'only_waba_sharing' like so:

1
function launchEmbeddedSignup() {
2
FB.login(
3
function (response) {
4
},
5
{
6
config_id: "KEEP_IN_QUOTES_BUT_REPLACE_WITH_YOUR_CONFIG_ID",
7
auth_type: "rerequest",
8
response_type: "code",
9
override_default_response_type: true,
10
extras: {
11
sessionInfoVersion: 2,
12
// set the following "featureType" to 'only_waba_sharing'
13
// if and only if using a Twilio SMS-capable number, otherwise
14
// do not include it or set it to null
15
featureType: 'only_waba_sharing', // <---
16
setup: {
17
solutionID: "SOLUTION_ID",
18
}
19
}
20
}
21
);
22
}

Create a subaccount for each customer

create-a-subaccount-for-each-customer page anchor

When a new company signs up with WhatsApp, they will create a new WABA. Each WABA is mapped to a Twilio subaccount. If you're not already familiar with Twilio subaccounts, you can learn more in the subaccounts guide. If you don't already have a subaccount for this customer, you will need to create one programmatically.

Create a subaccount programmatically using the Twilio Accounts API

See the example below and make sure to replace the FriendlyName with your customer's company name. Use your main Twilio account (parent account) credentials to make this request. Refer to the Accounts API docs for an example in your desired programming language.

(error)

Danger

Do not make this or other Twilio API calls involving a Twilio AuthToken on the front end of your application, where you implemented Embedded Signup.

Create a subaccountLink to code sample: Create a subaccount
1
// Download the helper library from https://www.twilio.com/docs/node/install
2
const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";
3
4
// Find your Account SID and Auth Token at twilio.com/console
5
// and set the environment variables. See http://twil.io/secure
6
const accountSid = process.env.TWILIO_ACCOUNT_SID;
7
const authToken = process.env.TWILIO_AUTH_TOKEN;
8
const client = twilio(accountSid, authToken);
9
10
async function createAccount() {
11
const account = await client.api.v2010.accounts.create({
12
friendlyName: "Submarine",
13
});
14
15
console.log(account.authToken);
16
}
17
18
createAccount();

Output

1
{
2
"auth_token": "auth_token",
3
"date_created": "Thu, 30 Jul 2015 20:00:00 +0000",
4
"date_updated": "Thu, 30 Jul 2015 20:00:00 +0000",
5
"friendly_name": "Submarine",
6
"owner_account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
7
"sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
8
"status": "active",
9
"subresource_uris": {
10
"available_phone_numbers": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AvailablePhoneNumbers.json",
11
"calls": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls.json",
12
"conferences": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Conferences.json",
13
"incoming_phone_numbers": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/IncomingPhoneNumbers.json",
14
"notifications": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Notifications.json",
15
"outgoing_caller_ids": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/OutgoingCallerIds.json",
16
"recordings": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json",
17
"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json",
18
"addresses": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Addresses.json",
19
"signing_keys": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SigningKeys.json",
20
"connect_apps": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/ConnectApps.json",
21
"sip": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SIP.json",
22
"authorized_connect_apps": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AuthorizedConnectApps.json",
23
"usage": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Usage.json",
24
"keys": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Keys.json",
25
"applications": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Applications.json",
26
"short_codes": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SMS/ShortCodes.json",
27
"queues": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Queues.json",
28
"messages": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Messages.json",
29
"balance": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Balance.json"
30
},
31
"type": "Full",
32
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
33
}
(warning)

Warning

Each WABA can only be mapped to a single account or subaccount. You must keep track of each business or brand and have each onboarded onto a dedicated subaccount. WhatsApp does not allow senders from different businesses to be registered in the same WABA.

When you make the previous request, the subaccount's AccountSid and AuthToken will be returned. Save the subaccount's AccountSid and AuthToken in your database to use for this customer. You will also use these credentials in the next step when calling the Twilio Senders API to register your customer's phone numbers on WhatsApp.

Register and configure each number with the Senders API

register-and-configure-each-number-with-the-senders-api page anchor

In your front-end, once the user completes the Embedded Signup flow, pass the WABA ID and Phone Number to the backend of your application and use it with the subaccount's Account SID and Auth Token, to call the Twilio Senders API with the following fields:

  • sender_id: provide the phone number that you are registering in the format using e.146
  • waba_id: provide the WABA ID if this is the first number for the customer. This will connect it to the subaccount. Note that once a WABA ID has been mapped to a subaccount, it will stay connected unless all WhatsApp Senders have been deleted from the account.
  • callback_url, callback_method, fallback_url, fallback_method, and status_callback_url: you can set your callback URLs on the sender so you can receive messages and message statuses. Note that status callbacks only support HTTP POST.
  • profile.name is only required when using a Twilio SMS-capable number, otherwise Twilio will use the one provided by the customer during Embedded Signup. It's important to note that the profile name will be visible to your customers, and it must comply with certain regulations set by WhatsApp(link takes you to an external page). To make the creation of a WhatsApp Sender smoother, Twilio encourages you to limit the number of different display names for each brand.
  • Other fields are optional
1
## Create Sender
2
curl -X "POST" "https://messaging.twilio.com/v2/Channels/Senders" \
3
-H "Content-Type: application/json; charset=utf-8" \
4
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN" \
5
-d $'{
6
"sender_id": "whatsapp:+15017122661",
7
"configuration": {
8
"waba_id": "12345678912345"
9
},
10
"profile": {
11
"address": "101 Spear Street, San Francisco, CA",
12
"emails": [
13
"support@twilio.com"
14
],
15
"vertical": "Other",
16
"logo_url": "https://www.twilio.com/logo.png",
17
"description": "We\'re excited to see what you build!",
18
"about": "Hello! We are Twilio.",
19
"name": "Twilio",
20
"websites": [
21
"https://twilio.com",
22
"https://help.twilio.com"
23
]
24
},
25
"webhook": {
26
"callback_method": "POST",
27
"callback_url": "https://demo.twilio.com/welcome/sms/reply/"
28
}
29
}'

Output

1
{
2
"status": "CREATING",
3
"sender_id": "whatsapp:+15017122661",
4
"sid": "XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
5
"configuration": {
6
"waba_id": "12345678912345"
7
},
8
"profile": {
9
"about": "Hello! This is Twilio's official account.",
10
"name": "Twilio",
11
"vertical": "Other",
12
"websites": [
13
{
14
"website": "https://twilio.com",
15
"label": "Website"
16
},
17
{
18
"website": "https://help.twilio.com",
19
"label": "Website"
20
}
21
],
22
"address": "101 Spear Street, San Francisco, CA",
23
"logo_url": "https://www.twilio.com/logo.png",
24
"emails": [
25
{
26
"email": "support@twilio.com",
27
"label": "Email"
28
}
29
],
30
"description": "We're excited to see what you build!"
31
},
32
"webhook": {
33
"callback_method": "POST",
34
"callback_url": "https://demo.twilio.com/welcome/sms/reply/"
35
},
36
"url": "https://messaging.twilio.com/v2/Channels/Senders/XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
37
"properties": null
38
}

Check to make sure the WhatsApp Sender was registered successfully

check-to-make-sure-the-whatsapp-sender-was-registered-successfully page anchor

The Senders API registers WhatsApp Senders asynchronously. When you make the POST call above to create the WhatsApp Sender, the Sender's SID will be returned. WhatsApp Sender SIDs will start with XE.

To check if the WhatsApp Sender has been successfully registered and is online, fetch the WhatsApp Sender:

1
## Fetch Sender
2
curl -X "GET" "https://messaging.twilio.com/v2/Channels/Senders/XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
3
-H "Content-Type: application/json; charset=utf-8" \
4
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN"

Output

1
{
2
"status": "ONLINE",
3
"sender_id": "whatsapp:+15017122661",
4
"sid": "XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
5
"configuration": {
6
"waba_id": "12345678912345"
7
},
8
"profile": {
9
"about": "Hello! This is Twilio's official account.",
10
"name": "Twilio",
11
"vertical": "Other",
12
"websites": [
13
{
14
"website": "https://twilio.com",
15
"label": "Website"
16
},
17
{
18
"website": "https://help.twilio.com",
19
"label": "Website"
20
}
21
],
22
"address": "101 Spear Street, San Francisco, CA",
23
"logo_url": "https://www.twilio.com/logo.png",
24
"emails": [
25
{
26
"email": "support@twilio.com",
27
"label": "Email"
28
}
29
],
30
"description": "We're excited to see what you build!"
31
},
32
"webhook": {
33
"callback_method": "POST",
34
"callback_url": "https://demo.twilio.com/welcome/sms/reply/"
35
},
36
"url": "https://messaging.twilio.com/v2/Channels/Senders/XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
37
"properties": {
38
"messaging_limit": "1K Customers/24hr",
39
"quality_rating": "HIGH"
40
}
41
}

When the Sender's Status shows as ONLINE, you can then use Twilio's APIs to send and receive messages.

Congrats! Don't forget to let the Twilio WhatsApp onboarding team know you successfully completed the flow.

Additional Resources

Now that you have completed the integration, here are some other must reads when building your WhatsApp integration using Twilio.

Need some help?

Terms of service

Copyright © 2024 Twilio Inc.