Docs

Ping the URL when the job finishes.

Create a monitor, then call its ping URL when the job finishes. Replace TOKEN with the token on the monitor page. Check-ins accept /ok, /fail, /start, and /progress, or a JSON body.

curl

# After the job, report success or failure using the exit code:
curl -fsS -m 10 --retry 3 https://stallbell.com/p/TOKEN/$?

Python

import os, urllib.request
status = "ok" if os.environ.get("EXIT_CODE", "0") == "0" else "fail"
urllib.request.urlopen("https://stallbell.com/p/TOKEN/" + status, timeout=10).read()

JavaScript

const status = process.exitCode ? "fail" : "ok";
await fetch("https://stallbell.com/p/TOKEN/" + status, { method: "POST" });

GitHub Actions

- name: Tell Stallbell
  if: always()
  run: |
    STATUS="${{ job.status == 'success' && 'ok' || 'fail' }}"
    curl -fsS -m 10 --retry 3 -X POST "https://stallbell.com/p/TOKEN/$STATUS" \
      -H 'content-type: application/json' \
      -d '{"msg":"${{ github.workflow }}"}'

n8n

Import n8n-stallbell.json and set the HTTP node URL to your ping URL. Import n8n-stallbell-error.json as the error workflow so a crashed run still checks in as a failure. Replace stallbell.com if your app URL is different.

Signed webhooks

Outbound alerts use Stallbell-Signature: t=unix,v1=hex. The hex is HMAC-SHA256 of t.body with the channel secret shown in the dashboard. Stallbell does not follow redirects.

Stallbell