The Edgeable Signal API allows authorised users to fire a trade signal directly to their Edgeable account via a single HTTP POST. When a signal is received the system executes the order on your leader account and simultaneously on all configured follower accounts — no copier polling delay, instant multi-account execution.
API Access: Your token is active only after an admin enables API access for your account. Contact your admin or email [email protected] to request access.
Your token is the long hex string in your webhook URL. It is unique to your account and acts as both your identity and authentication. Treat it like a password — never share it publicly.
Your full webhook URL including your token is shown in the Integrations panel of the Edgeable Syncer desktop app. You can also retrieve it via the authenticated API:
GET /api/integrations
Authorization: X-Auth-Token {your_session_token}
// Response
{
"ok": true,
"webhook_url": "https://your-server.com/webhook/abc123def456...",
"webhook_path": "/webhook/abc123def456..."
}
Send a JSON body to this URL. The {token} in the URL is your unique API token (see above). No additional headers or auth keys are required — the token in the URL authenticates the request.
Content-Type: application/json| Field | Type | Description |
|---|---|---|
| actionrequired | string | Must be "ENTRY". Any other value is silently ignored (useful for filtering TradingView alerts). |
| directionrequired | string | "bullish" places a Buy. "bearish" places a Sell. |
| instrumentrequired | string | Instrument key. Supported: "NQ" / "MNQ" (NQ family) or "GC" / "MGC" (Gold family). Case-insensitive. |
| stopoptional | number | Stop-loss price. If provided, a bracket stop order is placed via the v1 API after the market entry fills. |
| tp1optional | number | Take-profit 1 price. Placed as a limit order bracket after entry fills. |
| targetoptional | number | Take-profit 2 price (alias: tp2 or app_target). Requires two-TP mode configured in your account settings. |
| regimeSuppressedoptional | boolean | If true, the signal is silently skipped. Useful when your strategy has a regime filter. |
| appLevelsoptional | object | Object containing sl_recommended, sl_tight, tp1, tp2. Used when levels come from the Edgeable Analyser app format. |
| _field_mapoptional | object | Inline field name remapping for this request only: {"myDir": "direction", "myInst": "instrument"}. Permanent mappings can be saved in the desktop app. |
Order sizing is controlled by your account settings (order_qty), not the signal payload. To change contract size, update your settings in the desktop app.
{
"ok": true,
"leader": {
"market": { "orderId": "123456", "status": "Filled" },
"stop": { "orderId": "123457", "status": "Working" },
"take_profit_1": { "orderId": "123458", "status": "Working" }
},
"followers": [
{
"market": { "orderId": "789012", "status": "Filled" }
}
],
"follower_errors": null
}
{
"ok": true,
"skipped": true,
"reason": "filtered" // action != ENTRY or regimeSuppressed = true
}| 200 | Signal received and processed (or filtered). Check ok field. |
| 400 | Invalid payload — missing required field, unknown instrument, or malformed JSON. |
| 403 | API access not enabled for this account. Contact your admin. |
| 404 | Unknown token — double-check your webhook URL. |
| 500 | Execution error — check your broker connection and account configuration. |
curl -X POST https://your-server.com/webhook/YOUR_TOKEN \ -H "Content-Type: application/json" \ -d '{ "action": "ENTRY", "direction": "bullish", "instrument": "NQ" }'
curl -X POST https://your-server.com/webhook/YOUR_TOKEN \ -H "Content-Type: application/json" \ -d '{ "action": "ENTRY", "direction": "bearish", "instrument": "NQ", "stop": 21350.00, "tp1": 21100.00 }'
import requests WEBHOOK_URL = "https://your-server.com/webhook/YOUR_TOKEN" payload = { "action": "ENTRY", "direction": "bullish", # or "bearish" "instrument": "NQ", "stop": 21350.00, # optional SL "tp1": 21100.00, # optional TP1 } r = requests.post(WEBHOOK_URL, json=payload, timeout=10) r.raise_for_status() print(r.json())
In your TradingView alert, set the Webhook URL to your Edgeable webhook URL and the Message body to:
{
"action": "ENTRY",
"direction": "{{strategy.order.action == 'buy' ? 'bullish' : 'bearish'}}",
"instrument": "NQ",
"stop": {{strategy.position_entry_price}},
"regimeSuppressed": false
}
TradingView tip: Use the alert condition (not strategy alert) with action: "ENTRY" only on your entry signals. Non-ENTRY payloads are silently skipped, so it's safe to fire the webhook on every bar — only entries will execute.
If your alert source uses different field names, pass a _field_map to remap them inline:
{
"_field_map": {
"type": "action",
"side": "direction",
"ticker": "instrument"
},
"type": "ENTRY",
"side": "bullish",
"ticker": "NQ"
}
Permanent field maps can be saved in the desktop app under Integrations → Field Map so you don't need to include _field_map in every request.
When a valid signal is received the following happens in order, synchronously within the same HTTP request:
api_enabled flag is checked.action, direction, instrument are resolved. Regime filter checked.follower_errors but do not fail the overall request.HTTP timeout: The request is synchronous and waits for all executions to complete. Set your HTTP client timeout to at least 15 seconds to account for SL/TP bracket placement and follower execution.
API access is off by default for all users. Admins can enable or revoke it via the admin API:
POST /api/admin/users/{user_id}/api-access X-Auth-Token: {admin_token} Content-Type: application/json { "enabled": true } // Response { "ok": true, "user_id": 42, "api_enabled": true }
POST /api/admin/users/{user_id}/api-access { "enabled": false }
GET /api/admin/users X-Auth-Token: {admin_token} // Response { "ok": true, "users": [ { "id": 42, "email": "[email protected]", "api_enabled": true, "webhook_token": "abc123def456...", "billing_plan": "pro", "billing_status": "active" } ] }
Admin auth: Admin API calls require an X-Auth-Token header with a valid session token belonging to a user with is_admin = true. Obtain your session token from the /api/auth/login response.
action: "ENTRY" signals place orders. Exit management (SL/TP) is handled via bracket orders placed at entry time.follower_errors for partial failures.If your signal isn't executing, check:
action field is exactly "ENTRY" (case-sensitive)Still stuck? Email [email protected] with your user ID and a copy of the response body.