W
Webhook API
v1.2.0
No coding needed

Start Here — The Simple Explanation

A webhook is a delivery address: you give Finradar a link, and every event — new setup, trigger, close — is sent there instantly. Discord, Zapier, Google Sheets, your own server.

📱

Setup happens in the app: PnL Calendar page → webhook settings. No code needed.

Example: get every signal in your Discord server (3 steps)

1

Create a Discord webhook

In your Discord server: Server Settings → Integrations → Webhooks → New Webhook. Pick the channel and press "Copy Webhook URL". That link is your delivery address.

2

Paste it into Finradar

Open the Finradar app, go to the PnL Calendar page, open webhook settings, and paste the link. Webhooks are a premium feature.

3

Done — messages arrive by themselves

The next time the AI finds or triggers a trade, the full details appear in your Discord channel within seconds. Nothing to refresh, nothing to run.

Jargon translator

Webhook / EndpointThe address (link) where messages get delivered.
Payload / JSONThe message itself — a structured list of the trade details (symbol, direction, prices…).
POSTThe technical way of saying "we send the message to your address" (instead of you fetching it).
EventThe reason a message was sent: a new setup was found, a trade triggered, or a trade closed.
Timeout (5 seconds)If your address doesn’t answer within 5 seconds, we stop waiting so nothing else gets delayed.

Prefer the friendly overview with visuals? See the Webhooks page.

🛠️

Below this line: the technical reference for developers.

Webhook Notifications

Receive real-time updates for trading setups and triggers.

Method
POST
Content-Type
application/json
Timeout
5 seconds

The system sends webhook notifications for two types of events:

  • New Setup Detected: When a new trading setup is identified (via Realtime or Polling).
  • Setup Triggered: When a setup's price conditions are met (Entry Trigger).
  • Setup Closed: When a setup is closed or invalidated, optionally triggering a MetaCopier close action.

Config Endpoint

POST/webhook/config

Register or update a webhook configuration for a user, including notification endpoints, premium status, and optional MetaCopier trade-copying credentials.

💡

Manage your config inside the app

You can view and update all these webhook settings directly from the PnL Calendar page inside the app — no API call needed.

Request Body
{
  "user_id": "string",                             // Superwall User ID (required)
  "new_setup_notification_endpoint": "string",     // URL for new setup alerts (required)
  "setup_trigger_notification_endpoint": "string", // URL for trigger alerts (required)
  "is_premium": boolean,                           // Premium status gatekeeper (required)
  "metacopier_webhook_url": "string",              // MetaCopier webhook URL (optional)
  "metacopier_secret": "string",                   // MetaCopier secret key (optional)
  "metacopier_enabled": boolean,                   // Enable trade copying (optional)
  "send_new_setup_events": boolean,                // Route new setup events (default: true)
  "send_trigger_events": boolean,                  // Route trigger events (default: true)
  "send_close_events": boolean                     // Route close events (default: true)
}

Field Descriptions

FieldTypeRequiredDescription
user_idstringYesUnique identifier for the user (from Superwall).
new_setup_notification_endpointstringYesURL where new trade setup notifications are sent (e.g. Discord webhook).
setup_trigger_notification_endpointstringYesURL where setup trigger notifications are sent.
is_premiumbooleanYesPremium status gatekeeper — webhooks are only dispatched when true.
metacopier_webhook_urlstringNoMetaCopier webhook URL for routing trade actions automatically.
metacopier_secretstringNoMetaCopier secret for webhook authentication. Required when metacopier_enabled is true.
metacopier_enabledbooleanNoEnables MetaCopier auto-trade routing when true and credentials are present.
send_new_setup_eventsbooleanNoWhen false, new setup events are not routed to MetaCopier. Defaults to true.
send_trigger_eventsbooleanNoWhen false, trigger events are not routed to MetaCopier. Defaults to true.
send_close_eventsbooleanNoWhen false, close events are not routed to MetaCopier. Defaults to true.
🔁

MetaCopier → Trade Copier

/trade-copier/docs →

Payload Structure

All webhooks share a consistent JSON structure.

JSON Schema
{
  "event_type": "string",              // "new_setup", "trigger", or "close"
  "setup_id": "string",
  "symbol": "string",
  "direction": "string",              // "buy" or "sell"
  "entry_zone": [float, float],
  "stop_loss": float,
  "tp1": float,
  "tp2": float,
  "current_price": float,
  "timestamp": "iso-string",
  "confidence": "string",             // optional
  "confidence_score": "string",       // optional
  "timeframe": "string",              // optional
  "strategy": "string",               // optional
  "rr_ratio": "string",               // optional
  "pattern": "string",                // optional
  "indicators": "string",             // optional
  "price_action_summary": "string",   // optional
  "company_name": "string"            // optional
}

