Developer API & LLM integration

Bring your own model. We bring the simulator.

WICK FUNDED exposes a documented REST API and a streaming MCP endpoint so a trader can wire their own LLM agent — Claude, ChatGPT, Gemini, a custom model, anything — to their own simulated account. We supply the tools; you supply the strategy and the brain. Same simulator, same rules, same execution engine as the web UI.

Allowed
  • Read your own account, positions, journal, candles
  • Open / close / modify trades on your own account
  • Wire Claude / ChatGPT / Gemini / your custom agent to your account
  • Build your own dashboard, mobile app, notification bot, journal
Not allowed
  • Share your API key, or trade other people's accounts with one key
  • Group signal-mirroring across multiple accounts you don't own
  • Pure-HFT or latency-arbitrage patterns (>50 ord/min sustained)
  • Selling, renting, or syndicating access to your account

Full policy: Terms §8 — Personal Automation · /rules for breach detection details.

Quickstart

  1. 1. Go to Dashboard → Developer → API keys and create a token. It looks like wk_live_… and is shown once.
  2. 2. Pick a scope: read for data only, execute to place / close / modify trades.
  3. 3. Authenticate every request with a Bearer header. That's the entire auth model.
  4. 4. Drop the OpenAPI URL (/api/v1/openapi) into Postman, Cursor, or Claude and you have full tool definitions for free.

curl — open a position

curl -X POST https://wickfunded.com/api/v1/trade/open \
  -H "Authorization: Bearer wk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "your-account-uuid",
    "symbol":     "EURUSD",
    "side":       "buy",
    "lot_size":   0.10,
    "sl_price":   1.0820,
    "tp_price":   1.0900
  }'

Python — full read-then-execute loop

import os, requests

WK = os.environ["WICK_API_KEY"]
BASE = "https://wickfunded.com/api/v1"
H = {"Authorization": f"Bearer {WK}"}

# 1. find the active funded account
acct = requests.get(f"{BASE}/account", headers=H).json()["accounts"][0]

# 2. pull 200 candles of EURUSD M5
candles = requests.get(
    f"{BASE}/candles",
    headers=H,
    params={"symbol": "EURUSD", "tf": "M5", "limit": 200},
).json()

# 3. (your strategy here)
# decision = my_llm_or_strategy(candles)

# 4. execute
r = requests.post(
    f"{BASE}/trade/open",
    headers=H,
    json={
        "account_id": acct["id"],
        "symbol":     "EURUSD",
        "side":       "buy",
        "lot_size":   0.10,
        "sl_price":   1.0820,
        "tp_price":   1.0900,
    },
)
print(r.status_code, r.json())

TypeScript — expose WICK as an LLM tool

Same pattern works with Anthropic tool_use, OpenAI tools, or any tool-calling model.

import OpenAI from "openai";          // or @anthropic-ai/sdk
const openai = new OpenAI();

const WK   = process.env.WICK_API_KEY!;
const BASE = "https://wickfunded.com/api/v1";

// Expose WICK actions as OpenAI tools — same pattern works with Claude tool_use
const tools = [{
  type: "function" as const,
  function: {
    name: "wick_trade_open",
    description: "Open a market position on the user's WICK FUNDED simulator",
    parameters: {
      type: "object",
      required: ["symbol", "side", "lot_size"],
      properties: {
        symbol:   { type: "string", example: "EURUSD" },
        side:     { type: "string", enum: ["buy", "sell"] },
        lot_size: { type: "number", minimum: 0.01, maximum: 50 },
        sl_price: { type: "number" },
        tp_price: { type: "number" },
      },
    },
  },
}];

const chat = await openai.chat.completions.create({
  model: "gpt-4o",
  tools,
  messages: [
    { role: "system", content: "You are a discretionary trader. Use the WICK simulator tool when ready." },
    { role: "user",   content: "EURUSD is bouncing off the 1H demand zone — go long 0.10 lot, SL 1.0820, TP 1.0900." },
  ],
});

