DEVELOPER

EPX Hosted Checkout



Products

EPX Hosted Checkout Integration Guide



  1. Sign up for a free North Developer account.
  2. Review the guide below, then demo this product by making a test payment in our Sandbox environment using the sample credit card data provided.
  3. Apply for a Merchant Processing Account. Once approved, a Merchant ID (MID) will be provided to you.
  4. After you receive a MID, you or an authorized contact will need to email the Equipment Solutions team at equipmentsolutions@paymentshub.com for Production credentials. Please include your MID in the subject line of the email. For example: “MID 1234567 Requesting Production Credentials for EPX Hosted Checkout".
  5. After you receive an email with production credentials (4-Part Key), navigate to the EPX Hosted Checkout configuration module. Fill out the form with the following information:
    • Merchant Name: DBA name
    • Receipt Email: Business email address where copies of receipts will be sent
    • 4-Part Key: Provided by the Equipment Solutions team
  6. Click “Submit” and the configuration module will load. The configuration module provides three options for integrating EPX Hosted Checkout in your environment: a payment button that can be added to your website, a link that can be sent to customers, or a POST API request.
  7. Build your payment form within the module. EPX Hosted Checkout is available in the production environment only, so a live preview pane is provided to view your form while you build it. To create multiple payment forms, click the Checkout Id drop-down menu, then click the plus sign (+). Edit the settings as follows:
    • Link Type:
      • Button: No-code payment button that can be added to your site. The button opens the payment form in a pop-up box.
      • Link: No-code link that can be sent to customers. The link opens the payment form in a new browser tab.
      • POST: Low-code POST API request that offers the most control and customization of your payment solution. This option integrates the payment form into your site's current page.
    • Label: Enter your DBA name (this is the name displayed in the Checkout Id field).
    • Color Scheme: Edit the color to match your website.
    • Sections: Add a section to the form using the plus sign (+) at the bottom of the Sections list. Delete a section by selecting it to expand its settings and clicking the “Delete” button. Click on a section to adjust its settings:
      • Page: Create multiple pages to separate the sections of your payment form. A “Next” button will appear in the bottom right corner of the form to prompt customers to continue to the next section.
      • Hide Header: Show or hide the form section heading.
      • Inputs: Edit the attributes for the input fields (field size, required field, show/hide field label). Create new input fields using the plus sign (+) at the bottom of the Inputs list.
  8. Click the “Save Changes” button. To make edits, just navigate back to the EPX Hosted Checkout Configuration Module while signed in to your North Developer account.
  9. Follow the integration instructions below based on the type selected: Button, Link, or POST.

Payment Button

Adding the EPX Hosted Checkout Button to your website consists of three steps:

  1. Add the JavaScript link. Copy the HTML code below and paste it in the header or body of your HTML page.
HTML
<script src="https://hosted.epxuap.com/button.js"></script>
  1. Add the HTML button. After you build your form in the configuration module, copy the HTML code provided in the module and paste it in the body of your HTML page. The HTML button supports a number of attributes, but only data-terminal-profile-id and class="EPX-button" are required. See the Attribute Table below for a complete list of button attributes and accepted values. Internal and external CSS can be applied to the button element, although inline CSS is not recommended.

    Sample HTML button with minimum required attributes:

HTML
<button class="velocity-button" data-terminal-profile-id="12345" >Pay Now</button>
  1. Optionally, add a callback function. The callback function can be used to retrieve transaction response data and execute custom actions if the transaction is successful. If you wish to use a callback function, please contact us for integration support.

    By default, after a successful transaction, a modal displays the approval information which has a "Close" button to exit out of the modal. If the callback function is configured, it will trigger once the user clicks "Close." The callback-before-close flag allows the function to be triggered immediately after a successful transaction.

    If desired, EPX's success message can be skipped entirely and the customer can be directed to the merchant's custom success page. The callback function can be triggered when the user clicks close while in the payment form, and we will return a response.

    The attribute data-callback-function is required to be present in the button element to use a callback function. The dynamic fields in the response are the result of creating extra fields in the configuration module.


Button Attribute

HTML
data-callback-function="onPaymentCompletion"

Callback Function

HTML
<script type="text/javascript">
   function onPaymentCompletion(response){
            alert(JSON.stringify(response));
   }
</script>

Response Example

