Surcharges

A surcharge is a small fee on a credit card transaction a merchant can charge to cover the cost of processing the transaction using credit cards.

Surcharges are available on terminals with surcharging enabled at terminal set-up.

Terminals with surcharging enabled apply to all card not present credit card transactions.

Surcharging is available for the following integration options:

  • Hosted Payments Page
  • Checkout.js
  • XML API

General Requirements

Surcharging is available for terminals that meet the following requirements:

  • Surcharge enabled
  • Region set to USA
  • Market segment set to one of the following
    • Retail
    • MOTO
    • Internet
    • Service

After setting these requirements, you must set the surcharge amount as part of terminal setup.

Surcharge Certification Requirements

If you want to use surcharging with Checkout.js or the XML API, Elavon has the following requirements to certify your application.

Disclose Intent to Surcharge

You must properly disclose your intent to surcharge to the cardholder. You must present this disclosure at the point-of-entry and point-of-sale for the purchase. Point-of-entry and point-of-sale and the specific requirements for the disclosure vary depending on market segment. Below are the requirements Elavon uses for certifying an application.

Market SegmentPoint-of-EntryPoint-of-Transaction
Retail (Face-to-Face)You must display disclosure at the main entrances of the physical location for the storefront. The disclosure must be in Arial font at a mimumum of 32 points and must be no smaller or less prominent than surrounding text.You must display disclosure at every customer checkout or payment location. This notice must be in Arial font at a minimum of 16 points and must be no smaller or less prominent than the surrounding text.
Retail (Unattended)You must display disclosure at the main entrances of the physical location for the storefront. The disclosure must be in Arial font at a mimumum of 32 points and must be no smaller or less prominent than surrounding text.You must display disclosure on the unattended cardholder activated terminal or virtual disclosure on the payment terminal screen. This notice must be in Arial font at a minimum of 16 points and must be no smaller or less prominent than the surrounding text.
eCommerceThe first page of your application that references credit card brands your application accepts must include notice that your customer will have surcharges applied to their credit card transactions. This notice must be in Arial font at a minimum of 10 points and must be no smaller or less prominent than the surrounding text.You must display disclosure on the checkout page of your application. This notice must be in Arial font at a minimum of 10 points and must be no smaller or less prominent than the surrounding text.
MOTOThe first page of the catalog that references credit card brands accepted. This notice must be in Arial font at a minimum of 8 points and must be no smaller or less prominent than the surrounding text.You must display disclosure on the mail order form or announce it as verbal notice from a telephone representative. This notice must be in Arial font at a minimum of 10 points and must be no smaller or less prominent than the surrounding text.

Disclosure Contents

The disclosures posted at the points of entry and sale must include the following items in their contents.

  • The exact percentage the transaction will apply as a surcharge.
  • A statement that you (the merchant) are assessing US Credit Card Surcharge and is only applicable to credit card transactions.
  • A statement that the US credit Card Surcharge amount is not greater than the applicable card acceptance cost for credit card transactions.

Debit Selection

If your acceptance device offers cardholders a choice between debit or credit transactions in the form of a credit and debit buttons, you must ensure that:

  • Surcharges are not applied to Debit card transactions.
  • The device clearly communicates to the cardholder that surcharges are not applied to debit transactions regardless of whether the cardholder selects the credit or debit button.

Transaction Cancelation

For unattended transactions like eCommerce, MOTO, or card present transactions at automated kiosks, the user must have the opportunity to cancel the transaction after they view the surcharge disclosure form.

Surcharge Maximum

The surcharge amount cannot exceed 4% of the original transaction.

Surcharges Only Apply to Credit Cards

Surcharges can only apply to transactions made using a credit card.

note

  • Because surcharges only apply to credit card transactions, a best practice is to use the BIN lookup transaction type to confirm that the card a cardholder is using for a transaction is applicable.
  • Surcharge is controlled based on the business location.

Hosted Payments Page

The Converge Hosted Payments Page offers an easy way to add surcharges to your transactions. Hosted Payments Pages for terminals with surcharging automatically detect whether an input card is a credit card and then automatically apply a surcharge to all credit card transactions.

To enable surcharging for your hosted payment page, you will need to complete the following steps.

  1. Open the Converge Web UI.
  2. Log in to your account.
  3. Open the settings tab.
  4. Open the Hosted Payments tab.
  5. Open the Payment Page setup.
  6. Open the Terms & Conditions Page settings.
  7. Confirm that you agree with the terms and conditions.
  8. Select the Save button.

After you complete these steps, implement your Hosted Payments Page using the default process and Converge will begin applying surcharges to all credit card transactions.

Sample Code

