Muunship API Documentation

Developer documentation for the Muunship API: place orders, read positions, cancel pending orders, copy trades, and stream connection health with a single API key.

API Endpoints

Symbol Formats

Both full contracts and root symbols are accepted; roots resolve to the current front-month contract automatically.

Error Codes

Frequently Asked Questions

How do I get a Tradovate API key?

With Muunship you skip the Tradovate developer application entirely. Sign up, go to Settings, and generate an API key in seconds. That single key lets you place orders, read positions, and copy trades across all connected Tradovate accounts.

What are the Tradovate API rate limits?

Tradovate enforces strict per-endpoint quotas that vary by account type. Muunship aggregates and smart-routes requests within those limits so you do not have to track them yourself. Our API allows 120 requests/minute per API key.

How much does the Tradovate API cost?

Tradovate charges for market data and requires a funded account. Muunship costs $30 for the first month, then $15/mo with a 5-day free trial. A $599 self-hosted lifetime license is also available. There is no separate API fee.

Does Muunship use WebSocket for Tradovate?

Yes. We maintain persistent WebSocket connections to Tradovate for real-time fills, positions, and order status. You get the speed benefits of WebSocket without writing any WebSocket code — our REST API and webhook endpoints abstract it all into simple HTTP calls.

Can I send TradingView alerts to Tradovate via this API?

Yes. Create a webhook token via the API, paste the URL into any TradingView alert, and every alert fires a trade on your Tradovate accounts automatically. No Pine Script changes needed beyond setting the webhook URL and JSON payload.

Does the webhook support multiple take-profit levels or scale-out?

Not today. A webhook payload supports a single bracket with one take-profit and one stop-loss. Multi-target scale-outs, trailing stops, and automated breakeven moves require multiple API calls or manual management of the remaining position.

Can I cancel a pending order through the API?

Yes. DELETE /v1/accounts/{id}/orders/{orderId} cancels a single order using the orderId returned when you placed it. It is order-scoped and never flattens: if the entry partially filled, the filled portion stays open as a position and only the unfilled remainder is cancelled. This makes it straightforward to place a resting limit order and cancel it automatically if it has not filled within a set time.

What happens to the attached TP/SL when I cancel a bracket order?

If the bracket entry has not filled yet, cancelling the entry also removes its attached take-profit and stop-loss — you only cancel the entry ID. Once the entry has filled, the TP/SL are live protection on a real position and are cancelled individually by their own order IDs; cancelling them does not close the position. Note that cancelling one leg of a filled bracket re-places the surviving leg under a new order ID, so re-read the working-orders endpoint rather than caching leg IDs.

Which futures symbol formats does the API accept?

Both full contracts and root symbols. MNQU6 is used as given, while MNQ, MNQ1!, MNQ!, CME:MNQ1! and the MetaTrader four-digit form MNQU26 all resolve to the current front-month contract automatically. If a symbol cannot be resolved the request fails immediately with 400 UNKNOWN_SYMBOL naming the symbol, and no order is sent to your broker.

How do I tell whether my order is still pending?

Use GET /v1/accounts/{id}/working-orders, which reads the broker directly and returns orders currently resting — unfilled entries and active TP/SL legs. The similarly named /v1/accounts/{id}/orders returns closed trade history rather than working orders, a legacy name kept for backwards compatibility.

How do I close a position from a TradingView alert?

Send {"action": "close"} to your webhook URL — flat, flatten and exit work too, and no symbol or qty is needed. This flattens the account: it cancels every resting order and closes every open position on it, not just one symbol. Because of that, if you include a symbol and the account is also holding a different one, the request is refused with 409 and nothing is closed, rather than liquidating a position your alert never mentioned. To exit one symbol precisely, send an ordinary opposite-side buy or sell for that quantity instead.

Why do my TradingView alerts fail with "Account is inactive"?

A webhook token is tied to one specific account. If your broker stops reporting that account — which commonly happens when a prop-firm evaluation is reset, breached, or replaced with a new one — the token keeps receiving alerts and rejects every one with 403 Account is inactive, even though your other accounts are connected and healthy. The Signals page flags any token in this state and names the affected account; edit the token to point at a live account and alerts resume immediately.

What Developers Say

“I came across Muunship while looking for a reliable webhook provider for my trading automation project, and it turned out to be exactly the tool I needed. […] It not only handles webhook-based trade execution, but also provides the flexibility and API functionality needed to build much more complex automation systems on top of it. […] I contacted the team with a request for additional API functionality, and the feature was implemented and documented the very next day. That level of responsiveness is exceptional.”

Wladimir, DE — rated 5 out of 5

Reviews published on Trustpilot.