Welcome!
What did you do?
Description
POST /send/list and POST /send/button consistently fail with HTTP 500 and
{"error":"server returned error 405"}. No message is delivered.
The error comes from the WhatsApp server after the library builds and dispatches the stanza —
it is not a request-validation problem. On the same instance, same token, same minute,
/send/text, /send/poll and /send/carousel all succeed.
The decisive detail: /send/carousel works and it sends InteractiveMessage, while the two
failing endpoints send the legacy ListMessage / ButtonsMessage types. This suggests WhatsApp
has deprecated the bare legacy formats, and that /send/list needs the same
InteractiveMessage (or ViewOnceMessage wrapper) treatment the carousel path already uses.
Environment
|
|
| Version |
0.7.2 (latest stable; digest sha256:6fa60146…) |
| Deployment |
Docker, evoapicloud/evolution-go:0.7.2 |
| Account type |
Personal / consumer WhatsApp (not Business API) |
| Instance state |
connected: true, paired and healthy |
Steps to reproduce
# 1. /send/list — body uses exactly the six required fields from the Swagger docs
curl -X POST http://<host>:8080/send/list \
-H "apikey: <INSTANCE_TOKEN>" -H "instanceId: <INSTANCE_ID>" \
-H "Content-Type: application/json" -d '{
"number": "5599999999999",
"title": "Company",
"description": "Choose a department",
"footerText": "Support",
"buttonText": "View Menu",
"sections": [{
"title": "Departments",
"rows": [{"title": "SALES"}, {"title": "FINANCE"}]
}]
}'
Actual result
{"error":"server returned error 405"}
HTTP 500
Expected result — a tappable single-select list, as described in the Swagger documentation.
Control tests (same instance, same token, minutes apart)
| Endpoint |
Message type built |
HTTP |
Delivered? |
/send/text |
ExtendedTextMessage |
200 |
✅ |
/send/poll |
PollCreationMessage |
200 |
✅ tappable, vote received back via webhook |
/send/carousel |
InteractiveMessage |
200 |
✅ |
/send/list |
ListMessage |
500 |
❌ error 405 |
/send/button |
ButtonsMessage |
500 |
❌ error 405 |
This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean 400 from evolution-go itself
("question is required", "footer is required"), never a 405.
Suggested fix
Send interactive lists/buttons as InteractiveMessage (or wrap in ViewOnceMessage), reusing the
approach that already works in the carousel path.
If the legacy format must be kept for backward compatibility, please consider:
- returning a clear, documented error instead of a raw
server returned error 405; and
- flagging the limitation in the Swagger description, so integrators do not build features on an
endpoint that cannot deliver.
Related
Possibly the same root cause as #59, but the observed symptom differs: there the API returns
200 and the message fails to render client-side; here it returns 500 and nothing is sent.
What did you expect?
Expected result — a tappable single-select list, as described in the Swagger documentation.
What did you observe instead of what you expected?
Control tests (same instance, same token, minutes apart)
| Endpoint |
Message type built |
HTTP |
Delivered? |
/send/text |
ExtendedTextMessage |
200 |
✅ |
/send/poll |
PollCreationMessage |
200 |
✅ tappable, vote received back via webhook |
/send/carousel |
InteractiveMessage |
200 |
✅ |
/send/list |
ListMessage |
500 |
❌ error 405 |
/send/button |
ButtonsMessage |
500 |
❌ error 405 |
This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean 400 from evolution-go itself
("question is required", "footer is required"), never a 405.
Screenshots/Videos
No response
Which version are you using?
0.7.2
What is your environment?
Linux
If applicable, paste the log output
Server logs
SendMessage called for number: +55…@s.whatsapp.net, type: ListMessage
Error sending message: server returned error 405
Error sending list: server returned error 405
SendMessage called for number: +55…@s.whatsapp.net, type: ButtonsMessage
Error sending message: server returned error 405
Error sending button message: server returned error 405
Contrast with the working carousel path:
Building carousel for +55…@s.whatsapp.net with 2 cards
SendMessage called for number: +55…@s.whatsapp.net, type: InteractiveMessage
Carousel sent to +55…@s.whatsapp.net with 2 cards
Additional Notes
Additional evidence: it is not a block on non-official clients
Another whatsmeow-based client (WAHA, engine GOWS — the same underlying Go library)
successfully sent an equivalent list message from the same phone number, within the same
minute, receiving HTTP 201 with the message delivered and rendering as a tappable menu.
evolution-go even received that WAHA-sent list as an inbound event, confirming the message
traversed WhatsApp's network normally.
So the 405 is not WhatsApp rejecting the sender or the client library — it is WhatsApp rejecting
the legacy stanza format. WAHA encodes interactive lists using the current wrapper; the
evolution-go /send/list path does not.
Relation to the Swagger note
The current Swagger description for /send/list states:
"Uses legacy ListMessage format (no ViewOnceMessage wrapper) so it renders on iOS, Android and
WhatsApp Web."
That choice appears to be the root cause: WhatsApp seems to no longer accept the bare
ListMessage. The carousel endpoint in this same codebase already builds InteractiveMessage
successfully, so the building blocks are present.
Welcome!
What did you do?
Description
POST /send/listandPOST /send/buttonconsistently fail with HTTP 500 and{"error":"server returned error 405"}. No message is delivered.The error comes from the WhatsApp server after the library builds and dispatches the stanza —
it is not a request-validation problem. On the same instance, same token, same minute,
/send/text,/send/polland/send/carouselall succeed.The decisive detail:
/send/carouselworks and it sendsInteractiveMessage, while the twofailing endpoints send the legacy
ListMessage/ButtonsMessagetypes. This suggests WhatsApphas deprecated the bare legacy formats, and that
/send/listneeds the sameInteractiveMessage(orViewOnceMessagewrapper) treatment the carousel path already uses.Environment
sha256:6fa60146…)evoapicloud/evolution-go:0.7.2connected: true, paired and healthySteps to reproduce
Actual result
{"error":"server returned error 405"}HTTP 500
Expected result — a tappable single-select list, as described in the Swagger documentation.
Control tests (same instance, same token, minutes apart)
/send/textExtendedTextMessage/send/pollPollCreationMessage/send/carouselInteractiveMessage/send/listListMessageerror 405/send/buttonButtonsMessageerror 405This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean
400from evolution-go itself(
"question is required","footer is required"), never a 405.Suggested fix
Send interactive lists/buttons as
InteractiveMessage(or wrap inViewOnceMessage), reusing theapproach that already works in the carousel path.
If the legacy format must be kept for backward compatibility, please consider:
server returned error 405; andendpoint that cannot deliver.
Related
Possibly the same root cause as #59, but the observed symptom differs: there the API returns
200and the message fails to render client-side; here it returns500and nothing is sent.What did you expect?
Expected result — a tappable single-select list, as described in the Swagger documentation.
What did you observe instead of what you expected?
Control tests (same instance, same token, minutes apart)
/send/textExtendedTextMessage/send/pollPollCreationMessage/send/carouselInteractiveMessage/send/listListMessageerror 405/send/buttonButtonsMessageerror 405This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean
400from evolution-go itself(
"question is required","footer is required"), never a 405.Screenshots/Videos
No response
Which version are you using?
0.7.2
What is your environment?
Linux
If applicable, paste the log output
Server logs
Contrast with the working carousel path:
Additional Notes
Additional evidence: it is not a block on non-official clients
Another whatsmeow-based client (WAHA, engine GOWS — the same underlying Go library)
successfully sent an equivalent list message from the same phone number, within the same
minute, receiving
HTTP 201with the message delivered and rendering as a tappable menu.evolution-go even received that WAHA-sent list as an inbound event, confirming the message
traversed WhatsApp's network normally.
So the 405 is not WhatsApp rejecting the sender or the client library — it is WhatsApp rejecting
the legacy stanza format. WAHA encodes interactive lists using the current wrapper; the
evolution-go
/send/listpath does not.Relation to the Swagger note
The current Swagger description for
/send/liststates:That choice appears to be the root cause: WhatsApp seems to no longer accept the bare
ListMessage. The carousel endpoint in this same codebase already buildsInteractiveMessagesuccessfully, so the building blocks are present.