WhatsApp Flows

Flows Encryption

Updated: Jul 2, 2026
Copy for LLM
This guide specifies how to set and get the business public key for the WhatsApp Flows user experience. Generate a 2048-bit RSA key pair and share the business public key to establish an encrypted GraphQL-powered data exchange channel between your business and the WhatsApp consumer client.

Prerequisites

The phone number must be successfully registered, and the business must have generated a 2048-bit RSA Key as described below.

Generating a 2048-bit RSA key pair

Generate a public and private RSA key pair by typing in the following command:
openssl genrsa -des3 -out private.pem 2048
This command generates a 2048-bit RSA key pair encrypted with a password you provided and is written to a file.
Next, you need to export the RSA Public Key to a file:
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
You can then use it, for example, on your web server to encrypt content such that it can only be read with the private key.

Reusing an existing 2048-bit RSA key pair

You could also re-use an existing private/public key pair by extracting a public key from existing certificate:
openssl x509 -pubkey -noout -in private.pem  > public.pem

Set the business public key

To set a business public key using Graph API, make a POST request to /PHONE_NUMBER_ID/whatsapp_business_encryption. In your call, include the 2048-bit RSA key you generated. If you have multiple phone numbers linked to a WABA, this API must be called to sign the business public key for each phone number.
In Postman, when inputting the business public key as a parameter in the Body, select x-www-form-urlencoded.
Endpoint Authentication
/PHONE_NUMBER_ID/whatsapp_business_encryption
Authenticate yourself with a system user access token and you must have the whatsapp_business_messaging permission.
If you are requesting the code on behalf of another business, the access token needs to have Advanced Access to the whatsapp_business_messaging permission.

Parameters

Name Description
business_public_keystring
Required.
2048-bit RSA business public key generated.

Example

Sample request:
curl -X POST \
  'https://graph.facebook.com/v26.0/PHONE_NUMBER_ID/whatsapp_business_encryption' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'business_public_key=BUSINESS_PUBLIC_KEY'
For example:
curl -X POST \
  'https://graph.facebook.com/v26.0/PHONE_NUMBER_ID/whatsapp_business_encryption' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'business_public_key=-----BEGIN PUBLIC KEY-----
AAA
BBB
CCC
DDD
EEE
FFF
GGG
-----END PUBLIC KEY-----'
A successful request returns HTTP status code 200 and the payload:
{
  "success": true
}
Please see Error and Status Messages if you encounter any errors.

Get the business public key

The phone number must be successfully registered, and the business must have generated a 2048-bit RSA key.
To get a business public key using Graph API, make a GET request to /PHONE_NUMBER_ID/whatsapp_business_encryption.
Endpoint Authentication
/PHONE_NUMBER_ID/whatsapp_business_encryption
Authenticate yourself with a system user access token and you must have the whatsapp_business_messaging permission.
If you are requesting the code on behalf of another business, the access token needs to have Advanced Access to the whatsapp_business_messaging permission.

Parameters

Name Description
business_public_keystring
Stored 2048-bit RSA business public key.
business_public_key_signature_statusstring
Status of stored 2048-bit RSA business public key.

Example

Sample request:
curl -X GET \
  'https://graph.facebook.com/v26.0/PHONE_NUMBER_ID/whatsapp_business_encryption' \
  -H 'Authorization: Bearer ACCESS_TOKEN'
A successful response looks like this:
{
  "business_public_key": "<2048_bit_RSA_key>"
  "business_public_key_signature_status": VALID | MISMATCH
}
Please see Error and Status Messages if you encounter any errors.