onikora FIX Parsing API

Machine-readable API definition: /api/fix/v1/openapi.json

Available endpoints:

For single-message parsing, the default response is the human-readable hierarchical JSON output. To request the tag-based view instead, call POST /api/fix/v1/messages/parse?type=tags. Single-message parsing does not support sequence.

Single-message request example:

{
  "message": "8=FIX.4.4|9=61|35=A|49=CLIENT1|56=SERVER1|34=1|52=20260413-12:00:00.000|98=0|108=30|10=000|"
}

The single-message endpoint returns the parsed message object directly. It does not wrap the result in items.

Single-message response example:

{
  "StandardHeader": {
    "BeginString": "FIX.4.4",
    "BodyLength": 61,
    "MsgType": "A",
    "SenderCompID": "CLIENT1",
    "TargetCompID": "SERVER1",
    "MsgSeqNum": 1,
    "SendingTime": "20260413-12:00:00.000"
  },
  "EncryptMethod": "0",
  "HeartBtInt": 30,
  "StandardTrailer": {
    "CheckSum": "000"
  }
}

Single-message tag view example (?type=tags):

{
  "StandardHeader": {
    "8": "FIX.4.4",
    "9": 61,
    "35": "A",
    "49": "CLIENT1",
    "56": "SERVER1",
    "34": 1,
    "52": "20260413-12:00:00.000"
  },
  "98": "0",
  "108": 30,
  "StandardTrailer": {
    "10": "000"
  }
}

For batch parsing, if outputs is omitted, the API defaults to ["ufo", "ffo"]. Include "sequence" explicitly when you want sequence rows returned.

Batch request example:

{
  "outputs": ["ufo", "ffo", "sequence"],
  "messages": [
    "8=FIX.4.4|9=164|35=8|49=MYSERVER|56=CLIENTLAT-EXT-1|34=59704|52=20260414-19:04:42.644|37=ORD-LAT-59701|11=LAT-59701|17=EX-LAT-59701|150=0|39=0|55=AAPL|54=1|38=100|151=100|14=0|6=0|10=030|",
    "8=FIX.4.4|9=61|35=A|49=CLIENT1|56=SERVER1|34=1|52=20260413-12:00:00.000|98=0|108=30|10=000|"
  ]
}

Batch response example:

{
  "protocol": "fix",
  "outputs": ["ufo", "ffo", "sequence"],
  "count": 2,
  "items": [
    {
      "index": 0,
      "raw": "8=FIX.4.4|9=164|35=8|49=MYSERVER|56=CLIENTLAT-EXT-1|34=59704|52=20260414-19:04:42.644|37=ORD-LAT-59701|11=LAT-59701|17=EX-LAT-59701|150=0|39=0|55=AAPL|54=1|38=100|151=100|14=0|6=0|10=030|",
      "messageName": "ExecutionReport",
      "messageType": "8",
      "ufo": {
        "StandardHeader": {
          "BeginString": "FIX.4.4",
          "BodyLength": 164,
          "MsgType": "8",
          "SenderCompID": "MYSERVER",
          "TargetCompID": "CLIENTLAT-EXT-1",
          "MsgSeqNum": 59704,
          "SendingTime": "20260414-19:04:42.644"
        }
      },
      "ffo": {
        "StandardHeader": {
          "8": "FIX.4.4",
          "9": 164,
          "35": "8",
          "49": "MYSERVER",
          "56": "CLIENTLAT-EXT-1",
          "34": 59704,
          "52": "20260414-19:04:42.644"
        }
      },
      "sequence": {
        "time": "20260414-19:04:42.644",
        "senderCompId": "MYSERVER",
        "targetCompId": "CLIENTLAT-EXT-1",
        "messageType": "8",
        "messageName": "ExecutionReport",
        "direction": "right",
        "left": "MYSERVER",
        "right": "CLIENTLAT-EXT-1",
        "arrow": "→",
        "flow": "MYSERVER → CLIENTLAT-EXT-1",
        "message": "ExecutionReport[8]"
      }
    },
    {
      "index": 1,
      "raw": "8=FIX.4.4|9=61|35=A|49=CLIENT1|56=SERVER1|34=1|52=20260413-12:00:00.000|98=0|108=30|10=000|",
      "messageName": "Logon",
      "messageType": "A",
      "ufo": {
        "StandardHeader": {
          "BeginString": "FIX.4.4",
          "BodyLength": 61,
          "MsgType": "A",
          "SenderCompID": "CLIENT1",
          "TargetCompID": "SERVER1",
          "MsgSeqNum": 1,
          "SendingTime": "20260413-12:00:00.000"
        }
      },
      "ffo": {
        "StandardHeader": {
          "8": "FIX.4.4",
          "9": 61,
          "35": "A",
          "49": "CLIENT1",
          "56": "SERVER1",
          "34": 1,
          "52": "20260413-12:00:00.000"
        },
        "98": "0",
        "108": 30,
        "StandardTrailer": {
          "10": "000"
        }
      },
      "sequence": {
        "time": "20260413-12:00:00.000",
        "senderCompId": "CLIENT1",
        "targetCompId": "SERVER1",
        "messageType": "A",
        "messageName": "Logon",
        "direction": "right",
        "left": "CLIENT1",
        "right": "SERVER1",
        "arrow": "→",
        "flow": "CLIENT1 → SERVER1",
        "message": "Logon[A]"
      }
    }
  ]
}

Batch response preserves request order in items, and invalid messages are reported in errors with their original index.