When building WhatsApp Flows using a routing_model, you may encounter this error:
INVALID_ROUTING_MODEL
No entry screen found in the routing model. Expected a screen with no inbound edges as the entry screen.
This error appears when no screen qualifies as a valid starting point for the user journey — i.e., there’s no screen with zero inbound routes.
What’s an Entry Screen?
In any flow with a routing_model, the entry screen is the screen where the conversation starts.
Technically:
It’s the screen that:
Is listed in the routing_model.
Does not appear as a target of any other screen.
The routing model forms a directed graph. The entry screen is the root node — it has no inbound edges.
Problem Example
{
"routing_model": {
"FIRST_SCREEN": [
{ "target": "SECOND_SCREEN" }
],
"SECOND_SCREEN": [
{ "target": "FIRST_SCREEN" }
]
},
"screens": [
{ "id": "FIRST_SCREEN", ... },
{ "id": "SECOND_SCREEN", ... }
]
}
Issue:
FIRST_SCREEN → SECOND_SCREEN
SECOND_SCREEN → FIRST_SCREEN
There is no screen with zero incoming connections
WhatsApp has no idea where the flow starts
Fixed Example
Break the loop and define a proper starting point:
{
"routing_model": {
"FIRST_SCREEN": [
{ "target": "SECOND_SCREEN" }
],
"SECOND_SCREEN": []
},
"screens": [
{ "id": "FIRST_SCREEN", ... },
{ "id": "SECOND_SCREEN", ... }
]
}
Now:
FIRST_SCREEN has no inbound link → entry screen.
SECOND_SCREEN is routed to from FIRST_SCREEN → all good.
Flow can start at FIRST_SCREEN as expected.
How to Fix This Error
Step | What to Do |
Identify all screen IDs in routing_model | List both sources and targets |
Find screen(s) with no inbound edges | These are potential entry screens |
If none found, you likely have a circular flow or broken graph | |
Fix by removing cycles or adding a starting node | One screen must not be referenced as a target by any other screen |
Example: Valid vs Invalid
Invalid (Loop):
"routing_model": {
"A": [{ "target": "B" }],
"B": [{ "target": "C" }],
"C": [{ "target": "A" }]
}
No entry point. Every screen is a target.
Valid (Tree):
"routing_model": {
"A": [{ "target": "B" }, { "target": "C" }],
"B": [],
"C": []
}
A has no inbound edges → becomes the entry screen.
For more troubleshooting insights related to WhatsApp Business API, check out heltar.com/blogs.