MetaKit
beta
API Reference

Base URL: https://api.metakit.cloud

Copiers

Copy trading: mirror one account’s activity onto another. A copier has a source and a follower (which must be a full account). State on copies opens/closes/SL-TP/pendings; monitor copies closes only; off pauses. Lot sizing is fixed, multiplier, or proportional (by balance). All endpoints are paginated where they return lists.

GET

/v1/copiers/{id}/performance

Get copier performance

How faithfully the follower tracks the master. copied_pnl counts only trades this copier placed (matched by follower ticket), so the follower’s own manual trades never inflate it. fidelity_pct is successful copies over attempted copies — trades declined by your filters are excluded, since declining by configuration is not a failure. Slippage is signed so POSITIVE always means worse for the follower, and is null for copies placed before fill-price capture existed. divergence normalises both accounts to percentage returns so accounts of different sizes are comparable.

Parameters
NameTypeRequiredDescription
rangestringNoWindow to compute over: 1m, 3m, 6m, 12m or all. Defaults to 3m.
Example request
curl https://api.metakit.cloud/v1/copiers/123/performance \
  -H "Authorization: Bearer stk_live_..."
Example response
{
  "copier_id": 12,
  "range": "3m",

  "master": {
    "account_id": 3, "name": "Northwind Markets", "login": 8842190,
    "server": "Northwind-Live04", "currency": "USD", "leverage": 100,
    "balance": 74630, "equity": 74210, "floating": -420,
    "open_positions": 3, "margin_level": 842, "spark": [0, 120.5, 318.2]
  },
  "follower": {
    "account_id": 5, "name": "Vantor Global", "login": 9930215,
    "server": "Vantor-Live01", "currency": "USD", "leverage": 30,
    "balance": 125940, "equity": 126500, "floating": 560,
    "open_positions": 3, "margin_level": 1204, "spark": [0, 61.4, 154.8]
  },

  "copied_pnl": 14820.5,
  "copied_pnl_pct": 11.7,
  "copies": 1284,
  "copies_24h": 41,
  "fidelity_pct": 97.4,
  "median_latency_ms": 68,
  "p95_latency_ms": 142,
  "fastest_latency_ms": 41,
  "slowest_latency_ms": 312,
  "avg_slippage_pips": 0.3,
  "worst_slippage_pips": 1.4,
  "within_tolerance_pct": 98.9,
  "follower_max_drawdown_pct": -4.8,

  "divergence": [
    { "date": "2026-04-29", "master_pct": 0, "follower_pct": 0 },
    { "date": "2026-04-30", "master_pct": 0.42, "follower_pct": 0.31 }
  ],
  "latency_buckets": [
    { "label": "<50ms", "count": 412 },
    { "label": "50\u2013100", "count": 690 },
    { "label": "100\u2013250", "count": 158 },
    { "label": "250\u2013500", "count": 21 },
    { "label": ">500", "count": 3 }
  ],
  "slippage_by_symbol": [
    { "symbol": "BTCUSD", "avg_pips": 1.1, "trades": 24 },
    { "symbol": "XAUUSD", "avg_pips": 0.6, "trades": 188 }
  ],
  "mirrored_trades": [
    {
      "source_id": 88421901,
      "follower_ticket": 99302156,
      "symbol": "EURUSD",
      "side": "buy",
      "opened_at": "2026-07-26T09:41:00.000Z",
      "closed_at": "2026-07-26T11:12:00.000Z",
      "source_volume": 0.8,
      "copied_volume": 0.4,
      "latency_ms": 64,
      "slippage_pips": 0.2,
      "follower_net": 186.4
    }
  ],

  "open_exposure_lots": 3.1,
  "generated_at": "2026-07-28T10:15:00.000Z"
}
GET

/v1/copiers

List copiers

Paginated list of your copiers.

Example request
curl https://api.metakit.cloud/v1/copiers \
  -H "Authorization: Bearer stk_live_..."
