Algo Trader Tools · Schema
Follower
An account that copies a copier's master, with its own rules.
TradingCloudMetaTraderCopy TradingFinance
Properties
| Name | Type | Description |
|---|---|---|
| id | string | The follower's ID. |
| object | string | What this object is. |
| copier_id | string | Its copier. |
| account_id | string | The account that copies. |
| account | object | |
| is_active | boolean | False while this follower is paused. |
| magic | integer | The magic number on every order placed for this follower. Each copy's comment is `att:` and the master's ticket in base 36. |
| lot_mode | string | How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance |
| lot_value | number | The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places. |
| adjust_contract_size | boolean | Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes. |
| below_minimum | string | When a copy comes out below the broker's minimum lot: trade the minimum, or skip it. |
| max_lot | numbernull | The most lots one copy may have; null for no limit. |
| reverse | boolean | Sell when the master buys and the other way round; stop loss and take profit swap. |
| copy_stops | boolean | Copy stop loss and take profit, including later changes. |
| max_slippage_pips | numbernull | The slippage allowed per order; null uses the broker's default. |
| max_delay_seconds | integer | How late a master trade may still be copied, for example after a reconnect; older ones are skipped. |
| copy_existing | boolean | Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied. |
| copy_pending | boolean | Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version. |
| symbol_filter | string | `all` copies every symbol, `include` only those in `symbols`, `exclude` all but them. |
| symbols | array | The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`. |
| sessions | array | When new trades are copied; empty means any time. Closes and changes to copies already open are always copied. |
| timezone | string | The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`. |
| symbol_map | object | Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known |
| status | object | |
| created_at | string | |
| updated_at | string |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/algotradertools/json-schema/algotradertools-follower-schema.json",
"title": "Follower",
"description": "An account that copies a copier's master, with its own rules.",
"x-generated": "2026-11-08",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/algotradertools-openapi.json#/components/schemas/Follower",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The follower's ID.",
"format": "uuid"
},
"object": {
"type": "string",
"enum": [
"follower"
],
"description": "What this object is."
},
"copier_id": {
"type": "string",
"description": "Its copier.",
"format": "uuid"
},
"account_id": {
"type": "string",
"description": "The account that copies.",
"format": "uuid"
},
"account": {
"$ref": "#/$defs/AccountRef"
},
"is_active": {
"type": "boolean",
"description": "False while this follower is paused."
},
"magic": {
"type": "integer",
"description": "The magic number on every order placed for this follower. Each copy's comment is `att:` and the master's ticket in base 36."
},
"lot_mode": {
"type": "string",
"enum": [
"multiplier",
"fixed",
"balance_ratio",
"equity_ratio",
"risk_percent"
],
"description": "How each copy is sized. `multiplier`: the master's lots times `lot_value`. `fixed`: `lot_value` lots on every copy. `balance_ratio` / `equity_ratio`: the master's lots scaled by this account's balance or equity against the master's, times `lot_value`. `risk_percent`: sized so the master's stop loss risks `lot_value` percent of this account's equity; trades without a stop loss are skipped."
},
"lot_value": {
"type": "number",
"description": "The multiplier, the lot size or the risk percentage, by `lot_mode`. Above 0 and up to 1000; up to 100 for `risk_percent`. Up to four decimal places.",
"exclusiveMinimum": 0,
"maximum": 1000
},
"adjust_contract_size": {
"type": "boolean",
"description": "Even out different contract sizes between the brokers (gold can be 100 oz a lot at one broker and 10 oz at another). Applies to `multiplier` and the ratio modes."
},
"below_minimum": {
"type": "string",
"enum": [
"minimum",
"skip"
],
"description": "When a copy comes out below the broker's minimum lot: trade the minimum, or skip it."
},
"max_lot": {
"type": [
"number",
"null"
],
"description": "The most lots one copy may have; null for no limit.",
"exclusiveMinimum": 0
},
"reverse": {
"type": "boolean",
"description": "Sell when the master buys and the other way round; stop loss and take profit swap."
},
"copy_stops": {
"type": "boolean",
"description": "Copy stop loss and take profit, including later changes."
},
"max_slippage_pips": {
"type": [
"number",
"null"
],
"description": "The slippage allowed per order; null uses the broker's default.",
"minimum": 0
},
"max_delay_seconds": {
"type": "integer",
"description": "How late a master trade may still be copied, for example after a reconnect; older ones are skipped.",
"minimum": 0,
"maximum": 3600
},
"copy_existing": {
"type": "boolean",
"description": "Also copy the positions and pending orders the master already has when the follower is attached. Nothing the master opens or places during a pause is ever copied."
},
"copy_pending": {
"type": "boolean",
"description": "Place the master's pending orders on the follower as pending orders, and follow their changes, rather than copying them once they fill. Needs both terminals on the current version."
},
"symbol_filter": {
"type": "string",
"enum": [
"all",
"include",
"exclude"
],
"description": "`all` copies every symbol, `include` only those in `symbols`, `exclude` all but them."
},
"symbols": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"maxItems": 200,
"description": "The master's symbol names for `symbol_filter`, which needs at least one unless it is `all`. `XAUUSD` also covers decorated names such as `XAUUSD.m`."
},
"sessions": {
"type": "array",
"items": {
"$ref": "#/$defs/Session"
},
"maxItems": 14,
"description": "When new trades are copied; empty means any time. Closes and changes to copies already open are always copied."
},
"timezone": {
"type": "string",
"description": "The clock `sessions` are read on: `broker` (the master broker's server time, as its MetaTrader charts show it) or a time zone name such as `Europe/London`."
},
"symbol_map": {
"type": "object",
"additionalProperties": {
"type": "string",
"maxLength": 32
},
"maxProperties": 200,
"description": "Master symbol to follower symbol, for names that don't match by themselves. Matching tries this map, then the same name, the name without the broker's decorations (`EURUSD.m`, `US30.cash`), then known aliases (`XAUUSD` and `GOLD`); anything still ambiguous is skipped, never guessed."
},
"status": {
"anyOf": [
{
"$ref": "#/$defs/FollowerStatus"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"object",
"copier_id",
"account_id",
"account",
"is_active",
"magic",
"lot_mode",
"lot_value",
"adjust_contract_size",
"below_minimum",
"max_lot",
"reverse",
"copy_stops",
"max_slippage_pips",
"max_delay_seconds",
"copy_existing",
"copy_pending",
"symbol_filter",
"symbols",
"sessions",
"timezone",
"symbol_map",
"status",
"created_at",
"updated_at"
],
"$defs": {
"AccountRef": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The account's ID.",
"format": "uuid"
},
"name": {
"type": "string",
"description": "Its nickname, or the platform and login."
},
"platform": {
"type": "string",
"enum": [
"mt4",
"mt5"
]
},
"server": {
"type": "string",
"description": "The broker's server."
},
"login": {
"type": "integer",
"description": "The MetaTrader account number."
},
"status": {
"type": "string",
"enum": [
"connecting",
"connected",
"error",
"disconnected"
],
"description": "Whether its terminal is connected."
}
},
"description": "An account as other objects show it. Get the account for the rest.",
"required": [
"id",
"name",
"platform",
"server",
"login",
"status"
]
},
"FollowerStatus": {
"type": "object",
"properties": {
"state": {
"type": "string",
"enum": [
"starting",
"copying",
"paused",
"error"
],
"description": "`starting` while the engine connects, `copying`, `paused` (the follower or its copier is paused, or Equity Guard holds copying back), or `error` (see `message`)."
},
"message": {
"type": "string",
"description": "Why it needs attention, or `Paused by Equity Guard.` while Equity Guard holds copying back; empty otherwise."
},
"master_connected": {
"type": "boolean",
"description": "The engine's stream from the master's terminal is up."
},
"follower_connected": {
"type": "boolean",
"description": "The engine's stream from this account's terminal is up."
},
"open_copies": {
"type": "integer",
"description": "Copies open on this account now."
},
"last_event_at": {
"type": [
"string",
"null"
],
"description": "When the engine last did something here.",
"format": "date-time"
},
"balance": {
"type": [
"number",
"null"
],
"description": "This account's balance as the engine last saw it."
},
"equity": {
"type": [
"number",
"null"
],
"description": "This account's equity as the engine last saw it."
},
"currency": {
"type": "string"
},
"heartbeat_at": {
"type": "string",
"description": "When the engine last reported; at least every 15 seconds.",
"format": "date-time"
},
"engine_online": {
"type": "boolean",
"description": "False when the engine hasn't reported for 60 seconds."
}
},
"description": "What the copier engine reports about a follower, as of `heartbeat_at`.",
"required": [
"state",
"message",
"master_connected",
"follower_connected",
"open_copies",
"last_event_at",
"balance",
"equity",
"currency",
"heartbeat_at",
"engine_online"
]
},
"Session": {
"type": "object",
"properties": {
"days": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 6
},
"minItems": 1,
"description": "0 is Monday, 6 Sunday."
},
"start": {
"type": "string",
"description": "`HH:MM`, 24-hour.",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"end": {
"type": "string",
"description": "`HH:MM`. An end before its start runs past midnight.",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
}
},
"description": "A window in which new trades are copied.",
"required": [
"days",
"start",
"end"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/algotradertools-follower"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.