# Application Group 0x04 - Magnetic Stripe Reader (MSR) Messages

**Command 0x04::0x09 - Read MSR Data**

The host uses this command to arm the device’s MSR to read magnetic stripe data after the device reports an EMV transaction using a chip card has failed. The command is intended to be used to implement fallback when Command 0x07::0x80 - EMV L2 Transaction Status or Notification 0x07::0x8A - EMV L2 Transaction Status report statuses EMV Error - Card Blocked or Empty Candidate List. If the host wishes to fall back to reading MSR data upon receiving those status reports, it must invoke this command while the card is still inserted, and the device will read the magnetic stripe when the cardholder removes the card from the slot, then send its response to the host to return the requested data.

Although this command is intended to be used after EMV transaction failure, if the host calls it outside the context of an EMV transaction, the command will function the same: The MSR reader will continue to be armed, and the device will return MSR card data in the response upon card removal.

## Table - Message Structure for Command 0x04::0x09 - Read MSR Data

<table data-header-hidden><thead><tr><th width="74.272705078125" valign="top"></th><th width="76.727294921875" valign="top"></th><th width="198.9090576171875" valign="top"></th><th></th></tr></thead><tbody><tr><td valign="top">Tag</td><td valign="top">Len</td><td valign="top">Value(s) / Description</td><td></td></tr><tr><td valign="top">C0</td><td valign="top">01</td><td valign="top">01</td><td>Message Type Data Object (Tag C0) = 0x01 Command</td></tr><tr><td valign="top">C1</td><td valign="top">01</td><td valign="top">04</td><td>Application ID Data Object (Tag C1) = 0x04 MSR Messages</td></tr><tr><td valign="top">C2</td><td valign="top">01</td><td valign="top">09</td><td>Command ID Data Object (Tag C2) = 0x09 Read MSR Data</td></tr></tbody></table>

## Table - Response to Command 0x04::0x09 - Read MSR Data

<table data-header-hidden><thead><tr><th width="72.45452880859375" valign="top"></th><th width="107.727294921875" valign="top"></th><th valign="top"></th><th></th></tr></thead><tbody><tr><td valign="top">Tag</td><td valign="top">Len</td><td valign="top">Value(s) / Description</td><td></td></tr><tr><td valign="top">C0</td><td valign="top">01</td><td valign="top">02</td><td>Message Type Data Object (Tag C0) = 0x02 Response</td></tr><tr><td valign="top">C1</td><td valign="top">01</td><td valign="top">04</td><td>Application ID Data Object (Tag C1) = 0x04 MSR Messages</td></tr><tr><td valign="top">C2</td><td valign="top">01</td><td valign="top">09</td><td>Command ID Data Object (Tag C2) = 0x09 Read MSR Data</td></tr><tr><td valign="top">C3</td><td valign="top">01</td><td valign="top">00</td><td>Result Code Data Object (Tag C3) = 0x00 OK / Done</td></tr><tr><td valign="top"><p> </p><p>C4</p></td><td valign="top"><p> </p><p>Calculated</p></td><td valign="top"><p>Data Field Data Object (Tag C4 or E0) =</p><p>If Result Code is OK / Done, this contains magnetic stripe data as documented in Data Object F4 - Magnetic Stripe Reader Card Data, otherwise the response will not include data object C4.</p></td><td></td></tr></tbody></table>

**Notification 0x04::0x11 - MSR Card Data Available**

When a cardholder swipes a magnetic stripe card, the device sends this notification to inform the host that card data is available. After receiving this notification, the host should call Command 0x04::0x12 - Request MSR Card Data to get the data.

## Table - Message Structure for Notification 0x04::0x11 - MSR Card Data Available