{
    "MSG_VERSION": "003",
    "CUST_NBR": "9001",
    "MERCH_NBR": "900783",
    "DBA_NBR": "1",
    "TERMINAL_NBR": "1",
    "TRAN_TYPE": "CCE1",
    "TRAN_NBR": "1",
    "LOCAL_DATE": "012023",
    "LOCAL_TIME": "133023",
    "AUTH_GUID": "09LK84WM0Z0N01F5ZQE",
    "AUTH_RESP": "00",
    "AUTH_CODE": "002029",
    "AUTH_AVS": "Z",
    "AUTH_CVV2": "M",
    "AUTH_RESP_TEXT": "ZIP MATCH",
    "AUTH_CARD_TYPE": "V",
    "AUTH_TRAN_DATE_GMT": "01/20/2023 06:30:23 PM",
    "AUTH_AMOUNT_REQUESTED": "7.00",
    "AUTH_AMOUNT": "7.00",
    "AUTH_CURRENCY_CODE": "840",
    "NETWORK_RESPONSE": "00",
    "AUTH_CARD_COUNTRY_CODE": "840",
    "AUTH_CARD_CURRENCY_CODE": "840",
    "AUTH_CARD_B": "D",
    "AUTH_CARD_C": "F",
    "AUTH_CARD_E": "N",
    "AUTH_CARD_F": "Y",
    "AUTH_CARD_G": "N",
    "AUTH_CARD_I": "Y",
    "AUTH_MASKED_ACCOUNT_NBR": "************1111",
    "ORIG_TRAN_TYPE": "CCE1",
    "AUTH_TRAN_IDENT": "353020666231567",
    "Expire": "12/33",
    "CardholderName": "Test Test",
    "OrderNumber": "abc12345",
    "InvoiceNumber": "abc12345",
    "Description": "Donation",
    "DynamicFields": {
        "user field 1": "abc123",
        "user field 2": "abc123",
        "user field 3": "abc123",
        "user field 4": "abc123",
        "user field 5": "abc123",
        "user field 6": "abc123",
        "user field 7": "abc123",
        "user field 8": "abc123",
        "user field 9": "abc123",
        "user field 10": "abc123"
    },
    "TransactionId": "09LK84WM0Z0N01F5ZQE",
    "Status": "00",
    "Amount": "7.00",
    "ApprovalCode": "002029",
    "MaskedPan": "************1111"
}

Top of Page


Payment Link

To add the Hosted Checkout Link to your website, copy the link provided in the configuration module. The only required parameter is terminal_profile_id=XXXX, which is used to link the form to your MID, display your color and field configurations, and ensure that the transaction will be processed under the correct account.

To add more query parameters to your link, refer to the Attribute Table below for a complete list of attributes and accepted values. The parameters and values must be placed at the end of the link following this format: parameter=value. Multiple parameter/value pairs must be separated by an ampersand: parameterOne=value&parameterTwo=value. Parameters can be placed in any order.

Example link that prepopulates Amount and Billing Name into the form:

https://hosted.epxuap.com/?terminal_profile_id=a1111-aa11-1111-1aa1-1a1aa1a111&amount=10.00&billing_name=Jane Smith

Top of Page


Payment POST

Please contact us to begin a Hosted Checkout POST integration. Adding the POST API call to your website involves four main steps:

  1. Copy the code provided in the configuration module and paste it into your HTML file.
  2. Customize your CSS and callback functions. Resources to assist with development, including test data, are provided here.
  3. Contact us to request that your domain(s) be added to our Google reCaptcha account.
  4. Provide raw request and response data to us for every transaction type that will be used in production to obtain our processor certification.

When logged in, you can use the Integration Tracker to view the status of your integration, notes from meetings with Integration Engineers, resources related to your solution, and more by clicking the User profile icon in the top right corner of the screen and selecting Integrations.

The code that you'll add to your HTML file in step 1 will include the following:

  • Link to post.js

  • Link to Google reCaptcha

  • Function to handle the response. The response is returned as a JSON string, not a JSON object. Use JSON.parse(msg) or some other method if the object is needed.

  • HTML form, including at minimum the following:

    • Card number field
    • Expiration date field
    • Amount field
    • Description field (this can be used as custom field based on the business’s needs)
    • Hidden fields:
      • reCaptcha. If you wish to implement Google reCaptcha in a different way, please make sure that you are using our sitekey:
        6LcCXwwUAAAAAO8617hw-277eL5cMAJ5SBsebhWk
        And please make sure that the value of the reCaptcha field is being populated with reCaptcha response:
        <input type="hidden" id="reCaptcha" name="Captcha" value="[must be populated with reCaptcha response]"/>
      • publicKey (this value is the base64 encoded piece of JSON: { "terminalProfileId": 12345 } )
      • successCallback
      • failureCallback
    • Submit button

    Refer to the Attribute Table below for a complete list of attributes and accepted values.

