{
  "enums": {
    "MsgType": {
      "0": {
        "label": "Heartbeat",
        "fixCode": "HEARTBEAT"
      },
      "1": {
        "label": "TestRequest",
        "fixCode": "TEST_REQUEST"
      },
      "2": {
        "label": "ResendRequest",
        "fixCode": "RESEND_REQUEST"
      },
      "3": {
        "label": "Reject",
        "fixCode": "REJECT"
      },
      "5": {
        "label": "Logout",
        "fixCode": "LOGOUT"
      },
      "6": {
        "label": "IOI",
        "fixCode": "IOI"
      },
      "8": {
        "label": "ExecutionReport",
        "fixCode": "EXECUTION_REPORT"
      },
      "A": {
        "label": "Logon",
        "fixCode": "LOGON"
      },
      "D": {
        "label": "NewOrderSingle",
        "fixCode": "NEW_ORDER_SINGLE"
      },
      "F": {
        "label": "OrderCancelRequest",
        "fixCode": "ORDER_CANCEL_REQUEST"
      },
      "G": {
        "label": "OrderCancelReplaceRequest",
        "fixCode": "ORDER_CANCEL_REPLACE_REQUEST"
      },
      "R": {
        "label": "QuoteRequest",
        "fixCode": "QUOTE_REQUEST"
      },
      "S": {
        "label": "Quote",
        "fixCode": "QUOTE"
      },
      "W": {
        "label": "MarketDataSnapshotFullRefresh",
        "fixCode": "MARKET_DATA_SNAPSHOT_FULL_REFRESH"
      },
      "X": {
        "label": "MarketDataIncrementalRefresh",
        "fixCode": "MARKET_DATA_INCREMENTAL_REFRESH"
      },
      "Z": {
        "label": "QuoteCancel",
        "fixCode": "QUOTE_CANCEL"
      },
      "h": {
        "label": "TradingSessionStatus",
        "fixCode": "TRADING_SESSION_STATUS"
      },
      "j": {
        "label": "BusinessMessageReject",
        "fixCode": "BUSINESS_MESSAGE_REJECT"
      },
      "x": {
        "label": "SecurityListRequest",
        "fixCode": "SECURITY_LIST_REQUEST"
      },
      "y": {
        "label": "SecurityList",
        "fixCode": "SECURITY_LIST"
      },
      "AI": {
        "label": "QuoteStatusReport",
        "fixCode": "QUOTE_STATUS_REPORT"
      },
      "AJ": {
        "label": "QuoteResponse",
        "fixCode": "QUOTE_RESPONSE"
      }
    },
    "Side": {
      "1": {
        "label": "Buy",
        "fixCode": "BUY"
      },
      "2": {
        "label": "Sell",
        "fixCode": "SELL"
      }
    },
    "OrdType": {
      "1": {
        "label": "Market",
        "fixCode": "MARKET"
      },
      "2": {
        "label": "Limit",
        "fixCode": "LIMIT"
      }
    },
    "TimeInForce": {
      "0": {
        "label": "Day (also GoodTilCancel at OpenYield)",
        "fixCode": "DAY"
      },
      "3": {
        "label": "ImmediateOrCancel",
        "fixCode": "IMMEDIATE_OR_CANCEL"
      },
      "4": {
        "label": "FillOrKill",
        "fixCode": "FILL_OR_KILL"
      }
    },
    "ExecInst": {
      "G": {
        "label": "AllOrNone",
        "fixCode": "ALL_OR_NONE"
      },
      "Z": {
        "label": "Cancel if not Best (Single Fill or Cancel)"
      }
    },
    "OrdStatus": {
      "0": {
        "label": "New",
        "fixCode": "NEW"
      },
      "1": {
        "label": "PartiallyFilled",
        "fixCode": "PARTIALLY_FILLED"
      },
      "2": {
        "label": "Filled",
        "fixCode": "FILLED"
      },
      "4": {
        "label": "Canceled",
        "fixCode": "CANCELED"
      },
      "5": {
        "label": "Replaced",
        "fixCode": "REPLACED"
      },
      "8": {
        "label": "Rejected",
        "fixCode": "REJECTED"
      },
      "A": {
        "label": "PendingNew",
        "fixCode": "PENDING_NEW"
      },
      "B": {
        "label": "Calculated",
        "fixCode": "CALCULATED"
      }
    },
    "ExecType": {
      "0": {
        "label": "New",
        "fixCode": "NEW"
      },
      "4": {
        "label": "Canceled",
        "fixCode": "CANCELED"
      },
      "5": {
        "label": "Replaced",
        "fixCode": "REPLACED"
      },
      "8": {
        "label": "Rejected",
        "fixCode": "REJECTED"
      },
      "F": {
        "label": "Trade",
        "fixCode": "TRADE"
      },
      "G": {
        "label": "TradeCorrect",
        "fixCode": "TRADE_CORRECT"
      },
      "H": {
        "label": "TradeCancel",
        "fixCode": "TRADE_CANCEL"
      }
    },
    "OrdRejReason": {
      "1": {
        "label": "Unknown Symbol",
        "fixCode": "UNKNOWN_SYMBOL"
      },
      "3": {
        "label": "Order Exceeds Limit",
        "fixCode": "ORDER_EXCEEDS_LIMIT"
      },
      "5": {
        "label": "Unknown Order",
        "fixCode": "UNKNOWN_ORDER"
      },
      "6": {
        "label": "Duplicate Order",
        "fixCode": "DUPLICATE_ORDER"
      },
      "8": {
        "label": "Stale Order (Bad Price)",
        "fixCode": "STALE_ORDER"
      },
      "10": {
        "label": "Invalid Investor ID (Bad Feed ID)",
        "fixCode": "INVALID_INVESTOR_ID"
      },
      "13": {
        "label": "Incorrect Quantity",
        "fixCode": "INCORRECT_QUANTITY"
      },
      "15": {
        "label": "Unknown Account",
        "fixCode": "UNKNOWN_ACCOUNT"
      }
    },
    "Product": {
      "1": {
        "label": "Agency",
        "fixCode": "AGENCY"
      },
      "3": {
        "label": "Corporate",
        "fixCode": "CORPORATE"
      },
      "6": {
        "label": "Government",
        "fixCode": "GOVERNMENT"
      },
      "11": {
        "label": "Municipal",
        "fixCode": "MUNICIPAL"
      }
    },
    "SecurityIDSource": {
      "1": {
        "label": "CUSIP",
        "fixCode": "CUSIP"
      },
      "4": {
        "label": "ISIN",
        "fixCode": "ISIN_NUMBER"
      },
      "A": {
        "label": "Bloomberg FIGI",
        "fixCode": "BLOOMBERG_SYMBOL"
      }
    },
    "PriceType": {
      "1": {
        "label": "Percentage (clean percent of face value)",
        "fixCode": "PERCENTAGE"
      }
    },
    "SettlType": {
      "0": {
        "label": "Regular settlement",
        "fixCode": "REGULAR"
      },
      "6": {
        "label": "Future dated settlement",
        "fixCode": "FUTURE"
      }
    },
    "EncryptMethod": {
      "0": {
        "label": "None",
        "fixCode": "NONE"
      }
    },
    "ResetSeqNumFlag": {
      "Y": {
        "label": "Reset sequence numbers",
        "fixCode": "YES"
      }
    },
    "TradSesStatus": {
      "0": {
        "label": "Unknown",
        "fixCode": "UNKNOWN"
      },
      "1": {
        "label": "Halted",
        "fixCode": "HALTED"
      },
      "2": {
        "label": "Open",
        "fixCode": "OPEN"
      },
      "3": {
        "label": "Closed",
        "fixCode": "CLOSED"
      },
      "4": {
        "label": "Pre-Open",
        "fixCode": "PRE_OPEN"
      }
    },
    "SecurityListRequestType": {
      "4": {
        "label": "All Securities",
        "fixCode": "ALL_SECURITIES"
      }
    },
    "SecurityRequestResult": {
      "0": {
        "label": "Valid request",
        "fixCode": "VALID_REQUEST"
      }
    },
    "IOITransType": {
      "N": {
        "label": "New",
        "fixCode": "NEW"
      },
      "C": {
        "label": "Cancel",
        "fixCode": "CANCEL"
      },
      "R": {
        "label": "Replace",
        "fixCode": "REPLACE"
      }
    },
    "IOIQltyInd": {
      "L": {
        "label": "Low — is your order",
        "fixCode": "LOW"
      },
      "M": {
        "label": "Medium — maybe yours on shared connections",
        "fixCode": "MEDIUM"
      },
      "H": {
        "label": "High — not your order",
        "fixCode": "HIGH"
      }
    },
    "IOIQualifier": {
      "V": {
        "label": "Versus — will be intermediated by OpenYield",
        "fixCode": "VERSUS"
      },
      "A": {
        "label": "AllOrNone — order must be fully filled or skipped",
        "fixCode": "ALL_OR_NONE"
      }
    },
    "MDUpdateAction": {
      "0": {
        "label": "New",
        "fixCode": "NEW"
      },
      "1": {
        "label": "Change",
        "fixCode": "CHANGE"
      },
      "2": {
        "label": "Delete",
        "fixCode": "DELETE"
      }
    },
    "MDEntryType": {
      "0": {
        "label": "Bid",
        "fixCode": "BID"
      },
      "1": {
        "label": "Offer",
        "fixCode": "OFFER"
      },
      "2": {
        "label": "Trade",
        "fixCode": "TRADE"
      },
      "3": {
        "label": "Index (change on day from previous close)",
        "fixCode": "INDEX_VALUE"
      },
      "7": {
        "label": "High (daily high price)",
        "fixCode": "TRADING_SESSION_HIGH_PRICE"
      },
      "8": {
        "label": "Low (daily low price)",
        "fixCode": "TRADING_SESSION_LOW_PRICE"
      }
    },
    "QuoteStatus": {
      "0": {
        "label": "Accepted",
        "fixCode": "ACCEPTED"
      },
      "1": {
        "label": "Canceled for Symbol",
        "fixCode": "CANCEL_FOR_SYMBOL"
      },
      "5": {
        "label": "Rejected",
        "fixCode": "REJECTED"
      }
    },
    "QuoteCancelType": {
      "4": {
        "label": "Cancel All Quotes",
        "fixCode": "CANCEL_ALL_QUOTES"
      }
    },
    "QuoteType": {
      "0": {
        "label": "Indicative (Order Book Summon)",
        "fixCode": "INDICATIVE"
      },
      "1": {
        "label": "Tradeable (Firm RFO)",
        "fixCode": "TRADEABLE"
      }
    },
    "QuoteResponseLevel": {
      "2": {
        "label": "Acknowledge All",
        "fixCode": "ACKNOWLEDGE_EACH_QUOTE_MESSAGE"
      }
    },
    "QuoteRespType": {
      "1": {
        "label": "Hit/Lift (accept quote)",
        "fixCode": "HIT"
      },
      "4": {
        "label": "Pass",
        "fixCode": "COVER"
      }
    },
    "QuoteQualifier": {
      "A": {
        "label": "AllOrNone"
      }
    },
    "MiscFeeType": {
      "1": {
        "label": "Regulatory (TAF — applicable on bond sells)",
        "fixCode": "REGULATORY"
      },
      "8": {
        "label": "Markup (trade fee to the maker)",
        "fixCode": "MARKUP"
      },
      "12": {
        "label": "Agent (clearing cost for intermediated trades)",
        "fixCode": "AGENT"
      }
    },
    "PartyRole": {
      "1": {
        "label": "Executing Firm (OpenYield MPID)",
        "fixCode": "EXECUTING_FIRM"
      },
      "3": {
        "label": "Client ID (your assigned counterparty code)",
        "fixCode": "CLIENT_ID"
      },
      "4": {
        "label": "Clearing Firm (your MPID shown to contra firms)",
        "fixCode": "CLEARING_FIRM"
      },
      "5": {
        "label": "Investor ID (account/sub-account code)",
        "fixCode": "INVESTOR_ID"
      },
      "11": {
        "label": "Order Origination Trader (obfuscated GUI trader code)",
        "fixCode": "ORDER_ORIGINATION_TRADER"
      },
      "17": {
        "label": "Contra Firm (MPID of settlement counterparty)",
        "fixCode": "CONTRA_FIRM"
      },
      "18": {
        "label": "Contra Clearing Firm (DTCC code of contra clearing house)",
        "fixCode": "CONTRA_CLEARING_FIRM"
      },
      "24": {
        "label": "Customer Code (pass-through tag for subscriber use)",
        "fixCode": "CUSTOMER_ACCOUNT"
      }
    },
    "PartySubIDType": {
      "10": {
        "label": "Securities Account Number",
        "fixCode": "SECURITIES_ACCOUNT_NUMBER"
      }
    }
  },
  "fields": {
    "6": {
      "name": "AvgPx",
      "type": "Price",
      "description": "Average price from all fills"
    },
    "7": {
      "name": "BeginSeqNo",
      "type": "SeqNum",
      "description": "Beginning sequence number for resend request"
    },
    "11": {
      "name": "ClOrdID",
      "type": "String",
      "description": "Subscriber Order ID"
    },
    "14": {
      "name": "CumQty",
      "type": "Qty",
      "description": "Cumulative quantity filled"
    },
    "16": {
      "name": "EndSeqNo",
      "type": "SeqNum",
      "description": "Ending sequence number for resend request (0=infinity)"
    },
    "17": {
      "name": "ExecID",
      "type": "String",
      "description": "OpenYield's Response or Fill ID"
    },
    "18": {
      "name": "ExecInst",
      "type": "MultipleCharValue",
      "enum": "ExecInst",
      "description": "Execution instructions. Set to G (AllOrNone) or Z (Single Fill or Cancel). G and Z are mutually exclusive. When either is set, TimeInForce is ignored. Not applicable to Quotes."
    },
    "19": {
      "name": "ExecRefID",
      "type": "String",
      "description": "Original ExecID (post-trade)"
    },
    "22": {
      "name": "SecurityIDSource",
      "type": "String",
      "enum": "SecurityIDSource",
      "description": "Source of SecurityID"
    },
    "23": {
      "name": "IOIID",
      "type": "String",
      "description": "OpenYield's IOI identifier"
    },
    "25": {
      "name": "IOIQltyInd",
      "type": "Char",
      "enum": "IOIQltyInd",
      "description": "IOI quality indicator"
    },
    "26": {
      "name": "IOIRefID",
      "type": "String",
      "description": "Original IOI ID in Cancel and Replace"
    },
    "27": {
      "name": "IOIQty",
      "type": "String",
      "description": "IOI Quantity; zero for cancel"
    },
    "28": {
      "name": "IOITransType",
      "type": "Char",
      "enum": "IOITransType",
      "description": "IOI transaction type"
    },
    "31": {
      "name": "LastPx",
      "type": "Price",
      "description": "Price of the last fill or correction"
    },
    "32": {
      "name": "LastQty",
      "type": "Qty",
      "description": "Quantity of the last fill"
    },
    "37": {
      "name": "OrderID",
      "type": "String",
      "description": "OpenYield's Order ID"
    },
    "38": {
      "name": "OrderQty",
      "type": "Qty",
      "description": "Order quantity in configured units"
    },
    "39": {
      "name": "OrdStatus",
      "type": "Char",
      "enum": "OrdStatus",
      "description": "Status of the order"
    },
    "40": {
      "name": "OrdType",
      "type": "Char",
      "enum": "OrdType",
      "description": "Order type"
    },
    "41": {
      "name": "OrigClOrdID",
      "type": "String",
      "description": "Original ClOrdID being replaced or canceled"
    },
    "44": {
      "name": "Price",
      "type": "Price",
      "description": "Clean order price"
    },
    "45": {
      "name": "RefSeqNum",
      "type": "SeqNum",
      "description": "Reference sequence number for session-level rejects"
    },
    "48": {
      "name": "SecurityID",
      "type": "String",
      "description": "Security identifier"
    },
    "54": {
      "name": "Side",
      "type": "Char",
      "enum": "Side",
      "description": "Order side"
    },
    "55": {
      "name": "Symbol",
      "type": "String",
      "description": "Security symbol"
    },
    "58": {
      "name": "Text",
      "type": "String",
      "description": "Human-readable explanation"
    },
    "59": {
      "name": "TimeInForce",
      "type": "Char",
      "enum": "TimeInForce",
      "description": "Order time in force"
    },
    "60": {
      "name": "TransactTime",
      "type": "UTCTimestamp",
      "description": "Transaction timestamp"
    },
    "62": {
      "name": "ValidUntilTime",
      "type": "UTCTimestamp",
      "description": "End of the RFO collection window; responders must submit quotes before this time"
    },
    "63": {
      "name": "SettlType",
      "type": "String",
      "enum": "SettlType",
      "description": "Settlement type"
    },
    "64": {
      "name": "SettlDate",
      "type": "LocalMktDate",
      "description": "Settlement date (YYYYMMDD)"
    },
    "98": {
      "name": "EncryptMethod",
      "type": "Int",
      "enum": "EncryptMethod",
      "description": "Encryption method"
    },
    "103": {
      "name": "OrdRejReason",
      "type": "Int",
      "enum": "OrdRejReason",
      "description": "Rejection reason code"
    },
    "104": {
      "name": "IOIQualifier",
      "type": "Char",
      "enum": "IOIQualifier",
      "description": "IOI qualifier"
    },
    "108": {
      "name": "HeartBtInt",
      "type": "Int",
      "description": "Heartbeat interval in seconds"
    },
    "112": {
      "name": "TestReqID",
      "type": "String",
      "description": "Test request identifier echoed back in the heartbeat reply"
    },
    "117": {
      "name": "QuoteID",
      "type": "String",
      "description": "Quote ID"
    },
    "118": {
      "name": "NetMoney",
      "type": "Amt",
      "description": "Settlement cash amount (principal + accrued interest) for the trade"
    },
    "126": {
      "name": "ExpireTime",
      "type": "UTCTimestamp",
      "description": "End of the RFO firm window; OpenYield will cancel resting orders after this time"
    },
    "131": {
      "name": "QuoteReqID",
      "type": "String",
      "description": "RFO/RFQ request ID"
    },
    "132": {
      "name": "BidPx",
      "type": "Price",
      "description": "Bid price (set when Side=Buy)"
    },
    "133": {
      "name": "OfferPx",
      "type": "Price",
      "description": "Offer/ask price (set when Side=Sell)"
    },
    "134": {
      "name": "BidSize",
      "type": "Qty",
      "description": "Bid quantity in bonds (set when Side=Buy)"
    },
    "135": {
      "name": "OfferSize",
      "type": "Qty",
      "description": "Offer quantity in bonds (set when Side=Sell)"
    },
    "136": {
      "name": "NoMiscFees",
      "type": "NumInGroup",
      "description": "Number of fee entries"
    },
    "137": {
      "name": "MiscFeeAmt",
      "type": "Amt",
      "description": "Fee amount in dollars"
    },
    "139": {
      "name": "MiscFeeType",
      "type": "String",
      "enum": "MiscFeeType",
      "description": "Fee type"
    },
    "141": {
      "name": "ResetSeqNumFlag",
      "type": "Boolean",
      "enum": "ResetSeqNumFlag",
      "description": "Y to reset sequence numbers on logon (used for MD and OB sessions)"
    },
    "146": {
      "name": "NoRelatedSym",
      "type": "NumInGroup",
      "description": "Number of securities in this message (RFO must be 1; SecurityList up to 10)"
    },
    "150": {
      "name": "ExecType",
      "type": "Char",
      "enum": "ExecType",
      "description": "Type of execution report"
    },
    "151": {
      "name": "LeavesQty",
      "type": "Qty",
      "description": "Remaining unfilled quantity"
    },
    "159": {
      "name": "AccruedInterestAmt",
      "type": "Amt",
      "description": "Dollar amount of accrued interest"
    },
    "199": {
      "name": "NoIOIQualifiers",
      "type": "NumInGroup",
      "description": "Number of IOI qualifier entries"
    },
    "218": {
      "name": "Spread",
      "type": "PriceOffset",
      "description": "Spread to Benchmark, when available"
    },
    "236": {
      "name": "Yield",
      "type": "Percentage",
      "description": "Yield to maturity, when available"
    },
    "268": {
      "name": "NoMDEntries",
      "type": "NumInGroup",
      "description": "Number of market data entries (up to 10 in increments)"
    },
    "269": {
      "name": "MDEntryType",
      "type": "Char",
      "enum": "MDEntryType",
      "description": "Market data entry type"
    },
    "270": {
      "name": "MDEntryPx",
      "type": "Price",
      "description": "Market data entry price"
    },
    "271": {
      "name": "MDEntrySize",
      "type": "Qty",
      "description": "Market data entry size in configured units"
    },
    "278": {
      "name": "MDEntryID",
      "type": "String",
      "description": "Market data entry ID"
    },
    "279": {
      "name": "MDUpdateAction",
      "type": "Char",
      "enum": "MDUpdateAction",
      "description": "Market data update action"
    },
    "288": {
      "name": "MDEntryBuyer",
      "type": "String",
      "description": "Indicates Taker or Maker role; set on Trade entries only"
    },
    "289": {
      "name": "MDEntrySeller",
      "type": "String",
      "description": "Opposite of MDEntryBuyer; set on Trade entries only"
    },
    "297": {
      "name": "QuoteStatus",
      "type": "Int",
      "enum": "QuoteStatus",
      "description": "Quote status"
    },
    "298": {
      "name": "QuoteCancelType",
      "type": "Int",
      "enum": "QuoteCancelType",
      "description": "Cancel scope"
    },
    "299": {
      "name": "QuoteEntryID",
      "type": "String",
      "description": "Market data entry ID used in snapshot"
    },
    "301": {
      "name": "QuoteResponseLevel",
      "type": "Int",
      "enum": "QuoteResponseLevel",
      "description": "Acknowledgement level requested"
    },
    "320": {
      "name": "SecurityReqID",
      "type": "String",
      "description": "Security list request identifier"
    },
    "322": {
      "name": "SecurityResponseID",
      "type": "String",
      "description": "OpenYield's security list response identifier"
    },
    "336": {
      "name": "TradingSessionID",
      "type": "String",
      "description": "Trading session identifier; always 'Marketplace'"
    },
    "340": {
      "name": "TradSesStatus",
      "type": "Int",
      "enum": "TradSesStatus",
      "description": "Market state"
    },
    "341": {
      "name": "TradSesStartTime",
      "type": "UTCTimestamp",
      "description": "Time at which Pre-Open begins"
    },
    "342": {
      "name": "TradSesOpenTime",
      "type": "UTCTimestamp",
      "description": "Time at which the marketplace fully opens"
    },
    "344": {
      "name": "TradSesCloseTime",
      "type": "UTCTimestamp",
      "description": "Time at which the marketplace closes for the day"
    },
    "372": {
      "name": "RefMsgType",
      "type": "String",
      "description": "MsgType of the rejected message"
    },
    "380": {
      "name": "BusinessRejectReason",
      "type": "Int",
      "description": "Reason code for business message rejection"
    },
    "381": {
      "name": "GrossTradeAmt",
      "type": "Amt",
      "description": "Principal cash value (excludes accrued interest)"
    },
    "393": {
      "name": "TotNoRelatedSym",
      "type": "Int",
      "description": "Total number of securities being returned across all SecurityList messages"
    },
    "423": {
      "name": "PriceType",
      "type": "Int",
      "enum": "PriceType",
      "description": "Price type"
    },
    "448": {
      "name": "PartyID",
      "type": "String",
      "description": "Party identifier value"
    },
    "452": {
      "name": "PartyRole",
      "type": "Int",
      "enum": "PartyRole",
      "description": "Party role"
    },
    "453": {
      "name": "NoPartyIDs",
      "type": "NumInGroup",
      "description": "Number of party block entries"
    },
    "460": {
      "name": "Product",
      "type": "Int",
      "enum": "Product",
      "description": "Asset class"
    },
    "523": {
      "name": "PartySubID",
      "type": "String",
      "description": "Sub-identifier for the party"
    },
    "537": {
      "name": "QuoteType",
      "type": "Int",
      "enum": "QuoteType",
      "description": "Quote type"
    },
    "559": {
      "name": "SecurityListRequestType",
      "type": "Int",
      "enum": "SecurityListRequestType",
      "description": "Security list request scope"
    },
    "560": {
      "name": "SecurityRequestResult",
      "type": "Int",
      "enum": "SecurityRequestResult",
      "description": "Security list response type"
    },
    "640": {
      "name": "Price2",
      "type": "Price",
      "description": "Dealer-only tiered price"
    },
    "645": {
      "name": "MktBidPx",
      "type": "Price",
      "description": "Dealer-only tiered bid price; zero for non-dealer orders"
    },
    "646": {
      "name": "MktOfferPx",
      "type": "Price",
      "description": "Dealer-only tiered offer price; zero for non-dealer orders"
    },
    "693": {
      "name": "QuoteRespID",
      "type": "String",
      "description": "OpenYield's identifier for quote response"
    },
    "694": {
      "name": "QuoteRespType",
      "type": "Int",
      "enum": "QuoteRespType",
      "description": "Quote response type"
    },
    "695": {
      "name": "QuoteQualifier",
      "type": "Char",
      "enum": "QuoteQualifier",
      "description": "Quote qualifier"
    },
    "699": {
      "name": "BenchmarkSecurityID",
      "type": "String",
      "description": "Benchmark used"
    },
    "735": {
      "name": "NoQuoteQualifiers",
      "type": "NumInGroup",
      "description": "Number of quote qualifier entries"
    },
    "761": {
      "name": "BenchmarkSecurityIDSource",
      "type": "String",
      "enum": "SecurityIDSource",
      "description": "Source of Benchmark SecurityID"
    },
    "803": {
      "name": "PartySubIDType",
      "type": "Int",
      "enum": "PartySubIDType",
      "description": "Type of PartySubID value"
    },
    "811": {
      "name": "PriceDelta",
      "type": "Float",
      "description": "Yield to maturity associated with the market data price"
    }
  },
  "fieldGroups": {
    "PartyBlock-Inbound": {
      "description": "Party block sent by subscribers on orders, quotes, and RFO requests. Identifies the trading party and optional sub-accounts.",
      "repeatingGroup": {
        "countTag": 453,
        "countName": "NoPartyIDs"
      },
      "fields": [
        {
          "tag": 448,
          "required": "Y"
        },
        {
          "tag": 452,
          "required": "Y",
          "notes": "Role of this party entry"
        }
      ],
      "roles": [
        {
          "role": 3,
          "name": "Client ID",
          "required": "Y",
          "notes": "Your assigned counterparty code (not MPID)"
        },
        {
          "role": 4,
          "name": "Clearing Firm",
          "required": "Y/O",
          "notes": "Your MPID shown to contra firms. Optional if OpenYield can determine it via rules; mandatory if multiple MPIDs or configured so."
        },
        {
          "role": 5,
          "name": "Investor ID",
          "required": "O",
          "notes": "Account / sub-account code if subscriber is configured for SubIDs"
        },
        {
          "role": 24,
          "name": "Customer Code",
          "required": "Y/O",
          "notes": "Pass-through tag; OpenYield returns this unchanged on all responses. Use for internal codes, strategy, algo, desk, portfolio, etc."
        },
        {
          "role": 11,
          "name": "Order Origination Trader",
          "required": "Y/O",
          "notes": "Obfuscated trader code for GUI users. OpenYield reflects it on all responses."
        }
      ],
      "notes": "Optionally add a PartySubID block (802/523/804) under role 4 if subscriber has multiple accounts at the same DTCC clearing (set PartySubIDType 804=10, PartySubID 523=clearing account code)."
    },
    "PartyBlock-Fill": {
      "description": "Party block returned by OpenYield on fill execution reports (ExecType=F). Includes contra-party settlement information.",
      "repeatingGroup": {
        "countTag": 453,
        "countName": "NoPartyIDs"
      },
      "fields": [
        {
          "tag": 448,
          "required": "Y"
        },
        {
          "tag": 452,
          "required": "Y",
          "notes": "Role of this party entry"
        }
      ],
      "roles": [
        {
          "role": 3,
          "name": "Client ID",
          "required": "Y",
          "notes": "Matches Order"
        },
        {
          "role": 4,
          "name": "Clearing Firm",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 5,
          "name": "Investor ID",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 24,
          "name": "Customer Code",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 11,
          "name": "Order Origination Trader",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 17,
          "name": "Contra Firm",
          "required": "Y",
          "notes": "Bilateral: MPID of settlement counterparty. Intermediated: OpenYield's MPID"
        },
        {
          "role": 18,
          "name": "Contra Clearing Firm",
          "required": "O",
          "notes": "Bilateral: DTCC code of contra clearing house. Intermediated: OpenYield's clearing DTCC code"
        },
        {
          "role": 1,
          "name": "Executing Firm",
          "required": "Y",
          "notes": "OpenYield MPID"
        }
      ]
    },
    "PartyBlock-Execution": {
      "description": "Party block returned by OpenYield on non-fill execution reports.",
      "repeatingGroup": {
        "countTag": 453,
        "countName": "NoPartyIDs"
      },
      "fields": [
        {
          "tag": 448,
          "required": "Y"
        },
        {
          "tag": 452,
          "required": "Y",
          "notes": "Role of this party entry"
        }
      ],
      "roles": [
        {
          "role": 3,
          "name": "Client ID",
          "required": "Y",
          "notes": "Matches Order"
        },
        {
          "role": 4,
          "name": "Clearing Firm",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 5,
          "name": "Investor ID",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 24,
          "name": "Customer Code",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 11,
          "name": "Order Origination Trader",
          "required": "O",
          "notes": "Matches Order"
        },
        {
          "role": 1,
          "name": "Executing Firm",
          "required": "Y",
          "notes": "OpenYield MPID"
        }
      ]
    },
    "SecurityBlock": {
      "description": "The security being traded.",
      "fields": [
        {
          "tag": 55,
          "required": "Y",
          "notes": "Security identifier (ISIN, CUSIP, or FIGI per configuration)"
        },
        {
          "tag": 48,
          "required": "Y",
          "notes": "Security identifier (ISIN, CUSIP, or FIGI per configuration)"
        },
        {
          "tag": 22,
          "required": "Y"
        },
        {
          "tag": 460,
          "required": "Y/O",
          "notes": "Required on OpenYield responses; optional on subscriber messages."
        }
      ]
    },
    "FeeBlock": {
      "description": "Fee disclosure block included on fill execution reports. OpenYield discloses all applicable fees.",
      "repeatingGroup": {
        "countTag": 136,
        "countName": "NoMiscFees"
      },
      "fields": [
        {
          "tag": 137,
          "required": "O"
        },
        {
          "tag": 139,
          "required": "O"
        }
      ],
      "notes": "The entire fee block is optional. Individual fee entries are included only when applicable. For bilateral trades billed in arrears, this block may be absent."
    },
    "MDEntryGroup": {
      "description": "Repeating market data entry group used in both snapshot and incremental refresh messages.",
      "repeatingGroup": {
        "countTag": 268,
        "countName": "NoMDEntries"
      },
      "fields": [
        {
          "tag": 279,
          "required": "Y",
          "context": "IncrementalOnly",
          "notes": "Only in 35=X incremental messages."
        },
        {
          "tag": 269,
          "required": "Y"
        },
        {
          "tag": 55,
          "required": "O",
          "notes": "Security identifier (ISIN, CUSIP, or FIGI per configuration)"
        },
        {
          "tag": 48,
          "required": "Y",
          "notes": "Security identifier (ISIN, CUSIP, or FIGI per configuration)"
        },
        {
          "tag": 22,
          "required": "Y"
        },
        {
          "tag": 460,
          "required": "Y"
        },
        {
          "tag": 270,
          "required": "Y",
          "notes": "Price; zero on Delete"
        },
        {
          "tag": 271,
          "required": "Y",
          "notes": "Size in bonds; zero on Delete"
        },
        {
          "tag": 299,
          "required": "Y",
          "context": "SnapshotOnly",
          "notes": "Initiates the MDEntryID series used in subsequent incremental messages. Only in 35=W snapshot."
        },
        {
          "tag": 278,
          "required": "Y",
          "context": "IncrementalOnly",
          "notes": "Unique entry ID referenced to update or delete a previous entry. Only in 35=X incremental."
        },
        {
          "tag": 811,
          "required": "O",
          "notes": "Yield to maturity; zero on Delete"
        },
        {
          "tag": 288,
          "required": "O",
          "context": "TradeOnly",
          "notes": "'Taker' or 'Maker'. Set only for MDEntryType=2 (Trade)."
        },
        {
          "tag": 289,
          "required": "O",
          "context": "TradeOnly",
          "notes": "Opposite of MDEntryBuyer. Set only for MDEntryType=2 (Trade)."
        }
      ]
    },
    "IOIQualifiersGroup": {
      "description": "Optional qualifier block on IOI messages indicating special order characteristics.",
      "repeatingGroup": {
        "countTag": 199,
        "countName": "NoIOIQualifiers"
      },
      "fields": [
        {
          "tag": 104,
          "required": "O"
        }
      ]
    },
    "QuoteQualifiersGroup": {
      "description": "Optional qualifier block on Quote messages indicating AllOrNone condition.",
      "repeatingGroup": {
        "countTag": 735,
        "countName": "NoQuoteQualifiers"
      },
      "fields": [
        {
          "tag": 695,
          "required": "O"
        }
      ]
    },
    "ExecutionReportCore": {
      "description": "Fields common to all order execution reports: ExecType discriminator and optional Yield.",
      "fields": [
        {
          "tag": 150,
          "required": "Y"
        },
        {
          "tag": 236,
          "required": "O",
          "notes": "Set for fixed and zero coupon bonds"
        }
      ]
    }
  },
  "sessions": {
    "MD": {
      "name": "Market Data",
      "suffix": "-MD",
      "description": "Streams top-of-market bid/offer, daily high/low, index delta, and real-time trade prints. Sequence numbers reset on each reconnect; no resend supported.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "messages": [
        "MarketDataSnapshot",
        "MarketDataIncrement",
        "Logon",
        "Logout",
        "Heartbeat",
        "TestRequest",
        "ResendRequest",
        "Reject"
      ]
    },
    "OB": {
      "name": "Order Book",
      "suffix": "-OB",
      "description": "Streams the full depth order book as IOI messages. Sequence numbers reset on each reconnect; no snapshot or resend supported.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "messages": [
        "IOI",
        "Logon",
        "Logout",
        "Heartbeat",
        "TestRequest",
        "ResendRequest",
        "Reject"
      ]
    },
    "TR": {
      "name": "Trading",
      "suffix": "-TR",
      "description": "Primary trading session for orders, quotes, executions, and session state. Sequences reset daily; missed messages retransmitted same day.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "messages": [
        "NewOrderSingle",
        "OrderCancelReplaceRequest",
        "OrderCancelRequest",
        "Quote",
        "QuoteCancel",
        "OrderAccepted",
        "OrderReplaced",
        "OrderCanceled",
        "OrderRejected",
        "OrderPartiallyFilled",
        "OrderFilled",
        "OrderPartialCanceled",
        "OrderCompleted",
        "QuoteAccepted",
        "QuoteCanceled",
        "QuoteRejected",
        "FillCancel",
        "FillCorrection",
        "TradingSessionStatus",
        "SecurityListRequest",
        "SecurityList",
        "Logon",
        "Logout",
        "Heartbeat",
        "TestRequest",
        "ResendRequest",
        "Reject",
        "BusinessMessageReject"
      ]
    },
    "DC": {
      "name": "Drop Copy",
      "suffix": "-DC",
      "description": "Secondary delivery of fill execution reports (partial fills and complete fills), plus post-trade fill cancels and fill corrections. Sequences reset daily.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "messages": [
        "DropCopyFill",
        "FillCancel",
        "FillCorrection",
        "Logon",
        "Logout",
        "Heartbeat",
        "TestRequest",
        "ResendRequest",
        "Reject"
      ]
    },
    "RQ": {
      "name": "Request Quote",
      "suffix": "-RQ",
      "description": "RFO (Request for Order) session for initiating requests, responding with quotes, and receiving executions. Both initiators and responders use this session.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "messages": [
        "QuoteRequest",
        "Quote",
        "QuoteResponse",
        "RFOPendingNew",
        "OrderAccepted",
        "OrderFilled",
        "OrderCompleted",
        "OrderCanceled",
        "QuoteAccepted",
        "QuoteRejected",
        "QuoteCanceled",
        "Logon",
        "Logout",
        "Heartbeat",
        "TestRequest",
        "ResendRequest",
        "Reject",
        "BusinessMessageReject"
      ]
    }
  },
  "messages": {
    "Logon": {
      "msgType": "A",
      "name": "Logon",
      "description": "Initiates a FIX session. Subacriber logs on; OpenYield responds.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "MD",
        "OB",
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 98,
          "required": "Y"
        },
        {
          "tag": 108,
          "required": "Y",
          "notes": "Heartbeat interval in seconds; default 30"
        },
        {
          "tag": 141,
          "required": "O",
          "notes": "Y to reset sequence numbers; used on MD and OB sessions"
        }
      ],
      "workflowHidden": true
    },
    "Logout": {
      "msgType": "5",
      "name": "Logout",
      "description": "Terminates the FIX session gracefully.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "MD",
        "OB",
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 58,
          "required": "O",
          "notes": "Optional reason for logout"
        }
      ],
      "workflowHidden": true
    },
    "Heartbeat": {
      "msgType": "0",
      "name": "Heartbeat",
      "description": "Sent by both sides to confirm the connection is alive. Also sent in response to a TestRequest.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "MD",
        "OB",
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 112,
          "required": "O",
          "notes": "Echoed from a TestRequest; included only when responding to a test"
        }
      ],
      "workflowHidden": true
    },
    "TestRequest": {
      "msgType": "1",
      "name": "TestRequest",
      "description": "Sent by OpenYield when no traffic is detected. Subscriber must respond with a Heartbeat containing the same TestReqID.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "MD",
        "OB",
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 112,
          "required": "Y",
          "notes": "Must be echoed in the Heartbeat reply"
        }
      ],
      "workflowHidden": true
    },
    "ResendRequest": {
      "msgType": "2",
      "name": "ResendRequest",
      "description": "Sent on reconnection if sequence numbers do not match. MD and OB sessions ignore this; TR, RQ and DC will retransmit missing messages.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 7,
          "required": "Y",
          "notes": "First sequence number to retransmit"
        },
        {
          "tag": 16,
          "required": "Y",
          "notes": "Last sequence number; 0 means retransmit to current"
        }
      ]
    },
    "Reject": {
      "msgType": "3",
      "name": "Reject",
      "description": "Session-level reject sent when a message has a session-level error. Should never appear in production.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "TR",
        "DC",
        "RQ"
      ],
      "fields": [
        {
          "tag": 45,
          "required": "Y",
          "notes": "Sequence number of the rejected message"
        },
        {
          "tag": 58,
          "required": "O",
          "notes": "Description of the error"
        }
      ],
      "workflowHidden": true
    },
    "BusinessMessageReject": {
      "msgType": "j",
      "name": "BusinessMessageReject",
      "description": "Sent when a received message is malformed or missing required fields. Not logged internally by OpenYield; high volume may be treated as a DDoS.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "fields": [
        {
          "tag": 45,
          "required": "Y",
          "notes": "Sequence number of the rejected message"
        },
        {
          "tag": 372,
          "required": "Y"
        },
        {
          "tag": 380,
          "required": "Y",
          "notes": "Reason code for rejection"
        },
        {
          "tag": 58,
          "required": "O"
        }
      ],
      "workflowHidden": true
    },
    "TradingSessionStatus": {
      "msgType": "h",
      "name": "TradingSessionStatus",
      "description": "Sent by OpenYield on session logon and on every marketplace state change (Halted, Closed, Pre-Open, Open).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR"
      ],
      "fields": [
        {
          "tag": 336,
          "required": "Y",
          "notes": "Always 'Marketplace'"
        },
        {
          "tag": 340,
          "required": "Y"
        },
        {
          "tag": 341,
          "required": "O",
          "notes": "UTC time when Pre-Open begins"
        },
        {
          "tag": 342,
          "required": "O",
          "notes": "UTC time when marketplace opens"
        },
        {
          "tag": 344,
          "required": "O",
          "notes": "UTC time when marketplace closes"
        }
      ]
    },
    "SecurityListRequest": {
      "msgType": "x",
      "name": "SecurityListRequest",
      "description": "Requests the list of tradeable securities. Use in TEST environments only.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR"
      ],
      "fields": [
        {
          "tag": 320,
          "required": "Y",
          "notes": "Client-assigned request ID"
        },
        {
          "tag": 559,
          "required": "Y"
        }
      ]
    },
    "SecurityList": {
      "msgType": "y",
      "name": "SecurityList",
      "description": "Response to SecurityListRequest. OpenYield sends multiple responses, each containing up to 10 ISINs.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR"
      ],
      "fields": [
        {
          "tag": 320,
          "required": "Y",
          "notes": "Echoes the request ID"
        },
        {
          "tag": 322,
          "required": "Y",
          "notes": "OpenYield internal response ID"
        },
        {
          "tag": 560,
          "required": "Y"
        },
        {
          "tag": 393,
          "required": "Y",
          "notes": "Total securities across all SecurityList messages"
        },
        {
          "tag": 146,
          "required": "Y",
          "notes": "Number of securities in this message (up to 10)"
        }
      ],
      "fieldGroups": [
        "SecurityBlock"
      ]
    },
    "MarketDataSnapshot": {
      "msgType": "W",
      "name": "MarketDataSnapshotFullRefresh",
      "description": "Full snapshot of top-of-market data for a single security. Sent on MD session connect and for each security with a bid or offer.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "MD"
      ],
      "fieldGroups": [
        "MDEntryGroup",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 268,
          "required": "Y",
          "notes": "Number of entries (Bid and/or Offer)"
        }
      ],
      "notes": "Each message references a single security. MDEntryType values in snapshot: 0=Bid, 1=Offer. Uses QuoteEntryID (299) instead of MDEntryID (278)."
    },
    "MarketDataIncrement": {
      "msgType": "X",
      "name": "MarketDataIncrementalRefresh",
      "description": "Incremental market data updates. Each message may contain up to 10 entries across different securities.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "MD"
      ],
      "fieldGroups": [
        "MDEntryGroup"
      ],
      "fields": [
        {
          "tag": 268,
          "required": "Y",
          "notes": "Number of update entries in this message (up to 10)"
        }
      ],
      "notes": "Uses MDEntryID (278) to reference snapshot entries."
    },
    "IOI": {
      "msgType": "6",
      "name": "IOI",
      "description": "Order book entry sent on the OB session. Represents a single resting order or quote level. Cancel or Replace when price or size changes.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "OB"
      ],
      "fieldGroups": [
        "IOIQualifiersGroup",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 23,
          "required": "Y",
          "notes": "OpenYield's unique IOI identifier"
        },
        {
          "tag": 28,
          "required": "Y"
        },
        {
          "tag": 26,
          "required": "O",
          "notes": "IOI ID repeated in Cancel and Replace messages"
        },
        {
          "tag": 54,
          "required": "Y"
        },
        {
          "tag": 27,
          "required": "Y",
          "notes": "Quantity in configured units; zero on Cancel"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Price level; zero on Cancel"
        },
        {
          "tag": 25,
          "required": "Y"
        },
        {
          "tag": 199,
          "required": "O",
          "notes": "If set, see IOIQualifier (104) for qualifiers"
        },
        {
          "tag": 236,
          "required": "O",
          "notes": "Yield; zero on Cancel"
        },
        {
          "tag": 218,
          "required": "O",
          "notes": "Spread if Available"
        },
        {
          "tag": 699,
          "required": "O",
          "notes": "Benchmark SecurityID"
        },
        {
          "tag": 761,
          "required": "O",
          "notes": "Benchmark Security ID Source"
        }
      ]
    },
    "NewOrderSingle": {
      "msgType": "D",
      "name": "NewOrderSingle",
      "description": "Client sends a new order to OpenYield.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "G (AllOrNone) or Z (Single Fill or Cancel). Mutually exclusive. If set, TimeInForce is ignored."
        },
        {
          "tag": 54,
          "required": "Y"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time the order was submitted"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Quantity in configured units"
        },
        {
          "tag": 40,
          "required": "Y"
        },
        {
          "tag": 423,
          "required": "O"
        },
        {
          "tag": 44,
          "required": "O",
          "notes": "Required for Limit orders; ignored for Market orders"
        },
        {
          "tag": 59,
          "required": "O",
          "notes": "Default: Day (Limit), IOC (Market). Ignored if ExecInst is set."
        },
        {
          "tag": 640,
          "required": "O",
          "notes": "Dealer only: tiered price visible to other dealers"
        }
      ]
    },
    "OrderCancelReplaceRequest": {
      "msgType": "G",
      "name": "OrderCancelReplaceRequest",
      "description": "Replaces an existing Limit Order. Only quantity and price may change.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 41,
          "required": "Y",
          "notes": "ClOrdID of the order being replaced"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "New subscriber order ID for this replacement"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Must match original"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Must match original"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of the replacement request"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "New quantity"
        },
        {
          "tag": 40,
          "required": "Y",
          "notes": "Must match original"
        },
        {
          "tag": 423,
          "required": "O"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "New price"
        },
        {
          "tag": 59,
          "required": "O",
          "notes": "Must match original"
        },
        {
          "tag": 640,
          "required": "O",
          "notes": "Dealer only: new tiered price"
        }
      ]
    },
    "OrderCancelRequest": {
      "msgType": "F",
      "name": "OrderCancelRequest",
      "description": "Cancels an existing Market or Limit Order. OrderQty must be set to 0.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 41,
          "required": "Y",
          "notes": "ClOrdID of the order being canceled"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID for this cancel"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Must match original"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of the cancel request"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Must be 0"
        }
      ]
    },
    "Quote": {
      "msgType": "S",
      "name": "Quote",
      "description": "Fixed-income style passive order (maker).",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "QuoteQualifiersGroup",
        "SecurityBlock"
      ],
      "conditionalGroups": {
        "bid": "Required when Side=Buy (1): BidPx (132) and BidSize (134) must both be set",
        "offer": "Required when Side=Sell (2): OfferPx (133) and OfferSize (135) must both be set"
      },
      "fields": [
        {
          "tag": 131,
          "required": "O",
          "notes": "RFO session only: the QuoteReqID being responded to"
        },
        {
          "tag": 117,
          "required": "Y",
          "notes": "Unique quote ID; same ID used for updates and cancels"
        },
        {
          "tag": 537,
          "required": "O"
        },
        {
          "tag": 301,
          "required": "O"
        },
        {
          "tag": 54,
          "required": "Y"
        },
        {
          "tag": 132,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Price when Side=Buy; zero otherwise"
        },
        {
          "tag": 133,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Price when Side=Sell; zero otherwise"
        },
        {
          "tag": 645,
          "required": "O",
          "notes": "Dealer only: tiered bid price"
        },
        {
          "tag": 646,
          "required": "O",
          "notes": "Dealer only: tiered offer price"
        },
        {
          "tag": 134,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Quantity in bonds when Side=Buy; zero otherwise"
        },
        {
          "tag": 135,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Quantity in bonds when Side=Sell; zero otherwise"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time the quote was submitted"
        }
      ]
    },
    "QuoteRequest": {
      "msgType": "R",
      "name": "QuoteRequest",
      "description": "Initiates an RFO (Request for Order) or from OpenYield to responders.",
      "direction": {
        "source": "both",
        "target": "both"
      },
      "sessions": [
        "RQ"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 131,
          "required": "Y",
          "notes": "Unique request ID. Reuse same ID for updates and cancels."
        },
        {
          "tag": 146,
          "required": "Y",
          "notes": "Must be 1"
        },
        {
          "tag": 537,
          "required": "O",
          "notes": "Defaults to Tradeable."
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "What YOU want to do: Buy=want offers back (OWIC), Sell=want bids back (BWIC)."
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Quantity in configured units. Set to 0 to cancel."
        },
        {
          "tag": 62,
          "required": "O",
          "notes": "Responder-received only: end of collection window"
        },
        {
          "tag": 126,
          "required": "O",
          "notes": "Responder-received only: end of firm window"
        },
        {
          "tag": 423,
          "required": "O"
        },
        {
          "tag": 44,
          "required": "O",
          "notes": "Reserve price as percent. Set to 0 to cancel"
        }
      ],
      "notes": "Fields 64 (ValidUntilTime) and 126 (ExpireTime) may be set by initiator but are ignored. Reserve price (44) and initiator details are stripped before forwarding to responders."
    },
    "QuoteResponse": {
      "msgType": "AJ",
      "name": "QuoteResponse",
      "description": "Traditional RFQ special case only. Initiator accepts a forwarded quote by sending Hit/Lift. OpenYield converts this into a contra limit order on the marketplace.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "RQ"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 117,
          "required": "Y",
          "notes": "Quote ID from the forwarded Quote message being accepted"
        },
        {
          "tag": 694,
          "required": "Y"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of acceptance"
        },
        {
          "tag": 131,
          "required": "Y",
          "notes": "The original RFO request ID"
        }
      ],
      "notes": "Available to specially configured subscribers only. Execution happens at the top of book up to the accepted price, not necessarily at the quoted price."
    },
    "QuoteCancel": {
      "msgType": "Z",
      "name": "QuoteCancel",
      "description": "Emergency Cancel All. Cancels all orders for the connection, or scoped to a specific ClientID or InvestorID via the party block. Warning: triggers customer access deactivation during market hours.",
      "direction": {
        "source": "Subscriber",
        "target": "OpenYield"
      },
      "sessions": [
        "TR"
      ],
      "fieldGroups": [
        "PartyBlock-Inbound"
      ],
      "fields": [
        {
          "tag": 117,
          "required": "Y",
          "notes": "Subscriber ID for this cancel-all"
        },
        {
          "tag": 298,
          "required": "Y"
        }
      ],
      "notes": "Party block is optional. Omit to cancel all orders on this connection. Set 452=3 (ClientID) to scope to a counterparty. Set 452=3 and 452=5 (InvestorID) to scope to a specific investor."
    }
  },
  "messageVariants": {
    "OrderAccepted": {
      "msgType": "8",
      "description": "Order (or Quote) accepted onto the marketplace. Sent for new orders (ExecType=0, OrdStatus=0) and in the RFO flow when the staged request is placed on the market (OrdStatus=0 after prior PendingNew).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "0",
        "150": "0"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's internal order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Echoes the client order ID"
        },
        {
          "tag": 41,
          "required": "O",
          "notes": "Set if the original order had one"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Order quantity remaining"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Zero — no fills yet"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Zero — no fills yet"
        }
      ]
    },
    "OrderReplaced": {
      "msgType": "8",
      "description": "Order has been updated (price or quantity changed) and is resting on the marketplace.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "5",
        "150": "5"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "New ClOrdID of the replacement order"
        },
        {
          "tag": 41,
          "required": "Y",
          "notes": "ClOrdID of the order being replaced"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "New order quantity"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "New order price"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity after replacement"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Quantity filled so far (may be non-zero if partially filled before replace)"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average fill price (zero if no fills)"
        },
        {
          "tag": 381,
          "required": "O",
          "notes": "Principal cash if partially filled"
        },
        {
          "tag": 159,
          "required": "O",
          "notes": "Accrued if partially filled"
        },
        {
          "tag": 118,
          "required": "O",
          "notes": "Settlement cash if partially filled"
        }
      ]
    },
    "OrderCanceled": {
      "msgType": "8",
      "description": "Order (with no fills) has been canceled — either by client request or by OpenYield (e.g. disconnect, end-of-day). ExecType=4, OrdStatus=4.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "4",
        "150": "4"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID of the cancel request"
        },
        {
          "tag": 41,
          "required": "O",
          "notes": "Original order ClOrdID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "0 on cancel request"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "0 — no fills"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Zero"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of cancellation"
        }
      ]
    },
    "OrderRejected": {
      "msgType": "8",
      "description": "Order or Quote failed validation or compliance checks and was not placed on the marketplace. ExecType=8.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "150": "8"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "Set to 0 on rejection"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID"
        },
        {
          "tag": 41,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 39,
          "required": "Y",
          "notes": "Current status at time of rejection"
        },
        {
          "tag": 103,
          "required": "Y"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Zero"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Zero"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Zero"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of rejection"
        },
        {
          "tag": 58,
          "required": "Y",
          "notes": "Human-readable rejection reason"
        }
      ]
    },
    "OrderPartiallyFilled": {
      "msgType": "8",
      "description": "An order matched and a fill occurred, but inventory remains on the order. ExecType=F (Trade), OrdStatus=1 (Partially Filled).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "1",
        "150": "F"
      },
      "fieldGroups": [
        "PartyBlock-Fill",
        "SecurityBlock",
        "FeeBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's fill ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order (regular or tiered)"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "This fill quantity"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "This fill price"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity after this fill"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Cumulative filled quantity"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average fill price so far"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time the fill was booked"
        },
        {
          "tag": 381,
          "required": "Y",
          "notes": "Principal cash for this fill"
        },
        {
          "tag": 159,
          "required": "Y",
          "notes": "Accrued interest dollar amount"
        },
        {
          "tag": 118,
          "required": "Y",
          "notes": "Settlement cash amount for this fill"
        }
      ]
    },
    "OrderFilled": {
      "msgType": "8",
      "description": "An order is completely filled in a single match. ExecType=F (Trade), OrdStatus=2 (Filled). A subsequent OrderCompleted message follows.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "2",
        "150": "F"
      },
      "fieldGroups": [
        "PartyBlock-Fill",
        "SecurityBlock",
        "FeeBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's fill ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Final fill quantity"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Final fill price"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Full order quantity"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average fill price for the trade"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time the fill was booked"
        },
        {
          "tag": 381,
          "required": "Y",
          "notes": "Principal cash for this trade"
        },
        {
          "tag": 159,
          "required": "Y",
          "notes": "Accrued interest dollar amount"
        },
        {
          "tag": 118,
          "required": "Y",
          "notes": "Settlement cash amount for this trade"
        }
      ]
    },
    "OrderPartialCanceled": {
      "msgType": "8",
      "description": "A partially filled order has been canceled by the client, or a Market Order exhausted available liquidity. Some quantity was executed; the remainder is canceled. ExecType=0, OrdStatus=4.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": "4",
        "150": "0"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "ClOrdID of the cancel request"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "0"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Final fill price (may be zero)"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining unfilled quantity (now 0 after cancel)"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Quantity filled before cancel"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average price of fills before cancel"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of cancellation"
        },
        {
          "tag": 381,
          "required": "O",
          "notes": "Principal cash of fills so far"
        },
        {
          "tag": 159,
          "required": "O",
          "notes": "Accrued on filled portion"
        },
        {
          "tag": 118,
          "required": "O",
          "notes": "Settlement cash on filled portion"
        }
      ]
    },
    "OrderCompleted": {
      "msgType": "8",
      "description": "Final summary ticket sent after an order is completely filled (ExecType=F, OrdStatus=2) or canceled with fills (ExecType=4, OrdStatus=4). Aggregates all fill details into a single ticket-level execution report.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "39": [
          "2",
          "4"
        ],
        "150": [
          "F",
          "4"
        ]
      },
      "notes": "ExecType=F/OrdStatus=2 when fully filled; ExecType=4/OrdStatus=4 when canceled after partial fills.",
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock",
        "FeeBlock",
        "ExecutionReportCore"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber order ID"
        },
        {
          "tag": 41,
          "required": "O",
          "notes": "Set when order was canceled after partial fills"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's execution ID for this message"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 18,
          "required": "O",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Ticket quantity (aggregate of fills)"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Price (aggregate)"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity (0 if fully filled)"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Total quantity filled"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average price"
        },
        {
          "tag": 381,
          "required": "Y",
          "notes": "Total principal cash"
        },
        {
          "tag": 159,
          "required": "Y",
          "notes": "Total accrued interest"
        },
        {
          "tag": 118,
          "required": "Y",
          "notes": "Total settlement cash"
        },
        {
          "tag": 58,
          "required": "O",
          "notes": "Human-readable note"
        }
      ]
    },
    "RFOPendingNew": {
      "msgType": "8",
      "description": "Acknowledgement from OpenYield's staging engine that an RFO (QuoteRequest) has been received and is staged for placement during the collection window. ExecType=0, OrdStatus=A (PendingNew).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "RQ"
      ],
      "discriminators": {
        "39": "A",
        "150": "0"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield staging order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "QuoteReqID from the QuoteRequest"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "OpenYield's response ID for this message"
        },
        {
          "tag": 150,
          "required": "Y"
        },
        {
          "tag": 39,
          "required": "Y",
          "notes": "Staged, not yet on market."
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches request"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches requested quantity"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "0 (reserve price withheld from market display)"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Full quantity"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Zero — no fills yet"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Zero"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time staged by OpenYield"
        },
        {
          "tag": 236,
          "required": "O",
          "notes": "Set for fixed and zero coupon bonds"
        }
      ],
      "notes": "After the collection window, OpenYield places the order on the marketplace and sends an OrderAccepted with OrdStatus=0."
    },
    "FillCancel": {
      "msgType": "8",
      "description": "Post-trade cancellation of a previously reported fill. ExecType=H (TradeCancel), OrdStatus=B (Calculated). ExecRefID (19) identifies the fill being canceled.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "DC"
      ],
      "discriminators": {
        "39": "B",
        "150": "H"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber's order ID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "Execution ID for this cancel message"
        },
        {
          "tag": 19,
          "required": "Y",
          "notes": "ExecId of the fill being canceled"
        },
        {
          "tag": 150,
          "required": "Y"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Quantity of the canceled fill"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Price of the canceled fill"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity after cancel"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Updated cumulative filled quantity"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Updated average price"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of the post-trade cancel"
        }
      ]
    },
    "FillCorrection": {
      "msgType": "8",
      "description": "Post-trade correction of a previously reported fill (price or quantity amended). ExecType=G (TradeCorrect), OrdStatus=B (Calculated). ExecRefID (19) identifies the fill being corrected.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "DC"
      ],
      "discriminators": {
        "39": "B",
        "150": "G"
      },
      "fieldGroups": [
        "PartyBlock-Fill",
        "SecurityBlock",
        "FeeBlock"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber's order ID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "Execution ID for this correction"
        },
        {
          "tag": 19,
          "required": "Y",
          "notes": "ExecId of the fill being corrected"
        },
        {
          "tag": 150,
          "required": "Y"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches original"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Corrected fill quantity"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Corrected fill price"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Updated cumulative filled quantity"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Updated average price"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time of the post-trade correction"
        },
        {
          "tag": 381,
          "required": "Y",
          "notes": "Corrected principal cash"
        },
        {
          "tag": 159,
          "required": "Y",
          "notes": "Corrected accrued interest"
        },
        {
          "tag": 118,
          "required": "Y",
          "notes": "Corrected settlement cash"
        }
      ]
    },
    "DropCopyFill": {
      "msgType": "8",
      "description": "Drop Copy delivery of a fill execution report (partial fill OrdStatus=1, or complete fill OrdStatus=2). Identical message to the TR fill. ExecType=F.",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "DC"
      ],
      "discriminators": {
        "150": "F"
      },
      "fieldGroups": [
        "PartyBlock-Fill",
        "SecurityBlock",
        "FeeBlock"
      ],
      "fields": [
        {
          "tag": 37,
          "required": "Y",
          "notes": "OpenYield's order ID"
        },
        {
          "tag": 11,
          "required": "Y",
          "notes": "Subscriber's order ID"
        },
        {
          "tag": 17,
          "required": "Y",
          "notes": "Same ExecId as the fill on the TR session"
        },
        {
          "tag": 150,
          "required": "Y"
        },
        {
          "tag": 39,
          "required": "Y"
        },
        {
          "tag": 63,
          "required": "Y"
        },
        {
          "tag": 64,
          "required": "Y",
          "notes": "Settlement date YYYYMMDD"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 38,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 44,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 59,
          "required": "Y",
          "notes": "Matches order"
        },
        {
          "tag": 32,
          "required": "Y",
          "notes": "Fill quantity"
        },
        {
          "tag": 31,
          "required": "Y",
          "notes": "Fill price"
        },
        {
          "tag": 151,
          "required": "Y",
          "notes": "Remaining quantity after fill"
        },
        {
          "tag": 14,
          "required": "Y",
          "notes": "Cumulative filled quantity"
        },
        {
          "tag": 6,
          "required": "Y",
          "notes": "Average fill price"
        },
        {
          "tag": 60,
          "required": "Y",
          "notes": "Time the fill was booked"
        },
        {
          "tag": 236,
          "required": "O",
          "notes": "Set for fixed and zero coupon bonds"
        },
        {
          "tag": 381,
          "required": "Y",
          "notes": "Principal cash for this fill"
        },
        {
          "tag": 159,
          "required": "Y",
          "notes": "Accrued interest dollar amount"
        },
        {
          "tag": 118,
          "required": "Y",
          "notes": "Settlement cash amount"
        }
      ]
    },
    "QuoteAccepted": {
      "msgType": "AI",
      "description": "OpenYield accepted a Quote (new or updated) and it is resting on the marketplace. QuoteStatus=0 (Accepted).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "297": "0"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock"
      ],
      "conditionalGroups": {
        "bid": "Required when Side=Buy (1): BidSize (134) and BidPx (132) must both be set",
        "offer": "Required when Side=Sell (2): OfferSize (135) and OfferPx (133) must both be set"
      },
      "fields": [
        {
          "tag": 117,
          "required": "Y",
          "notes": "Subscriber's QuoteID"
        },
        {
          "tag": 693,
          "required": "Y",
          "notes": "OpenYield's identifier for this response"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches quote"
        },
        {
          "tag": 132,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Price if Side=Buy, matches quote"
        },
        {
          "tag": 133,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Price if Side=Sell, matches quote"
        },
        {
          "tag": 645,
          "required": "O",
          "notes": "Dealer tiered price if Side=Buy"
        },
        {
          "tag": 646,
          "required": "O",
          "notes": "Dealer tiered price if Side=Sell"
        },
        {
          "tag": 134,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Quantity if Side=Buy, matches quote"
        },
        {
          "tag": 135,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Quantity if Side=Sell, matches quote"
        },
        {
          "tag": 297,
          "required": "Y"
        }
      ]
    },
    "QuoteRejected": {
      "msgType": "AI",
      "description": "OpenYield rejected a Quote due to validation or compliance failure. QuoteStatus=5 (Rejected).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "297": "5"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock"
      ],
      "conditionalGroups": {
        "bid": "Required when Side=Buy (1): BidSize (134) and BidPx (132) must both be set",
        "offer": "Required when Side=Sell (2): OfferSize (135) and OfferPx (133) must both be set"
      },
      "fields": [
        {
          "tag": 117,
          "required": "Y",
          "notes": "Subscriber's QuoteID"
        },
        {
          "tag": 693,
          "required": "Y",
          "notes": "OpenYield's identifier for this rejection"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches quote"
        },
        {
          "tag": 132,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Price if Side=Buy, matches quote"
        },
        {
          "tag": 133,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Price if Side=Sell, matches quote"
        },
        {
          "tag": 645,
          "required": "O",
          "notes": "Dealer tiered price if Side=Buy"
        },
        {
          "tag": 646,
          "required": "O",
          "notes": "Dealer tiered price if Side=Sell"
        },
        {
          "tag": 134,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Quantity if Side=Buy, matches quote"
        },
        {
          "tag": 135,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Quantity if Side=Sell, matches quote"
        },
        {
          "tag": 297,
          "required": "Y"
        },
        {
          "tag": 58,
          "required": "Y",
          "notes": "Human-readable rejection reason"
        }
      ]
    },
    "QuoteCanceled": {
      "msgType": "AI",
      "description": "Quote has been canceled (client sent zero size/price). QuoteStatus=1 (Canceled for Symbol).",
      "direction": {
        "source": "OpenYield",
        "target": "Subscriber"
      },
      "sessions": [
        "TR",
        "RQ"
      ],
      "discriminators": {
        "297": "1"
      },
      "fieldGroups": [
        "PartyBlock-Execution",
        "SecurityBlock"
      ],
      "conditionalGroups": {
        "bid": "Required when Side=Buy (1): BidSize (134) and BidPx (132) must both be set",
        "offer": "Required when Side=Sell (2): OfferSize (135) and OfferPx (133) must both be set"
      },
      "fields": [
        {
          "tag": 117,
          "required": "Y",
          "notes": "Subscriber's QuoteID"
        },
        {
          "tag": 693,
          "required": "Y",
          "notes": "OpenYield's identifier for this cancellation"
        },
        {
          "tag": 54,
          "required": "Y",
          "notes": "Matches quote"
        },
        {
          "tag": 132,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Price if Side=Buy, matches quote"
        },
        {
          "tag": 133,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Price if Side=Sell, matches quote"
        },
        {
          "tag": 645,
          "required": "O",
          "notes": "Dealer tiered price if Side=Buy"
        },
        {
          "tag": 646,
          "required": "O",
          "notes": "Dealer tiered price if Side=Sell"
        },
        {
          "tag": 134,
          "required": "Y",
          "conditionalGroup": "bid",
          "notes": "Quantity if Side=Buy, matches quote"
        },
        {
          "tag": 135,
          "required": "Y",
          "conditionalGroup": "offer",
          "notes": "Quantity if Side=Sell, matches quote"
        },
        {
          "tag": 297,
          "required": "Y"
        }
      ]
    }
  },
  "workflows": {
    "MarketData": {
      "session": "MD",
      "steps": [
        {
          "step": "Subscriber connects and sends Logon",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield responds with Logon",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield sends full market snapshot",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "MarketDataSnapshot",
          "loop": "Per security"
        },
        {
          "step": "OpenYield streams incremental updates",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "MarketDataIncrement",
          "loop": "On change"
        }
      ],
      "slugs": [
        "workflows/market-data",
        "fix-specification/md-market-data-feed"
      ]
    },
    "OrderBook": {
      "session": "OB",
      "steps": [
        {
          "step": "Subscriber connects and sends Logon",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield responds with Logon",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield builds the order book with IOI messages",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "IOI",
          "loop": "Per security"
        }
      ],
      "slugs": [
        "workflows/order-book",
        "fix-specification/ob-order-book-feed"
      ]
    },
    "OrderAndFill": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "NewOrderSingle"
        },
        {
          "step": "OpenYield accepts the order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "OpenYield sends partial fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled"
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted"
        }
      ],
      "slugs": [
        "workflows/order-and-fill"
      ]
    },
    "LimitOrderUpdate": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new limit order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "NewOrderSingle"
        },
        {
          "step": "OpenYield accepts the order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "Subscriber updates an order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "OrderCancelReplaceRequest"
        },
        {
          "step": "OpenYield confirms replacement",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderReplaced"
        }
      ],
      "slugs": [
        "workflows/limit-order-update"
      ]
    },
    "OrderAndCancelNoFills": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "NewOrderSingle"
        },
        {
          "step": "OpenYield accepts the order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "Subscriber sends cancel request",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "OrderCancelRequest"
        },
        {
          "step": "OpenYield confirms cancellation",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCanceled"
        }
      ],
      "slugs": [
        "workflows/order-and-cancel-no-fills"
      ]
    },
    "OrderAndCancelPartiallyFilled": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "NewOrderSingle"
        },
        {
          "step": "OpenYield accepts the order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "OpenYield sends partial fill(s)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled"
        },
        {
          "step": "Subscriber sends cancel request",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "OrderCancelRequest"
        },
        {
          "step": "OpenYield confirms partial cancel",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartialCanceled"
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted"
        }
      ],
      "slugs": [
        "workflows/order-and-cancel-partially-filled"
      ]
    },
    "OrderRejected": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new order",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "NewOrderSingle"
        },
        {
          "step": "OpenYield rejects the order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderRejected"
        }
      ],
      "slugs": [
        "workflows/order-rejected"
      ]
    },
    "DirectMaker": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends new quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote"
        },
        {
          "step": "OpenYield accepts the quote",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted"
        },
        {
          "step": "Subscriber updates an existing quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote",
          "optional": true
        },
        {
          "step": "OpenYield accepts the updated quote",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted",
          "optional": true
        },
        {
          "step": "OpenYield sends fill(s) if quote is matched",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill on full execution",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted",
          "optional": true
        },
        {
          "step": "Subscriber cancels quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote",
          "optional": true
        },
        {
          "step": "OpenYield confirms cancel",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteCanceled",
          "optional": true
        }
      ],
      "slugs": [
        "workflows/direct-maker"
      ]
    },
    "RFOInitiator": {
      "session": "RQ",
      "steps": [
        {
          "step": "Initiator sends RFO request",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "OpenYield stages the request (collection window)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "RFOPendingNew"
        },
        {
          "step": "Initiator updates the request",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest",
          "optional": true
        },
        {
          "step": "OpenYield acknowledges update",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "RFOPendingNew",
          "optional": true
        },
        {
          "step": "OpenYield places order with reserve on marketplace",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "OpenYield sends fill(s) if RFO crosses",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted",
          "optional": true
        },
        {
          "step": "Initiator cancels the RFO",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest",
          "optional": true
        },
        {
          "step": "OpenYield confirms cancellation",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCanceled",
          "optional": true
        },
        {
          "step": "OpenYield auto-cancels at end of firm window",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCanceled",
          "optional": true
        }
      ],
      "slugs": [
        "workflows/rfo-initiator",
        "fix-specification/rq-request-for-order-feed/rfo-initiate"
      ]
    },
    "RFORequestAndFill": {
      "session": "RQ",
      "steps": [
        {
          "step": "Initiator sends RFO",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "OpenYield acknowledges receipt",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "RFOPendingNew"
        },
        {
          "step": "OpenYield places order with reserve on marketplace",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "OpenYield sends partial fill(s)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted"
        }
      ],
      "slugs": [
        "workflows/request-for-order/rfo-request-and-fill"
      ]
    },
    "RFORequestAndCancel": {
      "session": "RQ",
      "steps": [
        {
          "step": "Initiator sends RFO",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "OpenYield acknowledges receipt",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "RFOPendingNew"
        },
        {
          "step": "Initiator cancels the RFO",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "OpenYield acknowledges cancellation",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCanceled"
        }
      ],
      "slugs": [
        "workflows/request-for-order/rfo-request-and-cancel"
      ]
    },
    "RFOResponder": {
      "session": "RQ",
      "steps": [
        {
          "step": "OpenYield sends sanitized QuoteRequest",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "Responder submits a quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote"
        },
        {
          "step": "OpenYield accepts the quote",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted"
        },
        {
          "step": "Responder updates the quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote",
          "optional": true
        },
        {
          "step": "OpenYield confirms quote update",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted",
          "optional": true
        },
        {
          "step": "OpenYield sends fill if RFO crosses",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted",
          "optional": true
        },
        {
          "step": "Responder cancels quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote",
          "optional": true
        },
        {
          "step": "OpenYield confirms quote cancel",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteCanceled",
          "optional": true
        },
        {
          "step": "OpenYield auto-cancels quote at end of firm window",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteCanceled",
          "optional": true
        }
      ],
      "slugs": [
        "workflows/rfo-responder",
        "fix-specification/rq-request-for-order-feed/rfo-respond"
      ]
    },
    "RFORespondAndFill": {
      "session": "RQ",
      "steps": [
        {
          "step": "OpenYield sends a request",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "Responder submits a quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote"
        },
        {
          "step": "OpenYield acknowledges the quote",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted"
        },
        {
          "step": "Responder updates the quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote",
          "optional": true,
          "loop": "Update price"
        },
        {
          "step": "OpenYield acknowledges the update",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted",
          "optional": true
        },
        {
          "step": "OpenYield sends partial fill(s)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderPartiallyFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends final fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted"
        }
      ],
      "slugs": [
        "workflows/request-for-order/rfo-respond-and-fill"
      ]
    },
    "RFORespondAndCancel": {
      "session": "RQ",
      "steps": [
        {
          "step": "OpenYield sends the request",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "Responder submits a quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote"
        },
        {
          "step": "OpenYield acknowledges the quote",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteAccepted"
        },
        {
          "step": "Responder cancels with a zero-priced quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Quote"
        },
        {
          "step": "OpenYield acknowledges the cancellation",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "QuoteCanceled"
        }
      ],
      "slugs": [
        "workflows/request-for-order/rfo-respond-and-cancel"
      ]
    },
    "RFOTraditionalRFQ": {
      "session": "RQ",
      "steps": [
        {
          "step": "Initiator sends RFO request",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteRequest"
        },
        {
          "step": "OpenYield stages and places request",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "RFOPendingNew"
        },
        {
          "step": "OpenYield forwards sanitized quotes to initiator",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "Quote"
        },
        {
          "step": "Initiator accepts a quote",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteResponse"
        },
        {
          "step": "OpenYield places the acceptance as a limit order",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderAccepted"
        },
        {
          "step": "OpenYield sends fill (crosses at best available price)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderFilled",
          "optional": true
        },
        {
          "step": "OpenYield sends completion ticket",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCompleted",
          "optional": true
        }
      ],
      "slugs": [
        "workflows/rfo-traditional-rfq",
        "fix-specification/rq-request-for-order-feed/rfo-forward-quotes"
      ]
    },
    "DropCopy": {
      "session": "DC",
      "steps": [
        {
          "step": "Subscriber connects and sends Logon",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield responds with Logon",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield delivers partial fill(s)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "DropCopyFill",
          "optional": true,
          "loop": "for each partial fill"
        },
        {
          "step": "OpenYield delivers complete fill",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "DropCopyFill"
        },
        {
          "step": "OpenYield delivers fill cancel (post-trade)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "FillCancel",
          "optional": true
        },
        {
          "step": "OpenYield delivers fill correction (post-trade)",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "FillCorrection",
          "optional": true
        }
      ],
      "slugs": [
        "workflows/drop-copy",
        "fix-specification/post-trade"
      ]
    },
    "SessionState": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber connects and sends Logon",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield responds with Logon",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "Logon"
        },
        {
          "step": "OpenYield sends current session state",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "TradingSessionStatus"
        },
        {
          "step": "On state change",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "TradingSessionStatus",
          "optional": true,
          "loop": "On state change"
        }
      ],
      "slugs": [
        "all-sessions/session-state"
      ]
    },
    "CancelAll": {
      "session": "TR",
      "steps": [
        {
          "step": "Subscriber sends QuoteCancel with Cancel All type",
          "direction": {
            "source": "Subscriber",
            "target": "OpenYield"
          },
          "message": "QuoteCancel"
        },
        {
          "step": "OpenYield cancels resting orders and deactivates access",
          "direction": {
            "source": "OpenYield",
            "target": "Subscriber"
          },
          "message": "OrderCanceled"
        }
      ],
      "slugs": [
        "fix-specification/cancel-all"
      ]
    }
  },
  "messageToSlug": {
    "Logon": "all-sessions/logon-logoff",
    "Logout": "all-sessions/logon-logoff",
    "Heartbeat": "all-sessions/heartbeat",
    "TestRequest": "all-sessions/test-messages",
    "ResendRequest": "all-sessions/resend-request",
    "Reject": "all-sessions/reject",
    "BusinessMessageReject": "all-sessions/reject",
    "SecurityListRequest": "all-sessions/security-list",
    "SecurityList": "all-sessions/security-list",
    "TradingSessionStatus": "all-sessions/session-state",
    "MarketDataSnapshot": "fix-specification/md-market-data-feed/snapshot",
    "MarketDataIncrement": "fix-specification/md-market-data-feed/increment",
    "IOI": "fix-specification/ob-order-book-feed",
    "NewOrderSingle": "fix-specification/tr-trade-feed/order/new-order",
    "OrderCancelReplaceRequest": "fix-specification/tr-trade-feed/order/update-limit-order",
    "OrderCancelRequest": "fix-specification/tr-trade-feed/order/cancel-order",
    "Quote": "fix-specification/tr-trade-feed/quote/new-quote",
    "QuoteCancel": "fix-specification/tr-trade-feed/quote/cancel-quote",
    "QuoteRequest": "fix-specification/rq-request-for-order-feed/rfo-initiate/new-rfo",
    "QuoteResponse": "fix-specification/rq-request-for-order-feed/rfo-respond/quote",
    "OrderAccepted": "fix-specification/tr-trade-feed/order/new-order",
    "OrderRejected": "fix-specification/tr-trade-feed/order/ack-rejected",
    "OrderReplaced": "fix-specification/tr-trade-feed/order/update-limit-order",
    "OrderCanceled": "fix-specification/tr-trade-feed/order/cancel-order",
    "OrderPartiallyFilled": "fix-specification/tr-trade-feed/execution/partial-fill",
    "OrderFilled": "fix-specification/tr-trade-feed/execution/complete-fill",
    "OrderCompleted": "fix-specification/tr-trade-feed/execution/completed",
    "QuoteAccepted": "fix-specification/tr-trade-feed/quote/new-quote",
    "QuoteRejected": "fix-specification/tr-trade-feed/quote/rejected",
    "QuoteCanceled": "fix-specification/tr-trade-feed/quote/cancel-quote",
    "DropCopyFill": "fix-specification/post-trade/drop-copy",
    "FillCancel": "fix-specification/post-trade/fill-cancels",
    "FillCorrection": "fix-specification/post-trade/fill-corrections",
    "OrderPartialCanceled": "fix-specification/tr-trade-feed/execution/partial-fill-canceled",
    "RFOPendingNew": "fix-specification/rq-request-for-order-feed/rfo-initiate/new-rfo"
  }
}