// When the model calls the tool, forward the args to WICK
for (const call of chat.choices[0].message.tool_calls ?? []) {
  const args = JSON.parse(call.function.arguments);
  const account_id = "your-account-uuid";
  const res = await fetch(`${BASE}/trade/open`, {
    method: "POST",
    headers: { Authorization: `Bearer ${WK}`, "Content-Type": "application/json" },
    body: JSON.stringify({ ...args, account_id }),
  });
  console.log(await res.json());
}

MCP — one-click Claude / Cursor integration

If your client speaks the Model Context Protocol, point it at https://wickfunded.com/api/mcp and the tools auto-register. Claude Desktop / claude.ai connect with a single OAuth click — no key to paste; you log into WICK and approve. Prefer an API key (Claude Code CLI, Cursor, scripts)? Use a Bearer token instead. Both below.

# ── Option A — One click (Claude Desktop / claude.ai) ──
# Settings → Connectors → Add custom connector. Paste ONLY the URL:
#
#     https://wickfunded.com/api/mcp
#
# Click "Connect" → you'll be sent to WICK, you log in, approve the scope
# (read, or read + execute), and you're done. No API key to paste, no JSON.
# Leave the OAuth Client ID / Secret fields BLANK — registration is automatic.

# ── Option B — API key (Claude Code CLI / Cursor / scripts) ──
# Create a key at Dashboard → Developer, then:
#
#     claude mcp add wick --transport http https://wickfunded.com/api/mcp \
#       --header "Authorization: Bearer wk_live_xxxxxxxxxxxx"
#
# or in a config file:
#   { "mcpServers": { "wick": {
#       "url": "https://wickfunded.com/api/mcp",
#       "headers": { "Authorization": "Bearer wk_live_xxxxxxxxxxxx" } } } }

# Tools exposed automatically: wick_account, wick_positions, wick_pending,
# wick_journal, wick_consistency, wick_symbols, wick_candles, wick_trade_open,
# wick_trade_close, wick_trade_pending, wick_trade_cancel, wick_trade_modify.
#
# Same rate limits + audit log as the REST API. Say things like:
#   "Check my WICK account and tell me my risk on the open EURUSD trade."
#   "Close half my GBPUSD position."

Endpoint reference

Live machine-readable spec: /api/v1/openapi.

MethodPathScopeDescription
GET/api/v1/accountreadList your trading accounts (balance, equity, DD, phase, program)
GET/api/v1/positionsreadList currently open positions
GET/api/v1/pendingreadList pending limit / stop orders
GET/api/v1/journalreadTrade history with tags + AI coach annotations
GET/api/v1/symbolsreadTradable symbols, pip values, margin tiers
GET/api/v1/candlesreadOHLC candles M1 → D1
POST/api/v1/trade/openexecuteOpen a market position with SL / TP / trailing
POST/api/v1/trade/closeexecuteClose a position (full or partial)
POST/api/v1/trade/pendingexecutePlace a pending limit or stop order
POST/api/v1/trade/cancelexecuteCancel a pending order that has not filled yet
POST/api/v1/trade/modifyexecuteModify SL / TP / trigger on an open trade or pending
GET/api/v1/openapipublicOpenAPI 3.1 spec (no auth) — drop this URL into Cursor / Claude / Postman

Rate limits

Per API key, applied as a dual token bucket (per-second + per-hour). The same budget is shared whether you call the REST API or the MCP endpoint:

  • 10 requests / second by default
  • 100 requests / hour by default
  • Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • Burst over the cap → HTTP 429 with Retry-After
  • Need more? Open a key with a higher cap from Settings (we approve larger budgets manually)

Audit log

Every call carrying the execute scope is permanently logged: timestamp, IP, key ID, request body, response status, latency, and (when supplied) the User-Agent or agent provider hint. You can browse your own log in Dashboard → Developer → API keys → Audit.

We do not use these logs to second-guess your strategy — they exist for anti-abuse, KYC/AML, and to give you a forensic timeline if a trade misbehaves.

Disclaimer. WICK FUNDED is a fully simulated trading environment. WICK does not train, host, or operate the LLM you connect — any output produced by Claude, ChatGPT, or any other model wired to your account is your own action, executed under your own credentials, and is not investment advice from WICK. The Developer API is provided as-is; see /terms, /risk, and /rules.
Developer API & MCP — Public Trading API + One-Click MCP — WICK FUNDED