What is an address message?
An address message is an interactive message type on the WhatsApp Cloud API (interactive.type: "address_message"). The customer sees your body text and a button; tapping it opens a native address form inside WhatsApp with labelled fields (name, phone number, pin code, house number, floor, tower, building, street address, landmark or area, city and state). When the customer submits, the answers reach your webhook as structured data instead of a free-typed paragraph.
Meta's documentation limits the feature to businesses based in India and their customers in India, so the recipient needs an Indian (+91) number. The country attribute is mandatory and set to IN, which selects the Indian field set with its six-character in_pin_code. You can prefill fields with values, offer addresses the customer used before with saved_addresses, and send the form again with validation_errors (for example to say a pin code is outside your delivery area); WhatsApp then blocks submission until the flagged field is changed. For customers outside India, collect the address with a WhatsApp Flow or a plain text prompt instead.
Like every non-template interactive message, it can only be sent while the 24-hour customer service window is open, so it usually follows a customer message or a tap on a template button. It is often confused with the location request message, which asks for a GPS pin. A pin tells a rider where to go; an address message produces the postal fields that a courier label and a serviceability check need.
Key takeaways
- An address message is an interactive Cloud API message that opens a native WhatsApp form and returns the address as structured fields.
- Meta documents it only for businesses based in India messaging customers in India, and the
countryparameter (IN) is mandatory. - It is a non-template message, so it can be sent only inside an open 24-hour customer service window.
- The reply arrives as
interactive.type: "nfm_reply", with the address as a JSON string innfm_reply.response_json. - Send the form back with
validation_errorsto block an unserviceable pin code before the order ships.
An address message in code
curl -X POST "https://graph.facebook.com/v26.0/{PHONE_NUMBER_ID}/messages" \-H "Authorization: Bearer {ACCESS_TOKEN}" \-H "Content-Type: application/json" \-d '{"messaging_product": "whatsapp","recipient_type": "individual","to": "919812345678","type": "interactive","interactive": {"type": "address_message","body": { "text": "Where should we deliver order #A2041? Tap below to add your address." },"action": {"name": "address_message","parameters": {"country": "IN","values": { "name": "Ananya", "phone_number": "+919812345678" },"saved_addresses": [{"id": "home","value": {"name": "Ananya","phone_number": "+919812345678","in_pin_code": "411045","house_number": "B-1203","building_name": "Sunrise Heights","address": "Baner Road","landmark_area": "Baner","city": "Pune","state": "Maharashtra"}}]}}}}'
An address message that prefills the name and number and offers one saved address.
How does an address message work?
- Step 1
Open the window first
The customer messages you, or taps a quick-reply button on a utility template such as an order confirmation. The address message is a session message, so it needs that open 24-hour window.
- Step 2
Send the address form
POST to
/{PHONE_NUMBER_ID}/messageswithtype: "interactive",interactive.type: "address_message", body text, andaction.name: "address_message"withparameters.country: "IN". Addvaluesto prefill known fields andsaved_addressesto offer earlier ones. - Step 3
The customer fills the native form
WhatsApp shows labelled fields, checks basics such as a valid phone number and a pin code of at most 6 digits, and lets the customer pick a saved address or type a new one.
- Step 4
Receive the reply
Your webhook gets a
messagesevent withtype: "interactive"andinteractive.type: "nfm_reply". The address arrives as a JSON string innfm_reply.response_json, andnfm_reply.nameisaddress_message. - Step 5
Validate, then confirm or send it back
Parse
response_json, check the pin code against your courier's serviceable list, and either attach the address to the order or send the form again withvalidation_errorskeyed by field, such asin_pin_code.
An address message: key facts and limits
- Message type
- interactive.type = address_message
- Availability
- India only: India-based businesses messaging customers in India
- Required parameter
- country, set to IN
- India fields
- name, phone_number, in_pin_code, house_number, floor_number, tower_number, building_name, address, landmark_area, city, state
- Pin code field
- in_pin_code, at most 6 characters
- Reply
- interactive.type = nfm_reply, address in response_json (a string)
- Unsupported client
- Failed status with error 1026 (Receiver Incapable)
- When it can be sent
- Only inside an open 24-hour customer service window
Common mix-ups
Common mistakes with an address message
Sending it outside the window
An address message is not a template. If the customer has not messaged you in the last 24 hours the send fails; open the window with a utility template (an order confirmation with quick replies) and send the form after the customer taps.
Treating response_json as an object
response_jsonis a string. Parse it before readingvalues, and handle both a newly typed address and a pick from your saved list (saved_address_id).Trusting the form for serviceability
WhatsApp checks format (pin-code length, a valid phone number), not whether your courier delivers there. Check the pin code yourself and send the form back with
validation_errorswhen it fails.No fallback for unsupported clients
If the customer's app cannot render the form, WhatsApp drops the message and you receive a failed status with error 1026. Watch for it and fall back to asking for the address as text or through a WhatsApp Flow.
Losing which order the address belongs to
The reply's
context.idis the wamid of the address message you sent. Store that wamid against the order at send time, or the address arrives with nothing to attach to.
Example: Fixing addresses before dispatch in Pune
A Pune home-décor brand ships mostly cash-on-delivery. After each order it sends a utility template confirming the items; when the buyer taps Confirm, the window that tap opens lets the brand send an address message prefilled with the name and number from checkout, plus the buyer's previous address as a saved option. One buyer submits a new address with a pin code the brand's courier does not cover. The brand's check catches it and sends the form back with a validation error on in_pin_code; the buyer enters an office address instead, and the corrected fields go straight onto the courier label.
Why the difference matters
Why does an address message matter?
Many failed deliveries on Indian cash-on-delivery orders start with an address problem: a missing flat number, a wrong pin code, a landmark typed into the city field. Free-text replies have to be read by a person or parsed by a model. An address message hands your order system the same named fields every time, with basic checks done by WhatsApp and your own serviceability errors shown before the customer can submit. Cleaner addresses mean fewer non-delivery reports and fewer parcels returned to origin.
Rules of thumb
Best practices for an address message
- Prefill everything you already know from checkout; every field the customer does not have to type raises completion.
- Name the order number in the body text so the customer knows why you are asking.
- Offer saved addresses to repeat buyers, but expect new ones too: gifts and office deliveries are common.
- Log the parsed address with personal data masked; it settles courier disputes quickly.
Address Message FAQs
Can I send an address message outside the 24-hour window?+
Is the address message available outside India?+
How is it different from a location request message?+
What does an address message cost?+
* Per-message rates for India, ex-GST: marketing, utility and authentication effective 1 July 2026; service messages ₹0.145 since 1 October 2026 (they were ₹0 until 30 September 2026). Volume commitments earn discounts — final rate is confirmed on your account; applicable GST extra. Rates for other countries differ (see the international rate table on /pricing).