Webhooks reference
Receive Tradient alert events as JSON POSTs to a URL you control — for Slack, Discord, Zapier, or your own bot.
Email is the default delivery channel for alerts, but Tradient also supports webhooks. Configure a URL on your alert and Tradient will POST a JSON payload to that URL every time the alert fires. This is how you wire Tradient into Slack, Discord, Zapier, or any custom bot or dashboard.
Configuring a webhook
- Open the alert in Alerts settings.
- Set delivery channel to Webhook.
- Paste your URL.
- (Optional) Set a shared secret for signature verification.
- Click “Send test” to verify reachability.
- Save.
From this point on, every alert firing generates a POST to your URL.
The payload
POST /your-webhook-url
Content-Type: application/json
X-Tradient-Signature: sha256=<hmac of body with your shared secret>
{
"event": "alert.fired",
"timestamp": "2026-04-07T14:32:11Z",
"alert": {
"id": "alt_4b8c...",
"name": "SPY iron condors 70+ score",
"frequency": "daily",
"threshold_kind": "top_score_gte",
"threshold_value": 70
},
"scan": {
"id": "scn_91ee...",
"name": "SPY iron condors 70+ score",
"strategy": "iron_condor"
},
"trigger": {
"result_count": 4,
"previous_count": 2,
"top_score": 73.4,
"previous_top_score": 68.1
},
"top_results": [
{
"symbol": "SPY",
"strategy": "iron_condor",
"score": 73.4,
"pop": 0.78,
"credit": 0.92,
"max_loss": 408,
"expiration": "2026-05-15",
"deep_link": "https://tradient.app/radar/scn_91ee..."
}
]
}Field reference
- event — always “alert.fired” for now. Future event types will use the same envelope.
- timestamp — ISO 8601 UTC of when the alert fired.
- alert — the alert that triggered.
- scan — the saved scan the alert is attached to.
- trigger — the diff between the current snapshot and the previous one. Always populated.
- top_results — up to 5 of the best-scoring results from the snapshot, with deep links back to Radar.
Signature verification
If you set a shared secret, Tradient signs the body with HMAC-SHA256 and includes the signature in the X-Tradient-Signature header. To verify on your side:
# Python
import hmac, hashlib
expected = "sha256=" + hmac.new(
secret.encode(),
request.body,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, request.headers["X-Tradient-Signature"]):
abort(401)Always verify on production endpoints. Anyone who knows your webhook URL could otherwise POST fake events to it.
Retry behavior
- On non-2xx responses or timeouts, Tradient retries up to 3 times with exponential backoff (10s, 60s, 300s).
- After 3 failures, the alert is marked “delivery degraded” and you get an email notification. The alert remains active.
- After 10 consecutive failures, the alert is auto-paused and you get a second email asking you to fix the URL.
Common integrations
Slack
Use a Slack incoming webhook URL. Slack expects a { "text": "..." }body, so you’ll need a small adapter (a Cloudflare Worker or AWS Lambda) to translate Tradient’s payload into Slack’s format. Or use Zapier as a no-code adapter.
Discord
Same story — Discord webhooks accept { "content": "..." } bodies. Use the same adapter pattern.
Custom bot
If you’re building your own automation, point Tradient directly at your bot’s ingest endpoint. The full result payload is in the body — you don’t need to re-fetch from Tradient.