Documentation / Signal providers
Signal providers
Three different inbound doors. Pick the one that matches the job. Do not post a marketplace signal to a personal bot URL.
1. Your Nexus bot
One account. Copy the URL from Nexus bot → Modules. Anyone with the UUID can submit alerts for that account.
POST https://nexus.mrtrades.com/webhook/<uuid>
Content-Type: application/json
{"action":"LONG","symbol":"BTCUSDT","sl":64000,"tp":67000,"leverage":3,"reason":"tv_alert"}
Full Nexus webhook docs
2. Portal ticker alerts
Flash or overlay on your Desk Ticker. Create a key in Portal → Tickers. POST to /v1/alerts/inbound with X-Webhook-Token, or use the URL that already includes the token. HMAC is optional — turn it on when you create the key.
POST https://app.mrtrades.com/v1/alerts/inbound
Content-Type: application/json
X-Webhook-Token: <token from Portal>
3. Published webhook strategy
You create a strategy on MrTrades. An outside system (TradingView, your bot, an LLM) POSTs a trigger. We size the ticket, attach stops, and run it through the same desk protections. Followers use their own account — not a copy of your fills. HMAC is required. Create the listing in Portal → Strategies, set size / stops / leverage / trail there, create the token and signing secret once, then list it if you want subscribers. Signed HTTP is the inbound door — there is no inbound websocket.
Machine-readable contract (no auth): GET https://app.mrtrades.com/v1/strategies/signals/schema
What you put in the webhook
POST https://app.mrtrades.com/v1/strategies/signals
Content-Type: application/json
X-Webhook-Token: wks_…
X-Mrtrades-Timestamp: 1770000000
X-Mrtrades-Signature: sha256=…
{"action":"LONG","symbol":"BTCUSDT","id":"tv-alert-123","reason":"breakout"}
- action — required. LONG, SHORT, CLOSE, or a manage action
- symbol — required. e.g. BTCUSDT (we store BTC-USD)
- id — optional. Your idempotency tag
- reason — optional, 240 characters
- sl / tp — optional this-signal override.
tp1 works as tp. If you omit them, the strategy defaults apply - leverage — optional this-signal override (1–50)
- SET_LEVERAGE / SET_TRAIL / MOVE_SL / SET_TP — manage an open live position. Same desk path as Terminal. Paper skips these.
{"action":"SET_TRAIL","symbol":"BTCUSDT","trail_callback_pct":0.5,"trail_activate":"after_be"}
{"action":"SET_LEVERAGE","symbol":"BTCUSDT","leverage":5}
{"action":"MOVE_SL","symbol":"BTCUSDT","sl":64000}
{"action":"SET_TP","symbol":"BTCUSDT","tp":68000}
Do not send size, qty, or notional. Those fields are ignored. Size and default protections live on the listing.
What the strategy holds
- notional_usd — order size (default $100, min $10)
- max_positions — default 1. A second entry is skipped while a position is open
- cooldown_s — default 30. Repeat POSTs inside the window are stored, not traded
- sl / tp — defaults used when the webhook omits them
- leverage and trail callback % — edit in Portal → Strategies
- Optional pinned symbol. Other symbols are rejected
- Paper or live lane, and pause — the kill switch
Create the listing in Portal → Strategies, set size / stops / leverage / trail, create the token and signing secret once, then list it if you want subscribers.
Sign the raw body: HMAC-SHA256(secret, timestamp + "." + body). Header names are X-Mrtrades-Timestamp and X-Mrtrades-Signature. Accepts sha256= or bare hex. Clock skew over 5 minutes is rejected.
# Python
import hmac, hashlib, time, json, urllib.request
body = json.dumps({"action":"LONG","symbol":"BTCUSDT","id":"tv-alert-123"}, separators=(",",":")).encode()
ts = str(int(time.time()))
sig = hmac.new(b"whsec_YOUR_SECRET", (ts + ".").encode() + body, hashlib.sha256).hexdigest()
req = urllib.request.Request(
"https://app.mrtrades.com/v1/strategies/signals",
data=body,
headers={
"Content-Type": "application/json",
"X-Webhook-Token": "wks_YOUR_TOKEN",
"X-Mrtrades-Timestamp": ts,
"X-Mrtrades-Signature": "sha256=" + sig,
},
method="POST",
)
print(urllib.request.urlopen(req).read().decode())
Onboarding
- Sign in. Paper the flow on your own account first.
- Create a published webhook strategy. Save the token and
whsec_ secret — they are shown once. - Resume the listing, then POST one LONG/SHORT/CLOSE (or a manage action) from your server or TradingView bridge.
- Confirm the blotter on your lane, then list the strategy if you want followers.
- Followers keep their own size, lane, and pause. You keep the listing fee split shown on Strategies.
Paste into an LLM / automation
You post a TRIGGER to a published MrTrades webhook strategy.
The listing — not this POST — owns size, leverage, trail, cooldown, max positions, and default SL/TP.
Contract (always current):
GET https://app.mrtrades.com/v1/strategies/signals/schema
Endpoint:
POST https://app.mrtrades.com/v1/strategies/signals
Content-Type: application/json
X-Webhook-Token: wks_… (shown once when the publisher creates the key)
X-Mrtrades-Timestamp: <unix seconds>
X-Mrtrades-Signature: sha256=<hex>
Signature (required):
HMAC-SHA256(signing_secret, "{timestamp}." + raw_body_bytes)
signing_secret starts with whsec_
Timestamp must be within 300 seconds of now.
Send the exact bytes you hashed. Do not pretty-print after signing.
Required JSON:
{
"action": "LONG" | "SHORT" | "CLOSE" | "SET_LEVERAGE" | "SET_TRAIL" | "MOVE_SL" | "SET_TP",
"symbol": "BTCUSDT"
}
Optional JSON:
"id": "your-idempotency-tag",
"reason": "optional tag, max 240 chars",
"sl": 64000,
"tp": 68000,
"leverage": 5,
"trail_callback_pct": 0.5,
"trail_activate": "after_be" | "always" | "after_tp1"
- sl / tp / leverage / trail override this signal only. If omitted, the listing defaults apply.
- Manage an open live position with SET_LEVERAGE, SET_TRAIL, MOVE_SL, or SET_TP (paper skips these).
- tp1 is accepted as an alias for tp
- symbol suffixes USDT/USDC are stripped; we store BTC-USD style
- if the listing pinned a symbol, a different symbol is rejected
- CLOSE is reduce-only flatten on live
- Do NOT send size, qty, or notional. Those are ignored. Signed HTTP only — no inbound websocket.
Do not use:
- https://nexus.mrtrades.com/webhook/<uuid> (that is one trader's Nexus bot)
- POST /v1/alerts/inbound (that is a personal ticker-board alert)
Each follower (and the publisher, if listed and not paused) runs the signal on their own account and lane. You are not copying someone else's fills. Minimum listing notional is $10.
Strategies + MCP · Marketplace · Nexus bot webhook