Skip to content

Errors

Errors are a JSON object with a stable string code, a message, and a request id:

json
{ "error": { "code": "PRICE_BAND_EXCEEDED", "message": "…" },
  "request_id": "req_…" }

Localize by code. HTTP status follows REST conventions (400 bad body, 401 auth, 404 not found, 409 conflict, 422 business-rule rejection, 429 rate limit).

vs. Alpaca: Alpaca uses numeric codes (40310000). Boursa uses readable string codes.

Auth

CodeMeaning
UNAUTHENTICATEDmissing/invalid key
SIGNATURE_INVALIDbad HMAC signature
SIGNATURE_EXPIREDtimestamp outside ±300s
SIGNATURE_REQUIREDsignature missing on a money endpoint
IDEMPOTENCY_KEY_REQUIREDmissing on a state change
RATE_LIMITEDslow down

Orders

CodeMeaning
MARKET_CLOSEDsession closed (and not queueable)
INSTRUMENT_HALTED / INSTRUMENT_UNKNOWNinstrument state
TICK_VIOLATIONprice not a tick multiple
PRICE_BAND_EXCEEDEDprice outside ±20%
INSUFFICIENT_SETTLED_CASH / INSUFFICIENT_SETTLED_SECURITIESbalance
SUITABILITY_REQUIRED / RISK_ACK_REQUIREDgating
INVESTOR_RESTRICTED / SHARIAH_RESTRICTEDaccount/screen
INVALID_TIME_IN_FORCEbad TIF
CLIENT_ORDER_ID_EXISTSreused client_order_id
ORDER_NOT_CANCELLABLEalready terminal

Funding

CodeMeaning
RAIL_LIMIT_EXCEEDEDover the per-transfer/day limit
RAIL_FAILED / RAIL_SUBMIT_FAILEDpayment-rail failure
INVALID_AMOUNT / INVALID_DIRECTIONbad input

KYC

CodeMeaning
DOCUMENTS_REQUIREDboth ID sides needed
IMAGE_TOO_LARGE / IMAGE_FORMAT_UNSUPPORTEDupload validation
SCREENING_REJECTEDbroker declined
APPLICATION_NOT_EDITABLEwrong state

Embedded investing infrastructure for the Egyptian Exchange. Sandbox runs on simulated money.