Apprise API, Ported to Go
  • Go 99.5%
  • Makefile 0.5%
Find a file
Nebel 4b2ae8c485
All checks were successful
mirror / github (push) Successful in 13s
test / main (push) Successful in 4s
Update module github.com/unraid/apprise-go to v0.2.8
2026-07-05 06:00:36 +00:00
.forgejo/workflows Add mirror target for tangled.org 2026-06-29 20:53:25 +09:00
.github/workflows add github release workflow 2026-06-09 00:22:04 +09:00
internal stateless 2026-06-07 21:05:30 +09:00
testdata create apprize project 2026-06-07 20:55:31 +09:00
.gitignore stateless 2026-06-07 21:05:30 +09:00
go.mod Update module github.com/unraid/apprise-go to v0.2.8 2026-07-05 06:00:36 +00:00
go.sum Update module github.com/unraid/apprise-go to v0.2.8 2026-07-05 06:00:36 +00:00
goreleaser.yml goreleaser config to version 2 2026-06-09 00:24:54 +09:00
LICENSE create apprize project 2026-06-07 20:55:31 +09:00
main.go stateless 2026-06-07 21:05:30 +09:00
Makefile create apprize project 2026-06-07 20:55:31 +09:00
mise.toml create apprize project 2026-06-07 20:55:31 +09:00
README.md use ntfys scheme 2026-06-09 00:21:35 +09:00
renovate.json add test workflow and update renovate config 2026-06-07 21:39:13 +09:00

Apprize

A drop-in, single-binary reimplementation of the caronc/apprise-api HTTP API in Go. Speaks the same stateless routes and response shapes as Apprise API swagger.yaml v1.5.0, backed by unraid/apprise-go for delivery — pure Go, no cgo, no Python runtime.

Quick start

Start the server:

docker run --rm -p 8000:8000 fogtype/apprize

Send a notification:

# ntfy - watch it land at https://ntfy.sh/apprize-demo
curl localhost:8000/notify \
  -d 'urls=ntfys://apprize-demo' \
  -d body=hello

# email - needs real SMTP credentials
curl localhost:8000/notify \
  -d 'urls=mailtos://user:pass@gmail.com' \
  -d body=hello

other services

Install

# Docker
docker run --rm -p 8000:8000 fogtype/apprize

# Podman
podman run --rm -p 8000:8000 fogtype/apprize

# Go
go install git.fogtype.com/nebel/apprize@latest
apprize --bind :8000

# Build from source
git clone https://git.fogtype.com/nebel/apprize
cd apprize
go build
./apprize --bind :8000

Docker Compose

# compose.yml
services:
  apprize:
    image: fogtype/apprize
    restart: unless-stopped
    ports:
      - "8000:8000"
docker compose up -d

Configuration

Flags override environment variables. Names use the APPRIZE_ prefix; the upstream HTTP_PORT is also honoured for the listen port.

Env Flag Default Purpose
APPRIZE_BIND (or HTTP_PORT) --bind :8000 Listen address
APPRIZE_API_KEY --api-key (none) Enables simple auth only when set
APPRIZE_STATELESS_URLS (none) Default URLs for POST /notify
APPRIZE_RECURSION_MAX 1 Inbound recursion limit
APPRIZE_DENY_SERVICES (none) Schemas to reject (comma/space separated)
APPRIZE_ALLOW_SERVICES (none) Allow-list of schemas (exclusive when set)

API

Method & path Purpose
GET /status Server status
GET /details Version and supported schemas
POST /notify Stateless notification

Limitations

apprize intentionally diverges from upstream where apprise-go cannot match it, and omits the persistent-configuration half of the API entirely:

  • No persistent config endpoints/add, /del, /get, /cfg, POST /notify/{key}, and GET /json/urls/{key} are not implemented. There is no storage layer; the server is fully stateless.
  • Attachments are not delivered — accepted then logged as unsupported; /status reports attach_lock=true.
  • No recursion-header propagation — inbound X-Apprise-Recursion-Count is enforced, but it is not injected into outbound requests.
  • /details is simplified — returns supported schemas and version, not per-service templates.
  • No web UI — API only.

License

GNU AGPL-3.0

Acknowledgements