ads_managementpages_manage_adspages_read_engagementpages_show_listPOST request to the /act_<AD_ACCOUNT_ID>/campaigns endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:| Name | Description |
|---|---|
name
string
| Required. Name for the click to WhatsApp campaign. |
objective
enum
| Required. Campaign’s objective. Supported objectives are OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, and OUTCOME_TRAFFIC.Note: For campaigns with call prompts, objective must be OUTCOME_ENGAGEMENT. |
special_ad_categories
list<Object>
| Required. Special ad categories associated with the click to WhatsApp campaign. See the Ad Campaign reference for more details. |
status
enum
| Optional. Valid options are PAUSED and ACTIVE.If this status is PAUSED, all its active ad sets and ads will be paused and have an effective status CAMPAIGN_PAUSED. |
curl -X POST \
-F 'name=Click to WhatsApp Campaign' \
-F 'objective=OUTCOME_ENGAGEMENT' \
-F 'status=ACTIVE' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/campaigns
curl -X POST \
-F 'name=Click to WhatsApp Calling Campaign' \
-F 'objective=OUTCOME_ENGAGEMENT' \
-F 'status=PAUSED' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/campaigns
{ "id": "<AD_CAMPAIGN_ID>" }
POST request to /<AD_CAMPAIGN_ID>.GET request to /<AD_CAMPAIGN_ID>. See the Ad Campaign reference for the complete list of available parameters.curl -X GET -G \
-d 'fields=name,status,objective' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_CAMPAIGN_ID>
{ "name": "Click to WhatsApp Campaign", "status": "PAUSED", "objective": "OUTCOME_ENGAGEMENT", "id": "<AD_CAMPAIGN_ID>" }
POST request to the /act_<AD_ACCOUNT_ID>/adsets endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:| Name | Description | Sample value |
|---|---|---|
bid_amount
unsigned int32
| Required if bid_strategy is set to LOWEST_COST_WITH_BID_CAP or COST_CAP.The maximum amount you want to pay for a result based on your optimization_goal. | 1000 |
bid_strategy
enum
| Optional. The bid strategy for this campaign to suit your specific business goals. See the Ad Campaign reference for more details. Values: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP | LOWEST_COST_WITHOUT_CAP |
billing_event
enum
| Required. Must be set to IMPRESSIONS for ads that click to WhatsApp. Meta bills you when your ad is shown to people. | IMPRESSIONS |
campaign_id
numeric string or integer
| Required. A valid click to WhatsApp campaign you wish to add this ad set to. | 4523897324 |
daily_budget
int64
| Required if lifetime_budget is not set.The daily budget defined in your account currency. Allowed only for ad sets with a duration (difference between end_time and start_time) longer than 24 hours.Either daily_budget or lifetime_budget must be greater than 0. | 1 |
destination_type
string
| Required. Set to WHATSAPP for single-destination click to WhatsApp ads. | WHATSAPP |
end_time
datetime
| Required when lifetime_budget is specified.When creating an ad set with a daily_budget, specify end_time=0 or leave this field empty to set the ad set as ongoing with no end date.Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. UTC UNIX timestamp. | 2026-05-12 23:59:59-07:00 |
lifetime_budget
int64
| Required if daily_budget is not set.The lifetime budget of the ad set defined in your account currency. If specified, you must also specify an end_time.Either daily_budget or lifetime_budget must be greater than 0. | 1 |
name
string
| Required. The name of the click to WhatsApp ad set. | Jasper's Market |
optimization_goal
enum
| Required. What the ad set is optimizing for. Depending on the campaign’s objective, the ad set may be eligible for different optimization goals.
| OUTCOME_SALES |
promoted_object | Required. The object this ad set is promoting across all its ads. For ads that click to WhatsApp, promoted_object has the following conditions: Required:
Optional:
See Ad Set, Promoted Object for more details. | {
"page_id": "452645324"
} |
start_time
datetime
| Optional. The start time of the ad set. This field will default to the current time if no value is provided. Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. UTC UNIX timestamp. | 2026-03-12 23:59:59-07:00 |
status
enum
| Optional. The status of the ad set. It can be different from the effective status due to its parent campaign. This field will default to ACTIVE if no value is provided.Values: ACTIVE, PAUSED, DELETED, ARCHIVED | ACTIVE |
targeting
Targeting object
| Required. The targeting structure of an ad that clicks to WhatsApp. See Targeting for more details. To enable the WhatsApp Status feature, see Placement targeting for more details. |
{
"device_platforms": ["mobile"],
"geo_locations": {
"countries": ["US"]
}
}
|
time_start
datetime
| Optional. Interchangeable with start_time. | 2026-02-14 22:59:59-07:00 |
time_stop
datetime
| Required when lifetime_budget is specified.Interchangeable with end_time. | 2026-05-12 23:59:59-07:00 |
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"access_token":"<ACCESS_TOKEN>",
"bid_amount":"<BID_AMOUNT>",
"billing_event":"IMPRESSIONS",
"campaign_id":"<CAMPAIGN_ID>",
"daily_budget":"<DAILY_BUDGET>",
"destination_type":"WHATSAPP",
"name": "<AD_SET_NAME>",
"optimization_goal": "IMPRESSIONS",
"promoted_object": {
"page_id": "<PAGE_ID>"
},
"status": "PAUSED",
"start_time": "<START_TIME>",
"targeting": {
"geo_locations": { "countries":["US","CA"] },
"device_platforms": ["mobile", "desktop"]
}
}' \
"https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adsets"
{ "id": "<AD_SET_ID>" }
POST request to /<AD_SET_ID>.GET request to /<AD_SET_ID>. See the Ad Set reference for the complete list of available parameters.curl -X GET -G \
-d 'fields=name,destination_type,optimization_goal,bid_strategy,status' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_SET_ID>
{ "name": "Click to WhatsApp Campaign", "status": "PAUSED", "objective": "OUTCOME_ENGAGEMENT", "id": "<AD_SET_ID>" }
POST request to the /act_<AD_ACCOUNT_ID>/adcreatives endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:| Name | Description |
|---|---|
name
string
| Required. The name for your ad creative. |
object_story_spec | Required. An object containing information about a message. See Ad Creative Object Story Spec for more details. Required:
Optional:
|
degrees_of_freedom_spec | Optional. See Standard Enhancements for Advantage+ Creative for more details. |
page_welcome_message field under object_story_spec."page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "welcome_message",
"media_type": "text",
"text_format": {
"customer_action_type": "autofill_message",
"message": {
"autofill_message": {
"content": "<AUTOFILL_MESSAGE>"
},
"text": "<GREETING_MESSAGE>"
}
}
}
"page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "welcome_message",
"media_type": "text",
"text_format": {
"customer_action_type": "autofill_message",
"message": {
"text": "<AUTOMATED_GREETING_MESSAGE_TEXT>",
"automated_greeting_message_cta": {
"type": "call"
},
"autofill_message": {
"content": "<AUTOFILL_MESSAGE_CONTENT>"
}
}
}
}
"page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "welcome_message",
"media_type": "text",
"text_format": {
"customer_action_type": "autofill_message",
"message": {
"text": "<AUTOMATED_GREETING_MESSAGE_TEXT>",
"automated_greeting_message_cta": {
"type": "url",
"url": "<WEBSITE_URL>"
},
"autofill_message": {
"content": "<AUTOFILL_MESSAGE_CONTENT>"
}
}
}
}
"page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "welcome_message",
"media_type": "text",
"text_format": {
"customer_action_type": "autofill_message",
"message": {
"text": "<AUTOMATED_GREETING_MESSAGE_TEXT>",
"automated_greeting_message_cta": {
"type": "catalog"
},
"autofill_message": {
"content": "<AUTOFILL_MESSAGE_CONTENT>"
}
}
}
}
"page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "ctwa_flows",
"media_type": "text",
"text_format": {
"customer_action_type": "whatsapp_flow",
"message": {
"text": "<AUTOMATED_GREETING_MESSAGE_TEXT>",
"automated_greeting_message_cta": {
"type": "flow",
"flow_data":{
"call_to_action":"Apply now",
"flow_id":"<FLOW_ID>"
}
},
"autofill_message": {
"content": "<AUTOFILL_MESSAGE_CONTENT>"
}
}
}
}
flow_id passed above, should belong to the same WhatsApp Business Account as that of the phone number that is promoted in the ad set. See more about WhatsApp Flows."page_welcome_message": {
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "welcome_message",
"media_type": "text",
"text_format": {
"customer_action_type": "ice_breakers",
"message": {
"text": "<GREETING_MESSAGE>",
"ice_breakers": [
{
"title": "<ICEBREAKER>"
},
{
"title": "<ICEBREAKER>"
},
{
"title": "<ICEBREAKER>"
}
]
}
}
}
}
curl \
-F 'object_story_spec={
"page_id": "<PAGE_ID>"
"link_data": {
"image_hash":<IMAGE_HASH>
"call_to_action": {
"type": "WHATSAPP_MESSAGE",
"value": {
"app_destination": "WHATSAPP"
}
},
"link": "https://api.whatsapp.com/send",
"name": <AD_HEADLINE>",
"page_welcome_message":
"type": "VISUAL_EDITOR",
"version": 2,
"landing_screen_type": "ctwa_call_prompt",
"media_type": "text",
"text_format": {
"message": {
"text": "<MESSAGE>",
"call_prompt_data": {
"call_prompt_message": "<CALL_PROMPT_MESSAGE>"
}
}
},
"user_edit": false
},
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
{
"id": "<AD_CREATIVE_ID>"
}
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"name": "Sample ad creative",
"object_story_spec": {
"page_id": "<PAGE_ID>",
"link_data": {
"name": "<AD_HEADLINE>",
"message": "<AD_PRIMARY_TEXT>",
"description": "<AD_DESCRIPTION>",
"image_hash": "<IMAGE_HASH>",
"link": "https://api.whatsapp.com/send",
"page_welcome_message": "<PAGE_WELCOME_MESSAGE>",
"call_to_action": {
"type": "WHATSAPP_MESSAGE",
"value": {
"app_destination": "WHATSAPP"
}
}
}
},
"degrees_of_freedom_spec": {
"creative_features_spec": {
"standard_enhancements": {
"enroll_status": "OPT_IN"
}
}
}
}' \
"https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives"
{ "id": "<AD_CREATIVE_ID>" }
curl -X POST "https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives"
-H "Content-Type: application/json"
-d '{
"access_token": "<PAGE_ACCESS_TOKEN>",
"name": "<IMAGE_AD_NAME>",
"object_story_spec": {
"page_id": "<PAGE_ID>",
"link_data": {
"image_hash": "<IMAGE_HASH>",
"link": "<IMAGE_URL>",
"call_to_action": {
"type": "WHATSAPP_MESSAGE",
"value":{"app_destination":"WHATSAPP"}
}
}
},
"asset_feed_spec": {
"additional_data": {
"partner_app_welcome_message_flow_id": "SEQUENCE-ID"
}
}
}'
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"source_instagram_media_id": "<INSTAGRAM_MEDIA_ID>",
"instagram_user_id": "<INSTAGRAM_USER_ID>",
"object_id": "<PAGE_ID>",
"call_to_action": {
"type": "WHATSAPP_MESSAGE",
"value": {
"link": "https://api.whatsapp.com/send",
"app_destination": "WHATSAPP"
}
}
},
"degrees_of_freedom_spec": {
"creative_features_spec": {
"standard_enhancements": {
"enroll_status": "OPT_IN"
}
}
}
}' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
GET request to /<AD_CREATIVE_ID>. See Ad Creative for the complete list of available parameters.curl -X GET -G \
-d 'fields=name,object_story_spec{link_data{call_to_action,page_welcome_message}}' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_CREATIVE_ID>
{ "name": "Sample ad creative", "object_story_spec": { "page_welcome_message": { "type": "VISUAL_EDITOR", "version": 2, "landing_screen_type": "welcome_message", "media_type": "text", "text_format": { "customer_action_type": "autofill_message", "message": { "autofill_message": { "content": "Sample autofill message" }, "text": "Sample greeting message" } } } }, "id": "<AD_CREATIVE_ID>" }
POST request to the /act_<AD_ACCOUNT_ID>/ads endpoint where <AD_ACCOUNT_ID> is the ID for your Meta ad account. Your request must include:| Name | Description |
|---|---|
name
string
| Required. The name for your ad. |
adset_id
numeric string or integer
| Required. The ID of the ad set. |
creative | Required. The ad creative to be used by this ad. You may supply the creative_id of an existing ad creative or create a new ad creative by including all required fields. See Ad Creative for more details. |
status
enum
| Required. The configured status of the ad. Values: ACTIVE, PAUSED, DELETED, ARCHIVED |
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"name": "Sample ad",
"adset_id": "<AD_SET_ID>",
"creative": {
"creative_id": "<AD_CREATIVE_ID>"
},
"status": "PAUSED"
}' \
"https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads"
{ "id": "<AD_ID>" }
GET request to /<AD_ID>. See the ad reference for the complete list of available parameters.curl -X GET -G \
-d 'fields=status,adset_id,campaign_id' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_ID>
{ "status": "PAUSED", "adset_id": "<AD_SET_ID>", "campaign_id": "<AD_CAMPAIGN_ID>", "id": "<AD_ID>" }
POST request to /<AD_ID> with the status parameter set to ACTIVE where <AD_ID> is the ad you want to publish.PENDING_REVIEW. Once approved, the status will automatically update to ACTIVE, and your ad will be delivered.