Location Templates

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

What Location Templates Do

Location templates include a map header that displays a specific location. When a WhatsApp user taps the map, their default map app opens to the specified coordinates.

The location is specified at send time, not at template creation time. This means a single approved template can be reused for many different destinations — order tracking, delivery updates, ride-hailing pickup and drop-off, store finders.

Location templates can be categorized as either UTILITY or MARKETING.

Limitations

  • Only UTILITY or MARKETING templates can include a location header.
  • Real-time locations are not supported. The location is static — the map shows whatever lat/lng you sent at send time. Updating it requires sending a new message.
  • The location (latitude, longitude, name, address) is specified at send time, not at template creation time.

Supported Components

ComponentCardinalityNotes
Location header1 (required)format: location — no value at creation time
Body1 (required)Up to 1024 characters. Supports named parameters
Footer0 or 1Up to 60 characters
ButtonsOptionalStandard button types

Create a Location Template

curl 'https://graph.facebook.com/<GRAPH_VERSION>/<WABA_ID>/message_templates' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "order_delivery_update",
    "language": "en_US",
    "category": "UTILITY",
    "parameter_format": "named",
    "components": [
      { "type": "header", "format": "location" },
      {
        "type": "body",
        "text": "Good news {{customer_name}}! Your order #{{order_number}} is on its way to the location above.",
        "example": {
          "body_text_named_params": [
            { "param_name": "customer_name", "example": "Mark" },
            { "param_name": "order_number", "example": "566701" }
          ]
        }
      },
      { "type": "footer", "text": "To stop receiving delivery updates, tap the button below." },
      {
        "type": "buttons",
        "buttons": [
          { "type": "quick_reply", "text": "Stop Delivery Updates" }
        ]
      }
    ]
  }'

The header at creation time is just { "type": "header", "format": "location" } — no coordinates yet. Coordinates are bound at send time.

Example response:

{
  "id": "123456789012345",
  "status": "PENDING",
  "category": "UTILITY"
}

Send a Location Template

The location is supplied in the header parameters array on the send call:

curl 'https://graph.facebook.com/<GRAPH_VERSION>/<PHONE_NUMBER_ID>/messages' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "12015550123",
    "type": "template",
    "template": {
      "name": "order_delivery_update",
      "language": {
        "policy": "deterministic",
        "code": "en_US"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "location",
              "location": {
                "latitude": "37.44211676562361",
                "longitude": "-122.16155960083124",
                "name": "Philz Coffee",
                "address": "101 Forest Ave, Palo Alto, CA 94301"
              }
            }
          ]
        },
        {
          "type": "body",
          "parameters": [
            { "type": "text", "parameter_name": "customer_name", "text": "Jane" },
            { "type": "text", "parameter_name": "order_number", "text": "892104" }
          ]
        }
      ]
    }
  }'

The send-time location values are independent of the template's creation-time configuration — only the body parameter values need to match the template's named parameter slots.

Field Reference

FieldRequired?What it is
latitudeYesDecimal degrees as a string (e.g. "37.44211676562361")
longitudeYesDecimal degrees as a string (e.g. "-122.16155960083124")
nameOptionalDisplay name for the location (e.g. "Philz Coffee")
addressOptionalDisplay address (e.g. "101 Forest Ave, Palo Alto, CA 94301")

name and address are not validated against the coordinates — Meta displays whatever you send. Make sure your downstream system uses canonical addresses if the user will rely on them for navigation.

Use Cases

  • Delivery in transit — show the courier's current waypoint or the destination address.
  • Store finder — confirm which physical location the user's order is being prepared at.
  • Ride-hailing — communicate pickup or drop-off coordinates.
  • Service appointment — show where the technician will arrive or where the customer should bring an item.
  • Event check-in — direct attendees to a venue entrance.

For ongoing live tracking, send periodic location-template messages — but don't send so frequently that you trigger per-user rate limits or hurt your quality rating.

Related

  • Utility MessagesUtility template messaging hub: supported components and buttons, specialty types (location, call permission), CSW-free billing, volume tiers, content rules, and recategorization.
  • TemplatesTemplate lifecycle, categories, and management through Dualhook and Meta Graph API.
  • Sending Template MessagesHow to send template messages via Cloud API with variables, media headers, and URL buttons.
Browse more docsStart Free Trial