HTTPie
HTTPie (http command) uses Header:Value syntax for headers and reads the body from stdin with < or via echo/pipe.
Examples
# normal success
echo 'Finished refactoring the auth middleware in rumilo. Session validation is cleaner now and all tests pass.' | \
http POST "https://ntfy.sh/$NTFY_TOPIC_LLM" \
"Authorization:Bearer $NTFY_ACCESS_TOKEN" \
"Title:Refactored authentication middleware in rumilo" \
"Tags:hammer_and_wrench"
# success with a relevant click URL
echo 'Bumped the kagi-ken AUR package to v0.4.2 and updated the checksums.' | \
http POST "https://ntfy.sh/$NTFY_TOPIC_LLM" \
"Authorization:Bearer $NTFY_ACCESS_TOKEN" \
"Title:Updated AUR package for kagi-ken" \
"Tags:package" \
"Click:https://aur.archlinux.org/packages/kagi-ken"
# something went wrong
echo 'Ran into a full disk on the build server while compiling pi-mono. /var/log looks like it needs rotation. The build is blocked until there is space.' | \
http POST "https://ntfy.sh/$NTFY_TOPIC_LLM" \
"Authorization:Bearer $NTFY_ACCESS_TOKEN" \
"Title:Build failed in pi-mono — disk full" \
"Tags:rotating_light" \
"Priority:4"
# urgent failure
echo 'The primary Postgres instance stopped responding during a migration. Rolled back what we could, but the app is down.' | \
http POST "https://ntfy.sh/$NTFY_TOPIC_LLM" \
"Authorization:Bearer $NTFY_ACCESS_TOKEN" \
"Title:Production database unreachable" \
"Tags:sos" \
"Priority:5"