Order Management errors
Errors returned by the Order Management REST API. The Market Data, News v1 and Order Management APIs share this format. Other Openmarkets APIs do not: the back office APIs return a different envelope, and Account Opening returns an RFC 7807 problem document.
Error format
All error responses carry an appropriate HTTP status code and the following body:
{
"errorCode": "InvalidRequestParameters",
"message": "Bad request. Please review errors.",
"errors": [
{
"errorCode": "InvalidLifetime",
"fieldName": "Lifetime",
"fieldValue": "123",
"message": "Lifetime: '123' is invalid. Choose from: Date, EndOfDay, GoodTillCancel, FillAndKill, FillOrKill."
}
]
}
| Field | Description |
|---|---|
errorCode | Top-level error code. Identifies the type of top-level error. |
message | Human readable message describing the error. |
errors | Array of errors specific to invalid request parameters passed by the client. May be null. |
errors[].errorCode | Parameter-level error code. Identifies the type of parameter error. |
errors[].fieldName | The name of the field in the request. |
errors[].fieldValue | The value passed in the field by the client. |
errors[].message | Human readable message describing the error. |
Match on errorCode rather than message. Messages are written for humans and may change; codes are stable.
Top-level errors
The three vetting and order action codes are unique to this API.
| Status | Error code | Notes |
|---|---|---|
| 400 | RequestMissing | The entire request is missing and needs to be set by the client. |
| 400 | InvalidRequestParameters | The request contains invalid parameters. The offending parameters are listed in the errors array. |
| 400 | BrokenVettingRule | The parameters used to create or amend an order broke a vetting rule. See message for more details. |
| 400 | ActionUnavailable | The action requested against the order is unavailable. See message for more details. |
| 400 | ActionTemporarilyUnavailable | The action requested against the order is temporarily unavailable. See message for more details. |
| 403 | AccessDenied | Your client doesn't have access to this endpoint. Try calling DELETE /sessions/application/v1 and retrying; if it still fails, contact support. |
| 404 | EndpointNotFound | The endpoint called does not exist. |
| 429 | ApiCallsFrequencyExceeded | Requests exceeded the maximum allowed for the time period, for example 30 calls per second. Back off and retry with increasing delay. |
| 429 | ActiveApiCallsExceeded | Too many requests are in flight at once. Active requests are those that have not returned yet, including open update subscriptions. |
| 429 | MaxUpdatesQueuedExceeded | Too many updates queued since the last call. Poll the updates endpoint more often, or narrow the subscription so it returns fewer updates. |
| 500 | InternalServerError | An unhandled error occurred. If it persists after retrying, contact support with the request made. |
| 503 | ServiceUnavailable | A temporary error occurred. If it persists after retrying, contact support with the request made. |
Request tracking errors
Update subscriptions are correlated across calls by the X-Request-ID header. These parameter-level codes relate to that header.
| Error code | Notes |
|---|---|
InvalidRequestIds | The RequestIds parameter passed in the request is invalid. See message for more details. |
RequestAlreadyProcessed | The request ID used in the X-Request-ID header has already been processed by another request. |
RequestAlreadyInUse | The request ID used in the X-Request-ID header is already being used for a different updates subscription. |
RequestNotFound | The request ID used to retrieve updates could not be found. Restart the updates subscription flow. |
Parameter-level errors
| Error code | Notes |
|---|---|
InvalidAccountCode | The account code passed in the request is invalid. See message for more details. |
InvalidAccountGroup | The account group passed in the request is invalid. See message for more details. |
InvalidAdvisorCode | The advisor code passed in the request is invalid. See message for more details. |
InvalidAdvisorGroup | The advisor group passed in the request is invalid. See message for more details. |
InvalidSecurityCode | The security code passed in the request is invalid. See message for more details. |
InvalidSide | The side passed in the request is invalid. See message for more details. |
InvalidOrderPrice | The order price passed in the request is invalid. See message for more details. |
InvalidOrderVolume | The order volume passed in the request is invalid. See message for more details. |
InvalidPricingInstruction | The pricing instruction passed in the request is invalid. See message for more details. |
InvalidLifetime | The lifetime passed in the request is invalid. See message for more details. |
InvalidExpiryDateTime | The expiry date-time passed in the request is invalid. See message for more details. |
InvalidNotes | The notes passed in the request are invalid. See message for more details. |
InvalidExchange | The exchange passed in the request is invalid. See message for more details. |
InvalidDestination | The destination passed in the request is invalid. See message for more details. |
InvalidFixedContingentOrder | The fixed contingent order passed in the request is invalid. See message for more details. |
InvalidTriggerPrice | The trigger price passed in the request is invalid. See message for more details. |
InvalidTriggerPriceType | The trigger price type passed in the request is invalid. See message for more details. |
InvalidTriggerCondition | The trigger condition passed in the request is invalid. See message for more details. |
InvalidOrderNumbers | The order numbers passed in the request are invalid. See message for more details. |
InvalidOrderNumber | The order number passed in the request is invalid. See message for more details. |
InvalidDateTimeFrom | The DateTimeFrom parameter passed in the request is invalid. See message for more details. |
InvalidDateTimeTo | The DateTimeTo parameter passed in the request is invalid. See message for more details. |
InvalidUpdates | The Updates header parameter passed in the request is invalid. See message for more details. |
Post-creation order vetting errors
An order can be accepted by the API and then held by a vetting rule. When that happens the reason appears in Order.StateDescription.
These are not HTTP errors. The request succeeds, so you must read orderState and stateDescription on the order to discover it was held.
Limits and balances
| Order.StateDescription |
|---|
| Max order value limit breached |
| Concurrent bid/offer breached |
| Order value limit exceeded |
| Net day limit exceed |
| Gross day limit exceeded |
| Check Cash balance |
| Check Positions |
Authorisation required
| Order.StateDescription |
|---|
| ETO Orders Require DTR Authorisation |
| Warrant Orders Require DTR Authorisation |
| Chi-X Warrant Require DTR Authorisation |
| NSX Orders Require DTR Authorisation |
| Out of Market hours. Your order will be authorised the next business day before 10am |
Price range breaches
The same six price checks are applied per market phase. The phase appears in parentheses at the start of the description.
| Check | Phases |
|---|---|
OrderRangePercentBreach | ETF, OPEN, PRE-CLOSE, PRE-OPEN, TRADING HALT |
PriceRangeOrdersValuedLessThanValueBreach | ETF, OPEN, PRE-CLOSE, PRE-OPEN, TRADING HALT |
PriceRangePercentFromBidAskBreach | ETF, OPEN, PRE-CLOSE, PRE-OPEN, TRADING HALT |
PriceRangePercentFromLastBreach | ETF, PRE-CLOSE, PRE-OPEN, TRADING HALT |
PriceRangePercentFromLastValueBreach | OPEN |
PriceRangeValidPriceStepBidAskBreach | ETF, OPEN, PRE-CLOSE, PRE-OPEN, TRADING HALT |
PriceRangeValidPriceStepFromLastBreach | ETF, OPEN, PRE-CLOSE, PRE-OPEN, TRADING HALT |
ETF phase descriptions are suffixed with - CHECK PRICE, for example:
(ETF) PriceRangePercentFromBidAskBreach - CHECK PRICE
(PRE-OPEN) OrderRangePercentBreach

