{"_id":"5ca384a88e25ba006241362b","project":"57336fd5a6a9c40e00e13a0b","version":{"_id":"5c6c238ff7d54800395355a0","project":"57336fd5a6a9c40e00e13a0b","__v":1,"forked_from":"5beb278ac442ab0213f009cf","createdAt":"2018-04-23T14:36:48.535Z","releaseDate":"2018-04-23T14:36:48.535Z","categories":["5c6c238ff7d548003953555d","5c6c238ff7d548003953555e","5c6c238ff7d548003953555f","5c6c238ff7d5480039535560","5c6c238ff7d5480039535561","5c6c238ff7d5480039535562","5beb278ac442ab0213f00990","5c6c238ff7d5480039535563","5c3f542c12c4ac004bc51718","5c928dba4aa821001ae4f050"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"Main","version_clean":"8976.0.0-Basics","version":"8976-Basics"},"category":{"_id":"5c6c238ff7d5480039535563","version":"5c6c238ff7d54800395355a0","project":"57336fd5a6a9c40e00e13a0b","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-11-03T20:45:01.593Z","from_sync":false,"order":7,"slug":"topics","title":"Guides"},"user":"5beb1b96bc2003003ecd645e","__v":0,"parentDoc":null,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2019-04-02T15:50:00.954Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":16,"body":"Card processing can be categorized into different levels, with each level defined by how much data is required to process the transaction. Enhanced data levels, such as Level 2 and Level 3, require extra information to process the transaction and are most useful for corporations and government agencies that require this type of transaction detail to accurately monitor and track expenses. BlueSnap's Payment API supports Level 2/3 data processing for all currencies, allowing you to expand your business-to-business (B2B) and business-to-government (B2G) sales opportunities.\n\nThis guide covers the following topics: \n* [Data levels](#section-data-levels) \n* [Required properties](#section-required-properties) \n   * [Required properties for MasterCard](#required_mc) \n   * [Required properties for Visa](#required_visa) \n   * [Required properties for Amex](#section-required-for-amex) \n* [Sending Level 3 data examples](#section-sending-level-3-data-examples)\n   * [JSON example](#section-json-example) \n   * [XML example](#section-xml-example) \n* [Test Cards](#section-test-cards)\n<br />\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Before you begin\",\n  \"body\": \"* Level 2/3 Data is supported for select configurations. Contact [Merchant Support](https://bluesnap.zendesk.com/hc/en-us/requests/new?ticket_form_id=360000127087) for more details.\\n* Do not include the pipe character `|` in a Level 2 or Level 3 data field.  Including the character causes fields to be parsed incorrectly.\\n* If you don't know the card type, pass as many `level3Data` properties as you can. \\n  * If you pass a property that exceeds the maximum length, BlueSnap truncates the value to meet requirements.\\n  * If BlueSnap detects the card doesn't support Level 2/3 Data, the `level3Data` properties are not sent to the issuer.\\n* If you manage your own subscriptions, you must send `level3Data` for each charge.\"\n}\n[/block]\n\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>\n<hr />\n# Data levels \n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Card brand\",\n    \"h-1\": \"Supports\",\n    \"0-0\": \"MasterCard<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>\",\n    \"0-1\": \"[**Level 2**](#required_mc_l2)\\n[**Level 3**](#required_mc_l3)\",\n    \"1-0\": \"Visa\",\n    \"1-1\": \"[**Level 2**](#required_visa_l2)\\n[**Level 3**](#required_visa_l3)\",\n    \"h-2\": \"Level 2\",\n    \"h-3\": \"Level 2 with TAA\",\n    \"h-4\": \"Level 3\",\n    \"0-2\": \"**\",\n    \"2-0\": \"Amex\",\n    \"2-1\": \"**Level 2**\\n**Level 2 with TAA (Transaction Advice Addendum)** \\n>Level 2 with TAA is an Amex-specific level that contains item data (such as item description and quantity) in addition to Level 2 fields.  For more details, refer to [Required properties for Amex](#section-required-for-amex).\"\n  },\n  \"cols\": 2,\n  \"rows\": 3\n}\n[/block]\n\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>\n<hr />\n# Required properties\n<span id=\"required_mc\"> </span>\n## Required for MasterCard\n\n\n<span id=\"required_mc_l2\"> </span>**Required for MasterCard for Level 2 Data**\nOnly the following are required for Level **2** Data:\n*  `customerReferenceNumber` / `customer‑reference‑number`\n* `salesTaxAmount` / `sales‑tax‑amount`\n<span>&nbsp;</span>\n\n<span id=\"required_mc_l3\"> </span>**Required for MasterCard for Level 3 Data**\nThe following table outlines the required properties for Level 3 Data.  \n[block:html]\n{\n  \"html\": \"<div>\\n\\n    <table id=\\\"l3d_for_mc\\\">\\n\\n        <tr>\\n            <th>Hierarchy</th>\\n            <th>Property (<span style=\\\"font-family:'Courier New';\\\">JSON&nbsp;XML</span>)</th>\\n            <th style=\\\"text-align:center\\\">Level&nbsp;3 Details</th>\\n        </tr>\\n\\n        <tr>\\n            <td rowspan=\\\"12\\\">\\n                <p><b>Order&nbsp;level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\">For details regarding the specifics of a property, refer to:&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3data\\\"><span\\n                        class=\\\"api\\\">level3Data</span><span style=\\\"font-size:small\\\">\\n                        (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data\\\"><span\\n                        class=\\\"api\\\">level-3-data</span><span style=\\\"font-size:small\\\"> (XML)</span></a></td>\\n        </tr>\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">customerReferenceNumber<br />customer&#8209;reference&#8209;number</span></td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces, we replace the value with <b><span\\n                        class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">salesTaxAmount<br />sales&#8209;tax&#8209;amount</span></td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces, we replace the value with all zeros.</p>\\n            </td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">freightAmount<br />freight&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">dutyAmount<br />duty&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">destinationZipCode<br />destination&#8209;zip&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with <b><span class=\\\"api\\\">0</span></b>.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">destinationCountryCode<br />destination&#8209;country&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value is not valid, we replace the value with all spaces. </td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">shipFromZipCode<br />ship&#8209;from&#8209;zip&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with <b><span class=\\\"api\\\">0</span></b>.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">discountAmount<br />discount&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value\\n                (numeric <b><span class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with\\n                all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">taxAmount<br />tax&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is sent and it is not valid, we replace the value\\n                with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">taxRate<br />tax&#8209;rate</span></td>\\n            <td><b>Mandatory</b> if the Tax Amount is present &mdash; If the value we receive is not a valid value, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">level3DataItem<br />level&#8209;3&#8209;data&#8209;item</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; Container for the data item properties shown below. See details below.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td rowspan=\\\"14\\\">\\n                <p><b>Item level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\"  style=\\\"padding-left: 20px\\\">\\n                <p>The following are the required <b>data item</b> properties. For details regarding the specifics of a\\n                    property, refer to:&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3dataitems\\\"><span\\n                            class=\\\"api\\\">level3DataItems</span><span style=\\\"font-size:small\\\">\\n                            (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data-item\\\"><span\\n                            class=\\\"api\\\">level&#8209;3&#8209;data&#8209;item</span><span style=\\\"font-size:small\\\">\\n                            (XML)</span></a></p>\\n\\n                <p><strong>Note:</strong> You may pass the following properties for each item.</p>\\n            </td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">lineItemTotal</span>\\n                <br /><span class=\\\"api\\\">line&#8209;item&#8209;total</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is not a valid value (numeric <b><span\\n                        class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with <b><span\\n                        class=\\\"api\\\">1</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">commodityCode</span>\\n                <br /><span class=\\\"api\\\">commodity&#8209;code</span>\\n            </td>\\n            <td><b>Not mandatory</b></td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">description</span>\\n                <br /><span class=\\\"api\\\">description</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">discountAmount</span>\\n                <br /><span class=\\\"api\\\">discount&#8209;amount</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value\\n                (numeric <b><span class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with\\n                all zeros.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">discountIndicator</span>\\n                <br /><span class=\\\"api\\\">discount&#8209;indicator</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is not <b><span class=\\\"api\\\">Y</span></b> or <b><span\\n                        class=\\\"api\\\">N</span></b>, we replace the value with <b><span class=\\\"api\\\">N</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">grossNetIndicator</span>\\n                <br /><span class=\\\"api\\\">gross&#8209;net&#8209;indicator</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is not <b><span class=\\\"api\\\">Y</span></b> or <b><span\\n                        class=\\\"api\\\">N</span></b>, we replace the value with <b><span class=\\\"api\\\">N</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">productCode</span>\\n                <br /><span class=\\\"api\\\">product&#8209;code</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">itemQuantity</span>\\n                <br /><span class=\\\"api\\\">item&#8209;quantity</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">1</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">taxAmount</span>\\n                <br /><span class=\\\"api\\\">tax&#8209;amount</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is sent and it is not valid, we replace the value\\n                with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">taxRate</span>\\n                <br /><span class=\\\"api\\\">tax&#8209;rate</span>\\n            </td>\\n            <td><b>Mandatory</b> if the Tax Amount is present &mdash; If the value we receive is not a valid value, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">taxType</span>\\n                <br /><span class=\\\"api\\\">tax&#8209;type</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value,\\n                we replace the value with all spaces.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left:20px\\\">\\n                <span class=\\\"api\\\">unitOfMeasure</span>\\n                <br /><span class=\\\"api\\\">unit&#8209;of&#8209;measure</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value we receive is all spaces or all zeros, we replace the value with NA.</td>\\n        </tr>\\n\\n    </table>\\n\\n</div>\\n\\n<style>\\n    .api {\\n        font-family: 'Courier New';\\n        background-color: #efefef;\\n    }\\n\\n    .center {\\n        display: table-cell;\\n        text-align: center;\\n    }\\n\\n    table td {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n\\n    table th {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n</style>\"\n}\n[/block]\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>\n<hr />\n\n<span id=\"required_visa\"> </span>\n## Required for Visa\n\n<span id=\"required_visa_l2\"> </span>**Required for Visa for Level 2 Data**\nOnly the following are required for Level 2 Data:\n*  `customerReferenceNumber` / `customer‑reference‑number`\n* `salesTaxAmount` / `sales‑tax‑amount`\n<span>&nbsp;</span>\n\n<span id=\"required_visa_l3\"> </span>**Required for Visa for Level 3 Data**\nThe following table outlines the required properties for Level 3 Data.  \n[block:html]\n{\n  \"html\": \"<div>\\n\\n    <table id=\\\"l3d_for_visa\\\">\\n\\n        <tr>\\n            <th>Hierarchy</th>\\n            <th>Property (<span style=\\\"font-family:'Courier New';\\\">JSON&nbsp;XML</span>)</th>\\n            <th style=\\\"text-align:center\\\">Level&nbsp;3 Details</th>\\n        </tr>\\n\\n        <tr>\\n            <td rowspan=\\\"12\\\">\\n                <p><b>Order&nbsp;level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\">For details regarding the specifics of a property, refer to:&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3data\\\"><span\\n                        class=\\\"api\\\">level3Data</span><span style=\\\"font-size:small\\\">\\n                        (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data\\\"><span\\n                        class=\\\"api\\\">level-3-data</span><span style=\\\"font-size:small\\\"> (XML)</span></a></td>\\n        </tr>\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">customerReferenceNumber<br />customer&#8209;reference&#8209;number</span></td>\\n            <td><b>Not mandatory</b></td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">salesTaxAmount<br />sales&#8209;tax&#8209;amount</span></td>\\n            <td><b>Not mandatory</b></p>\\n            </td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">freightAmount<br />freight&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">dutyAmount<br />duty&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is all spaces, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">destinationZipCode<br />destination&#8209;zip&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; We do not change the value.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">destinationCountryCode<br />destination&#8209;country&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value, we replace the value with all spaces.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">shipFromZipCode<br />ship&#8209;from&#8209;zip&#8209;code</span></td>\\n            <td><b>Not mandatory</b> &mdash; We do not change the value.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">discountAmount<br />discount&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value\\n                (numeric <b><span class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with\\n                all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">taxAmount<br />tax&#8209;amount</span></td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is sent and it is not valid, we replace the value\\n                with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">taxRate<br />tax&#8209;rate</span></td>\\n            <td><b>Mandatory</b> if the Tax Amount is present &mdash; If the value we receive is not a valid value, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">level3DataItem<br />level&#8209;3&#8209;data&#8209;item</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; Container for the data item properties shown below. See details below.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td rowspan=\\\"14\\\">\\n                <p><b>Item level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\">\\n                <p>The following are the required <b>data item</b> properties. For details regarding the specifics of a\\n                    property, refer to:&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3dataitems\\\"><span\\n                            class=\\\"api\\\">level3DataItems</span><span style=\\\"font-size:small\\\">\\n                            (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data-item\\\"><span\\n                            class=\\\"api\\\">level&#8209;3&#8209;data&#8209;item</span><span style=\\\"font-size:small\\\">\\n                            (XML)</span></a></p>\\n\\n                <p><strong>Note:</strong> You may pass the following properties for each item.</p>\\n            </td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">lineItemTotal</span>\\n                <br /><span class=\\\"api\\\">line&#8209;item&#8209;total</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is not a valid value (numeric <b><span\\n                        class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with <b><span\\n                        class=\\\"api\\\">1</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">commodityCode</span>\\n                <br /><span class=\\\"api\\\">commodity&#8209;code</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">00101</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">description</span>\\n                <br /><span class=\\\"api\\\">description</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">discountAmount</span>\\n                <br /><span class=\\\"api\\\">discount&#8209;amount</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if a value is sent and the value we receive is not a valid value\\n                (numeric <b><span class=\\\"api\\\">0</span></b>–<b><span class=\\\"api\\\">9</span></b>), we replace the value with\\n                all zeros.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">productCode</span>\\n                <br /><span class=\\\"api\\\">product&#8209;code</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">itemQuantity</span>\\n                <br /><span class=\\\"api\\\">item&#8209;quantity</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">1</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">taxAmount</span>\\n                <br /><span class=\\\"api\\\">tax&#8209;amount</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; However, if the value is sent and it is not valid, we replace the value\\n                with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">taxRate</span>\\n                <br /><span class=\\\"api\\\">tax&#8209;rate</span>\\n            </td>\\n            <td><b>Mandatory</b> if the Tax Amount is present &mdash; If the value we receive is not a valid value, we\\n                replace the value with all zeros.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">unitCost</span>\\n                <br /><span class=\\\"api\\\">unit&#8209;cost</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">1</span></b>.</td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left:20px\\\">\\n                <span class=\\\"api\\\">unitOfMeasure</span>\\n                <br /><span class=\\\"api\\\">unit&#8209;of&#8209;measure</span>\\n            </td>\\n            <td><b>Not mandatory</b> &mdash; If the value we receive is all spaces or all zeros, we replace the value with\\n                <b><span class=\\\"api\\\">NA</span></b>.</td>\\n        </tr>\\n\\n    </table>\\n\\n</div>\\n\\n<style>\\n    .api {\\n        font-family: 'Courier New';\\n        background-color: #efefef;\\n    }\\n\\n    .center {\\n        display: table-cell;\\n        text-align: center;\\n    }\\n\\n    table td {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n\\n    table th {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n</style>\"\n}\n[/block]\n<span>&nbsp;</span>\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>\n<hr />\n\n## Required for Amex\nThe following table outlines the required properties for **Amex Level 2 with TAA (Transaction Advice Addendum)**.  This is an Amex-specific level that contains item data (such as item description and quantity) in addition to Level 2 fields.  Only the following fields are applicable.\n[block:html]\n{\n  \"html\": \"<div>\\n\\n    <table id=\\\"l3d_for_amex\\\">\\n\\n        <tr>\\n            <th>Hierarchy</th>\\n            <th>Property (<span style=\\\"font-family:'Courier New';\\\">JSON&nbsp;XML</span>)</th>\\n            <th style=\\\"text-align:center\\\">Amex&nbsp;Level&nbsp;2&nbsp;with&nbsp;TAA</th>\\n        </tr>\\n\\n        <tr>\\n            <td rowspan=\\\"5\\\">\\n                <p><b>Order&nbsp;level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\">For details regarding the specifics of a property, refer to:&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3data\\\"><span\\n                        class=\\\"api\\\">level3Data</span><span style=\\\"font-size:small\\\">\\n                        (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                    href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data\\\"><span\\n                        class=\\\"api\\\">level-3-data</span><span style=\\\"font-size:small\\\"> (XML)</span></a></td>\\n        </tr>\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">customerReferenceNumber<br />customer&#8209;reference&#8209;number</span></td>\\n            <td ><b>Mandatory</b></td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">salesTaxAmount<br />sales&#8209;tax&#8209;amount</span></td>\\n            <td><b>Mandatory</b></td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">destinationZipCode<br />destination&#8209;zip&#8209;code</span></td>\\n            <td><b>Optional</b></td>\\n        </tr>\\n\\n        <tr>\\n            <td><span class=\\\"api\\\">level3DataItem<br />level&#8209;3&#8209;data&#8209;item</span>\\n            </td>\\n            <td><b>Mandatory</b> &mdash; Container for the data item properties shown below. See details below.</td>\\n        </tr>\\n\\n\\n        <tr>\\n            <td rowspan=\\\"4\\\">\\n                <p><b>Item level</b></p>\\n            </td>\\n            <td colspan=\\\"2\\\"  style=\\\"padding-left: 20px\\\">\\n                <p>The following are the required <b>data item</b> properties. For details regarding the specifics of a\\n                    property, refer to:&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-JSON/docs/level3dataitems\\\"><span\\n                            class=\\\"api\\\">level3DataItems</span><span style=\\\"font-size:small\\\">\\n                            (JSON)</span></a>&nbsp;&nbsp;or&nbsp;&nbsp;<a\\n                        href=\\\"https://developers.bluesnap.com/v8976-XML/docs/level-3-data-item\\\"><span\\n                            class=\\\"api\\\">level&#8209;3&#8209;data&#8209;item</span><span style=\\\"font-size:small\\\">\\n                            (XML)</span></a></p>\\n\\n                <p><strong>Note:</strong> You may pass the following properties for each item.</p>\\n            </td>\\n        </tr>\\n\\n        <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">lineItemTotal</span>\\n                <br /><span class=\\\"api\\\">line&#8209;item&#8209;total</span>\\n            </td>\\n            <td><b>Optional</b></td>\\n        </tr>\\n\\n              <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">description</span>\\n                <br /><span class=\\\"api\\\">description</span>\\n            </td>\\n            <td><b>Mandatory</b></td>\\n        </tr>\\n\\n       <tr>\\n            <td style=\\\"padding-left: 20px\\\">\\n                <span class=\\\"api\\\">itemQuantity</span>\\n                <br /><span class=\\\"api\\\">item&#8209;quantity</span>\\n            </td>\\n            <td><b>Optional</b></td>\\n        </tr>\\n\\n\\n    </table>\\n\\n</div>\\n\\n<style>\\n    .api {\\n        font-family: 'Courier New';\\n        background-color: #efefef;\\n    }\\n\\n    .center {\\n        display: table-cell;\\n        text-align: center;\\n    }\\n\\n    table td {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n\\n    table th {\\n        display: table-cell;\\n        vertical-align: top;\\n    }\\n</style>\"\n}\n[/block]\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>\n<hr />\n\n# Sending Level 3 data examples\n\n##JSON example\n*Sample [Auth Capture](/v8976-JSON/docs/auth-capture) request and response*  \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"cardTransactionType\\\": \\\"AUTH_CAPTURE\\\",\\n  \\\"softDescriptor\\\": \\\"DescTest\\\",\\n  \\\"amount\\\": 10.60,\\n  \\\"currency\\\": \\\"USD\\\",\\n  \\\"cardHolderInfo\\\": {\\n    \\\"firstName\\\": \\\"test first name\\\",\\n    \\\"lastName\\\": \\\"test last name\\\",\\n    \\\"zip\\\": \\\"123456\\\"\\n  },\\n  \\\"creditCard\\\": {\\n    \\\"cardNumber\\\": \\\"4005 5192 0000 0004\\\",\\n    \\\"securityCode\\\": \\\"111\\\",\\n    \\\"expirationMonth\\\": \\\"09\\\",\\n    \\\"expirationYear\\\": 2019\\n  },\\n  \\\"level3Data\\\": {\\n    \\\"customerReferenceNumber\\\": \\\"1234A\\\",\\n    \\\"salesTaxAmount\\\": 0.6,\\n    \\\"freightAmount\\\": 0,\\n    \\\"dutyAmount\\\": 0,\\n    \\\"destinationZipCode\\\": \\\"12345\\\",\\n    \\\"destinationCountryCode\\\": \\\"us\\\",\\n    \\\"shipFromZipCode\\\": \\\"12345\\\",\\n    \\\"discountAmount\\\": 0,\\n    \\\"taxAmount\\\": 0.6,\\n    \\\"taxRate\\\": 6.0,\\n    \\\"level3DataItems\\\": [{\\n      \\\"lineItemTotal\\\": 10.00,\\n      \\\"description\\\": \\\"test_desc\\\",\\n      \\\"discountAmount\\\": 0,\\n      \\\"productCode\\\": \\\"test_code\\\",\\n      \\\"itemQuantity\\\": 1.0,\\n      \\\"taxAmount\\\": 0.60,\\n      \\\"taxRate\\\": 6.0,\\n      \\\"unitOfMeasure\\\": \\\"lb\\\",\\n      \\\"commodityCode\\\": \\\"123\\\",\\n      \\\"discountIndicator\\\": \\\"Y\\\",\\n      \\\"grossNetIndicator\\\": \\\"Y\\\",\\n      \\\"taxType\\\": \\\"test\\\",\\n      \\\"unitCost\\\": 10.00\\n    }]\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Auth Capture with Level 3 data - request\"\n    },\n    {\n      \"code\": \"{\\n  \\\"cardTransactionType\\\": \\\"AUTH_CAPTURE\\\",\\n  \\\"vendorsInfo\\\": {},\\n  \\\"transactionId\\\": \\\"1015836179\\\",\\n  \\\"softDescriptor\\\": \\\"BLS*DescTest\\\",\\n  \\\"amount\\\": 10.60,\\n  \\\"currency\\\": \\\"USD\\\",\\n  \\\"avsResponseCode\\\": \\\"G\\\",\\n  \\\"cardHolderInfo\\\": {\\n    \\\"firstName\\\": \\\"test first name\\\",\\n    \\\"lastName\\\": \\\"test last name\\\",\\n    \\\"zip\\\": \\\"123456\\\"\\n  },\\n  \\\"vaultedShopperId\\\": 22391925,\\n  \\\"creditCard\\\": {\\n    \\\"cardLastFourDigits\\\": \\\"0004\\\",\\n    \\\"cardType\\\": \\\"VISA\\\",\\n    \\\"cardSubType\\\": \\\"CREDIT\\\",\\n    \\\"cardCategory\\\": \\\"CORPORATE T&E\\\"\\n  },\\n  \\\"level3Data\\\": {\\n    \\\"customerReferenceNumber\\\": \\\"1234A\\\",\\n    \\\"salesTaxAmount\\\": 0.6,\\n    \\\"freightAmount\\\": 0,\\n    \\\"dutyAmount\\\": 0,\\n    \\\"destinationZipCode\\\": \\\"12345\\\",\\n    \\\"destinationCountryCode\\\": \\\"us\\\",\\n    \\\"shipFromZipCode\\\": \\\"12345\\\",\\n    \\\"discountAmount\\\": 0,\\n    \\\"taxAmount\\\": 0.6,\\n    \\\"taxRate\\\": 6,\\n    \\\"transactionProcessedWithL3dSupportedAcquirer\\\": true,\\n    \\\"level3DataItems\\\": [{\\n      \\\"lineItemTotal\\\": 10,\\n      \\\"commodityCode\\\": \\\"123\\\",\\n      \\\"description\\\": \\\"test_desc\\\",\\n      \\\"discountAmount\\\": 0,\\n      \\\"discountIndicator\\\": \\\"Y\\\",\\n      \\\"grossNetIndicator\\\": \\\"Y\\\",\\n      \\\"productCode\\\": \\\"test_code\\\",\\n      \\\"itemQuantity\\\": 1,\\n      \\\"taxAmount\\\": 0.6,\\n      \\\"taxRate\\\": 6,\\n      \\\"taxType\\\": \\\"test\\\",\\n      \\\"unitCost\\\": 10,\\n      \\\"unitOfMeasure\\\": \\\"lb\\\"\\n    }]\\n  },\\n  \\\"processingInfo\\\": {\\n    \\\"processingStatus\\\": \\\"success\\\",\\n    \\\"cvvResponseCode\\\": \\\"NR\\\",\\n    \\\"avsResponseCodeZip\\\": \\\"U\\\",\\n    \\\"avsResponseCodeAddress\\\": \\\"U\\\",\\n    \\\"avsResponseCodeName\\\": \\\"U\\\"\\n  },\\n  \\\"fraudResultInfo\\\": {\\n    \\\"deviceDataCollector\\\": \\\"N\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Response\"\n    }\n  ]\n}\n[/block]\n##XML example\n*Sample [Auth Capture](/v8976-XML/docs/auth-capture) request and response*  \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<card-transaction xmlns=\\\"http://ws.plimus.com\\\">\\n  <card-transaction-type>AUTH_CAPTURE</card-transaction-type>\\n  <soft-descriptor>MYSTORE</soft-descriptor>\\n  <amount>10.60</amount>\\n  <currency>USD</currency>\\n  <card-holder-info>\\n    <first-name>test first name</first-name>\\n    <last-name>test last name</last-name>\\n    <zip>02453</zip>\\n    <country>us</country>\\n  </card-holder-info>\\n  <credit-card>\\n    <card-number>4005 5192 0000 0004</card-number>\\n    <security-code>111</security-code>\\n    <expiration-month>09</expiration-month>\\n    <expiration-year>2019</expiration-year>\\n  </credit-card>\\n  <level-3-data>\\n    <customer-reference-number>1234A</customer-reference-number>\\n    <sales-tax-amount>0.6</sales-tax-amount>\\n    <freight-amount>0</freight-amount>\\n    <duty-amount>0</duty-amount>\\n    <destination-zip-code>12345</destination-zip-code>\\n    <destination-country-code>us</destination-country-code>\\n    <ship-from-zip-code>12345</ship-from-zip-code>\\n    <discount-amount>0</discount-amount>\\n    <tax-amount>0.6</tax-amount>\\n    <tax-rate>6.0</tax-rate>\\n    <level-3-data-item>\\n      <line-item-total>10.60</line-item-total>\\n      <commodity-code>123</commodity-code>\\n      <description>test_desc</description>\\n      <discount-amount>0</discount-amount>\\n      <discount-indicator>Y</discount-indicator>\\n      <product-code>test_code</product-code>\\n      <item-quantity>1.0</item-quantity>\\n      <tax-amount>0.60</tax-amount>\\n      <tax-rate>6.0</tax-rate>\\n      <unit-of-measure>usd</unit-of-measure>\\n      <gross-net-indicator>Y</gross-net-indicator>\\n      <unit-cost>10.00</unit-cost>\\n    </level-3-data-item>\\n  </level-3-data>\\n</card-transaction>\",\n      \"language\": \"xml\",\n      \"name\": \"Auth Capture with Level 3 data - request\"\n    },\n    {\n      \"code\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"yes\\\"?>\\n<card-transaction xmlns=\\\"http://ws.plimus.com\\\">\\n    <card-transaction-type>AUTH_CAPTURE</card-transaction-type>\\n    <transaction-id>1020736769</transaction-id>\\n    <soft-descriptor>BLS&#x2a;MYSTORE</soft-descriptor>\\n    <amount>10.60</amount>\\n    <usd-amount>10.60</usd-amount>\\n    <currency>USD</currency>\\n    <avs-response-code>J</avs-response-code>\\n    <card-holder-info>\\n        <first-name>test first name</first-name>\\n        <last-name>test last name</last-name>\\n        <country>us</country>\\n        <zip>02453</zip>\\n    </card-holder-info>\\n    <vaulted-shopper-id>24122703</vaulted-shopper-id>\\n    <credit-card>\\n        <card-last-four-digits>0004</card-last-four-digits>\\n        <card-type>VISA</card-type>\\n        <card-sub-type>CREDIT</card-sub-type>\\n        <card-category>CORPORATE T&#x26;E</card-category>\\n        <bin-category>COMMERCIAL</bin-category>\\n        <card-regulated>N</card-regulated>\\n        <issuing-country-code>us</issuing-country-code>\\n    </credit-card>\\n    <level-3-data>\\n        <customer-reference-number>1234A</customer-reference-number>\\n        <sales-tax-amount>0.6</sales-tax-amount>\\n        <freight-amount>0</freight-amount>\\n        <duty-amount>0</duty-amount>\\n        <destination-zip-code>12345</destination-zip-code>\\n        <destination-country-code>us</destination-country-code>\\n        <ship-from-zip-code>12345</ship-from-zip-code>\\n        <discount-amount>0</discount-amount>\\n        <tax-amount>0.6</tax-amount>\\n        <tax-rate>6</tax-rate>\\n        <transaction-processed-with-l3d-supported-acquirer>true</transaction-processed-with-l3d-supported-acquirer>\\n        <level-3-data-item>\\n            <line-item-total>10.6</line-item-total>\\n            <commodity-code>123</commodity-code>\\n            <description>test_desc</description>\\n            <discount-amount>0</discount-amount>\\n            <discount-indicator>Y</discount-indicator>\\n            <gross-net-indicator>Y</gross-net-indicator>\\n            <product-code>test_code</product-code>\\n            <item-quantity>1</item-quantity>\\n            <tax-amount>0.6</tax-amount>\\n            <tax-rate>6</tax-rate>\\n            <unit-cost>10</unit-cost>\\n            <unit-of-measure>usd</unit-of-measure>\\n        </level-3-data-item>\\n    </level-3-data>\\n    <processing-info>\\n        <processing-status>success</processing-status>\\n        <cvv-response-code>NR</cvv-response-code>\\n        <avs-response-code-zip>U</avs-response-code-zip>\\n        <avs-response-code-address>U</avs-response-code-address>\\n        <avs-response-code-name>U</avs-response-code-name>\\n    </processing-info>\\n    <fraud-result-info>\\n        <device-data-collector>N</device-data-collector>\\n    </fraud-result-info>\\n</card-transaction>\\n\\n\",\n      \"language\": \"xml\",\n      \"name\": \"Response\"\n    }\n  ]\n}\n[/block]\n# Test Cards\nThe following cards are used for testing of Level 2/3 Data:\n* **Visa:** 4111111111111111&nbsp;&nbsp;&nbsp;&nbsp;**Exp:** 02/2023  \n* **MasterCard:** 5199701234567892&nbsp;&nbsp;&nbsp;&nbsp;**Exp:** 02/2023 \n* **Amex (L2 w/ TAA fields):** 340000000000009&nbsp;&nbsp;&nbsp;&nbsp;**Exp:** 05/2023\n\n<br />\n<a class=\"btn btn-primary\" href=\"#\" role=\"button\">Back to Top</a>","excerpt":"","slug":"level-23-data","type":"basic","title":"Level 2/3 Data"}

Card processing can be categorized into different levels, with each level defined by how much data is required to process the transaction. Enhanced data levels, such as Level 2 and Level 3, require extra information to process the transaction and are most useful for corporations and government agencies that require this type of transaction detail to accurately monitor and track expenses. BlueSnap's Payment API supports Level 2/3 data processing for all currencies, allowing you to expand your business-to-business (B2B) and business-to-government (B2G) sales opportunities.

This guide covers the following topics:

Before you begin

  • Level 2/3 Data is supported for select configurations. Contact Merchant Support for more details.
  • Do not include the pipe character | in a Level 2 or Level 3 data field. Including the character causes fields to be parsed incorrectly.
  • If you don't know the card type, pass as many level3Data properties as you can.
    • If you pass a property that exceeds the maximum length, BlueSnap truncates the value to meet requirements.
    • If BlueSnap detects the card doesn't support Level 2/3 Data, the level3Data properties are not sent to the issuer.
  • If you manage your own subscriptions, you must send level3Data for each charge.

Back to Top


Data levels

Card brand
Supports

MasterCard            

Amex

Level 2
Level 2 with TAA (Transaction Advice Addendum)

Level 2 with TAA is an Amex-specific level that contains item data (such as item description and quantity) in addition to Level 2 fields. For more details, refer to Required properties for Amex.

Back to Top


Required properties

Required for MasterCard

Required for MasterCard for Level 2 Data
Only the following are required for Level 2 Data:

  • customerReferenceNumber / customer‑reference‑number
  • salesTaxAmount / sales‑tax‑amount
     

Required for MasterCard for Level 3 Data
The following table outlines the required properties for Level 3 Data.

Hierarchy Property (JSON XML) Level 3 Details

Order level

For details regarding the specifics of a property, refer to:  level3Data (JSON)  or  level-3-data (XML)
customerReferenceNumber
customer‑reference‑number
Mandatory — If the value we receive is all spaces, we replace the value with NA.
salesTaxAmount
sales‑tax‑amount
Mandatory — If the value we receive is all spaces, we replace the value with all zeros.

freightAmount
freight‑amount
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with all zeros.
dutyAmount
duty‑amount
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with all zeros.
destinationZipCode
destination‑zip‑code
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with 0.
destinationCountryCode
destination‑country‑code
Not mandatory — However, if a value is sent and the value is not valid, we replace the value with all spaces.
shipFromZipCode
ship‑from‑zip‑code
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with 0.
discountAmount
discount‑amount
Not mandatory — However, if a value is sent and the value we receive is not a valid value (numeric 09), we replace the value with all zeros.
taxAmount
tax‑amount
Not mandatory — However, if the value is sent and it is not valid, we replace the value with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.
taxRate
tax‑rate
Mandatory if the Tax Amount is present — If the value we receive is not a valid value, we replace the value with all zeros.
level3DataItem
level‑3‑data‑item
Mandatory — Container for the data item properties shown below. See details below.

Item level

The following are the required data item properties. For details regarding the specifics of a property, refer to:  level3DataItems (JSON)  or  level‑3‑data‑item (XML)

Note: You may pass the following properties for each item.

lineItemTotal
line‑item‑total
Mandatory — If the value we receive is not a valid value (numeric 09), we replace the value with 1.
commodityCode
commodity‑code
Not mandatory
description
description
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with NA.
discountAmount
discount‑amount
Not mandatory — However, if a value is sent and the value we receive is not a valid value (numeric 09), we replace the value with all zeros.
discountIndicator
discount‑indicator
Not mandatory — However, if the value is not Y or N, we replace the value with N.
grossNetIndicator
gross‑net‑indicator
Not mandatory — However, if the value is not Y or N, we replace the value with N.
productCode
product‑code
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with NA.
itemQuantity
item‑quantity
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with 1.
taxAmount
tax‑amount
Not mandatory — However, if the value is sent and it is not valid, we replace the value with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.
taxRate
tax‑rate
Mandatory if the Tax Amount is present — If the value we receive is not a valid value, we replace the value with all zeros.
taxType
tax‑type
Not mandatory — However, if a value is sent and the value we receive is not a valid value, we replace the value with all spaces.
unitOfMeasure
unit‑of‑measure
Not mandatory — However, if the value we receive is all spaces or all zeros, we replace the value with NA.

Back to Top


Required for Visa

Required for Visa for Level 2 Data
Only the following are required for Level 2 Data:

  • customerReferenceNumber / customer‑reference‑number
  • salesTaxAmount / sales‑tax‑amount
     

Required for Visa for Level 3 Data
The following table outlines the required properties for Level 3 Data.

Hierarchy Property (JSON XML) Level 3 Details

Order level

For details regarding the specifics of a property, refer to:  level3Data (JSON)  or  level-3-data (XML)
customerReferenceNumber
customer‑reference‑number
Not mandatory
salesTaxAmount
sales‑tax‑amount
Not mandatory

freightAmount
freight‑amount
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with all zeros.
dutyAmount
duty‑amount
Not mandatory — However, if a value is sent and the value we receive is all spaces, we replace the value with all zeros.
destinationZipCode
destination‑zip‑code
Not mandatory — We do not change the value.
destinationCountryCode
destination‑country‑code
Not mandatory — However, if a value is sent and the value we receive is not a valid value, we replace the value with all spaces.
shipFromZipCode
ship‑from‑zip‑code
Not mandatory — We do not change the value.
discountAmount
discount‑amount
Not mandatory — However, if a value is sent and the value we receive is not a valid value (numeric 09), we replace the value with all zeros.
taxAmount
tax‑amount
Not mandatory — However, if the value is sent and it is not valid, we replace the value with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.
taxRate
tax‑rate
Mandatory if the Tax Amount is present — If the value we receive is not a valid value, we replace the value with all zeros.
level3DataItem
level‑3‑data‑item
Mandatory — Container for the data item properties shown below. See details below.

Item level

The following are the required data item properties. For details regarding the specifics of a property, refer to:  level3DataItems (JSON)  or  level‑3‑data‑item (XML)

Note: You may pass the following properties for each item.

lineItemTotal
line‑item‑total
Mandatory — If the value we receive is not a valid value (numeric 09), we replace the value with 1.
commodityCode
commodity‑code
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with 00101.
description
description
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with NA.
discountAmount
discount‑amount
Not mandatory — However, if a value is sent and the value we receive is not a valid value (numeric 09), we replace the value with all zeros.
productCode
product‑code
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with NA.
itemQuantity
item‑quantity
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with 1.
taxAmount
tax‑amount
Not mandatory — However, if the value is sent and it is not valid, we replace the value with all zeros. Also, if any value is sent, even all zeros, Tax Rate is required.
taxRate
tax‑rate
Mandatory if the Tax Amount is present — If the value we receive is not a valid value, we replace the value with all zeros.
unitCost
unit‑cost
Mandatory — If the value we receive is all spaces or all zeros, we replace the value with 1.
unitOfMeasure
unit‑of‑measure
Not mandatory — If the value we receive is all spaces or all zeros, we replace the value with NA.

 
Back to Top


Required for Amex

The following table outlines the required properties for Amex Level 2 with TAA (Transaction Advice Addendum). This is an Amex-specific level that contains item data (such as item description and quantity) in addition to Level 2 fields. Only the following fields are applicable.

Hierarchy Property (JSON XML) Amex Level 2 with TAA

Order level

For details regarding the specifics of a property, refer to:  level3Data (JSON)  or  level-3-data (XML)
customerReferenceNumber
customer‑reference‑number
Mandatory
salesTaxAmount
sales‑tax‑amount
Mandatory
destinationZipCode
destination‑zip‑code
Optional
level3DataItem
level‑3‑data‑item
Mandatory — Container for the data item properties shown below. See details below.

Item level

The following are the required data item properties. For details regarding the specifics of a property, refer to:  level3DataItems (JSON)  or  level‑3‑data‑item (XML)

Note: You may pass the following properties for each item.

lineItemTotal
line‑item‑total
Optional
description
description
Mandatory
itemQuantity
item‑quantity
Optional

Back to Top


Sending Level 3 data examples

JSON example

Sample Auth Capture request and response

{
  "cardTransactionType": "AUTH_CAPTURE",
  "softDescriptor": "DescTest",
  "amount": 10.60,
  "currency": "USD",
  "cardHolderInfo": {
    "firstName": "test first name",
    "lastName": "test last name",
    "zip": "123456"
  },
  "creditCard": {
    "cardNumber": "4005 5192 0000 0004",
    "securityCode": "111",
    "expirationMonth": "09",
    "expirationYear": 2019
  },
  "level3Data": {
    "customerReferenceNumber": "1234A",
    "salesTaxAmount": 0.6,
    "freightAmount": 0,
    "dutyAmount": 0,
    "destinationZipCode": "12345",
    "destinationCountryCode": "us",
    "shipFromZipCode": "12345",
    "discountAmount": 0,
    "taxAmount": 0.6,
    "taxRate": 6.0,
    "level3DataItems": [{
      "lineItemTotal": 10.00,
      "description": "test_desc",
      "discountAmount": 0,
      "productCode": "test_code",
      "itemQuantity": 1.0,
      "taxAmount": 0.60,
      "taxRate": 6.0,
      "unitOfMeasure": "lb",
      "commodityCode": "123",
      "discountIndicator": "Y",
      "grossNetIndicator": "Y",
      "taxType": "test",
      "unitCost": 10.00
    }]
  }
}
{
  "cardTransactionType": "AUTH_CAPTURE",
  "vendorsInfo": {},
  "transactionId": "1015836179",
  "softDescriptor": "BLS*DescTest",
  "amount": 10.60,
  "currency": "USD",
  "avsResponseCode": "G",
  "cardHolderInfo": {
    "firstName": "test first name",
    "lastName": "test last name",
    "zip": "123456"
  },
  "vaultedShopperId": 22391925,
  "creditCard": {
    "cardLastFourDigits": "0004",
    "cardType": "VISA",
    "cardSubType": "CREDIT",
    "cardCategory": "CORPORATE T&E"
  },
  "level3Data": {
    "customerReferenceNumber": "1234A",
    "salesTaxAmount": 0.6,
    "freightAmount": 0,
    "dutyAmount": 0,
    "destinationZipCode": "12345",
    "destinationCountryCode": "us",
    "shipFromZipCode": "12345",
    "discountAmount": 0,
    "taxAmount": 0.6,
    "taxRate": 6,
    "transactionProcessedWithL3dSupportedAcquirer": true,
    "level3DataItems": [{
      "lineItemTotal": 10,
      "commodityCode": "123",
      "description": "test_desc",
      "discountAmount": 0,
      "discountIndicator": "Y",
      "grossNetIndicator": "Y",
      "productCode": "test_code",
      "itemQuantity": 1,
      "taxAmount": 0.6,
      "taxRate": 6,
      "taxType": "test",
      "unitCost": 10,
      "unitOfMeasure": "lb"
    }]
  },
  "processingInfo": {
    "processingStatus": "success",
    "cvvResponseCode": "NR",
    "avsResponseCodeZip": "U",
    "avsResponseCodeAddress": "U",
    "avsResponseCodeName": "U"
  },
  "fraudResultInfo": {
    "deviceDataCollector": "N"
  }
}

XML example

Sample Auth Capture request and response

<?xml version="1.0" encoding="UTF-8"?>
<card-transaction xmlns="http://ws.plimus.com">
  <card-transaction-type>AUTH_CAPTURE</card-transaction-type>
  <soft-descriptor>MYSTORE</soft-descriptor>
  <amount>10.60</amount>
  <currency>USD</currency>
  <card-holder-info>
    <first-name>test first name</first-name>
    <last-name>test last name</last-name>
    <zip>02453</zip>
    <country>us</country>
  </card-holder-info>
  <credit-card>
    <card-number>4005 5192 0000 0004</card-number>
    <security-code>111</security-code>
    <expiration-month>09</expiration-month>
    <expiration-year>2019</expiration-year>
  </credit-card>
  <level-3-data>
    <customer-reference-number>1234A</customer-reference-number>
    <sales-tax-amount>0.6</sales-tax-amount>
    <freight-amount>0</freight-amount>
    <duty-amount>0</duty-amount>
    <destination-zip-code>12345</destination-zip-code>
    <destination-country-code>us</destination-country-code>
    <ship-from-zip-code>12345</ship-from-zip-code>
    <discount-amount>0</discount-amount>
    <tax-amount>0.6</tax-amount>
    <tax-rate>6.0</tax-rate>
    <level-3-data-item>
      <line-item-total>10.60</line-item-total>
      <commodity-code>123</commodity-code>
      <description>test_desc</description>
      <discount-amount>0</discount-amount>
      <discount-indicator>Y</discount-indicator>
      <product-code>test_code</product-code>
      <item-quantity>1.0</item-quantity>
      <tax-amount>0.60</tax-amount>
      <tax-rate>6.0</tax-rate>
      <unit-of-measure>usd</unit-of-measure>
      <gross-net-indicator>Y</gross-net-indicator>
      <unit-cost>10.00</unit-cost>
    </level-3-data-item>
  </level-3-data>
</card-transaction>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<card-transaction xmlns="http://ws.plimus.com">
    <card-transaction-type>AUTH_CAPTURE</card-transaction-type>
    <transaction-id>1020736769</transaction-id>
    <soft-descriptor>BLS&#x2a;MYSTORE</soft-descriptor>
    <amount>10.60</amount>
    <usd-amount>10.60</usd-amount>
    <currency>USD</currency>
    <avs-response-code>J</avs-response-code>
    <card-holder-info>
        <first-name>test first name</first-name>
        <last-name>test last name</last-name>
        <country>us</country>
        <zip>02453</zip>
    </card-holder-info>
    <vaulted-shopper-id>24122703</vaulted-shopper-id>
    <credit-card>
        <card-last-four-digits>0004</card-last-four-digits>
        <card-type>VISA</card-type>
        <card-sub-type>CREDIT</card-sub-type>
        <card-category>CORPORATE T&#x26;E</card-category>
        <bin-category>COMMERCIAL</bin-category>
        <card-regulated>N</card-regulated>
        <issuing-country-code>us</issuing-country-code>
    </credit-card>
    <level-3-data>
        <customer-reference-number>1234A</customer-reference-number>
        <sales-tax-amount>0.6</sales-tax-amount>
        <freight-amount>0</freight-amount>
        <duty-amount>0</duty-amount>
        <destination-zip-code>12345</destination-zip-code>
        <destination-country-code>us</destination-country-code>
        <ship-from-zip-code>12345</ship-from-zip-code>
        <discount-amount>0</discount-amount>
        <tax-amount>0.6</tax-amount>
        <tax-rate>6</tax-rate>
        <transaction-processed-with-l3d-supported-acquirer>true</transaction-processed-with-l3d-supported-acquirer>
        <level-3-data-item>
            <line-item-total>10.6</line-item-total>
            <commodity-code>123</commodity-code>
            <description>test_desc</description>
            <discount-amount>0</discount-amount>
            <discount-indicator>Y</discount-indicator>
            <gross-net-indicator>Y</gross-net-indicator>
            <product-code>test_code</product-code>
            <item-quantity>1</item-quantity>
            <tax-amount>0.6</tax-amount>
            <tax-rate>6</tax-rate>
            <unit-cost>10</unit-cost>
            <unit-of-measure>usd</unit-of-measure>
        </level-3-data-item>
    </level-3-data>
    <processing-info>
        <processing-status>success</processing-status>
        <cvv-response-code>NR</cvv-response-code>
        <avs-response-code-zip>U</avs-response-code-zip>
        <avs-response-code-address>U</avs-response-code-address>
        <avs-response-code-name>U</avs-response-code-name>
    </processing-info>
    <fraud-result-info>
        <device-data-collector>N</device-data-collector>
    </fraud-result-info>
</card-transaction>

Test Cards

The following cards are used for testing of Level 2/3 Data:

  • Visa: 4111111111111111    Exp: 02/2023
  • MasterCard: 5199701234567892    Exp: 02/2023
  • Amex (L2 w/ TAA fields): 340000000000009    Exp: 05/2023



Back to Top