CPlugin

MT4 v2 :: Symbols

API v2 (beta) · MT4 · 13 operations · base URL https://cloud.mywebapi.com · OpenAPI v2 (JSON) · Redoc

Every call needs Authorization: Bearer $TOKEN — an OAuth 2.0 client-credentials token from https://auth.cplugin.net/connect/token (scope webapi). $TRADE_PLATFORM_ID is the id of a trade platform registered in Toolbox.

Operations

Get symbol market data (cached)

GET /api/v2/MT4/{tradePlatform}/SymbolInfoGet

Current cached market data for a single symbol.

Pump-cached read — Bid/Ask/High/Low/Spread/Digits and last-tick time for the requested instrument. Returns NotFound-shaped envelope (the wrapper-level result code surfaces in ManagerAPICode / ErrorCode) when the symbol is not loaded on the connected server.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol query string no Symbol name (e.g. EURUSD)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolInfoGet" \
  -H "Authorization: Bearer $TOKEN"

List updated symbols (cached)

GET /api/v2/MT4/{tradePlatform}/SymbolInfoUpdated

Snapshot of all symbols that have been updated since the last pump flush, keyed by symbol name (values-only on the wire).

Pump-cached read — instant local lookup, no MT4 round-trip. Useful for bulk refresh of a quote panel or watchlist. Sort key is the symbol name; cursors are opaque base64 strings.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes
limit query integer (int32) no Maximum number of items to return in one page. Omit to return all items in a single page. Maximum allowed value is 5000.
cursor query string no Opaque continuation token. Pass the value from the previous response's meta.paging.nextCursor to fetch the next page; omit for the first page.
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolInfoUpdated" \
  -H "Authorization: Bearer $TOKEN"

List symbol groups (cached)

GET /api/v2/MT4/{tradePlatform}/SymbolsGroupsGet

All configured symbol groups (security categories) from the pump cache.

Pump-cached read — returns the broker-configured security groups (e.g. "Forex", "CFD", "Metals"). Each entry only carries Name and Description; ConSymbolGroup has no additional fields on the MT4-side struct.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolsGroupsGet" \
  -H "Authorization: Bearer $TOKEN"

List symbol configs

GET /api/v2/MT4/{tradePlatform}/CfgRequestSymbol

Full server-side configuration for every symbol on the platform.

Manager (live) call. Heavy response — typical platforms have dozens to hundreds of symbols, each with a 50+ field ConSymbol structure. Pair with Idempotency-Key on retry.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/CfgRequestSymbol" \
  -H "Authorization: Bearer $TOKEN"

Get symbol config

GET /api/v2/MT4/{tradePlatform}/CfgRequestSymbol/{symbol}

Full server-side configuration for a single symbol by name.

Manager (live) call. Returns NotFound envelope when the symbol is not configured on the server. Same DTO shape as CfgRequestSymbol's list element.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (max 12 chars)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/CfgRequestSymbol/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN"

Get symbol sessions

GET /api/v2/MT4/{tradePlatform}/SymbolSessionsGet/{symbol}

Trading session windows for a symbol, per weekday.

Returns the wrapper's ConSymbol.Sessions[7] array (one entry per weekday, 0=Sunday). Each weekday entry carries up to three Quote (price) windows and up to three Trade (order acceptance) windows plus overnight flags. Closes the TODO documented in MT4SymbolConfig: the parent CfgRequestSymbol endpoint drops the nested Sessions array to keep the DTO manageable; this dedicated endpoint exposes it.

Timeout: 10 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: Nothing was changed; the request is safe to repeat.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (max 12 chars)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 10 s (read). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolSessionsGet/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN"

Update symbol config

POST /api/v2/MT4/{tradePlatform}/CfgUpdateSymbol/{symbol}

Update a symbol's full configuration — Type 1 mutator with secret-preservation read.

Completes the User/Group/Symbol Type 1 mutator triad. Same flow as UserRecordUpdate and GroupRecordUpdate: read the existing ConSymbol from MT4 server, overlay the MT4SymbolConfigUpdate DTO over it, write the merged structure back. Preserves the Sessions nested array, reserved/unused padding, and server-derived fields (Count, CountOriginal, FilterCounter, Point, Multiply, tick-value pair) — those are [MapperIgnoreTarget]'d on the mapper.

