I have this workflow I am attempting. I send a user an email which has a request for data link. That link is a Retool Workflow webhook that does some stuff and then sends the user the requested data by email. All good.
But in clicking the webhook a browser tab opens that shows the webhook's JSON response which is not at all pretty to a normal user.
There does not appear to be a way to send some html back to the user so I can tell him the request succeeded (or failed). Is it a limitation with how Retool does this or with the Webhook spec itself? Is there a way to do this?
I do have a workaround where I call a Retool public app which calls the Workflow and tells the user the results. It works but it is an extra moving part I would like to eliminate.
A workflow sends an email containing a link to a Retool Workflow webhook; when the recipient clicks it, the browser opens a raw JSON response. The goal is to return friendly HTML (or any non-JSON content) directly from the webhook to show a success/failure message, rather than relying on the existing workaround of a separate public Retool app.
AI Response
Returning non-JSON content (such as HTML or text/plain) directly from a Workflow webhook response is not currently supported — the webhook Response block always returns a JSON object. This was confirmed directly by Retool staff, who noted it is a requested feature that engineering is tracking, and multiple users have echoed the same need. Until custom content types are supported, the reliable pattern remains routing the click through a public Retool app (or another lightweight page) that calls the workflow and renders a user-friendly result, so the extra 'moving part' is expected for now rather than an avoidable misconfiguration.
Sources
ReTool Workflow - How to return a string (not json)
Retool staff confirm that returning a non-JSON (text/plain, and by extension HTML) response from a Workflow webhook is not currently possible but is a requested, in-progress feature — directly corroborating this limitation.
The Community Team is testing out a new automation. Let us know if it's helpful (or not) by leaving a , , or . Or by marking this post as the "Solution"! Let us know if you have any feedback here.
Hey @bradlymathews - thanks for reaching out. The workaround that you've described here is a good one, but I can appreciate the desire for a solution with fewer moving parts. I do see that you've bumped the linked thread and will reach out to the team for an update!