A thin Vercel proxy in front of the Telegram Bot API.
Status: checking…
GET /api/health — liveness checkGET /api — endpoint index (JSON)POST /api/send — send via server-side token{ "chat_id": "…", "text": "…" } (chat_id optional when a default is configured). Optional method field or ?method= for other Bot API methods. Send secret via x-proxy-secret header when configured./api/bot<token>/<method> — transparent proxy, drop-in for api.telegram.orgPOST /api/generic — Shoutrrr generic webhook receivertext/plain (no template) or template=json ({"{"}title, message{"}"}). Chat via ?chat_id= query (forwarded by Shoutrrr), $chat_id JSON field, or server default. Secret via x-proxy-secret header when configured.shoutrrr send -u 'generic://$PROXY_HOST/api/generic?chat_id=$CHAT_ID' 'hello' shoutrrr send -u 'generic://$PROXY_HOST/api/generic?template=json&chat_id=$CHAT_ID' 'hello'
When DEFAULT_CHAT_ID is set, chat_id is optional — omit it to use the default, or pass a custom one to override it:
# uses DEFAULT_CHAT_ID (no chat_id sent) shoutrrr send -u 'generic://$PROXY_HOST/api/generic?template=json' 'hello' # overrides DEFAULT_CHAT_ID via forwarded query var ... shoutrrr send -u 'generic://$PROXY_HOST/api/generic?template=json&chat_id=123456' 'hello' # ... or via extra JSON data field ($chat_id lands in the JSON body) shoutrrr send -u 'generic://$PROXY_HOST/api/generic?template=json&$chat_id=123456' 'hello'
curl -X POST "$PROXY_URL/api/send" \
-H "Content-Type: application/json" \
-H "x-proxy-secret: $PROXY_SECRET" \
-d '{"text":"deploy succeeded"}'
When DEFAULT_CHAT_ID is set, chat_id can be omitted (uses the default) or passed to override it:
curl -X POST "$PROXY_URL/api/send" \
-H "Content-Type: application/json" \
-d '{"chat_id":"123456","text":"custom chat override"}'