Idempotency-Key strongly recommended.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (path parameter, max 12 chars, immutable identity)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Request body

MT4SymbolConfigUpdate (application/json) — Replacement fields. Omitted-from-DTO fields are preserved server-side.

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/CfgUpdateSymbol/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "description": "", "source": "", "currency": "", "type": 0, "digits": 0, "tradeMode": "No" }'

Patch symbol config

PATCH /api/v2/MT4/{tradePlatform}/SymbolConfig/{symbol}

Type 2 mutator — partial update of a symbol configuration. Same flow as UserRecordPatch; reads existing config live, overlays the patch, writes back.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (immutable identity)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Request body

object (application/json, required) — JSON Merge Patch: an object with only the fields to change.

Responses

Example

curl -X PATCH "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolConfig/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Add symbol

POST /api/v2/MT4/{tradePlatform}/SymbolAdd/{symbol}

Add a symbol to the platform's active set — Type 1 mutator.

Promotes a configured symbol into the platform's currently-pumping set so it starts receiving ticks and accepting orders. Reversible via SymbolHide.

v1 exposes this as GET /api/MT4/{tp}/SymbolAdd/{symbol} — that is a historical REST violation (GET should be safe/idempotent). v2 corrects the verb to POST without changing the wrapper behaviour. The path stays the same to keep traceability with the underlying wrapper method name; only the HTTP verb changes.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (max 12 chars)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolAdd/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN"

Hide symbol

POST /api/v2/MT4/{tradePlatform}/SymbolHide/{symbol}

Hide a symbol from the platform's active set — Type 1 mutator.

Removes the symbol from the active subscription set; ticks stop flowing and orders are no longer accepted for that symbol. Reversible via SymbolAdd. v1 exposes this as a GET — v2 fixes to POST.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol path string yes Symbol name (max 12 chars)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolHide/$SYMBOL" \
  -H "Authorization: Bearer $TOKEN"

Refresh symbol catalog

POST /api/v2/MT4/{tradePlatform}/SymbolsRefresh

Refresh the symbol catalog from MT4 server — Type 1 mutator (no body).

