AlphornAlphorn Docs

Integrations

Send notifications to Alphorn from popular tools and services.

Alphorn accepts standard HTTP webhooks, so it works with any tool that can send an HTTP request. This page shows how to connect popular services to Alphorn as notification sources.

For channel destinations (where Alphorn delivers notifications), see Channels.

Monitoring

Grafana

Grafana supports webhook contact points natively. Send alerts directly to Alphorn.

  1. In Grafana, go to Alerting → Contact points
  2. Click Add contact point
  3. Select Webhook as the type
  4. Set the URL to your Alphorn webhook URL
  5. Set method to POST

Grafana sends a JSON payload with alert details. Alphorn receives it in the message field. For richer notifications, use a Grafana notification template to format the body as an Alphorn-compatible JSON payload:

{
  "title": "{{ .CommonLabels.alertname }}",
  "message": "{{ .CommonAnnotations.summary }}",
  "priority": 4,
  "tags": ["grafana", "alert"]
}

Prometheus Alertmanager

Configure a webhook receiver in your Alertmanager config:

alertmanager.yml
receivers:
  - name: alphorn
    webhook_configs:
      - url: "https://app.alphorn.dev/api/webhooks/wh_abc123"
        send_resolved: true

Uptime Kuma

See the dedicated Uptime Monitoring use case for setup instructions, including custom body templates for priority-based routing.

Healthchecks.io

  1. In your Healthchecks.io project, go to Integrations
  2. Add a Webhook integration
  3. Set the URL to your Alphorn webhook URL
  4. Set the request body to:
{
  "title": "$NAME is $STATUS",
  "message": "Check $CODE: $STATUS. Tags: $TAGS",
  "priority": 5,
  "tags": ["healthchecks", "$TAG1"]
}

Gatus

Gatus has native webhook alerting:

gatus-config.yaml
alerting:
  webhook:
    url: "https://app.alphorn.dev/api/webhooks/wh_abc123"
    method: POST
    body: |
      {
        "title": "[ENDPOINT_NAME] is [ALERT_TRIGGERED_OR_RESOLVED]",
        "message": "[ENDPOINT_GROUP] — [ENDPOINT_URL]",
        "priority": 5,
        "tags": ["gatus", "uptime"]
      }

CI/CD

GitHub Actions

See the CI/CD Pipelines use case for full GitHub Actions and GitLab CI examples.

GitLab CI

See the CI/CD Pipelines use case.

Jenkins

Add a post-build step using curl:

Jenkinsfile
pipeline {
  stages {
    stage('Build') {
      steps { sh 'make build' }
    }
  }
  post {
    failure {
      sh '''
        curl -s -X POST "$ALPHORN_WEBHOOK" \
          -H "Content-Type: application/json" \
          -d '{
            "title": "Jenkins build failed",
            "message": "'"$JOB_NAME"' #'"$BUILD_NUMBER"' — '"$BUILD_URL"'",
            "priority": 5,
            "tags": ["ci", "jenkins", "failure"]
          }'
      '''
    }
  }
}

Infrastructure

Docker / Watchtower

Watchtower can send webhook notifications when containers are updated:

docker-compose.yml
services:
  watchtower:
    image: containrrr/watchtower
    environment:
      WATCHTOWER_NOTIFICATION_URL: "generic+https://app.alphorn.dev/api/webhooks/wh_abc123"

Or use a shoutrrr generic webhook URL.

Ansible

Send notifications from Ansible playbooks using the uri module:

playbook.yml
- name: Notify Alphorn
  uri:
    url: "{{ alphorn_webhook }}"
    method: POST
    body_format: json
    body:
      title: "Playbook completed: {{ ansible_play_name }}"
      message: "Deployed to {{ inventory_hostname }}"
      priority: 2
      tags:
        - ansible
        - deploy

Terraform

Use a null_resource with a local-exec provisioner:

main.tf
resource "null_resource" "notify" {
  depends_on = [aws_instance.web]

  provisioner "local-exec" {
    command = <<EOT
      curl -s -X POST "$ALPHORN_WEBHOOK" \
        -H "Content-Type: application/json" \
        -d '{"title":"Infrastructure updated","message":"Terraform apply completed","priority":2,"tags":["terraform","infra"]}'
    EOT
  }
}

Home Automation

Home Assistant

Use the RESTful notification integration:

configuration.yaml
notify:
  - name: alphorn
    platform: rest
    resource: "https://app.alphorn.dev/api/webhooks/wh_abc123"
    method: POST
    headers:
      Content-Type: application/json
    data:
      title: "{{ title }}"
      message: "{{ message }}"
      priority: 3
      tags:
        - homeassistant

Then use it in automations:

automation:
  - trigger:
      platform: state
      entity_id: binary_sensor.front_door
      to: "on"
    action:
      service: notify.alphorn
      data:
        title: "Front door opened"
        message: "Front door opened at {{ now().strftime('%H:%M') }}"

Node-RED

Use an HTTP Request node:

  1. Add an HTTP Request node
  2. Set method to POST
  3. Set URL to your Alphorn webhook URL
  4. Set Content-Type to application/json in headers
  5. Connect a Function node before it to format the payload:
msg.payload = {
  title: "Node-RED Alert",
  message: msg.payload.toString(),
  priority: 3,
  tags: ["nodered"],
};
return msg;

Media Servers

Sonarr / Radarr / Lidarr

These tools support webhook notifications:

  1. Go to Settings → Connect
  2. Add a Webhook connection
  3. Set the URL to your Alphorn webhook URL
  4. Select which events to trigger on (grab, download, rename, etc.)

The raw payload is forwarded as the message body. Alphorn receives it and routes to your configured channels.

Jellyfin / Jellyseerr

Configure a webhook notification in the Jellyseerr settings pointing to your Alphorn webhook URL.

Programming Languages

Any HTTP client can send to Alphorn. See the API Reference for examples in curl, JavaScript, Python, Go, PHP, and Ruby.

Not seeing your tool?

Alphorn accepts any HTTP POST request. If a service supports webhooks, outgoing notifications, or custom HTTP integrations, it can send to Alphorn. Use the Webhook integration and point it at your Alphorn webhook URL.

If you've set up an integration not listed here, open a PR to add it to this page.

On this page