# cTrader ProtoOAErrorRes

Independent and unofficial. Not affiliated with or endorsed by any broker or platform named here. Educational only: nothing here is advice, and nothing here recommends a broker or a trade.

This is the markdown version of https://openbrokerapi.com/platforms/ctrader/messages/protooaerrorres, written from the same records as that page.

Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.

The general answer when a request fails. It names the error and can say when maintenance ends or how long a rate limited payload type stays blocked.

- Message: `ProtoOAErrorRes`
- Interface: cTrader Open API
- Group: Connection
- Status: verified. Source: [help.ctrader.com](https://help.ctrader.com/open-api/messages/#protooaerrorres), checked 2026-10-12.
- The definition file it was checked against: https://github.com/spotware/openapi-proto-messages/blob/main/OpenApiMessages.proto

This is a message of the cTrader Open API, not an HTTP endpoint. It has no method and no path: it is sent over an open TCP or WebSocket connection, as Protocol Buffers or as JSON. It is in no OpenAPI file on this site and the request builder does not list it.

## The message

- Name: `ProtoOAErrorRes`
- Direction: Response, sent by the server
- Payload type: `PROTO_OA_ERROR_RES`, number `2142`. This number is what identifies the message on the wire.

## Fields

- `payloadType` (type ProtoOAPayloadType, optional): Identifies the message. Its default in the definition is PROTO_OA_ERROR_RES, which is number 2142.
- `ctidTraderAccountId` (type int64, optional): The account the failed request was about, where there was one.
- `errorCode` (type string, required): The name of the error, taken from the ProtoErrorCode enumeration or from another error code enumeration.
- `description` (type string, optional): The error described in words.
- `maintenanceEndTimestamp` (type int64, optional): When the current maintenance session ends, as Unix time in seconds.
- `retryAfter` (type uint64, optional): Sent with the error code BLOCKED_PAYLOAD_TYPE after a rate limit is hit: how many seconds until that payload type is unblocked.

## Return codes documented for this message

The definition says the errorCode field of this message holds the name of a ProtoErrorCode or of another error code enumeration. The cTrader error codes recorded here, read from those enumerations, are below. Status: verified. Source: [help.ctrader.com](https://help.ctrader.com/open-api/messages/#protooaerrorres), checked 2026-10-12.

- [OA_AUTH_TOKEN_EXPIRED (1)](https://openbrokerapi.com/errors/ctrader/oa-auth-token-expired): The access token has expired.
- [UNKNOWN_ERROR (1)](https://openbrokerapi.com/errors/ctrader/unknown-error): A generic error.
- [ACCOUNT_NOT_AUTHORIZED (2)](https://openbrokerapi.com/errors/ctrader/account-not-authorized): The trading account has not been authorised on this connection.
- [UNSUPPORTED_MESSAGE (2)](https://openbrokerapi.com/errors/ctrader/unsupported-message): The message type is not supported.
- [INVALID_REQUEST (3)](https://openbrokerapi.com/errors/ctrader/invalid-request): Input values are wrong.
- [TIMEOUT_ERROR (5)](https://openbrokerapi.com/errors/ctrader/timeout-error): Execution timed out.
- [ENTITY_NOT_FOUND (6)](https://openbrokerapi.com/errors/ctrader/entity-not-found): The id does not exist.
- [CANT_ROUTE_REQUEST (7)](https://openbrokerapi.com/errors/ctrader/cant-route-request): Connection to the server is lost.
- [FRAME_TOO_LONG (8)](https://openbrokerapi.com/errors/ctrader/frame-too-long): Message is too large.
- [MARKET_CLOSED (9)](https://openbrokerapi.com/errors/ctrader/market-closed): Market is closed.
- [CONCURRENT_MODIFICATION (10)](https://openbrokerapi.com/errors/ctrader/concurrent-modification): The order is busy, for example still being executed, so the change was not applied.
- [BLOCKED_PAYLOAD_TYPE (11)](https://openbrokerapi.com/errors/ctrader/blocked-payload-type): Blocked or rate limited.
- [RET_NO_SUCH_LOGIN (12)](https://openbrokerapi.com/errors/ctrader/ret-no-such-login): The trading account no longer exists.
- [ALREADY_LOGGED_IN (14)](https://openbrokerapi.com/errors/ctrader/already-logged-in): Account already authorised on this connection.
- [INCORRECT_BOUNDARIES (35)](https://openbrokerapi.com/errors/ctrader/incorrect-boundaries): The from and to period is too long or invalid.
- [RET_ACCOUNT_DISABLED (64)](https://openbrokerapi.com/errors/ctrader/ret-account-disabled): The trading account is disabled.
- [CONNECTIONS_LIMIT_EXCEEDED (67)](https://openbrokerapi.com/errors/ctrader/connections-limit-exceeded): Your app has too many open connections.
- [WORSE_GSL_NOT_ALLOWED (68)](https://openbrokerapi.com/errors/ctrader/worse-gsl-not-allowed): The request would increase the risk on a position that has a guaranteed stop loss, which is not allowed.
- [SYMBOL_HAS_HOLIDAY (69)](https://openbrokerapi.com/errors/ctrader/symbol-has-holiday): Trading is disabled for the symbol because of a holiday in its schedule.
- [CH_CLIENT_AUTH_FAILURE (101)](https://openbrokerapi.com/errors/ctrader/ch-client-auth-failure): App credentials wrong or app not activated.
- [CH_CLIENT_NOT_AUTHENTICATED (102)](https://openbrokerapi.com/errors/ctrader/ch-client-not-authenticated): Command sent before app authorisation.
- [CH_CLIENT_ALREADY_AUTHENTICATED (103)](https://openbrokerapi.com/errors/ctrader/ch-client-already-authenticated): App authorised twice.
- [CH_ACCESS_TOKEN_INVALID (104)](https://openbrokerapi.com/errors/ctrader/ch-access-token-invalid): Access token invalid.
- [CH_SERVER_NOT_REACHABLE (105)](https://openbrokerapi.com/errors/ctrader/ch-server-not-reachable): The trading service is unavailable.
- [CH_CTID_TRADER_ACCOUNT_NOT_FOUND (106)](https://openbrokerapi.com/errors/ctrader/ch-ctid-trader-account-not-found): ctidTraderAccountId not found.
- [CH_OA_CLIENT_NOT_FOUND (107)](https://openbrokerapi.com/errors/ctrader/ch-oa-client-not-found): The client ID is not recognised.
- [REQUEST_FREQUENCY_EXCEEDED (108)](https://openbrokerapi.com/errors/ctrader/request-frequency-exceeded): Request rate limit exceeded (page gives the name with no longer description).
- [SERVER_IS_UNDER_MAINTENANCE (109)](https://openbrokerapi.com/errors/ctrader/server-is-under-maintenance): The server is in maintenance.
- [CHANNEL_IS_BLOCKED (110)](https://openbrokerapi.com/errors/ctrader/channel-is-blocked): Operations are blocked for this account.
- [NOT_SUBSCRIBED_TO_SPOTS (112)](https://openbrokerapi.com/errors/ctrader/not-subscribed-to-spots): A subscription to depth, trendbars or similar was requested for a symbol that has no spot subscription.
- [ALREADY_SUBSCRIBED (113)](https://openbrokerapi.com/errors/ctrader/already-subscribed): You asked for a subscription that is already active.
- [SYMBOL_NOT_FOUND (114)](https://openbrokerapi.com/errors/ctrader/symbol-not-found): The symbol does not exist for this account.
- [UNKNOWN_SYMBOL (115)](https://openbrokerapi.com/errors/ctrader/unknown-symbol): The file gives this code no description of its own, only a note that it is to be merged with SYMBOL_NOT_FOUND (114).
- [NO_QUOTES (117)](https://openbrokerapi.com/errors/ctrader/no-quotes): Trading cannot be done because no quotes are available.
- [NOT_ENOUGH_MONEY (118)](https://openbrokerapi.com/errors/ctrader/not-enough-money): Insufficient margin.
- [MAX_EXPOSURE_REACHED (119)](https://openbrokerapi.com/errors/ctrader/max-exposure-reached): The maximum exposure for this trader, symbol and side is reached.
- [POSITION_NOT_FOUND (120)](https://openbrokerapi.com/errors/ctrader/position-not-found): Position id does not exist.
- [ORDER_NOT_FOUND (121)](https://openbrokerapi.com/errors/ctrader/order-not-found): The order does not exist.
- [POSITION_NOT_OPEN (122)](https://openbrokerapi.com/errors/ctrader/position-not-open): A request tried to close a position that is not open.
- [POSITION_LOCKED (123)](https://openbrokerapi.com/errors/ctrader/position-locked): The position is in a state that does not allow the operation to be performed.
- [TOO_MANY_POSITIONS (124)](https://openbrokerapi.com/errors/ctrader/too-many-positions): The account has hit its limit of open positions and orders.
- [TRADING_BAD_VOLUME (125)](https://openbrokerapi.com/errors/ctrader/trading-bad-volume): Volume invalid (cTrader volume is in cents of units).
- [TRADING_BAD_STOPS (126)](https://openbrokerapi.com/errors/ctrader/trading-bad-stops): Stop price invalid.
- [TRADING_BAD_PRICES (127)](https://openbrokerapi.com/errors/ctrader/trading-bad-prices): The price is invalid.
- [TRADING_BAD_STAKE (128)](https://openbrokerapi.com/errors/ctrader/trading-bad-stake): The stake volume is invalid, for example negative.
- [PROTECTION_IS_TOO_CLOSE_TO_MARKET (129)](https://openbrokerapi.com/errors/ctrader/protection-is-too-close-to-market): Stop loss or take profit is invalid or too close to the market.
- [TRADING_BAD_EXPIRATION_DATE (130)](https://openbrokerapi.com/errors/ctrader/trading-bad-expiration-date): The expiration given for the order is invalid.
- [PENDING_EXECUTION (131)](https://openbrokerapi.com/errors/ctrader/pending-execution): The change cannot be applied because the position has an order under execution.
- [TRADING_DISABLED (132)](https://openbrokerapi.com/errors/ctrader/trading-disabled): Symbol not tradable.
- [TRADING_NOT_ALLOWED (133)](https://openbrokerapi.com/errors/ctrader/trading-not-allowed): The account is read only for your app.
- [UNABLE_TO_CANCEL_ORDER (134)](https://openbrokerapi.com/errors/ctrader/unable-to-cancel-order): The order could not be cancelled.
- [UNABLE_TO_AMEND_ORDER (135)](https://openbrokerapi.com/errors/ctrader/unable-to-amend-order): The order could not be amended.
- [SHORT_SELLING_NOT_ALLOWED (136)](https://openbrokerapi.com/errors/ctrader/short-selling-not-allowed): Short selling is not allowed for this symbol or account.

## Limits that apply at cTrader Open API

- Requests a second, not historical data: 50 requests per second
  - Scope: Per connection, requests that are not for historical data
  - Status: verified. Source: [help.ctrader.com](https://help.ctrader.com/open-api/), checked 2026-10-12.
  - Note: Historical data requests have their own lower limit, held in a separate record.
- Requests a second, historical data: 5 requests per second
  - Scope: Per connection, historical data requests only
  - Status: verified. Source: [help.ctrader.com](https://help.ctrader.com/open-api/), checked 2026-10-12.

## Related cTrader messages: Connection

- [ProtoHeartbeatEvent](https://openbrokerapi.com/platforms/ctrader/messages/protoheartbeatevent): A message with no content that shows the connection is alive. The server sends it when nothing else is being sent, and a client can send it to keep a connection open through a quiet spell of more than 30 seconds.
- [ProtoOAAccountDisconnectEvent](https://openbrokerapi.com/platforms/ctrader/messages/protooaaccountdisconnectevent): Sent when the server drops the session of one trading account. The account has to be authorised again before it can be used.
- [ProtoOAAccountsTokenInvalidatedEvent](https://openbrokerapi.com/platforms/ctrader/messages/protooaaccountstokeninvalidatedevent): Sent when the server ends the session of particular trading accounts while the connection and its other account sessions carry on. The definition gives the causes: the account or the cTrader ID was deleted, or the token was refreshed or revoked.
- [ProtoOAClientDisconnectEvent](https://openbrokerapi.com/platforms/ctrader/messages/protooaclientdisconnectevent): Sent when the server ends the connection with the application. Every trading account session on the connection ends with it.
- [ProtoOAVersionReq](https://openbrokerapi.com/platforms/ctrader/messages/protooaversionreq): Asks the server for its version, which the definition says can be used to check the current version of the Open API scheme.
- [ProtoOAVersionRes](https://openbrokerapi.com/platforms/ctrader/messages/protooaversionres): Returns the version of the server application.

## More on cTrader

- [All cTrader messages](https://openbrokerapi.com/platforms/ctrader/messages): 49 documented here, grouped by what they do.
- [cTrader API quickstart](https://openbrokerapi.com/platforms/ctrader/quickstart)
- [All cTrader error codes](https://openbrokerapi.com/errors/ctrader)
- [cTrader API page](https://openbrokerapi.com/platforms/ctrader): The full record: access, authentication, limits and the source for each.

## Licence and how to cite

The records behind this page are all rights reserved. This file is the page itself, at its own address, in another format. It is not part of the CC BY 4.0 downloads listed at https://openbrokerapi.com/data. Quote from it with a link to the page.

Cite as: cTrader ProtoOAErrorRes. Broker API Hub, https://openbrokerapi.com/platforms/ctrader/messages/protooaerrorres, newest check 2026-10-12.

Where you rely on a single figure, cite the source and the checked date printed beside it as well. Where this page and a broker's own documentation differ, the documentation wins.
