Deployed strategies

The Mangrove platform runs a curated set of paper-trading strategies continuously. The /api/v1/oracle/deployed/* surface exposes their live state — account value, open positions, trade history — for embedding in dashboards, research, or your own monitoring tooling. Each leaderboard persona owns 1-3 deployed strategies; the persona is a display wrapper, this surface is the underlying live data.

Endpoints

MethodPathPurposeBillable
GET/api/v1/oracle/deployed/strategiesList curated strategies with current execution statefree (metadata)
GET/api/v1/oracle/deployed/{strategy_id}/statePer-strategy execution snapshot (account value, balances, position count)free (metadata)
GET/api/v1/oracle/deployed/{strategy_id}/events?limit=NRecent trade events (fills, signals, exits). limit is 1-500, default 100.free (metadata)
GET/api/v1/oracle/deployed/streamServer-Sent Events stream of state changesfree (metadata)

List the live strategies

curl -H "Authorization: Bearer $MANGROVE_API_KEY" \
  https://api.mangrovedeveloper.ai/api/v1/oracle/deployed/strategies
from mangrove_ai import MangroveAI

client = MangroveAI()
strategies = client.oracle.list_deployed_strategies()
for s in strategies:
    print(s.id, s.name, s.account_value, s.total_trades)
Each entry carries id, name, persona_id, asset, timeframe, deployed_at, account_value, cash_balance, num_open_positions, total_trades, and status.

Read one strategy’s live state

state = client.oracle.get_deployed_strategy_state("dep-001")
print(state["account_value"], state["cash_balance"])
The state response is the canonical execution-state shape used by the trading engine: cash balance, account value, total trades, and open-position count, plus any in-flight position metadata.

Read recent trade events

events = client.oracle.get_deployed_strategy_events("dep-001", limit=50)
for evt in events["events"]:
    print(evt["timestamp"], evt["type"], evt.get("side"), evt.get("price"))
Event types include fill (entry / exit execution), signal (rule fired but didn’t open a position — typically gated by a filter or position-limit), and exit_reason (time-based exit, stop loss, take profit).

Subscribe to live updates (SSE)

The /stream endpoint emits Server-Sent Events as deployed strategies fill, close positions, or hit performance milestones. The MangroveAI proxy forwards the stream with chunked transfer enabled.
curl -N -H "Authorization: Bearer $MANGROVE_API_KEY" \
  https://api.mangrovedeveloper.ai/api/v1/oracle/deployed/stream
A typed SDK iterator wrapping this stream is on the roadmap; for now, customers consume the raw SSE bytes or poll get_deployed_strategy_events() on a schedule.

Why “leaderboard” returns personas, not strategies

GET /api/v1/oracle/leaderboard was originally specced to return a best-performing-strategies ranking. The current product shape instead curates a small fixed roster of paper-trading “personas” (each owning a couple of deployed strategies), and the public dashboard ranks personas by aggregate performance, not strategies. The persona roster is what leaderboard() returns; this deployed/* surface is where the per-strategy live state lives. If you want a strategy-ranking view, query the experiments results endpoint with an appropriate sort parameter.
  • Experiments — author and launch parameter sweeps; the curated deployed strategies were themselves selected via that pipeline.
  • Backtesting API — single-strategy synchronous and async backtests.
  • mangroveai Python SDK — the client.oracle.list_deployed_strategies() / .get_deployed_strategy_state(id) / .get_deployed_strategy_events(id) / .leaderboard() methods are typed wrappers as of SDK v1.4.0.