When building WhatsApp flows, you may encounter this error:
INVALID_ON_CLICK_ACTION_PAYLOAD
Missing dynamic data '${expression}' in the data model for screen ${screenId}.
Data binding does not exist
This error means you're trying to use a dynamic value like ${data.something} in your action payload, but that value is not available in the screen’s data model.
Why This Happens
The error occurs when:
- You reference a data field in ${data.field_name}, but that field was never defined or passed into the screen. 
- Your component is expecting to use data that isn’t available at runtime. 
In other words, the screen doesn’t know what ${data.not_present} is because you haven’t provided it anywhere.
Problem Example
{
  "type": "Form",
  "name": "PASS_CUSTOM_VALUE",
  "children": [
    {
      "type": "Footer",
      "on-click-action": {
        "name": "complete",
        "payload": {
          "input": "${data.not_present}"
        }
      }
    }
  ]
}Here, the payload references ${data.not_present}. But since not_present was never defined in the screen’s data model, the system throws an error.
How to Fix It?
To resolve this, you have two options depending on your intent:
Option 1: Pass the Required Data to the Screen
If you intend to use data from a previous step, make sure it’s explicitly included in the screen’s input data.
Example screen data model:
{
  "screen": {
    "id": "PASS_CUSTOM_VALUE",
    "data": {
      "custom_value": "user_input"
    }
  }
}Then reference it in your component:
"input": "${data.custom_value}"
Option 2: Use Form Input Instead (If You Meant to Capture User Input)
If the data is supposed to come from the user via form input, you should reference ${form.input_name} instead.
Example:
{
  "type": "Form",
  "name": "PASS_CUSTOM_VALUE",
  "children": [
    {
      "type": "Input.Text",
      "name": "custom_value",
      "label": "Enter a value"
    },
    {
      "type": "Footer",
      "on-click-action": {
        "name": "complete",
        "payload": {
          "input": "${form.custom_value}"
        }
      }
    }
  ]
}This ensures the payload references a value the user actually provides.
Key Differences Between ${form} and ${data}
| Expression | Source | Use Case | 
| ${form.input} | User input from the current form | Collecting input from a user | 
| ${data.field} | Pre-populated data passed into the screen | Using existing data or values | 
The INVALID_ON_CLICK_ACTION_PAYLOAD error occurs when a payload references ${data.something} that doesn't exist in the screen’s data model. Make sure the value either exists in the screen’s input data or is collected via a form. Always double-check whether you're referencing data or form input and that the data is actually present and correctly named.
For more troubleshooting insights related to WhatsApp Business API, check out heltar.com/blogs.
 
             
         
         
        
    
    

