Funded with Flow
MCP server online · Model Context Protocol · REST API v1 live

Connect AI agents to your funded account.

Two integration paths, one key: a REST API (/api/v1) for scripts and bots, and an MCP server for AI agents — both reading your accounts, positions and live risk through secure, permissioned tokens. When you choose, they can execute too.

Read-only by default · Trading stays gated until you opt in · Revoke anytime

11
AI tools
16
REST endpoints
Read-only
by default
Online
API server

Why it's safe

Autonomous access, on your terms.

Connect agents to a live funded account without handing over the keys to the kingdom. Every permission is explicit, every call is gated and audited.

Per-key permissions

Every key carries an explicit scope set. Grant read-only analytics, research, or execution if you opt in. Nothing is implicit.

Read-only by default

New keys can see accounts, positions, orders and risk. They cannot place a single order until you deliberately enable trading.

Trading is multi-gated

Execution requires the global switch, your per-account opt-in, a trading-enabled key, and the trade scope. If any one is off, no orders go through.

Hashed & revocable

Tokens are shown once, stored only as HMAC-SHA256 hashes, expire automatically, and can be rotated or revoked instantly.

Real engine, no replica

Tools call the same risk, accounts and order engine that runs the platform. Your agent sees the truth, not a stale copy.

Rate-limited & audited

Per-token rate limits and a full audit trail of every tool call, so you can trust an autonomous agent on a live account.

How it works

From dashboard to agent in three steps.

01

Generate a scoped key

In your dashboard under API & MCP Access, mint a key with a permission preset: read-only, research, or execution.

02

Connect your AI client

Drop the server URL and your bearer token into your agent or MCP-compatible client config.

03

Your agent goes to work

It reads accounts, positions and live risk in real time. If you enabled it, the agent also prepares and places guarded orders.

mcp client config
{
  "mcpServers": {
    "fundedwithflow": {
      "url": "https://mcp.fundedwithflow.com/mcp",
      "headers": { "Authorization": "Bearer fwf_mcp_•••your_key•••" }
    }
  }
}

Tool catalog

Tools your agent can call.

Read-only tools available on every key. Execution tools unlock only when you enable trading.

Accounts
List funded & evaluation accounts
Account summary
Equity, balance, P&L, status
Balances
Cash, buying power, margin
Account rules
Drawdown, daily-loss, targets
Positions
Live open positions & exposure
Orders
Working & historical orders
Fills
Executed trades / fills
Quote
Real-time price for a symbol
Risk summary
Greeks, allocation, flags
Drawdown status
Distance to breach, headroom
Capabilities
What this key is allowed to do

REST API

Prefer plain HTTP? Same engine, one base URL.

Everything MCP tools can do is also a REST endpoint. The same keys authenticate both — Authorization: Bearer fwf_mcp_… — with the same scopes, gates and audit trail.

Contract

https://fundedwithflow.com/api/v1
Authentication
Authorization: Bearer <your key> — minted in the dashboard, hashed at rest, expiring, revocable.
Envelope
success: { ok: true, requestId, data }
error: { ok: false, error: { code, message, requestId, required_scope? } }
Rate limits (per key)
60 requests/minute per key · 20 requests/minute per key · 10 order placements/minute per key (REST cap, stricter than MCP)
Trading ceremony

1. POST /api/v1/orders/preview with the order. The response carries previewId (single-use, 20s TTL) plus rule/margin impact, blocks, and warnings.

2. POST /api/v1/orders with EITHER { "previewId": "..." } alone (the server replays the exact previewed order) OR the SAME order fields + previewId. No previewId, no placement (ORDER_PREVIEW_REQUIRED); a reused previewId is PREVIEW_REPLAYED (409).

Send an Idempotency-Key header (or idempotencyKey body field) on placement. It maps to the order row idempotency key; a retried placement returns the ORIGINAL order with { ok: true, deduped: true } and can never double-fill.

Machine-readable contract: https://fundedwithflow.com/api/v1/doc.json · introspect your key: https://fundedwithflow.com/api/v1/info

quickstart — preview → place → cancel
# 1. Preview the order (mints a single-use previewId, 20s TTL)
PREVIEW=$(curl -s -X POST https://fundedwithflow.com/api/v1/orders/preview \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"symbol":"AAPL","side":"buy","quantity":1,"orderType":"limit","limitPrice":100}')
PID=$(echo "$PREVIEW" | jq -r .data.previewId)

# 2. Place it — Idempotency-Key makes retries safe (never double-places)
curl -X POST https://fundedwithflow.com/api/v1/orders \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -H "Idempotency-Key: my-unique-id-1" \
  -d "{\"previewId\":\"$PID\"}"

# 3. Cancel it
curl -X POST https://fundedwithflow.com/api/v1/orders/cancel \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{"orderId":"ORDER_ID"}'
MethodPathScopeWhat it does
GET/api/v1/infoAPI-key introspection: mode, scopes, eligible accounts, limits, trading availability.
GET/api/v1/doc.jsonThis document.
GET/api/v1/accountaccount:readActive account snapshot: code, type, status, balances, rule fields (null on paper by design), flags.
GET/api/v1/accountsaccount:readAll owned accounts with active marker + automation-eligibility flags.
GET/api/v1/positionspositions:readOpen positions on the active account, including option combos.
GET/api/v1/orders?status=working|allorders:readWorking orders (default) or recent history (status=all, capped at 200).
GET/api/v1/fills?limit=Nfills:readClosed trades (limit defaults 50, cap 300).
GET/api/v1/quote?symbol=Xmarket:readLatest platform quote for a symbol. SIMULATED platform quote, not a consolidated tape.
GET/api/v1/rulesrisk:readAccount rule set + current usage (daily loss, drawdown, profit target, consistency). Nulls on paper are intentional.
POST/api/v1/orders/previeworders:previewPreview an order; mints the single-use previewId (20s TTL) required for placement.
POST/api/v1/orders/validateorders:validateValidate an order against account rules (verdict only; never mints a confirmation).
POST/api/v1/ordersorders:placePlace a limit/stop/stop-limit order. Requires previewId; Idempotency-Key header makes retries safe.
POST/api/v1/orders/cancelorders:cancelCancel one working order (body: { "orderId": "..." }).
POST/api/v1/orders/cancel-allorders:cancel_allCancel every working order on the active account.
POST/api/v1/positions/closepositions:closeClose a position by symbol (pass the full position quantity for a full close).
POST/api/v1/account/flattenaccount:flattenCancel all orders and close all stock/futures positions on the active account. Option combos are reported, not flattened.

Manage keys in the dashboard under API & MCP Access. Trading endpoints additionally require the platform trading switch, your per-account trading opt-in, and a trading-enabled key.

Security model

Deterministic, server-side, un-promptable.

Every tool call passes an authorization gate that AI text can never influence: global switch → maintenance → your account opt-in → token rate limit → scopes → trading gates → account / asset / symbol restrictions. Keys are user-scoped. They are never admin and never cross-account.

Read-only defaultHMAC-hashed tokensAuto-expiry & rotationPer-token rate limitsFull audit trailNo cross-user access

Put an AI agent on your account.

Mint a scoped key in seconds. It starts read-only, so you flip on trading only when you're ready.