Example response
{
  "data": [
    {
      "id": 1,
      "created_at": "2026-07-17T12:00:00.000Z",
      "updated_at": "2026-07-17T12:00:00.000Z",
      "source_account_id": 3,
      "follower_account_id": 5,
      "state": "on",
      "lot_mode": "proportional",
      "lot_value": 1,
      "reverse": false,
      "copy_existing": false,
      "filters": {},
      "symbol_map": {}
    }
  ],
  "page": 1, "limit": 25, "total": 1, "total_pages": 1
}
GET

/v1/copiers/{id}

Get copier

A single copier by id.

Example request
curl https://api.metakit.cloud/v1/copiers/123 \
  -H "Authorization: Bearer stk_live_..."
Example response
{ "id": 1, "source_account_id": 3, "follower_account_id": 5, "state": "on", "...": "..." }
POST

/v1/copiers

Create copier

Create a copier. Source and follower must differ, both must be running, and the follower must be a full account. Set copy_existing: true to also mirror the source’s currently-open positions on creation.

Request body
{
  "source_account_id": 3,
  "follower_account_id": 5,
  "state": "on",
  "lot_mode": "proportional",
  "lot_value": 1,
  "reverse": false,
  "copy_existing": false,
  "filters": { "symbols": ["EURUSD", "XAUUSD"], "max_open_positions": 10 },
  "symbol_map": { "EURUSD": "EURUSD.r" }
}
Example request
curl https://api.metakit.cloud/v1/copiers \
  -H "Authorization: Bearer stk_live_..." \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{...'
Example response
{ "id": 2, "state": "on", "source_account_id": 3, "follower_account_id": 5, "...": "..." }
PATCH

/v1/copiers/{id}

Update copier

Change any setting, including toggling state between on, monitor, and off.

Request body
{ "state": "monitor" }
// or change rules:
{ "lot_mode": "multiplier", "lot_value": 0.5, "reverse": true }
Example request
curl https://api.metakit.cloud/v1/copiers/123 \
  -H "Authorization: Bearer stk_live_..." \
  -H "Content-Type: application/json" \
  -X PATCH \
  -d '{ "state": "monitor" }...'
Example response
{ "id": 1, "state": "monitor", "...": "..." }
PUT

/v1/copiers/{id}/risk

Update risk settings

Focused endpoint for risk config: lot sizing and filters.

Request body
{
  "lot_mode": "proportional",
  "lot_value": 1,
  "filters": { "min_lot": 0.01, "max_lot": 5, "max_open_positions": 20 }
}
Example request
curl https://api.metakit.cloud/v1/copiers/123/risk \
  -H "Authorization: Bearer stk_live_..." \
  -H "Content-Type: application/json" \
  -X PUT \
  -d '{...'
Example response
{ "id": 1, "lot_mode": "proportional", "filters": { "max_lot": 5, "...": "..." } }
PUT

/v1/copiers/{id}/symbol-map

Update symbol map (bulk)

Manage source→follower symbol mappings in bulk. mode: "replace" swaps the whole map; mode: "merge" upserts entries (an empty value removes a key).

Request body
{
  "mode": "merge",
  "map": { "EURUSD": "EURUSD.r", "US30": "US30.cash", "OLD": "" }
}
Example request
curl https://api.metakit.cloud/v1/copiers/123/symbol-map \
  -H "Authorization: Bearer stk_live_..." \
  -H "Content-Type: application/json" \
  -X PUT \
  -d '{...'
Example response
{ "id": 1, "symbol_map": { "EURUSD": "EURUSD.r", "US30": "US30.cash" }, "...": "..." }
DELETE

/v1/copiers/{id}

Delete copier

Delete a copier. Any positions it opened on the follower are LEFT OPEN. Returns 204.

Example request
curl https://api.metakit.cloud/v1/copiers/123 \
  -H "Authorization: Bearer stk_live_..." \
  -X DELETE
Example response
204 No Content