<table data-header-hidden><thead><tr><th width="73.3636474609375" valign="top"></th><th width="68.54547119140625" valign="top"></th><th valign="top"></th><th></th></tr></thead><tbody><tr><td valign="top">Tag</td><td valign="top">Len</td><td valign="top">Value(s) / Description</td><td></td></tr><tr><td valign="top">C0</td><td valign="top">01</td><td valign="top">03</td><td>Message Type Data Object (Tag C0) = 0x03 Notification</td></tr><tr><td valign="top">C1</td><td valign="top">01</td><td valign="top">04</td><td>Application ID Data Object (Tag C1) = 0x04 MSR Messages</td></tr><tr><td valign="top">C2</td><td valign="top">01</td><td valign="top">11</td><td>Command ID Data Object (Tag C2) = 0x11 MSR Card Data Available</td></tr><tr><td valign="top"><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>C4</p></td><td valign="top"><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>03</p></td><td valign="top"><p>Data Field Data Object (Tag C4 or E0) = Byte 0 Card type</p><p>0x00 = Other 0x01 = ISO</p><p>0x02 = AAMVA</p><p>0x99 = MSR_OPERATION_ERROR</p><p> </p><p>Byte 1 Account Data whitelist comparison result (see Command 0x03::0x80 - Read PAN Whitelist / Account Data Whitelist)</p><p>0x00 = The card does not match any rule in the Account Data whitelist, device will send data encrypted.</p><p>0x01 = The card matches one or more rules in the Account Data whitelist, device will send data unencrypted.</p><p>0x99 = MSR_OPERATION_ERROR</p><p> </p><p>Byte 2 PAN status (see Command 0x03::0x80 - Read PAN Whitelist / Account Data Whitelist)</p><p>0x00 = The card does not match any rule in the PAN whitelist. No PAN is available.</p><p>0x01 = The card matches one or more rules in the PAN whitelist. Full cleartext PAN for PIN block construction is available.</p><p>0x02 = The card matches one or more rules in the PAN whitelist. Partial cleartext PAN for PIN block construction is available.</p><p>0x03 = The card does not match any rule in the PAN whitelist, but an encrypted PAN is available for use with a paired Cryptera EPP.</p><p>0x99 = MSR_OPERATION_ERROR</p></td><td></td></tr></tbody></table>

**Command 0x04::0x12 - Request MSR Card Data**

The host uses this command to request MSR data after receiving Notification 0x04::0x11 - MSR Card Data Available.

## Table - Message Structure for Command 0x04::0x12 - Request MSR Card Data

<table data-header-hidden><thead><tr><th width="71.54541015625" valign="top"></th><th width="72.27276611328125" valign="top"></th><th width="192.90911865234375" valign="top"></th><th></th></tr></thead><tbody><tr><td valign="top">Tag</td><td valign="top">Len</td><td valign="top">Value(s) / Description</td><td></td></tr><tr><td valign="top">C0</td><td valign="top">01</td><td valign="top">01</td><td>Message Type Data Object (Tag C0) = 0x01 Command</td></tr><tr><td valign="top">C1</td><td valign="top">01</td><td valign="top">04</td><td>Application ID Data Object (Tag C1) = 0x04 MSR Messages</td></tr><tr><td valign="top">C2</td><td valign="top">01</td><td valign="top">12</td><td>Command ID Data Object (Tag C2) = 0x12 Request MSR Card Data</td></tr></tbody></table>

## Table - Response to Command 0x04::0x12 - Request MSR Card Data

<table data-header-hidden><thead><tr><th width="77.9090576171875" valign="top"></th><th width="106.6363525390625" valign="top"></th><th valign="top"></th><th></th></tr></thead><tbody><tr><td valign="top">Tag</td><td valign="top">Len</td><td valign="top">Value(s) / Description</td><td></td></tr><tr><td valign="top">C0</td><td valign="top">01</td><td valign="top">02</td><td>Message Type Data Object (Tag C0) = 0x02 Response</td></tr><tr><td valign="top">C1</td><td valign="top">01</td><td valign="top">04</td><td>Application ID Data Object (Tag C1) = 0x04 MSR Messages</td></tr><tr><td valign="top">C2</td><td valign="top">01</td><td valign="top">12</td><td>Command ID Data Object (Tag C2) = 0x12 Request MSR Card Data</td></tr><tr><td valign="top">C3</td><td valign="top">01</td><td valign="top">00</td><td>Result Code Data Object (Tag C3) = 0x00 OK / Done</td></tr><tr><td valign="top"><p> </p><p>C4</p></td><td valign="top"><p> </p><p>Calculated</p></td><td valign="top"><p>Data Field Data Object (Tag C4 or E0) =</p><p>If Result Code is OK / Done (0x00), this contains magnetic stripe data as documented in Data Object F4 - Magnetic Stripe Reader Card Data, otherwise the response includes a 1-byte error code.</p></td><td></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.magtek.com/hardware/oem-readers-and-components/oem-readers/odynamo/documentation/programmers-manuals/programmers-manual-commands/command-set/application-group-0x04-magnetic-stripe-reader-msr-messages.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
