FreqDroid supports two ways to deliver push notifications. Pick whichever fits your workflow.
| ntfy | FCM via push.freqdroid.com | |
|---|---|---|
| Setup | Self-host an ntfy server | Just register in the app |
| Battery | Foreground service or polling | Real push, no service or polling |
| Latency | Instant (Live) or up to interval | Instant |
| Platforms | Android + iOS | Android (iOS coming) |
| Encryption in transit | TLS to your server | TLS + per-device sealed-box ciphertext through Google FCM |
| Trading data leaves your network | Yes (to your ntfy) | Yes (to push.freqdroid.com → Google FCM, encrypted) |
Self-host an ntfy server, point FreqTrade webhooks at your topics, subscribe from the app. Works on Android and iOS.
Register the device in the app, point FreqTrade webhooks at your unique relay URL. No server to run. Android only for now.
Optional add-on for richer exit messages — profit-based emoji, partial-fill handling, trade duration. Works with both transports.
Both transports route through FreqTrade’s webhook block in config.json. FreqTrade fires one of these event types per notification, and you template the body for each one separately. Any event not listed in your webhook block is silently dropped.
| Event | Fires when | Useful template tokens |
|---|---|---|
entry | Entry order placed | {trade_id}, {pair}, {direction}, {open_rate}, {stake_amount}, {stake_currency}, {enter_tag} |
entry_fill | Entry order filled | same as entry |
entry_cancel | Entry order cancelled | {trade_id}, {pair}, {reason} |
exit | Exit order placed | {trade_id}, {pair}, {limit}, {exit_reason}, {profit_amount}, {profit_ratio} |
exit_fill | Exit order filled | same as exit |
exit_cancel | Exit order cancelled | {trade_id}, {pair}, {reason} |
protection_trigger | Per-pair protection activated | {pair}, {reason}, {lock_end_time} |
protection_trigger_global | Global protection activated (all pairs) | {reason}, {lock_end_time} |
status | Bot state change (running, stopped, process died) | {status} |
startup | Bot startup info (exchange, ROI, pairlist, protections) | {status} |
warning | Non-fatal warnings | {status} |
exception | Exceptions raised during operation | {status} |
strategy_msg | Custom messages from dp.send_msg() in the strategy | {msg} |
strategy_msgrequires"allow_custom_messages": trueat the top of thewebhookblock. Without that flag, FreqTrade silently drops everydp.send_msg()call instead of dispatching it as a webhook.
startup/warning/exceptionfall through to thewebhookstatuskey by default in FreqTrade. Defining them as explicit unprefixed keys (as in the setup-page examples) bypasses that fallback so each gets its own template.
#{trade_id}in the body enables tap-to-navigate. FreqDroid scans the message text for#<number>and uses it to deep-link straight to the trade detail screen.