diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md
index f9efd18421..01003efd66 100644
--- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md
+++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md
@@ -4,7 +4,7 @@
| 5 minutes read |
Level: Beginner |
- Last Updated: October 2025 |
+ Last Updated: August 2026 |
@@ -15,11 +15,10 @@ The Wait for Response node is used whenever the flow needs to pause and collect
Once the response is received, it can be validated, stored in a variable, and reused later in the same flow or across different flows.
-Note: the contact variable can be used across flows, but the result variable is limited to the same flow.
-
---
## Why use Wait for Response?
+
The Wait for Response node is essential whenever a flow needs input from the contact. Common use cases include:
- Gathering registration details (e.g., name, age, email).
- Conducting surveys or quizzes.
@@ -40,7 +39,7 @@ The Wait for Response node is essential whenever a flow needs input from the con
-**3. Give a Result Name (this becomes your variable).**
+**3. Give a Result Name (this becomes the result variable that stores the contact's reply).**
**4. (Optional) Check Continue when there is no response to nudge the users to respond.**
@@ -54,11 +53,39 @@ The Wait for Response node is essential whenever a flow needs input from the con
---
+## Understanding the fields in this node
+
+The Wait for Response node has a few blank fields you need to fill in. Here is what each one means:
+
+- **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See "Response Types" below for the full list.
+- **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text.
+- **Categorize as**: the label given to this branch, so use something that describes the outcome, like "Yes" or "Has Number". This becomes the name of the branch you connect the rest of your flow to.
+- **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches.
+- **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`.
+- **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See "Handling no response" below for details.
+
+Note: the contact variable can be used across flows, but the result variable (the one named in Result Name) is limited to the same flow.
+
+**The Other branch**
+
+If you leave every criteria row blank, the node has a single **All Responses** branch that accepts any reply.
+
+
+
+As soon as you fill in at least one criteria row, an automatic **Other** branch is added alongside it, for replies that don't match any of your criteria.
+
+
+
+---
+
## Response Types
## Text-based responses
+
+
### 1. has any of the words
+
This option accepts the input if it contains any of the words defined in the response criteria. Multiple words can be added, separated by commas. For example, if the criteria include Yes, Y, Ya, Yup, then any of these responses will be treated as valid.
Also, if the field is left blank, any text response from the user will be accepted.
@@ -66,13 +93,29 @@ Also, if the field is left blank, any text response from the user will be accept
### 2. has all of the words
-To accept the input if the input matches exactly what is defined in the response criteria.
-### 3. has a phrase
-To accept the input if the input is present in the response criteria.
+This option accepts the input if it contains all of the words defined in the response criteria, in any order. The input can also contain other words besides the ones listed.
+For example, if the criteria include cat, dog, then "I have a dog and a cat" will be treated as valid, but "I have a dog" will not, since it is missing cat.
+
+### 3. has multiple values
+
+This option accepts the input only if every word in it is one of the words defined in the response criteria. Unlike "has all of the words," it does not require every listed word to be present — the reply just cannot contain anything outside the list.
+For example, if the criteria include red, blue, green, then "red blue" and "green" will be treated as valid, but "red yellow" will not, since yellow is not in the list.
+
+### 4. has the phrase
+
+This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase.
+For example, if the criterion is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order.
+
+### 5. has only the phrase
-### 4. has only the phrase
-Accepts only if the response matches exactly what is defined in the response criteria.
+This option accepts the input only if it matches the response criteria exactly, with nothing else added.
+For example, if the criterion is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word.
+
+### 6. starts with
+
+This option accepts the input only if it begins with the exact text defined in the response criteria.
+For example, if the criterion is order, then "order 123" will be treated as valid, but "my order is 123" will not, since it does not start with "order".
---
@@ -80,22 +123,28 @@ Accepts only if the response matches exactly what is defined in the response cri
## Numeric responses
### 1. Has a number
-Accepts any numeric input, This will accept any number as a valid response. Any non numeric input will be treated as invalid response.
+
+Accepts any numeric input as a valid response. A non-numeric reply doesn't match this criterion and is routed to the automatic **Other** branch instead (see "The Other branch" above).
+In the example below, a numeric reply is categorized as "Has Number" and saved under the result name registration_number, so it can be reused later as `@results.registration_number`.
### 2. has a number between
-Accepts input if it is numeric and falls within the defined range. This option will accept numbers only given in the range. any number out of range will be treated as invalid response.
-Example: Criteria = 18-60, so only numbers within 18 and 60 range will be accepted.
-
+Accepts input only if it is numeric and falls within the defined range. A number that doesn't fall in any of your ranges is routed to the automatic **Other** branch instead.
+In the example below, four ranges are set up under the result name age: 1-12 is categorized as "Kids", 13-19 as "Teens", 20-60 as "Adults", and 60-100 as "Sr Citizens". A reply of 15 would be categorized as "Teens", while a reply of 45 would be categorized as "Adults".
+
+Note: the "Adults" and "Sr Citizens" ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as "Adults", not "Sr Citizens". To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100).
+
+
### 3. has a number equal to
-Accepts input only if it exactly matches the defined number. This will accept only the number given in the criteria as a valid response. Any other response will be treated as invalid response.
-Example: Criteria = 5, so only 5 will be valid.
+
+Accepts input only if it exactly matches the defined number. Any other number is routed to the automatic **Other** branch instead.
+In the example below, three separate rows are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second row and is categorized as "20". A reply of 15 would not match any row and would be routed to the automatic **Other** branch.
@@ -106,22 +155,28 @@ Example: Criteria = 5, so only 5 will be valid.
### 1. has a phone number
-Accepts input if the response is a valid phone number.It accepts mobile and landline numbers.
+
+Accepts input if the response is a valid phone number. This includes mobile and landline numbers.
Supported formats include:
-- 10 digit Mobile number (XXXXXXXXXX).
-- 10 digit Mobile number with 0 prefix (0XXXXXXXXXX).
-- 10 digit Mobile number with country code prefix (+91 XXXXXXXXXX).
-- landline number with (XXX XXXXXXX).
-- landline number with 0 and state code (0XXX XXXXXXX).
-- landline number with with country code prefix (+91 XXX XXXXXXX).
+- 10-digit mobile number (XXXXXXXXXX).
+- 10-digit mobile number with 0 prefix (0XXXXXXXXXX).
+- 10-digit mobile number with country code prefix (+91 XXXXXXXXXX).
+- Landline number (XXX XXXXXXX).
+- Landline number with 0 and state code (0XXX XXXXXXX).
+- Landline number with country code prefix (+91 XXX XXXXXXX).
+
+In the example below, this is categorized as "Has Phone" and saved under the result name phone, so it can be reused later as `@results.phone`.
### 2. has an email
+
Accepts input if the response is a valid email address.
-Examples: abc@xyz.xyz, abc@xyz.xyz, abc@xyz
+Examples: priya@example.org, contact.team@example.co.in, user+alerts@example.com
+
+In the example below, this is categorized as "Has Email" and saved under the result name email, so it can be reused later as `@results.email`.
@@ -130,48 +185,60 @@ Examples: abc@xyz.xyz, abc@xyz.xyz, abc@xyz
## Media responses
### 1. has media
-Accepts input if the response is a media file (jpeg, png, mp4).
-Users can store both the URL and caption of the media file.
+
+Accepts input if the response is a media file (jpeg, png, mp4). In the example below, this is categorized as "Has Media".
-- To store the media file - create a result variable(in the given example below, picture is given as result name)
+To store the media file, create a result variable (in the example below, picture is given as the result name).
-Now users can use the media file URL received and its caption.
-
-In this example, the syntax will be.
-- for media file URL @results.picture.url
-- for media file caption @results.picture.caption
+In this example, the syntax for the media file URL is: `@results.picture.url`
### 2. has audio
+
Accepts input if the response is an audio file.
+To store the audio file, create a result variable (in the example below, audio is given as the result name).
+In this example, the syntax for the audio file URL is: `@results.audio.url`
+
### 3. has video
+
Accepts input if the response is a video file (mp4 video files).
+To store the video file, create a result variable (in the example below, video is given as the result name).
+In this example, the syntax for the video file URL is: `@results.video.url`
+
### 4. has image
+
Accepts input if the response is an image file (jpeg, png).
+To store the image file, create a result variable (in the example below, image is given as the result name).
+In this example, the syntax for the image file URL is: `@results.image.url`
+
### 5. has file
+
Accepts input if the response is a document (pdf, doc).
+To store the file, create a result variable (in the example below, file is given as the result name).
+In this example, the syntax for the file URL is: `@results.file.url`
+
---
@@ -180,15 +247,18 @@ Accepts input if the response is a document (pdf, doc).
## Location
### 1. has location
-Accepts input if the response is a location
+
+Accepts input if the response is a location.
-- User can get the value of location with Has Location in contact response and save it in the form of longitude and latitude.
-- In the given example, result name is given as ‘location’.
-- Now user can save or use the location details received in longitude and latitude forms in the flow like other variables.
+- The location is saved as longitude and latitude.
+- In the example below, location is given as the result name.
+- You can reuse these values elsewhere in the flow. In this example, the syntax is:
+ - for the longitude: `@results.location.longitude`
+ - for the latitude: `@results.location.latitude`
@@ -202,10 +272,12 @@ To get the detailed location details using webhook - refer to this [document](ht
This option is used to validate a response against a specific format using a regular expression (regex).
It is especially useful when inputs need to follow strict patterns, such as dates, ID numbers, or custom codes.
-Example: To ensure a date of birth is entered in the format DD/MM/YYYY, use the following regex:
-^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}$
+Example: to ensure a date of birth is entered in the format DD/MM/YYYY, use the following regex:
+`^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}$`
+
+Valid responses include 05/09/1995 and 31/12/2000.
-Valid responses include - 05/09/1995, 31/12/2000
+In the example below, this is categorized as "correct format" and saved under the result name dob, so it can be reused later as `@results.dob`.
@@ -213,54 +285,29 @@ Valid responses include - 05/09/1995, 31/12/2000
## Handling no response
-If a contact does not respond, you can configure the flow to continue after a set wait time.
-Example: Send a reminder after 2 hours of inactivity.
-
-Click on ‘Continue if there is no response for’ and choose the time gap after which a nudge will be sent to the end user.
-In the example given below, a reminder is sent to the end user every hour (up to 3 times) if no response is received.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+If a contact does not respond, you can configure the flow to continue after a set wait time, instead of waiting forever.
+Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. The screenshot below shows a single Wait for Response node configured to wait 1 hour before continuing down the **No Response** branch.
+To send a reminder before giving up — for example, a reminder every hour, up to 3 times — chain **Send the contact a message** and **Wait for Response** nodes together:
+1. Connect the No Response branch to a **Send the contact a message** node with your reminder text.
+2. Connect that message node to another **Wait for Response** node with its own timer.
+3. For each additional reminder, repeat steps 1 and 2, connecting the new pair to the previous **Wait for Response** node's No Response branch — three pairs chained this way send three reminders.
+4. Connect the last **Wait for Response** node's No Response branch to wherever the flow should continue once all reminders have been sent.
+There's no automatic counter: the number of reminders is simply how many Send message → Wait for Response pairs you connect. See "The no-response branch in your flow" below for what the No Response branch looks like in the flow editor.
+
+---
+## The no-response branch in your flow
+Once you save a Wait for Response node with "Continue when there is no response for" ticked, an extra **No Response** branch appears in the flow editor alongside your other criteria branches. You connect the rest of your flow to it the same way you would any other branch: drag from its red circle to the next node.
+In the example below, the node has one criteria branch (**Yes**), an automatic **Other** branch for replies that do not match any criteria, and the **No Response** branch for when the contact does not reply in time.
+
+Note: **Other** and **No Response** are not the same thing. **Other** fires when the contact replies with something that does not match any of your criteria. **No Response** fires only when the contact does not reply at all within the time you set.
diff --git a/static/img/flows/flows_wait_for_response_all_responses_branch.png b/static/img/flows/flows_wait_for_response_all_responses_branch.png
new file mode 100644
index 0000000000..02a86ca6a9
Binary files /dev/null and b/static/img/flows/flows_wait_for_response_all_responses_branch.png differ
diff --git a/static/img/flows/flows_wait_for_response_criteria.png b/static/img/flows/flows_wait_for_response_criteria.png
new file mode 100644
index 0000000000..fe7e8edca6
Binary files /dev/null and b/static/img/flows/flows_wait_for_response_criteria.png differ
diff --git a/static/img/flows/flows_wait_for_response_no_response_branch.png b/static/img/flows/flows_wait_for_response_no_response_branch.png
new file mode 100644
index 0000000000..d10e146b04
Binary files /dev/null and b/static/img/flows/flows_wait_for_response_no_response_branch.png differ
diff --git a/static/img/flows/flows_wait_for_response_number_between.png b/static/img/flows/flows_wait_for_response_number_between.png
new file mode 100644
index 0000000000..ed47d93426
Binary files /dev/null and b/static/img/flows/flows_wait_for_response_number_between.png differ
diff --git a/static/img/flows/flows_wait_for_response_other_branch.png b/static/img/flows/flows_wait_for_response_other_branch.png
new file mode 100644
index 0000000000..709b379803
Binary files /dev/null and b/static/img/flows/flows_wait_for_response_other_branch.png differ