<html>
<head>
</head>
<body>
    <h3>HPP Demo</h3>
    <form action="request_session_token_demo.php" name="test1" method="post">
        <table border="1" bordercolorlight="#C0C0C0" cellspacing="5" bordercolordark="#FFFFFF">
            <tr>
                <td>Trans Amount</td>
                <td><input type="text" name="ssl_amount" size="6" value="1.00"></td>
            </tr>
            <tr>
                <td>Transaction Type</td>
                <td>
                    <select size="1" name="ssl_transaction_type">
                        <option value="CCSALE">Credit Card Sale</option>
                        <option value="CCAUTHONLY">Credit Card Authorization Only</option>
                        <option value="CCVerify">Credit Card Verification </option>
                        <option value="CCGETTOKEN">Credit Card Get Token</option>
                        <option value="SALE">Generic Sale</option>
                        <option value="AUTHONLY">Generic Authorization Only</option>
                        <option value="ecspurchase">ACH</option>
                        <option value="EGCSALE">Gift Card</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td colspan="2">&nbsp;</td>
            </tr>
            <tr>
                <td colspan="2">
                    <p align="center">Redirect to NG HPP</p>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="Pay Now" name="Submit">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

Checkout.js

Checkout.js provides methods to handle surcharging.

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>Surcharge Test Script Demo</title>
	<script src="https://code.jquery.com/jquery-3.5.1.js"> </script>
	<script src="https://demo.convergepay.com/hosted-payments/Checkout.js"></script>

	<script>
		function initiateCheckoutJS() {
            var tokenRequest = {};
            $.post("checkoutjscurlrequestdevportal.php", tokenRequest, function (data) {
                document.getElementById('ssl_txn_auth_token').value = data;
                transactionToken = data;
            });
            return false;
        }
		var callback = {
			onError: function (error) {
				showResult("error", error);
			},
			onDeclined: function (response) {
			    //Transaction will run as regular sale if not elligable for Surcharge.
				if (response.surchargeAllowed === 'Y') {
					document.getElementById('creditSurchargeForm').style.display = "block";
					showResult("credit surcharge", JSON.stringify(response));
				} else {
					showResult("declined", JSON.stringify(response));
				}
			},
			onApproval: function (response) {
				showResult("approval", JSON.stringify(response));
			},
			onCancelled: function () {
				showResult("cancelled", "");
			}
		};
		function payWithCreditCard() {
			var paymentData = {
				ssl_txn_auth_token: $('#ssl_txn_auth_token').val(),
				ssl_card_number: $("#ssl_card_number").val(),
				ssl_exp_date: $("#ssl_exp_date").val(),
				ssl_cvv2cvc2: $("#ssl_cvv2cvc2").val(),
				ssl_amount: $("#ssl_amount").val(),
				ssl_avs_address: $("#ssl_avs_address").val(),
				ssl_avs_zip: $("#ssl_avs_zip").val()
			};
			ConvergeEmbeddedPayment.pay(paymentData, callback);
			return false;
		}
		function showResult(status, msg, hash) {
			document.getElementById('txn_status').innerHTML = "<b>" + status + "</b>";
			document.getElementById('txn_response').innerHTML = msg;
			document.getElementById('txn_hash').innerHTML = hash;
		}
		function creditSurcharge(option) {
			ConvergeEmbeddedPayment.creditSurchargeDecision(option, callback);
			if(option === false){
			    showResult("Cancelled", "Cardholder declined agreement.");
			}
			return false;
		}
	</script>
</head>
<body>
	<br>
	Transaction Token: <input type="text" id="ssl_txn_auth_token" name="ssl_txn_auth_token" size="38"><button
		onclick="initiateCheckoutJS();">Get Session Token</button><br><br>

	<form name="creditCardForm">
		Amount: <input id="ssl_amount" type="text" name="ssl_amount" size="10" value="1.00"> <br>
		Card Number: <input id="ssl_card_number" type="text" name="ssl_card_number" size="21" value="4159288888888882"> <br>
		Expiry Date: <input id="ssl_exp_date" type="text" name="ssl_exp_date" size="10" value="1222"> <br>
		CVV2: <input id="ssl_cvv2cvc2" type="text" name="ssl_cvv2cvc2" size="8" value="123"> <br>
		AVS: <input id="ssl_avs_address" type="text" name="ssl_avs_address" size="12" value="1 Test St"> <br>
		AVS ZIP: <input id="ssl_avs_zip" type="text" name="ssl_avs_zip" size="8" value="36320"> <br>
		EMAIL: <input id="ssl_email>" type="text" name="ssl_email>" size="25" value="test@test.com"> <br>
		<button onclick="return payWithCreditCard();">Pay With Credit Card</button>
	</form>

	<form name="creditSurchargeAccept" id="creditSurchargeForm" style="display:none">
		<P> Accept Credit Surcharge: <br>
			<button onclick="return creditSurcharge(true);">Yes</button>
			<button onclick="return creditSurcharge(false);">No</button>
	</form>
	<br>
	<hr><br>

	Transaction Status:<div id="txn_status"></div>
	<br>
	Transaction Response:<div id="txn_response"></div>
	<br>
	Transaction Hash Value:<div id="txn_hash"></div>

