16 July, 2026
This release changes how signed links are minted from code. Flows and custom functions can now mint, list, and revoke shareable links as a trusted service, so backend code can hand out access regardless of who triggered the flow.
Minting signed links from code
Calling flows.<flow>.signedLinks.create(), .list(), or .revoke() without an explicit identity now runs as a trusted service and skips the flow's share permission. Backend code can mint and revoke links even when the person running the flow holds no share permission.
// Runs as a trusted service, no share permission required
await flows.reportFlow.signedLinks.create({ reusable: true });To run the call as a specific user and enforce the share permission, set an identity or auth token:
// Runs as the given identity, share permission enforced
await flows.reportFlow.signedLinks.withIdentity(ctx.identity!).create({});Links minted this way have no owner, so their createdBy is null. Minting from the Console is unchanged and still goes through the share permission.
Fixes and improvements
- File attachments loaded from a stored file now keep their filename and content type when sent with
notify.email(). Previously they arrived with a blank name in both the delivered email and the in-app notification; inline attachments were unaffected.
For any issues or feedback, please contact us at help@keel.so.
Thank you for using Keel!