Callback Function

An optional callback function can be used to retrieve the response of a successfully processed transaction. By default, after a successful transaction, a modal displays the approval information which has a "Close" button to exit out of the modal. If the callback function is configured, it will trigger once the user clicks "Close." The callback-before-close flag allows the function to be triggered immediately after a successful transaction.

If desired, EPX's success message can be skipped entirely and the customer can be directed to the merchant's custom success page. The callback function can be triggered when the user clicks close while in the payment form, and we will return a response.

The attribute data-callback is required to use a callback function. The dynamic fields in the response are the result of creating extra fields in the configuration module.


Example HTML

HTML
<script src="https://hosted.epxuap.com/post.js" ></script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script type="text/javascript">
   var responseCaptcha = function(response) {
       document.getElementById('reCaptcha').value = response;
   };
</script>
<script>
   function velocitySuccessCallback(msg) {
     alert('Success: ' + msg);
   }
   function velocityFailureCallback(msg){
     alert('Failure: ' + msg);
   }
</script>
<form id="VelocityCheckoutForm" name="VelocityCheckoutForm">
   <div>
      <label for="PAN">Card Number:</label><input type="text" id="PAN" name="PAN"
         value="4111111111111111"/>
   </div>
   <div>
      <label for="Expire">Expire:</label><input type="text" id="Expire" name=
         "Expire" value="0822"/>
   </div>
   <div>
      <label for="CVV">CVV:</label><input type="text" id="CVV" name="CVV" value=
         "123"/>
   </div>
   <div>
      <label for="Amount">Amount:</label><input type="amount" id="Amount" name=
         "Amount" value="1.00"/>
   </div>
   <div>
      <label for="Description">Description:</label><input type="text" id=
         "Description" name="Description" value="Donation"/>
   </div>
   <div>
      <input type="hidden" name="FailureCallback" value="velocityFailureCallback"/>
      <input type="hidden" name="SuccessCallback" value="velocitySuccessCallback"/>
      <input type="hidden" name="PublicKey" value="eyAidGVybWluYWxQcm9maWxlSWQiOiAxNTIwOSB9"/>
      <input type="hidden" id="reCaptcha" name="Captcha" value="bypass"/>
   </div>
   <div class="g-recaptcha" 
        id="g-recaptcha" 
        data-callback="responseCaptcha" 
        data-sitekey="6LcCXwwUAAAAAO8617hw-277eL5cMAJ5SBsebhWk">
   </div>
   <div>
      <button onclick='Velocity.sendPost()' type="button">Send Payment</button>
   </div>
</form>
<style>
   @keyframes spin {
   0% { transform: rotate(0deg); }
   100% { transform: rotate(360deg); }
   }
</style>



JSON Response Example

{
    "MSG_VERSION": "003",
    "CUST_NBR": "9001",
    "MERCH_NBR": "900783",
    "DBA_NBR": "1",
    "TERMINAL_NBR": "1",
    "TRAN_TYPE": "CCE1",
    "TRAN_NBR": "1",
    "LOCAL_DATE": "012023",
    "LOCAL_TIME": "133023",
    "AUTH_GUID": "09LK84WM0Z0N01F5ZQE",
    "AUTH_RESP": "00",
    "AUTH_CODE": "002029",
    "AUTH_AVS": "Z",
    "AUTH_CVV2": "M",
    "AUTH_RESP_TEXT": "ZIP MATCH",
    "AUTH_CARD_TYPE": "V",
    "AUTH_TRAN_DATE_GMT": "01/20/2023 06:30:23 PM",
    "AUTH_AMOUNT_REQUESTED": "7.00",
    "AUTH_AMOUNT": "7.00",
    "AUTH_CURRENCY_CODE": "840",
    "NETWORK_RESPONSE": "00",
    "AUTH_CARD_COUNTRY_CODE": "840",
    "AUTH_CARD_CURRENCY_CODE": "840",
    "AUTH_CARD_B": "D",
    "AUTH_CARD_C": "F",
    "AUTH_CARD_E": "N",
    "AUTH_CARD_F": "Y",
    "AUTH_CARD_G": "N",
    "AUTH_CARD_I": "Y",
    "AUTH_MASKED_ACCOUNT_NBR": "************1111",
    "ORIG_TRAN_TYPE": "CCE1",
    "AUTH_TRAN_IDENT": "353020666231567",
    "Expire": "12/33",
    "CardholderName": "Test Test",
    "OrderNumber": "abc12345",
    "InvoiceNumber": "abc12345",
    "Description": "Donation",
    "DynamicFields": {
        "user field 1": "abc123",
        "user field 2": "abc123",
        "user field 3": "abc123",
        "user field 4": "abc123",
        "user field 5": "abc123",
        "user field 6": "abc123",
        "user field 7": "abc123",
        "user field 8": "abc123",
        "user field 9": "abc123",
        "user field 10": "abc123"
    },
    "TransactionId": "09LK84WM0Z0N01F5ZQE",
    "Status": "00",
    "Amount": "7.00",
    "ApprovalCode": "002029",
    "MaskedPan": "************1111"
}

