bid_amount value per 1,000 deliveries within the bid_spec object.bid_amount in bid_spec is what Meta’s delivery system optimizes against. Setting the right max-price when you create the template gives the system the best signal for delivery optimization.per_message_bid_multiplier scales the template’s bid_amount up or down for individual messages, but the delivery system generally gives better performance optimizing based on the original template-level bid_amount on large amount.bid_amount to 50,000 and then apply a multiplier of 2.0 on every message, delivery performance might differ from setting the template’s bid_amount to 100,000 directly -- even though the effective max-price is the same. Hence we recommend setting up the bid at template level and update the template’s bid_spec if needed rather than changing the message level multiplier as a workaround.bid_spec object in the request body.curl 'https://graph.facebook.com/<API_VERSION>/<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d ' { "name": "seasonal_sale_promo", "category": "MARKETING", "language": "en", "components": [ { "type": "BODY", "text": "Shop our seasonal sale! Up to 50% off selected items." } ], "bid_spec": { "bid_amount": "<BID_AMOUNT>", "bid_strategy": "LOWEST_COST_WITH_BID_CAP" } }'
bid_spec is not included, the template uses standard rate card pricing.| Placeholder | Description | Example Value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<WABA_ID>String | Required. WhatsApp Business Account ID. | 102290129340398 |
<BID_AMOUNT>int | Required. Maximum price per 1,000 message deliveries, expressed in your WABA currency’s smallest unit (cents for USD, paise for INR, peso for MXN). See supported currencies for a list of currencies. | 87000 |
bid_amount represents your max-price per 1,000 deliveries in your WABA currency’s smallest unit. To convert from your desired per-delivery price:bid_amount to 87000.bid_amount to 5000.curl 'https://graph.facebook.com/<API_VERSION>/<TEMPLATE_ID>/?fields=bid_spec' \ -H 'Authorization: Bearer <ACCESS_TOKEN>'
| Placeholder | Description | Example Value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<TEMPLATE_ID>String | Required. ID of the WhatsApp message template. | 1733678867511493 |
{ "bid_spec": { "bid_strategy": "LOWEST_COST_WITH_BID_CAP", "bid_amount": 87000 }, "id": "1733678867511493" }
bid_spec on templates that were originally created with a max-price. The same parameters apply.bid_spec to an existing template that was created without it. You must create a new template with bid_spec included.curl 'https://graph.facebook.com/<API_VERSION>/<TEMPLATE_ID>/' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "bid_spec": { "bid_strategy": "LOWEST_COST_WITH_BID_CAP", "bid_amount": <BID_AMOUNT> } }'
| Placeholder | Description | Example Value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<TEMPLATE_ID>String | Required. ID of the WhatsApp message template. The template must have been originally created with bid_spec. | 1733678867511493 |
<BID_AMOUNT>int32 | Required. Updated maximum price per 1,000 message deliveries, expressed in your WABA currency’s smallest unit. | 4000 |
curl 'https://graph.facebook.com/<API_VERSION>/<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/marketing_messages' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "recipient_type": "individual", "messaging_product": "whatsapp", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "type": "template", "template": { "name": "seasonal_sale_promo", "language": { "code": "en" } }, "bid_spec": { "per_message_bid_multiplier": "<PER_MESSAGE_BID_MULTIPLIER>" } }'
bid_amount by 50%. If the template’s bid_amount is 2000, the effective max-price for this message becomes 3000.| Placeholder | Description | Example Value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>String | Required. WhatsApp business phone number ID. | 106540352242922 |
<WHATSAPP_USER_PHONE_NUMBER>String | Required. WhatsApp user phone number. | +16505551234 |
<PER_MESSAGE_BID_MULTIPLIER>Float | Optional. Default: 1A positive multiplier applied to the template’s bid_amount. For example, 1.5 increases the max-price by 50%, 0.5 decreases it by 50%, and 1 (default) uses the template’s max-price amount unchanged. | 1.5 |
targeting_spec value must be serialized JSON. For example:curl 'https://graph.facebook.com/<API_VERSION>/<WHATSAPP_BUSINESS_ACCOUNT_ID>/reachestimate?targeting_spec={"geo_locations":{"countries":["IN"]}}&date_interval=<DATE_INTERVAL>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>'
| Placeholder | Description | Example Value |
|---|---|---|
<ACCESS_TOKEN>String | Required. | EAAA... |
<API_VERSION>String | Optional. Graph API version. | v25.0 |
<WABA_ID>String | Required. WhatsApp Business Account ID. | 102290129340398 |
<DATE_INTERVAL>Enum | Required. Lookback period for the historical data used to generate estimates. One of: L1D (last 1 day), L7D (last 7 days), L14D (last 14 days), L28D (last 28 days). | L7D |
<TARGETING_SPEC>JSON | Required. Serialized JSON specifying geographic targeting. Must include geo_locations with a countries array. | {"geo_locations":{"countries":["IN"]}} |
{ "waba_currency": "USD", "estimates": [ { "bid_amount": 400, "users": 1000, "lower_bound_deliveries": 500, "upper_bound_deliveries": 570, "cost_lower_bound": 389.74, "cost_upper_bound": 390.74 }, { "bid_amount": 520, "users": 1000, "lower_bound_deliveries": 600, "upper_bound_deliveries": 650, "cost_lower_bound": 400.74, "cost_upper_bound": 510.74 } ] }
estimates entries at different max-price amounts, allowing you to compare expected delivery volumes and costs across price points.| Field | Description |
|---|---|
waba_currency | The currency of your WhatsApp Business Account. |
bid_amount | Max-price per 1,000 message deliveries, in the WABA currency’s smallest unit. |
users | Targeted user count. Fixed at 1,000 during beta. |
lower_bound_deliveries | Lower bound of the estimated delivery range for this max-price amount. |
upper_bound_deliveries | Upper bound of the estimated delivery range for this max-price amount. |
cost_lower_bound | Lower bound of the estimated average cost per 1,000 deliveries, in the WABA currency’s smallest unit. |
cost_upper_bound | Upper bound of the estimated average cost per 1,000 deliveries, in the WABA currency’s smallest unit. |
/<WHATSAPP_BUSINESS_ACCOUNT_ID>?fields=pricing_analytics: pricing_category = MARKETING_LITE/<WHATSAPP_BUSINESS_ACCOUNT_ID>?fields=template_analytics: product_type = MARKETING_MESSAGES_LITE_APImarketing_lite for pricing.category, while analytics APIs use uppercase MARKETING_LITE for pricing_category.{ "pricing_analytics": { "data": [ { "data_points": [ { "start": 1748761200, "end": 1748847600, "country": "IN", "pricing_type": "REGULAR", "pricing_category": "MARKETING_LITE", "volume": 1, "cost": 10 } ] } ] } }
{ "data": [ { "granularity": "DAILY", "product_type": "MARKETING_MESSAGES_LITE_API", "data_points": [ { "template_id": "1421988012088524", "start": 1718064000, "end": 1718150400, "sent": 1, "delivered": 1, "read": 1, "cost": [ { "type": "amount_spent", "value": 0.01 }, { "type": "cost_per_delivered", "value": 0.01 } ] } ] } ] }
| Code | Message | Possible reasons and solutions |
|---|---|---|
131061 | Marketing templates containing bid_spec are not supported by the Cloud API. To use templates with bid_spec, please use the Marketing Messages API for WhatsApp. | You are sending a template with bid_spec to the Cloud API /messages endpoint. Send to the /marketing_messages endpoint instead. |
100 | You need to sign the testing legal agreement before sending out messages. | You have not signed the testing legal agreement. Please sign the agreement to gain access to this feature. |