Forces the wrapper to reload its symbol catalog. Useful after admin tooling has added/edited symbols on the MT4 server side. v1 exposes this as GET — v2 fixes to POST (mutation of the wrapper's local state).

Timeout: 60 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 60 s (server maintenance). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolsRefresh" \
  -H "Authorization: Bearer $TOKEN"

Change symbol attributes

POST /api/v2/MT4/{tradePlatform}/SymbolChange

Adjusts the per-symbol trading attributes that dealers manage from the MT4 Manager UI — spread, stops-level, smoothing, quote color, execution mode.

Manager-live POST. Maps 1:1 to the wrapper's SymbolChange call which marshals an entire SymbolProperties struct down to the native server. Only the seven editable fields are exposed on the v2 contract — the wrapper's 8-int reserved padding is filled with zeros by Mapperly automatically.

This is intentionally separate from the heavier CfgUpdateSymbol Type 1 mutator: SymbolChange is the dealer-tier adjustment path; CfgUpdateSymbol changes structural symbol configuration (currency, calc mode, margin, swap) that requires admin privileges and broker-side coordination.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Request body

MT4SymbolChangeRequest (application/json) — Symbol attribute payload

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolChange" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "symbol": "", "color": 0, "spread": 0, "spreadBalance": 0, "stopsLevel": 0, "smoothing": 0 }'

Send synthetic tick

POST /api/v2/MT4/{tradePlatform}/SymbolSendTick

Injects a synthetic tick into the MT4 server for the given symbol — used to keep the feed alive on instruments where the upstream datafeed is paused, or to drive simulator tooling.

Manager-live POST. The wrapper requires the manager account to hold the Market Watch permission; without it the server typically drops the connection rather than returning an error. The API-side ResourceAccessAuthorize on this endpoint guards against API callers without the appropriate platform-level permission, but broker-side mis-configuration of the underlying manager rights remains the consumer's responsibility.

bid and ask are absolute prices, not deltas. Pass the symbol's last-known bid/ask if you only need to refresh the timestamp; pass adjusted prices to actually move the quote.

Timeout: 15 s by default, adjustable per request with the X-Request-Timeout header. When the trade server does not answer in time: The operation may still be completed by the server (X-Request-Outcome: unknown): check its result before repeating it.

Parameters

NameInTypeRequiredDescription
tradePlatform path string (uuid) yes Trade platform id (GUID)
symbol query string no Symbol name (max 11 chars)
bid query number (double) no Bid price
ask query number (double) no Ask price
X-Request-Timeout header number (double) no How long to wait for the trade server, in seconds (1–300). Default for this operation: 15 s (change). The query parameter requestTimeout does the same for clients that cannot set headers. The applied value is returned in the X-Request-Timeout-Applied response header.

Responses

Example

curl -X POST "https://cloud.mywebapi.com/api/v2/MT4/$TRADE_PLATFORM_ID/SymbolSendTick" \
  -H "Authorization: Bearer $TOKEN"

Schemas

Types the operations above take and return, with their first-level properties; * marks a required one. The full graph is in the OpenAPI specification.

MT4SymbolInfoApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolInfo v2 DTO describing a single symbol's market data and metadata as held in the wrapper's pumping cache. Curated subset of the wrapper's SymbolInfo: covers what clients monitoring tick feeds / building a quote panel actually need — current Bid/Ask, session High/Low, tick precision (Digits, Point), current Spread (in points), last-tick direction, and the last-tick timestamp. Internal bookkeeping (Count, UpdateFlag, Visible, SpreadBalance, Commission, CommType) is intentionally omitted: those are pump-side cache mechanics or broker-side commission config that don't belong on a real-time market-data wire.
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolInfoListApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolInfo[]
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolGroupListApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolGroup[]
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolConfigListApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolConfig[]
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolConfigApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolConfig v2 DTO for a symbol's full server-side configuration. Curated from ConSymbol; drops reserved / unused arrays and the nested Sessions table (planned as its own endpoint). Seven wrapper enum fields (TradeMode, ProfitCalculationMode, SymbolExecMode, SwapType, GTCMode, MarginCalculationMode) are exposed as strings; see feedback-stj-enum-leaf-nested for why the conversion happens at the mapper.
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolDaySessionsListApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data MT4SymbolDaySessions[]
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolConfigUpdate

Type 1 mutator input for CfgUpdateSymbol. Same field set as the read DTO CPlugin.SaaSWebApps.WebAPI.DTOs.MT4.v2.MT4SymbolConfig minus: * Symbol (path parameter, immutable identity); * Count, CountOriginal, FilterCounter — server-side counters, derived; * Stringified enum fields are submitted as their original wrapper enum types here (one-way deserialisation accepts JsonStringEnumConverter via the existing global STJ options). Fields preserved by the server-side read step (NOT on this DTO): * Symbol identity. * Sessions nested array (own endpoint planned). * Unused, ExternalUnused, ProfitReserved, FilterReserved reserved arrays. * Count, CountOriginal, FilterCounter, BidTickValue, AskTickValue, Point, Multiply — server-derived from other fields, writing them is a no-op or overwrite-with-stale.

PropertyTypeDescription
description string, nullable
source string, nullable
currency string, nullable
type integer (int32)
digits integer (int32)
tradeMode TradeMode
backgroundColor integer (int32)
realtime integer (int32)
starting string (date-time)
expiration string (date-time)
profitCalculationMode ProfitCalculationMode
filter integer (int32)
filterLimit number (double)
filterSmoothing integer (int32)
logging integer (int32)
spread integer (int32)
spreadBalance integer (int32)
symbolExecMode SymbolExecMode
swapEnable integer (int32)
swapType SwapType
swapLong number (double)
swapShort number (double)
swapRollover3Days integer (int32)
contractSize number (double)
tickValue number (double)
tickSize number (double)
stopsLevel integer (int32)
gtcMode GTCMode
marginCalculationMode MarginCalculationMode
marginInitial number (double)
marginMaintenance number (double)
marginHedged number (double)
marginDivider number (double)
percentage number (double)
longOnly integer (int32)
instantMaxVolume integer (int32)
marginCurrency string, nullable
freezeLevel integer (int32)
marginHedgedStrong integer (int32)
valueDate string (date-time)
quotesDelay integer (int32)
swapOpenPrice integer (int32)
swapVariationMargin integer (int32)

BooleanApiResponse

Unified v2 response envelope: data is the payload (null on error); error is the error object (null on success, always serialised); meta contains response metadata (activityId and optional paging). HTTP status is always 200.

PropertyTypeDescription
data boolean
error ApiError v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.
meta ApiMeta Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

MT4SymbolChangeRequest

POST body for the Manager-live SymbolChange endpoint. Maps 1:1 to the wrapper's SymbolProperties struct (the public properties, not the underscore-prefixed backing fields). The struct's 8-int Reserved padding is dropped from the v2 contract. Use cases: dealers and exchange operators adjusting per-symbol spread, stops level, smoothing, or quote-color metadata without touching the broader symbol configuration. Heavier write operations (currency, calc mode, margin, swap) live on the separate CfgUpdateSymbol Type 1 mutator.

PropertyTypeDescription
symbol string, nullable Symbol name (max 12 chars — wrapper's fixed slot)
color integer (int32) Quote display color (raw int; broker UI convention)
spread integer (int32) Spread (in points; 0 = market spread)
spreadBalance integer (int32) Spread imbalance offset (in points)
stopsLevel integer (int32) Minimum allowed stops distance from market (in points)
smoothing integer (int32) Quote-smoothing parameter (raw int; broker-defined)
exeMode SymbolExecMode Order execution mode (Request/Instant/Market/Exchange)

MT4SymbolInfo

v2 DTO describing a single symbol's market data and metadata as held in the wrapper's pumping cache. Curated subset of the wrapper's SymbolInfo: covers what clients monitoring tick feeds / building a quote panel actually need — current Bid/Ask, session High/Low, tick precision (Digits, Point), current Spread (in points), last-tick direction, and the last-tick timestamp. Internal bookkeeping (Count, UpdateFlag, Visible, SpreadBalance, Commission, CommType) is intentionally omitted: those are pump-side cache mechanics or broker-side commission config that don't belong on a real-time market-data wire.

PropertyTypeDescription
symbol string, nullable Symbol name (e.g. "EURUSD")
digits integer (int32) Number of digits after decimal point for prices on this symbol
type integer (int32) Security group index this symbol belongs to (refers to ConGroupSec)
point number (double) Point size (e.g. 0.00001 for 5-digit FX); price increment per point
spread integer (int32) Current spread, in points
direction SymbolPriceDirection Direction of the last tick (Up/Down/Flat) — useful for UI flash highlights
bid number (double) Current bid price
ask number (double) Current ask price
high number (double) Session high price
low number (double) Session low price
lastTime string (date-time), nullable Timestamp of the last tick; null when the pump has not yet observed a tick for this symbol since connect.

ApiError

v2 error body. Code is the stable transport error code; ManagerCode is the raw MT4 ResultCode (serialized as a string for a known enum member, or as a number for an unrecognised value returned by MT4); Message is a human-readable description.

PropertyTypeDescription
code WebApiErrorCode Stable transport-level error code.
managerCode ResultCode Raw MT4/MT5 manager result code, when the error came from the trading platform; otherwise null.
message string, nullable Human-readable error description.

ApiMeta

Response metadata. ActivityId is the W3C trace-id for correlation in Seq/SigNoz. Paging is present only on paginated list responses; otherwise it is omitted — the global JSON context policy serialises null fields, so we override that here with System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull.

PropertyTypeDescription
activityId string, nullable W3C trace id for correlating this response in logs and tracing (Seq/SigNoz).
paging PagingMeta Pagination info; present only on list responses, omitted otherwise.

MT4SymbolGroup

v2 DTO describing a single MT4 symbol group (security category). Mirrors the wrapper's ConSymbolGroup — which only carries Name and Description as fixed-size ANSI fields. There is no ProfitCurrency on the MT4-side group struct (that lives on per-symbol settings, not on the group level), so the DTO faithfully exposes only what exists.

PropertyTypeDescription
name string, nullable Group name (e.g. "Forex", "CFD", "Metals")
description string, nullable Human-readable description of the group

MT4SymbolConfig

v2 DTO for a symbol's full server-side configuration. Curated from ConSymbol; drops reserved / unused arrays and the nested Sessions table (planned as its own endpoint). Seven wrapper enum fields (TradeMode, ProfitCalculationMode, SymbolExecMode, SwapType, GTCMode, MarginCalculationMode) are exposed as strings; see feedback-stj-enum-leaf-nested for why the conversion happens at the mapper.

PropertyTypeDescription
symbol string, nullable Symbol name (max 12 chars)
description string, nullable Human-readable description
source string, nullable Data feed source identifier
currency string, nullable Quote currency code
type integer (int32) Symbol type identifier
digits integer (int32) Number of decimal digits in the quote
tradeMode string, nullable Trading mode (Disabled / CloseOnly / Full)
backgroundColor integer (int32) Background colour for terminal client (BGR int)
count integer (int32) Tick counter for the symbol (computed)
countOriginal integer (int32) Original tick counter (computed)
realtime integer (int32) 0 = synthetic, non-zero = real-time feed
starting string (date-time) Symbol activation date (UTC)
expiration string (date-time) Symbol expiration date (UTC)
profitCalculationMode string, nullable Profit calculation mode (Forex / CFD / Futures)
filter integer (int32) Tick filter type
filterCounter integer (int32) Tick filter counter (computed)
filterLimit number (double) Tick filter price-change limit
filterSmoothing integer (int32) Tick filter smoothing factor
logging integer (int32) 0 = no logging, non-zero = log price changes
spread integer (int32) Spread in points (0 = floating)
spreadBalance integer (int32) Spread balance correction
symbolExecMode string, nullable Symbol execution mode
swapEnable integer (int32) 0 = swaps disabled, non-zero = enabled
swapType string, nullable Swap type (Points / SymbolBase / SymbolMargin / CurrencyMargin)
swapLong number (double) Swap value for long positions
swapShort number (double) Swap value for short positions
swapRollover3Days integer (int32) Day of week (1-7) when 3-day rollover applies
contractSize number (double) Contract size
tickValue number (double) Tick value in deposit currency
tickSize number (double) Tick size
stopsLevel integer (int32) Minimum distance to current price for SL/TP (points)
gtcMode string, nullable Pending order GTC mode
marginCalculationMode string, nullable Margin calculation mode (Forex / CFD / Futures / CFDIndex / CFDLeverage)
marginInitial number (double) Initial margin per lot
marginMaintenance number (double) Maintenance margin per lot
marginHedged number (double) Hedged margin per lot
marginDivider number (double) Margin divider
percentage number (double) Percentage
point number (double) Point size
multiply number (double) Multiplier
bidTickValue number (double) Bid tick value
askTickValue number (double) Ask tick value
longOnly integer (int32) 0 = long+short, non-zero = long-only
instantMaxVolume integer (int32) Max instant-execution volume (lots, 0 = unlimited)
marginCurrency string, nullable Margin currency for non-deposit-currency symbols
freezeLevel integer (int32) Freeze level (points before expiration to freeze trading)
marginHedgedStrong integer (int32) Strong hedge margin per lot
valueDate string (date-time) Value date (UTC)
quotesDelay integer (int32) Quotes delay in seconds (0 = real time)
swapOpenPrice integer (int32) 0 = standard, non-zero = use open price for swaps
swapVariationMargin integer (int32) 0 = swap, non-zero = variation margin

MT4SymbolDaySessions

v2 DTO bundling the Quote and Trade sessions for one weekday on a symbol. DayOfWeek follows the .NET convention: 0=Sunday, 1=Monday, ..., 6=Saturday.

PropertyTypeDescription
dayOfWeek integer (int32) Day of week: 0=Sunday ... 6=Saturday (.NET DayOfWeek numeric)
quoteOvernight integer (int32) Whether quote sessions roll over midnight
tradeOvernight integer (int32) Whether trade sessions roll over midnight
quote MT4SymbolSession[] Up to three quote (price) session windows for the day
trade MT4SymbolSession[] Up to three trade (order acceptance) session windows for the day

TradeMode

Values: No, Close, Full

ProfitCalculationMode

Values: Forex, CFD, Futures

SymbolExecMode

Values: Request, Instant, Market

SwapType

Values: Points, Dollars, Interest, MarginCurrency

GTCMode

Values: Daily, GTC, DailyNoStops

MarginCalculationMode

Values: Forex, CFD, Futures, CFDIndex, CFDLeverage