Reference

Step Notify (:notify)

Quick Answer

Use :notify to send outbound notifications through HTTP-based channels (email APIs, chat webhooks, custom endpoints).

{:type :notify :channels {:http {...}}}

Canonical Shape

FieldTypeRequiredNotes
:typekeywordYesMust be :notify
:channelsmapYesChannel configs (currently :http)
:datamapNoTemplate data merged into channel payloads
:templatekeyword/stringNoFlow template id (channel config base)
:reviewbool/string/mapNoHuman review checkpoint before send
:retrymapNoCommon step retry policy
:timeoutintNoCommon step timeout (seconds)
:persistmapNoCommon output persistence options

Limits And Behavior

  • :notify step accepts external delivery channels only.
  • :channels :ui is rejected for :notify.
  • Use :wait + :notify for in-app approval flows.

HTTP Channel Config

Inside :channels {:http ...}, use the same request model as HTTP step channels:

FieldRequiredNotes
:connection or :urlYesPrefer connection reuse
:pathNoAppended to connection base URL
:methodNoDefaults from your channel contract
:headers, :query, :json, :form, :bodyNoStandard payload config
:template / :dataNoHandlebars templating inputs

Result Shape

The step returns per-channel delivery status:

{:sent? true
 :channels {:http {:sent? true
                   :status 202}}}

If one or more channels fail, :sent? is false and an :errors vector is included.

Canonical Example

{:templates [{:id :ops-alert
              :type :notification
              :channels {:http {:connection :notify-api
                                :path "/alerts"
                                :method :post
                                :json {:title "{{title}}"
                                       :severity "{{severity}}"
                                       :message "{{message}}"}}}]
 :functions [{:id :alert-payload
              :language :clojure
              :code "(fn [input]\n                       {:title \"Workflow alert\"\n                        :severity (or (:severity input) \"warning\")\n                        :message (str \"Run \" (:run-id input) \" requires attention\")})"}]
 :flow
 '(let [payload (flow/step :function :build-alert-payload
                   {:ref :alert-payload
                    :input (flow/input)})]
    (flow/step :notify :send-alert
      {:template :ops-alert
       :data payload}))}

Related

As of Feb 13, 2026