Access to your accounts, EA status, signal history and signal
submission to your EA. Create a personal key in the API
keys card at the bottom of your dashboard home
(keys look like sfk_...). Available on the Trader, Pro
and Elite plans, trial included.
A key is read by default: it reads your data and can
preview signals (dry_run). To send live signals, create the
key with the trade scope; a live send with a read-only key
returns 403 scope_required.
curl https://api.signalforge-ai.com/api/v1/me \ -H "Authorization: Bearer sfk_YOUR_KEY"
curl -X POST https://api.signalforge-ai.com/api/v1/signals \
-H "Authorization: Bearer sfk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "buy", "symbol": "XAUUSD", "lot": 0.1}'
dry_run=true (default) only validates and previews the
payload. With dry_run=false the signal is injected into your
own webhook, exactly like a TradingView alert (same filters and
transformations). Requires a plan with trading; cap 10 signals/min.
account_id (optional) must be one of your accounts (the id
from GET /api/v1/accounts). Order fields (price, percent,
side, order_type, entry_pips, entry_pct, breakeven, trailing, tp1-tp5)
are passed through like a TradingView alert; pendings need
price and close accepts percent.
Note: closebuy/closesell are
non-directional aliases - they close ALL positions of the symbol
regardless of side; use close with side to
close one direction only.
Retries: send an optional idempotency_key
(any string up to 100 characters, e.g. your own order id) with live
signals. If the same key arrives again within 24 h the signal is NOT sent
twice and the response says "duplicate": true. The same key
with a different signal answers 409 idempotency_conflict and
sends nothing: use a new key for each order. If the webhook rejects the
signal, or the connection could not be opened, the key is freed so you can
retry. If the delivery state is unknown (502 after connecting), check
GET /api/v1/signals before sending it again.
GET /api/v1/me - your user, plan and datesGET /api/v1/accounts - your MT5 accounts and EA stateGET /api/v1/ea/status - EA status per accountGET /api/v1/signals?limit=50&before=<id>&account_id=<id>
- your signal history (newest first)GET /api/v1/signals/<id> - one signal (404 if not yours)POST /api/v1/signals - submit a signal (see above)Use this API from Claude, Cursor or any MCP client:
Endpoint https://api.signalforge-ai.com/mcp (POST, Streamable
HTTP, stateless) with header
Authorization: Bearer sfk_YOUR_KEY.
Tools: me, accounts, ea_status, recent_signals, signal_detail,
send_signal.
Full machine-readable spec: /api/v1/openapi.json (OpenAPI 3.0).
Rate limits: 60 requests per minute and 10 signals per minute per key.