Top of Page


Attribute Table

Button AttributeLink AttributePOST AttributeDescriptionAccepted Values

data-amount=

&amount=

Amount

Prepopulates a value into the amount field and disables editing.

0.01 - 999999.99

data-checkout-id=

&checkout_id=

[Field not available for Hosted Checkout POST]

Corresponds to the Label to differentiate between multiple form configurations.

Integer

data-callback-function=

[Field not available for Hosted Checkout Link]

data-callback

SuccessCallback and FailureCallback specify the functions that will handle callback successes and failures

Specifies a JavaScript function name that will execute on payment success.

JavaScript function name

data-invoice-num=

&invoice_no=

Invoice Number

Prepopulates a value into the invoice field and disables editing.

Alphanumeric (25 characters)

data-description=

&description=

Description

Prepopulates a value into the description field and disables editing.

Alphanumeric (25 characters)

data-billing-address=

&billing_address=

Billing Street Address

Prepopulates a value into the billing address field and disables editing.

Alphanumeric

data-billing-name=

&billing_name=

Billing Name

Prepopulates a value into the billing name field and disables editing.

Space-separated alphanumeric

data-billing-city=

&billing_city=

Billing City

Prepopulates a value into the billing city field and disables editing.

Alphanumeric (25 characters)

data-billing-state=

&billing_state=

Billing State

Prepopulates a value into the billing state field and disables editing.

U.S. state abbreviations

data-billing-postal-code=

&billing_postal_code=

Billing Postal Code

Prepopulates a value into the billing zip field and disables editing.

5-digit U.S. postal code

data-billing-country=

&billing_country=

Billing Country

Prepopulates a value into the billing country field and disables editing.

Full country name

data-shipping-address=

&shipping_address=

Shipping Street Address

Prepopulates a value into the shipping address field and disables editing.

Alphanumeric (25 characters)

data-shipping-name=

&shipping_name=

Shipping Name

Prepopulates a value into the shipping name field and disables editing.

Space-separated alphanumeric

data-shipping-city=

&shipping_city=

Shipping City

Prepopulates a value into the shipping city field and disables editing.

Alphanumeric (25 characters)

data-shipping-state=

&shipping_state=

Shipping State

Prepopulates a value into the shipping state field and disables editing.

U.S. state abbreviations

data-shipping-postal-code=

&shipping_postal_code=

Shipping Postal Code

Prepopulates a value into the shipping zip field and disables editing.

5-digit U.S. postal code

data-shipping-country=

&shipping_country=

Shipping Country

Prepopulates a value into the shipping country field and disables editing.

Full country name

data-email=

&email=

Email

Prepopulates a value into the email field and disables editing.

local-part@domain

data-company=

[Field not available for Hosted Checkout Link]

[Field not available for Hosted Checkout POST]

Prepopulates a value into the company name field and disables editing.

Alphanumeric (25 characters)

data-use-test-values=

&use_test_values=

[Field not available for Hosted Checkout POST]

Prepopulates test data into all fields to assist with the testing process.

true or false

[Field not available for Hosted Checkout Button]

[Field not available for Hosted Checkout Link]

Captcha

Link to Google reCaptcha.

reCaptcha response

[Field not available for Hosted Checkout Button]

[Field not available for Hosted Checkout Link]

publicKey

The base64 encoded piece of JSON: { 'terminalProfileId': 12345 }.

Integer

Top of Page

©2025 North is a registered DBA of NorthAB, LLC. All rights reserved. North is a registered ISO of BMO Harris Bank N.A., Chicago, IL, Citizens Bank N.A., Providence, RI, The Bancorp Bank, Philadelphia, PA, FFB Bank, Fresno, CA, Wells Fargo Bank, N.A., Concord, CA, and PNC Bank, N.A.