Utility Messages

Utility template messaging hub: supported components and buttons, specialty types (location, call permission), CSW-free billing, volume tiers, content rules, and recategorization.

What Counts as Utility

Utility messages are template messages sent in response to a user action or request, with specific context about an active transaction, account, subscription, or service interaction.

Examples:

  • Order confirmation with order ID
  • Delivery update with tracking details
  • Billing or account reminder tied to an existing service
  • Service alert linked to a current issue
  • Reservation confirmation
  • Appointment reminder

Utility templates have strict content requirements, particularly around marketing material. If you create or update a utility template that includes promotional language, Meta will automatically re-categorize it as a marketing template — see Template Category Reclassification.

Why Utility Templates Matter

  • Utility templates are generally lower-cost than marketing templates.
  • During an active 24-hour customer service window (CSW), utility templates are free — see Pricing → Free vs Billed Messages.
  • They provide clear operational updates that customers expect and value.
  • Utility messages have volume tiers — higher monthly volume per market unlocks lower per-message rates.

Utility Pages in This Section

  • Location templates — UTILITY (or MARKETING) templates with a map header and send-time coordinates
  • Call permission request — see the section below on this page

Prerequisites

  • Create a template with category UTILITY.
  • Wait for APPROVED status.
  • Capture and retain valid user opt-in for WhatsApp communication.
  • Send using the standard Cloud API template message flow.

Supported Components

Utility templates support the following component layout:

ComponentCardinalityNotes
header0 or 1All header formats supported: text, image, video, document, location
body1 (required)Up to 1024 characters. Supports named or positional parameters
footer0 or 1Up to 60 characters. Variables supported
buttonsUp to 10See supported types below
call_permission_request0 or 1Cannot be combined with other interactive components — see Call Permission Request (Utility)

For full component-level structural details, see Template Elements.

Supported Button Types

Up to 10 buttons total, in any combination of these types:

  • quick_reply — predefined reply text the user can tap
  • url — opens a URL in the user's default browser
  • phone_number — taps to dial the configured business phone number
  • copy_code — copies a code to the user's clipboard (max 20 characters)
  • Call request — used in conjunction with the call_permission_request component (see below)

Specialty Utility Templates

Beyond standard custom utility templates, Meta supports two specialty utility template types. Both are created through the same /<WABA_ID>/message_templates endpoint by varying the components array.

TypeWhat it does
Custom utilityStandard structure: optional header (any format), required body, optional footer, up to 10 buttons
Location templateMap header that displays a specific location at send time. Real-time location is not supported. Specify lat/lng/name/address in the send call, not at template creation time. Categorized as UTILITY or MARKETING.
Call permission requestRequired body + call_permission_request component. Recipient grants or denies your business permission to call them. Categorized as UTILITY or MARKETING. See section below.

Call Permission Request (Utility)

Call permission request templates can be categorized as either MARKETING or UTILITY. The UTILITY variant is appropriate when you want to call a customer about an active transaction, account issue, or service interaction.

curl 'https://graph.facebook.com/<GRAPH_VERSION>/<WABA_ID>/message_templates' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "order_support_call",
    "language": "en_US",
    "category": "UTILITY",
    "parameter_format": "named",
    "components": [
      {
        "type": "body",
        "text": "Hi {{first_name}}, we would like to call you to assist with your recent order. Our support team is ready to help.",
        "example": {
          "body_text_named_params": [
            { "param_name": "first_name", "example": "Pablo" }
          ]
        }
      },
      { "type": "call_permission_request" }
    ]
  }'

Constraints:

  • Body text is required and must not be empty.
  • The call_permission_request component cannot be combined with other interactive components (no buttons, no quick replies, no URLs).
  • Only MARKETING and UTILITY templates can include this component.

When sent, the recipient sees a permission prompt and can grant or deny your business permission to call them outside the customer service window. Send via the standard /messages endpoint with parameter_format: named (note language.policy: deterministic is recommended).

Common Use Cases

  • Order and delivery lifecycle notifications
  • Account alerts and service-status updates
  • Reservation and appointment confirmations
  • Post-service feedback collection
  • Follow-up on a support interaction started in another channel
  • Opt-in and opt-out confirmations
  • Delivery location updates (use a location template)

Sending Flow

  1. Create utility template (custom, location, or call-permission).
  2. Wait for APPROVED status.
  3. Send via template message endpointPOST /<PHONE_NUMBER_ID>/messages.
  4. Monitor webhook statuses and quality signals.

Utility templates are sent through Cloud API only. They cannot be sent through Marketing Messages API for WhatsApp, which is marketing-only.

Recategorization and Appeals

Meta automatically reclassifies a utility template as marketing if the content contains promotional language or mixed intent. When this happens, pricing and messaging behavior follow marketing rules immediately, and you receive a template_category_update webhook — see Webhook Events → Template Category Reclassification.

To challenge a reclassification, use Meta business support channels (Dualhook does not file appeals on your behalf).

Billing and Windows

  • Utility templates inside an open CSW: free (pricing.type: free_customer_service, pricing.category: utility).
  • Utility templates outside an open CSW: billed at the utility rate for the recipient's country/region.
  • Volume tiers apply — higher monthly volume per market–category unlocks lower rates. See Pricing → Volume Tiers.

Best Practices

  • Keep utility templates factual, concise, and non-promotional.
  • Include concrete transaction references (order, booking, account, case IDs).
  • Do not add upsell or cross-sell wording in utility templates — Meta will reclassify them as marketing.
  • Use marketing templates separately when the objective is promotion.
  • For physical-location updates (delivery, pickup, store), prefer location templates over text-only descriptions.

Related

  • Location TemplatesWhatsApp templates with a map header. Specify latitude, longitude, name, and address at send time. Useful for delivery updates, store finders, ride-hailing pickup and drop-off.
  • TemplatesTemplate lifecycle, categories, and management through Dualhook and Meta Graph API.
  • Marketing MessagesMarketing template messaging hub: send paths (Cloud API and MM API), specialty template types, opt-out handling, billing, quality, and compliance.
  • Authentication MessagesOTP and verification code delivery via WhatsApp: copy-code, one-tap, and zero-tap templates, linked device security, the 'I didn't request a code' webhook, and PendingIntent deprecation.
  • PricingDualhook subscription plans, what is included, and how pricing relates to Meta messaging fees.
Browse more docsStart Free Trial