0.465 (13 Jul 2026)

13 July, 2026

This release adds a reply-to address and file attachments to email notifications.

Reply-to on email notifications

notify.email now takes an optional replyTo. When someone replies to the email, their reply goes to these addresses instead of to the sender.

import { notify } from "@teamkeel/sdk";
 
await notify.email({
  recipients: { to: { emails: "customer@example.com" } },
  subject: "Your order",
  content: { body: "Thanks for your order." },
  replyTo: { emails: "support@example.com" },
});

replyTo accepts the same recipient shapes as recipients, so you can point replies at plain email addresses, users, identities, or a team. A team expands to its members.

await notify.email({
  recipients: { to: { emails: "customer@example.com" } },
  subject: "Your order",
  content: { body: "Thanks for your order." },
  replyTo: { teams: "Support", emails: "escalations@example.com" },
});

Email attachments

notify.email now takes an optional attachments array. Each entry is a file, and each file can be up to 10MB.

You can attach a file you build in code with InlineFile, or a file already stored on a model's File field.

import { notify, InlineFile } from "@teamkeel/sdk";
 
const receipt = new InlineFile({
  filename: "receipt.txt",
  contentType: "text/plain",
});
receipt.write(Buffer.from("Thanks for your order"));
 
await notify.email({
  recipients: { to: { emails: "customer@example.com" } },
  subject: "Your receipt",
  content: { body: "Your receipt is attached." },
  attachments: [receipt],
});

A stored File is attached by reference, so it is not copied into the send. An InlineFile is sent with the email. See Files for how to build and store files.

Fixes and Improvements

  • Flows: Submitting data for a UI step that is no longer the current pending step is now rejected with an "invalid pending UI step" error, so a stale or duplicate submission cannot advance the run. The run stays awaiting input.

For any issues or feedback, please contact us at help@keel.so.

Thank you for using Keel!