{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/phemex/main/json-schema/order.json",
  "title": "Phemex Order",
  "description": "Schema for a Phemex trading order across contract, spot, and hedged perpetual markets.",
  "type": "object",
  "properties": {
    "orderID": {
      "type": "string",
      "description": "Unique system-generated order identifier"
    },
    "clOrdID": {
      "type": "string",
      "maxLength": 40,
      "description": "Client-supplied order identifier"
    },
    "symbol": {
      "type": "string",
      "description": "Trading pair symbol (e.g. BTCUSD, sBTCUSDT)"
    },
    "side": {
      "type": "string",
      "enum": ["Buy", "Sell"],
      "description": "Order side"
    },
    "posSide": {
      "type": "string",
      "enum": ["Long", "Short"],
      "description": "Position side for hedged perpetual orders"
    },
    "ordType": {
      "type": "string",
      "enum": ["Limit", "Market", "Stop", "StopLimit"],
      "description": "Order type"
    },
    "timeInForce": {
      "type": "string",
      "enum": ["GoodTillCancel", "ImmediateOrCancel", "FillOrKill", "PostOnly"],
      "description": "Time in force policy"
    },
    "ordStatus": {
      "type": "string",
      "enum": ["New", "PartiallyFilled", "Filled", "Canceled", "Rejected", "Triggered", "Untriggered"],
      "description": "Current order status"
    },
    "priceEp": {
      "type": "integer",
      "description": "Order price scaled by priceScale (contract API)"
    },
    "priceRp": {
      "type": "string",
      "description": "Order price as real number string (hedged perpetual API)"
    },
    "orderQty": {
      "type": "integer",
      "description": "Order quantity in contracts (contract API)"
    },
    "orderQtyRq": {
      "type": "string",
      "description": "Order quantity as real number string (hedged perpetual API)"
    },
    "baseQtyEv": {
      "type": "integer",
      "description": "Base asset quantity scaled by valueScale (spot API)"
    },
    "quoteQtyEv": {
      "type": "integer",
      "description": "Quote asset quantity scaled by valueScale (spot API)"
    },
    "qtyType": {
      "type": "string",
      "enum": ["ByBase", "ByQuote"],
      "description": "Quantity type for spot orders"
    },
    "reduceOnly": {
      "type": "boolean",
      "description": "If true, order can only reduce an existing position"
    },
    "closeOnTrigger": {
      "type": "boolean",
      "description": "If true, close position on trigger"
    },
    "stopPxEp": {
      "type": "integer",
      "description": "Stop price scaled (contract API)"
    },
    "stopPxRp": {
      "type": "string",
      "description": "Stop price as real number (hedged perpetual API)"
    },
    "takeProfitEp": {
      "type": "integer",
      "description": "Take profit price scaled (contract API)"
    },
    "takeProfitRp": {
      "type": "string",
      "description": "Take profit price as real number (hedged perpetual API)"
    },
    "stopLossEp": {
      "type": "integer",
      "description": "Stop loss price scaled (contract API)"
    },
    "stopLossRp": {
      "type": "string",
      "description": "Stop loss price as real number (hedged perpetual API)"
    },
    "cumQty": {
      "type": "integer",
      "description": "Cumulative filled quantity"
    },
    "leavesQty": {
      "type": "integer",
      "description": "Remaining unfilled quantity"
    },
    "transactTimeNs": {
      "type": "integer",
      "description": "Transaction time in nanoseconds"
    },
    "createTimeNs": {
      "type": "integer",
      "description": "Order creation time in nanoseconds"
    }
  },
  "required": ["symbol", "side", "ordType"]
}
