Environment
Variables the API reads
Copy apps/api/.env.example to apps/api/.env and fill in the values. The names live in apps/api/.env.schema.
Required
| Variable | Purpose |
|---|---|
WEBHOOK_INTEGRATION_SECRET | Signing secret from the Vercel webhook |
Destinations
Set any combination. A blank value is off.
| Variable | Destination |
|---|---|
DISCORD_WEBHOOK_URL | Discord channel webhook |
DISCORD_WEBHOOK_USERNAME | Display name. Defaults to Versend |
DISCORD_WEBHOOK_AVATAR_URL | Avatar. Defaults to the Vercel mark |
TELEGRAM_BOT_TOKEN | Bot token from BotFather |
TELEGRAM_CHAT_ID | Your user id, or a group or channel id. See Telegram |
SLACK_WEBHOOK_URL | Incoming webhook. See Slack |
NTFY_URL | Topic URL. See ntfy |
NTFY_TOKEN | Bearer token for a protected topic. Optional |
GOTIFY_URL | Server URL, with no path. See Gotify |
GOTIFY_TOKEN | Application token |
Telegram needs the token and the chat id. Gotify needs the server and the token.
Filters
Leave these empty to accept every event and every deployment target.
| Variable | Behavior |
|---|---|
FILTER_EVENTS | Allowlist. Example: deployment.error,deployment.succeeded |
FILTER_EVENTS_EXCLUDE | Denylist. Wins over the allowlist |
FILTER_TARGETS | production, preview, or both. Applies to deployment.* only |
Rate limit
| Variable | Default |
|---|---|
RATE_LIMIT_REQUESTS | 60 |
RATE_LIMIT_WINDOW_SECONDS | 60 |
Set RATE_LIMIT_REQUESTS=0 to turn the limit off. The count stays in the process that received the request.