Skip to main content

Overview

When a workflow reaches a human_approval step, Station can notify external systems via webhooks. This enables human-in-the-loop automation with:
  • Slack notifications with approve/reject buttons
  • ntfy.sh alerts for mobile push notifications
  • PagerDuty escalations for critical decisions
  • Custom dashboards showing pending approvals

Configuration

Config File

Add to your config.yaml:

Environment Variables

Webhook Payload

When a workflow reaches a human_approval step, Station sends:

Payload Fields

Integration Examples

ntfy.sh

ntfy is a simple HTTP-based pub-sub notification service - perfect for mobile push notifications.
1

Install the ntfy app

Get it on Android or iOS
2

Subscribe to your topic

Open the app and subscribe to station-approvals (or your chosen topic name)
3

Configure Station

4

Test the webhook

For rich notifications with titles, priorities, and action buttons, use a webhook proxy that transforms Station’s JSON payload into ntfy’s format. See the advanced examples below.

Slack

Configure a Slack Incoming Webhook:
For interactive approve/reject buttons, you’ll need a small webhook proxy to transform the payload into Slack Block Kit format:

PagerDuty

Send approval requests as PagerDuty incidents:
You’ll need a webhook proxy to transform to PagerDuty Events API v2 format.

Custom Webhook Proxy

Build a simple proxy to transform Station’s payload for any system:
Then configure Station to use your proxy:

Approval API

Once notified, approvers can use the URLs in the payload or call the API directly.

Approve a Request

Response:

Reject a Request

CLI Commands

Audit Logging

All webhook deliveries and approval decisions are logged for compliance and debugging.

Webhook Delivery Logs

Every webhook attempt is recorded with:
  • Request payload sent
  • Response status code
  • Response body (truncated)
  • Duration in milliseconds
  • Error message (if failed)

View Audit Trail

Response:

Audit Event Types

Retry Behavior

Station automatically retries failed webhook deliveries:
  • Max retries: 3 attempts
  • Backoff: Exponential (1s, 4s, 9s)
  • Timeout: Configurable per-request (default 10s)
All retry attempts are logged in the audit trail.

Troubleshooting

  1. Verify webhook URL is correct:
  1. Check Station logs:
  1. Check audit logs:
Check the audit log for the response body:
  1. Verify Station is accessible from where approvals happen
  2. Check approval hasn’t expired: stn workflow approvals get appr-xxx
  3. Check approval wasn’t already decided
  1. Check workflow run status: stn workflow runs get run-xyz --steps
  2. Check NATS is running: stn status
  3. Check logs for errors

Security Considerations

Always use HTTPS for webhook URLs in production to protect approval payloads.

Recommendations

  1. Use HTTPS - Encrypt webhook traffic
  2. Protect approval API - Run Station on internal network or use authentication
  3. Audit retention - Configure log retention for compliance
  4. Validate approvers - Use the approvers field to restrict who can approve

Comparison: Notifications vs Approval Webhooks

Next Steps