</body>
</html>

XML API

When implementing surcharges with the XML API, you must comply with card association requirements for surcharging.

Supported Transactions

Transaction TypesDescription
ccsaleCredit Card Sale
ccauthonlyCredit Card Auth Only

important

You are only allowed to place surcharges onto transactions made with a credit card.

You cannot place a surcharge onto transactions made with debit or prepaid cards. Even transactions processed using signature debit (debit as credit) are exempt from surcharges.

Process Flow Transaction

To apply a surcharge to a card transaction request made through the XML API, you will need to complete the following sequence on a surcharge enabled terminal.

  1. Perform a binlookup to confirm that the card is valid for surcharging.
  2. If the binlookup confirms that the card is a credit card, alert your customer that they will be surcharged. This step is not required by the API. However, most card association requirements mandate it.
  3. If your customer accepts, initiate a credit card transaction with surcharging enabled.

Flowchart explaining how to apply surcharge to a card transaction as explained in the above steps

An example of the requests and responses for a successfully applied surcharge would be the following.

Perform the BIN Lookup

Send a binlookup request to confirm that the cardholder is using a credit card.

Request
<txn>
    <ssl_merchant_id>000000</ssl_merchant_id>
    <ssl_user_id>su06</ssl_user_id>
    <ssl_pin>NL1F6KYN6E7JK72MGQC40QB7AYMC3DVZQ1LIXO96MIEB8E9P5QEVQOFXJNS9YTNX</ssl_pin>
    <ssl_transaction_type>BINLOOKUP</ssl_transaction_type>
    <ssl_card_number>00********0000</ssl_card_number>
    <ssl_track_data></ssl_track_data>
    <ssl_track_data_format></ssl_track_data_format>
</txn>
Response
<txn>
    <cardNumber>00********0000</cardNumber>
    <debit>N</debit>
    <pinless>N</pinless>
    <hsa>N</hsa>
    <billPaymentSupport>N</billPaymentSupport>
    <businessCard>N</businessCard>
    <cardProductTypeCode/>
    <countryCode>000</countryCode>
    <dbIntchFraudInd>N</dbIntchFraudInd>
    <ecommSupport>N</ecommSupport>
    <internationalSupport>N</internationalSupport>
    <networkRoutingCode>AF</networkRoutingCode>
    <posEligible>Y</posEligible>
    <prepaidSupport>N</prepaidSupport>
    <signatureSupport>N</signatureSupport>
    <fundingSource>C</fundingSource>
    <surchargeAllowed>Y</surchargeAllowed>
    <ssl_amount>100.00</ssl_amount>
    <ssl_credit_surcharge_percent>3</ssl_credit_surcharge_percent>
    <ssl_credit_surcharge_amount>3.00</ssl_credit_surcharge_amount>
    <ssl_total_amount>103.00</ssl_total_amount>
</txn>

Send Credit Card Sale

Send a ccsale or ccauthonly request. Converge will apply the surcharge percentage set as part of the terminal settings. The response values will reflect the new amount.

Request
<txn>
  <ssl_merchant_id>my_merchant_id</ssl_merchant_id>
  <ssl_user_id>my_user_id</ssl_user_id>
  <ssl_pin>my_pin</ssl_pin>
  <ssl_test_mode>false</ssl_test_mode>
  <ssl_transaction_type>ccsale</ssl_transaction_type>
  <ssl_card_number>00********0000</ssl_card_number>
  <ssl_exp_date>1220</ssl_exp_date>
  <ssl_amount>100.00</ssl_amount>
</txn>
Response
<txn>
  <ssl_card_number>00********0000</ssl_card_number>
  <ssl_exp_date>1215</ssl_exp_date>
  <ssl_credit_surcharge_percent>3</ssl_credit_surcharge_percent>
  <ssl_credit_surcharge_amount>3.00</ssl_credit_surcharge_amount>
  <ssl_amount>103.00</ssl_total_amount>
  <ssl_result>0</ssl_result>
  <ssl_result_message>APPROVAL</ssl_result_message>
  <ssl_txn_id>101641221593ACBA6-BAFD-76B7-4948-B3DE68CFD0CC</ssl_txn_id>
  <ssl_approval_code>CMC142</ssl_approval_code>
  <ssl_account_balance>1.00</ssl_account_balance>
  <ssl_txn_time>01/20/2011 01:07:23 PM</ssl_txn_time>
</txn>