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
UTILITYorMARKETINGtemplates 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
| Component | Cardinality | Notes |
|---|---|---|
| Location header | 1 (required) | format: location — no value at creation time |
| Body | 1 (required) | Up to 1024 characters. Supports named parameters |
| Footer | 0 or 1 | Up to 60 characters |
| Buttons | Optional | Standard 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
| Field | Required? | What it is |
|---|---|---|
latitude | Yes | Decimal degrees as a string (e.g. "37.44211676562361") |
longitude | Yes | Decimal degrees as a string (e.g. "-122.16155960083124") |
name | Optional | Display name for the location (e.g. "Philz Coffee") |
address | Optional | Display 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.