# Partner-Hosted Embedded Signup

For even more personalization, if you are an approved Meta Tech Provider, you can also host your own Embedded Signup flow.

## Requirements

#### 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.

See more details in our documentation [Understanding the Meta Tech Provider Program](broken://pages/pCK9EX9Cki1uiZ0siuM3).

#### 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.

#### Request Advanced Access for public\_profile permission

You need to add extra permission for the process to work smoothly.\
\
In the Meta for Developers App dashboard > navigate to your **App Review** > **Permissions** > Find the ‘`public_profile`’ permission and request `advanced access`.&#x20;

<figure><img src="/files/RS7gytzvYVMr8P7h4AlV" alt=""><figcaption></figcaption></figure>

Ensure advanced access is granted before configuring the ES.&#x20;

<figure><img src="/files/8XfQHUKDhrVTHet05f3Z" alt=""><figcaption></figcaption></figure>

#### Set Partner Hub Webhook URL and listen to Webhook Events

[See instructions here](/partner/partner-api/overview.md#partner-hub-webhook).

## Build Self-Hosted Embedded Signup

{% hint style="danger" %}
**Important:** The Meta documentation linked below includes steps for **registering a phone number**.

**Do not follow those steps.** Phone number registration is handled entirely by 360Dialog.
{% endhint %}

1. [Implement Embedded Signup](https://developers.facebook.com/docs/whatsapp/embedded-signup/implementation).
2. [Check the signup flow for Cloud API](https://developers.facebook.com/docs/whatsapp/embedded-signup/default-flow).\
   Note that if you have information about your customer's business, you can [inject this data](https://developers.facebook.com/docs/whatsapp/embedded-signup/pre-filled-data), which can significantly reduce the number of screens that your customers have to interact with.\
   \
   We recommend using Embedded Signup version 4. In this case you can enable the [Marketing Messages API (MM API)](https://docs.360dialog.com/partner/messaging-and-calling/sending-marketing-messages) for the client *during* the onboarding process. This allows your clients to skip an additional step of enabling the MM API after they are onboarded. Here is how to enable [Embedded Signup version 4](https://developers.facebook.com/docs/whatsapp/embedded-signup/versions/version-4).&#x20;

## Connect Self-Hosted Embedded Signup to 360dialog&#x20;

### 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](/partner/partner-api/api-reference/client-management.md#get-api-v2-partners-partner_id-clients).

#### Create client account&#x20;

This [endpoint](/partner/partner-api/api-reference/account-sharing.md#post-api-v2-partners-partner_id-account_sharing-clients) must be used to create the client account.&#x20;

### **Step 2: Surface Embedded Signup to client and fetch information**

{% hint style="danger" %}
**Important:** The Meta documentation linked below includes steps for **registering a phone number**.

**Do not follow those steps.** Phone number registration is handled entirely by 360Dialog.
{% endhint %}

When the[ Embedded Signup](https://developers.facebook.com/docs/whatsapp/embedded-signup) is completed by the client, you can use the code received in the payload to fetch detailed WABA information. See more [here](https://developers.facebook.com/docs/whatsapp/embedded-signup/embed-the-flow#after-business-completes-signup-flow) and [here](https://developers.facebook.com/docs/whatsapp/embedded-signup/manage-accounts#get-shared-waba-id-with-access-token).

### Step 3: Connect Client account to the 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 ends by redirecting the Client to the Partner Redirect URL set.&#x20;

#### Submit channel/number created via self-hosted Embedded Signup

Please use this [endpoint](/partner/partner-api/api-reference/account-sharing.md#post-api-v2-partners-partner_id-account_sharing-numbers).&#x20;

{% hint style="info" %}
`channel_external_id` should be filled in with the phone number ID. Once it is filled in, we connect the particular number. If the value is sent as `null` we will connect all numbers associated with the particular waba `waba_external_id`
{% endhint %}

### Step 4: Create API key to start messaging

When the number is fully live, you will receive the [Channel Live Webhook Event](/partner/onboarding/webhook-events-and-setup/webhook-events-partner-and-messaging-api.md).&#x20;

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](/partner/partner-hub/api-keys.md) for details.

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.360dialog.com/partner/onboarding/partner-hosted-embedded-signup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
