Pigeon Atlas
← Integrations

Send email from Retool

Internal tools send mail — approvals, alerts, notices to customers. A REST resource sends them from your domain, with a delivery record you can look up later.

Updated September 09, 2026

Internal tools end up sending mail almost immediately: an approval goes through and somebody has to be told, a record changes and a customer needs a notice. Retool has no email primitive, so this usually starts as an SMTP call inside a workflow or, worse, a shared mailbox that three tools authenticate to.

A REST API resource is cleaner, and every query that needs to send reuses it.

Make the resource

Under Resources → Create new → REST API:

Key Value
Authorization Bearer pa_live_your_key_here
Content-Type application/json

The key lives on the resource, not in a query, so it is not visible to anybody who can open the app in edit mode — and rotating it is one change rather than a search across every app.

The query

Add a resource query against it:

{
  "from": "Your Company <hello@mail.yourcompany.com>",
  "to": {{ table1.selectedRow.email }},
  "subject": "Your request was approved",
  "html": "<p>Hello {{ table1.selectedRow.name }}, that is done.</p>"
}

Two Retool-specific traps

Do not put quotes around {{ }} in Raw JSON. Retool serialises the value with its type, so a quoted mapping becomes a double-quoted string and the payload fails to parse. Unquoted is correct for strings here, which is the opposite of what most JSON editors train you to do.

Set the query to run only on click. A query with Run automatically when inputs change sends every time the selected table row changes — that is a real email per click, to a real person. This is the mistake worth designing against: give the query Manual trigger, and put it behind a button with a confirmation.

Showing what happened

The reply carries a message id. Store it against whatever record the mail was about, and a later query to GET /emails/{{ id }} tells you whether it was delivered, bounced or is still queued. That turns "did they get the notice?" from a guess into a field on the record — which is usually why the tool existed in the first place.

Before it works

Add your sending domain in Pigeon Atlas and publish the three DNS records. Until all three resolve, that domain cannot send.

The API reference has the full payload and the delivery webhook.

Ten messages free, no card

Enough to verify a domain and watch one arrive from it.

Start sending

Other platforms