Enable your end-customers to self-serve onboard WhatsApp Business Accounts through your platform using Meta’s embedded signup flow integrated with Telnyx.
WhatsApp Tech Provider Embedded Signup lets ISVs and SaaS platforms embed Meta’s WhatsApp onboarding flow directly into their own portal. Your end-customers can create and register a WhatsApp Business Account (WABA), claim a phone number, and begin messaging without leaving your application.Unlike the standard embedded signup flow, which is designed for direct Telnyx customers, the Tech Provider flow is built for partners who manage multiple end-customers and need programmatic control over WABA provisioning.
As a Tech Provider, you build the onboarding experience into your own product. The end-customer clicks a button in your portal, completes Meta’s embedded signup flow, and your backend receives the resulting WABA ID and phone number ID. You then register the WABA with Telnyx so that it can use Telnyx’s messaging infrastructure.Telnyx offers two integration paths: a hosted signup option where Telnyx manages the signup UI and backend processing, and a custom integration option where you embed Meta’s Facebook SDK directly into your own portal. WhatsApp Business App coexistence is currently supported only through the custom integration path. See Step 3 for a comparison.
The Telnyx-hosted signup page currently supports standard Cloud API onboarding only. To connect a number that must remain active in the WhatsApp Business app, use the custom integration and the coexistence configuration in Option B.
All links to Meta documentation in this guide require that you are logged in to a Meta Business account. If you don’t have one, create one at business.facebook.com before proceeding.
Step 1: Create and configure your Meta Tech Provider App
1
Create a Meta App
Go to Meta App Dashboard and create a new app. Select Business as the app type.
2
Add WhatsApp product
In your app’s dashboard, add the WhatsApp product. This will generate the permissions you need.
3
Request required permissions
Under App Review > Permissions and Features, request the following permissions:
Permission
Purpose
whatsapp_business_messaging
Send and receive WhatsApp messages on behalf of your customers
whatsapp_business_management
Manage WhatsApp Business Accounts and phone numbers
Both permissions require Advanced Access for production use.
4
Complete Tech Provider onboarding
Follow Meta’s Tech Provider onboarding guide to complete the Tech Provider registration process. This includes business verification and agreeing to Meta’s Tech Provider terms.
5
Submit for App Review
Submit your app for Meta’s App Review. Meta will evaluate your use case and grant (or deny) the requested permissions. This process typically takes several business days.
While waiting for App Review approval, you can test in Development Mode with your own test users. Production use requires Live Mode and Advanced Access permissions.
Once your Meta App is configured, you need to link it to Telnyx so that WABAs created through your embedded signup flow are registered on Telnyx’s infrastructure.
1
Switch your app to Live mode
In the Meta App Dashboard, change your app mode from Development to Live. This is required for Telnyx to initiate the partner invitation.
2
Contact Telnyx
Reach out to your Telnyx representative or contact support and provide:
Your Meta App ID (found in your app’s dashboard)
Your business name as registered with Meta
3
Accept the partner invitation
Within 1–2 business days, you’ll receive an email from Meta containing a partner invitation link. Click the link and accept the invitation to link your app with Telnyx.
4
Verify the app link and record your solution ID
Linking your app creates a Meta Multi-Partner Solution containing your app and Telnyx. Meta approval and an accepted partner invitation do not complete the Telnyx setup by themselves. Telnyx must also register your Meta App ID against the same Telnyx account that owns the API key and enable the app link.Verify the link with the same API key you will use for signup:
curl -X GET https://api.telnyx.com/v2/whatsapp/foreign_apps \ -H "Authorization: Bearer YOUR_API_KEY"
Confirm that app_id matches your Meta app, solution_id is populated, and enabled is true. Pass the returned solution_id in extras.setup.solutionID on every custom signup. Solutions are also listed under Partner solutions in the Meta App Dashboard.If the request returns 404 or enabled is false, contact Telnyx support with your Telnyx account UUID and Meta App ID. A 404 can mean that the app link is missing or that the App ID is linked to a different Telnyx account.
5
Switch back to Development mode
After accepting the invitation, you can switch your app back to Development mode for testing. The link persists regardless of the app mode.
You must switch your app to Live mode before Telnyx can send the partner invitation. The invitation will fail if your app is in Development mode. After accepting the invite, you can switch back to Development mode for testing.
After your Meta App is linked to Telnyx, you have two ways to onboard your end-customers’ WABAs. Choose the path based on whether the number must remain active in the WhatsApp Business app.
Option A: Hosted signup (recommended)
Option B: Custom integration
Who it’s for
Most Tech Providers who want the fastest standard signup path
ISVs who want full control over the UX or require coexistence
What you build
One API call to generate a shareable URL
Facebook SDK integration in your own frontend
Signup UI
Telnyx-hosted page at acct.fyi
Embedded directly in your portal
End-customer experience
Clicks a link → completes Meta signup → done
Clicks a button in your app → Meta popup → you handle the response
Backend code exchange
Telnyx handles it automatically
Optional for your own Meta Graph API use; the Telnyx registration request uses the session event identifiers
WABA registration
Telnyx handles it automatically
You call Telnyx’s registration API
WhatsApp Business App coexistence
Not currently supported
Supported with the coexistence configuration and completion event
Option A: Hosted signup (recommended)
Option B: Custom integration
With the hosted signup flow, Telnyx hosts the embedded signup page. You generate a time-limited onboarding URL via API and share it with your end-customer. The customer visits the URL, completes Meta’s signup, and Telnyx handles the code exchange, webhook subscription, credit line sharing, and phone number registration. No Facebook SDK or custom JavaScript is required.
Do not use hosted signup for a phone number that must remain registered in the WhatsApp Business app. The hosted page currently launches standard Cloud API onboarding and does not pass Meta’s coexistence configuration. An existing Business App number can therefore appear as already in use. Use Option B instead.
curl -X GET "https://api.telnyx.com/v2/whatsapp/signup/019f4253-e09a-7622-bc6f-625378711d78/status" \ -H "Authorization: Bearer YOUR_API_KEY"
Returns the signup session record with status, state, waba_id, and any errors. Use this to build a progress indicator in your portal or trigger downstream workflows when onboarding completes.
When the end-customer completes the hosted signup:
Credit line is applied: The WABA is associated with your Telnyx billing account
WABA is registered: The WhatsApp Business Account is linked to Telnyx’s messaging infrastructure
Webhooks are subscribed: Telnyx subscribes to Meta webhook events on the WABA’s behalf
Number is ready for messaging: The phone number can send and receive WhatsApp messages through Telnyx
If you prefer to embed Meta’s signup flow directly into your own portal, follow the steps below. This gives you full control over the UX and requires integrating the Facebook JavaScript SDK. Exchange the authorization code only if your application also needs to call Meta’s Graph API directly.Use this path for WhatsApp Business App coexistence. After your Telnyx app link is enabled, there is no additional per-account coexistence flag. Meta selects the coexistence experience from the featureType and sessionInfoVersion values passed to FB.login().
Meta’s embedded signup flow is triggered from your web application using the Facebook JavaScript SDK. Your frontend launches the signup dialog, the end-customer completes it, and you receive the resulting credentials.
Replace YOUR_GRAPH_API_VERSION with a Graph API version supported by your Meta app, including the leading v. Use the same version for the server-side code exchange below.
2
Capture the signup completion event
Register a browser message listener before launching signup. Meta sends FINISH for standard onboarding and FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING for coexistence. Both events include the WABA ID, while coexistence also requires the phone number ID.
Store the event and identifiers on your backend and associate them with the end-customer who started the flow. Ignore messages from any other origin or event type.
3
Trigger the signup flow
Call FB.login() with the config_id of your WhatsApp Business Configuration. Add featureType and sessionInfoVersion only when launching coexistence onboarding.
function launchWhatsAppSignup({ coexistence = false } = {}) { const extras = { setup: { solutionID: 'YOUR_SOLUTION_ID', }, }; if (coexistence) { extras.featureType = 'whatsapp_business_app_onboarding'; extras.sessionInfoVersion = '3'; } FB.login( function (response) { if (response.authResponse) { const code = response.authResponse.code; // Optional: exchange the code if your app calls Meta's Graph API. sendCodeToBackend(code); } else { console.error('User cancelled login or did not fully authorize.'); } }, { config_id: 'YOUR_CONFIG_ID', response_type: 'code', override_default_response_type: true, extras, } );}
Call launchWhatsAppSignup() for standard Cloud API onboarding. Call launchWhatsAppSignup({ coexistence: true }) when the end-customer is connecting a number that remains active in the WhatsApp Business app.If your application does not need a Meta customer access token, omit the sendCodeToBackend call. Telnyx registration uses the WABA and phone identifiers from the session event.
solutionID is required. It is the ID of the Meta Multi-Partner Solution that
links your Meta app to Telnyx, created when your app is linked in
Step 2. See that step for how to look it up.Without it, your end-customer’s WABA is created outside that solution and Telnyx
is not granted access to it. Registration then fails, and the WABA has to be
shared with Telnyx manually before
it can be provisioned.When you pass it, the WABA is created inside the solution and access is granted
to Telnyx automatically as part of your end-customer’s normal signup.
4
Exchange the authorization code if needed
The FB.login() callback and the session logging event provide different values. The callback provides an authorization code for obtaining a customer access token. The Telnyx registration request in the next step does not accept that token and uses the identifiers from the session event instead.If your application needs to call Meta’s Graph API directly, exchange the code on your backend. Never expose your Meta App Secret in browser code.
curl -X GET \ "https://graph.facebook.com/YOUR_GRAPH_API_VERSION/oauth/access_token?\client_id=YOUR_APP_ID\&client_secret=YOUR_APP_SECRET\&code=AUTHORIZATION_CODE"
When the session event is FINISH, submit the WABA ID. A phone number ID is not required for this request because Telnyx retrieves and registers the WABA’s phone numbers during provisioning.
When the session event is FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING, submit both the WABA ID and phone number ID. Telnyx uses the event to select the coexistence provisioning path.
The WABA ID returned by Meta’s embedded signup flow
phone_number_id
string
For coexistence
The phone number ID returned by FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING
app_id
string
Yes
Your Meta App ID. It must be enabled and linked to the Telnyx account used by this request
customer_id
string
No
An optional identifier you assign to track this customer (e.g., your internal customer ID)
event
string
For coexistence
Use FINISH for standard onboarding or FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING for coexistence. Omitting the field selects standard onboarding
This endpoint requires authentication with a Telnyx API key via the Authorization: Bearer header. Create an API key from your Telnyx account on the API Keys page.
A successful response confirms that Telnyx accepted the signup for asynchronous processing. It does not mean that provisioning or synchronization is complete.
Assigns the required users and shares the credit line
Registers the WABA’s phone numbers with Cloud API
Stores the WABA and phone numbers in the Telnyx account
Standard provisioning is complete after the signup session reaches state: COMPLETE and status: SUCCESS.For coexistence onboarding, Telnyx:
Subscribes the WABA to required webhook fields
Assigns the required users and shares the credit line
Verifies that Meta reports is_on_biz_app: true and platform_type: CLOUD_API
Skips Cloud API phone registration because the number is already registered in the Business App
Starts the required coexistence synchronization lifecycle
The signup session can reach SUCCESS before coexistence synchronization finishes. After signup succeeds, retrieve the phone with GET /v2/whatsapp/phone_numbers/{phone_number} and inspect coexistence_state. The number becomes eligible for Cloud API sends only after that state reaches active. See WhatsApp Coexistence for synchronization deadlines and lifecycle behavior.
If a WABA was created before you started passing solutionID, Telnyx has no access to it
and registration fails. Passing the solution ID fixes every subsequent signup, but it does
not apply retroactively, so an affected WABA has to be shared with Telnyx once by hand.This is done in Meta Business settings by the business portfolio that owns the WABA.
For a WABA created through your embedded signup, that is usually your end-customer, not you.
Select Telnyx in the list. If Telnyx is not listed, choose Add, then add a partner using Telnyx’s business portfolio ID 1770378036525495.
4
Assign the WABA
Choose Assign assets, then WhatsApp accounts, and select the WABA.
5
Grant full control
Enable Full control, then select Assign.
6
Confirm before retrying
Tell Telnyx the WABA has been shared and wait for confirmation that the access has landed before retrying registration. A share that appears complete in the dashboard does not always take effect immediately.
Assigning Telnyx’s system user directly to the WABA does not work. Meta scopes system users
to the business that owns them, so the assignment is rejected. The partner share above is the
supported route.
Not currently. Tech Provider coexistence requires the custom integration path.
Does the customer keep using the Business App?
Yes. The number remains active in the WhatsApp Business app while Telnyx connects it to Cloud API.
Does the 24-hour customer service window change?
No. Standard Cloud API service-window and template rules still apply. Business App sends delivered as message.echo do not open or extend that window.
What happens if an agent and automation reply at the same time?
WhatsApp can deliver both messages. Telnyx reports the Business App send as message.echo, but does not lock the conversation or remove a simultaneous API send. Your application must coordinate agents and automation if duplicate replies are a concern.
Is the number ready immediately after registration?
No. Telnyx initiates the required contact and history synchronization within Meta’s 24-hour deadline. Cloud API sends remain blocked until the coexistence state is active.
Does Telnyx expose synchronized history through customer webhooks?
No. Telnyx processes Meta’s history and smb_app_state_sync protocol events internally. Customer-facing history storage and retrieval are not part of the current integration.
I didn't receive the Meta partner invitation email
Verify that your app was in Live mode when you contacted Telnyx
Check your spam and junk folders
Ensure the email associated with your Meta Business account is correct
Confirm with your Telnyx representative that they initiated the invitation
The invitation typically arrives within 1–2 business days
Meta App Review was denied
Review Meta’s rejection reasons carefully in the App Review section of your dashboard
Common reasons include: insufficient permissions justification, unclear use case description, or missing screencast
Update your submission with clearer documentation and resubmit
Ensure your app is functional and testable during the review period
FB.login() doesn't open the embedded signup dialog
Confirm the Facebook SDK is loaded before calling FB.login()
Check that your config_id is correct and matches a WhatsApp Business Configuration in your app
Ensure your app has the whatsapp_business_messaging and whatsapp_business_management permissions
Open your browser’s developer console for error messages from the SDK
The hosted signup request fails before Meta opens
Meta Tech Provider approval is not enough to use Telnyx signup. Your Meta app must also have an accepted Telnyx partner invitation and an enabled Telnyx app link.
Call GET /v2/whatsapp/foreign_apps with the same Telnyx API key used to create the signup
Confirm that the response contains your Meta App ID, a solution_id, and enabled: true
If the request returns 404, contact Telnyx support with your Telnyx account UUID and Meta App ID
If the returned App ID belongs to a different Telnyx account or the link is disabled, ask support to correct or enable the link
The coexistence option is missing or Meta says the number is already in use
The Telnyx-hosted page launches standard Cloud API onboarding and does not currently expose the WhatsApp Business App coexistence variant.
Handle the FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING session event
Send that event name, waba_id, phone_number_id, and your app_id to the Tech Provider registration endpoint
Do not remove the number from the WhatsApp Business app when the goal is coexistence.
The Telnyx API returns a 401 Unauthorized error
Verify you are using a valid Telnyx API key
Ensure the Authorization: Bearer YOUR_API_KEY header is included in your request
Check that your API key has not expired or been revoked
The embedded signup completes but no WABA ID is returned
Read the WABA ID and phone number ID from Meta’s WA_EMBEDDED_SIGNUP browser message, not the FB.login() authorization callback
Confirm that your listener accepts Meta’s documented origins and safely parses string and object event data
For coexistence, handle only FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING
Verify that the user completed all steps in the Meta signup flow
Registration fails because Telnyx cannot access the WABA
Telnyx returns an error stating it cannot access the WhatsApp Business Account, and
the signup does not complete. Meta reports the WABA as missing permissions.This means the WABA was created outside the Multi-Partner Solution that links your
app to Telnyx, so Telnyx was never granted access to it.
If you integrate with the Facebook SDK directly, confirm you passed solutionID inside extras.setup when calling FB.login()
Ask your Telnyx representative to confirm your solution is active and that your Meta app is linked
For a WABA that was already created without the solution ID, follow Granting Telnyx access to an existing WABA. Passing the solution ID prevents this for subsequent signups but does not apply retroactively
The hosted signup URL shows 'Missing Signup Token'
Ensure you’re using the full URL returned by POST /v2/whatsapp/hosted_signups, including the ?token= query parameter
Check that the JWT has not expired. Tokens are valid for a maximum of 3 days from creation
If the token has expired, generate a new one via the API
The phone number verification code never arrives
Verify the phone number entered by the end-customer is correct and can receive SMS
Check that the phone number is not already registered with another WhatsApp account
Try requesting the verification code via phone call instead of SMS
Ensure the end-customer’s phone carrier is not blocking Meta’s verification messages
Some platforms, including Meta, may not deliver SMS verification codes to virtual numbers
(VoIP and DID ranges), preferring voice-call verification instead. This applies to numbers in
countries where the local numbering plan classifies them as virtual (for example, Belgian
mobile numbers of this kind). Meta documents this in its
phone number requirements:
SMS OTP delivery to VoIP numbers is Not Recommended; voice OTP is Standard. If the SMS code
does not arrive, retry with phone call verification before contacting support.