Host your own Embedded Signup

For even more personalization, you can also host your own Embedded Signup flow.

At the moment, this is only available for Partners using Partner Payment model.


Tech Provider registration and approved Solution

To enable this option, you must be a Meta approved Tech Provider and have a live Solution with 360dialog.

Refer to the following documentation to understand details about this option:

Technical capacity to host and manage your own Embedded Signup

You will also need to be able to host and manage your own Embedded Signup script, which requires technical knowledge. We will not be able to support you on troubleshooting your own Embedded Signup.

Cloud API enabled

As announced in November 2023, Meta is transitioning to a fully Cloud-hosted WhatsApp Business Platform and will stop supporting On-Premise API in October 2025. Starting from On-Premise client v2.53, all new feature updates will be exclusively delivered to Cloud API. While the On-Premise API client will receive quarterly releases, they will focus solely on bug fixes and security patches.

This option is only available if your Partner Hub is already enabled for Cloud API.

Set Partner Hub Webhook URL and listen to Webhook Events

See instructions here.

Building the Integration

Step 1: Create or retrieve a Client Account

In order to later submit the number, you need to either retrieve an existing client_id or create a new client instance through our Partner API using the endpoint below. Make sure to store the Client ID of each client within your database, since it will be required afterwards. Alternatively, you can also retrieve it with this endpoint.

Create client account


Request example curl --request POST --url --header 'Accept: application/json' --header 'Authorization: Bearer 123' --header 'Content-Type: application/json' --data '{ "name": "string", "email": "string", "user_name": "string"}'

Request Body




Name of the client user



Email address of the client user.



Name of the client user.

  "id": "string", // ID of the Client
  "created_at": "string",
  "created_by": {
    "user_id": "string",
    "user_name": "string"
  "modified_at": "string",
  "modified_by": {
    "user_id": "string",
    "user_name": "string"

Step 2: Surface Embedded Signup to client and fetch information

When the Embedded Signup is completed by the client, you can use the code received in the payload to fetch detailed WABA information. See more here and here.

Step 3: Connect Client account to registered Phone Number

Use the endpoint below to submit the phone number/channel to 360dialog records. If the number was successfully onboarded via self-hosted Embedded Signup and the attached client_id matches the user data in 360dialog records, the onboarding flow end by redirecting the Client to the Partner Redirect URL set.

Submit channel/number created via self-hosted Embedded Signup


Request example curl --request POST --url --header 'Accept: application/json' --header 'Authorization: Bearer 123' --header 'Content-Type: application/json' --data '{ "solution_id": "string", "waba_external_id": "string", "waba_business_id": "string", "client_id": "string", "tier": "string" }'

Path Parameters




Request Body




Your approved Solution ID



The Client's Business Manager ID



The WABA ID returned through the ES callback.



The ID of the client



Can be used to set the default pricing plan for the number to be added.

Will only work for partners enabled for tiered pricing. *If you are not sure of you billing plan, please reach out to our Support Team.

Clients on partners with client payment will be able to change the pre-selected plan.

Allowed values: basic, regular, premium

Default: regular

Use the tier parameter to set the pricing plan. If no value is provided, numbers will be connected with regular pricing plan as default.

  "app_id": null,
  "created_at": "2023-11-02 09:00:00",
  "expires_at": "2023-11-09 09:00:00",
  "start_at": "2023-11-02 09:00:00",
  "debug_info": null,
  "durable": true,
  "id": "CMD0",
  "last_retry_at": null,
  "max_retries": 5,
  "name": "event",
  "priority": 9,
  "retries": 0,
  "source": "csi_partners",
  "status": "created",
  "topic": "domain-events",
  "value": {
    "action_name": "event",
    "app_id": null,
    "payload": {
      "actor_id": "U100",
      "channel_id": null,
      "client_id": "CL0",
      "config_id": null,
      "id": "DM0",
      "name": "fb_login_callback",
      "partner_id": "P0",
      "project_id": null,
      "properties": {
        "campaign_id": null,
        "channel_origin": "tech_provider",
        "hosting_platform_type": "meta_cloud_api",
        "contact_info": null,
        "contact_user": null,
        "created_at": "$ANY()$",
        "created_by": {
          "user_id": "U100",
          "user_name": "Test User"
        "has_integration_layer": false,
        "id": "CL0",
        "input_token": "",
        "meta_info": null,
        "modified_at": "2023-11-02 09:00:00",
        "modified_by": {
          "user_id": "random",
          "user_name": "a name"
        "name": "business",
        "organisation": "waba business id",
        "partner_payload": "This client is created automatically by partner/tech provider",
        "max_channels": 10,
        "suspicious": false,
        "status": "active",
        "pricing_tier": "regular",
        "bundle_id": null,
        "enabled_for_chat_support": false,
        "waba_external_id": "waba id"
      "scope": "client",
      "timestamp": "1698915340",
      "waba_account_id": null

Step 4: Create API key to start messaging

When the number is fully live, you will receive the Channel Live Webhook Event.

You should be able to generate an API Key and connect it to your integration to start messaging with this phone number by default.

See Partner Permissions for details.

Last updated