Field Descriptions

Fields marked with * are optional — they are included when available and omitted if not.

FieldTypeDescription
event_typestring"new_setup", "trigger", or "close"
setup_idstringThe unique ID of the trading setup from the database.
symbolstringThe asset symbol (e.g., XAUUSD, BTCUSD).
directionstringbuy (Long) or sell (Short).
entry_zone[float]A list of two floats representing the entry price range.
stop_lossfloatThe invalidation price level.
tp1floatFirst take profit target.
tp2floatSecond take profit target.
current_pricefloatThe market price when the notification was generated. For trigger events, this is the trigger price.
timestampstringExact time of the event in UTC ISO 8601 format.
confidencestring*AI confidence label: "High", "Medium", or "Low".
confidence_scorestring*Numeric confidence score, e.g. "82%".
timeframestring*Chart timeframe, e.g. "M15", "H1", "H4", "D1".
strategystring*Strategy type, e.g. "Breakout", "Mean Reversion".
rr_ratiostring*Risk/Reward ratio to TP1, e.g. "1:2.5".
patternstring*Chart pattern detected, e.g. "Bull Flag".
indicatorsstring*Summary of technical indicators supporting the setup.
price_action_summarystring*AI-generated thesis describing the reasoning behind the setup.
company_namestring*Full company name for the symbol (e.g. "Apple Inc.").

Examples

New Setup
Sent when the AI/Algorithm detects a potential trade setup.
Payload
{
  "event_type": "new_setup",
  "setup_id": "550e8400-e29b-41d4-a716-446655440000",
  "symbol": "BTCUSD",
  "direction": "buy",
  "entry_zone": [95000.0, 95500.0],
  "stop_loss": 94000.0,
  "tp1": 97000.0,
  "tp2": 100000.0,
  "current_price": 95120.50,
  "timestamp": "2024-12-26T12:00:00.000000+00:00",
  "confidence": "High",
  "confidence_score": "82%",
  "timeframe": "H1",
  "strategy": "Breakout",
  "rr_ratio": "1:2.5",
  "pattern": "Bull Flag",
  "indicators": "RSI above 50, MACD bullish crossover, Volume spike",
  "price_action_summary": "Price broke above key resistance at 95000 on strong volume.",
  "company_name": "Bitcoin"
}
Trigger Notification
Sent when price entering entry zone and the setup is "triggered".
Payload
{
  "event_type": "trigger",
  "setup_id": "550e8400-e29b-41d4-a716-446655440000",
  "symbol": "BTCUSD",
  "direction": "buy",
  "entry_zone": [95000.0, 95500.0],
  "stop_loss": 94000.0,
  "tp1": 97000.0,
  "tp2": 100000.0,
  "current_price": 95050.00,
  "timestamp": "2024-12-26T12:15:30.123456+00:00",
  "confidence": "High",
  "confidence_score": "82%",
  "timeframe": "H1",
  "strategy": "Breakout",
  "rr_ratio": "1:2.5",
  "pattern": "Bull Flag",
  "indicators": "RSI above 50, MACD bullish crossover, Volume spike",
  "price_action_summary": "Price broke above key resistance at 95000 on strong volume.",
  "company_name": "Bitcoin"
}
Close
Sent when a setup is closed or invalidated.
Payload
{
  "event_type": "close",
  "setup_id": "550e8400-e29b-41d4-a716-446655440000",
  "symbol": "BTCUSD",
  "direction": "buy",
  "entry_zone": [95000.0, 95500.0],
  "stop_loss": 94000.0,
  "tp1": 97000.0,
  "tp2": 100000.0,
  "current_price": 93800.00,
  "timestamp": "2026-05-13T14:00:00.000000+00:00",
  "confidence": "High",
  "confidence_score": "82%",
  "timeframe": "H1",
  "strategy": "Breakout",
  "rr_ratio": "1:2.5",
  "pattern": "Bull Flag",
  "indicators": "RSI above 50, MACD bullish crossover, Volume spike",
  "price_action_summary": "Setup invalidated — price broke below stop loss at 94000.",
  "company_name": "Bitcoin"
}