Boarding API


 

Introduction


The EpicPay Gateway Agent API is a web service that allows Fortis agents to run reports as well as migrate their merchant data to the EpicPay Gateway. This process greatly simplifies the merchant boarding process. When this web service is used to migrate merchant data to Fortis, the merchant will have access to an application that is pre-filled with much of the necessary information. See the Merchant Boarding method for more information.

The EpicPay Gateway Agent API implements the REST architecture style. Request and response messages, including errors, are in JSON formats.

 

Intended Audience

This document is intended for developers who want to understand and implement the EpicPay Gateway Agent API.

 

BaseURL

https://board-api.epicpay.com/v1/

NOTE: Endpoints are case-sensitive and must be in all lowercase.

 

API Keys

These credentials will be different from the Payment API credentials. Please contact Fortis to get your EpicPay Gateway Agent API credentials.


Note: All requests must be made over TLS/SSL.

Authentication


To use the EpicPay Gateway Agent API, you will need to provide your merchant boarding credentials. They are:

  • API Key ID: This value identifies the agent under which the merchant will be boarded.
  • Password: Authenticates the EpicPay Gateway Agent API request. This value should not be exposed to the public.

These credentials should be submitted as HTTP Basic Authentication username and password values. For security reasons, all API requests that use Basic Authentication must be made from the server-side.

Merchant Boarding


This method can be used to pre-populate data on the Merchant Processing Application (MPA), a form that prospective merchants must complete and sign prior to approval. Using this method will reduce the effort required by the merchant at boarding time, in scenarios where data about the prospective merchant has already been collected. This method will return an Application ID, which can be sent to a prospective merchant to obtain and complete the pre-filled application.

 

Properties that are marked "Required" indicate the minimum required data for creating and saving an MPA. When using this method, you must provide data for each "Required" property, or you will not receive an Application ID. Properties that are marked "Required for completion" are those which need to be provided to Fortis before the Merchant Processing Application can be approved. These properties may be omitted or left blank when using this method, however, the merchant will be required to provide this data before the application can be submitted. Properties that are marked "Conditionally Required" may be required for completion of the Merchant Processing Application, depending on the values provided for other fields. See the description for each of these properties for more information about their requirement criteria.

 

Note: Template_id is one of the required fields. This field is provided by Fortis and requires pre-configuration. It also allows for pre-configuring of the API fields business_category, business_type, business_description, swiped_percent, keyed_percent, and ecommerce_percent. Any of those pre-configured values, if configured, can be overwritten by calling the same fields in the API.

Board a Merchant:

Use this method to board a merchant to the EpicPay Gateway.

  • URL

BaseURL/boardmerchant

**NOTE:** Endpoints are case-sensitive and must be in all lowercase.
  • Method:

    POST

  • Authorization:

    Basic:

API Key ID : Password

  • Headers:

    • Content-Type: application/json
  • Data:

    Required:

    • email: String Merchant email address.

    • dba_name: String Merchant "Doing Business As" name.

    • template_id String The ID of the template to be used - this value will be provided by Fortis.

    • location: Object The Location Object.

      • phone_number String Merchant's business phone number.
    • primary_principal Object The Primary Principal Object.

      • first_name String Primary principal or signer's first name.
      • last_name String Primary principal or signer's last name.
    • app_delivery String The delivery method of the app to the merchant. See App delivery.

    Conditionally Required:

    • website: String Merchant's business website (Required if "ecommerce_percent" is greater than 0).

    • business_category: String The Category of the merchant's business (Required if "business_type" is provided). Note: "business_type" must belong to the appropriate "business_category" as detailed in Appendix 7.

    Required for Completion:

    • ownership_type: String The Ownership Type of the merchant's business.

    • fed_tax_id: String Federal Tax ID (EIN).

    • cc_average_ticket: Integer Average credit card transaction amount in dollars (Applicable when Template Application Type is 'credit_card' or 'both').

    • cc_monthly_volume: Integer Average monthly credit card volume in dollars (Applicable when Template Application Type is 'credit_card' or 'both').

    • cc_high_ticket: Integer Highest transaction amount in dollars (Applicable when Template Application Type is 'credit_card' or 'both').

    • ec_average_ticket: Integer Average eCheck transaction amount in dollars (Applicable when Template Application Type is 'echeck' or 'both').

    • ec_monthly_volume: Integer Average monthly echeck volume in dollars (Applicable when Template Application Type is 'echeck' or 'both').

    • ec_high_ticket: Integer Highest transaction amount in dollars (Applicable when Template Application Type is 'echeck' or 'both').

    • business_type: String The Type of a merchant's business.

    • business_description: String Description of Goods or Services.

    • swiped_percent: Integer Card present/swiped percentage.

    • keyed_percent: Integer Card not present/keyed percentage.

    • ecommerce_percent Integer eCommerce percentage.

    • bank_account Object The Bank Account Object.

      Note: The sum total of "swiped_percent", "keyed_percent" and "ecommerce_percent" must add up to 100.

    Optional:

    • legal_name: String Merchant legal name (leave blank if same as DBA name).

    • contact Object The Contact Object.

    • client_app_id String Client-Issued ID to uniquely identify the merchant.

    • app_complete_endpoint String _Client-side redirect URL called after merchant completes application.

    • is_test String For testing only. When this property is set to "true", the application will be submitted in demo mode. (Values: 'true', 'false'; Default: 'false')

    • preferred_language String Merchant’s preferred language. English(“en-US”) will be used if no value is supplied. See Preferred Language for supported values.

     

Boarding Request Variables


Variable Description
primary_principal Object The Primary Principal Object.
template_id String[20] The ID of the template to be used - this value will be provided by Fortis. Format: [A-Za-z0-9]{0,20}.
email String[100] Merchant email address.
dba_name String[100] Merchant "Doing Business As" name.
location Object The Location Object.
app_delivery String[12] The delivery method of the app to the merchant. See App delivery.
business_category String[50] The Category of the merchant's business (Required if "business_type" is provided). Note: "business_type" must belong to the appropriate "business_category" as detailed in Appendix 7.
business_type String[50] The Type of a merchant's business.
business_description String[200] Description of Goods or Services.
swiped_percent Integer[3] Card present/swiped percentage (values: 0-100).
keyed_percent Integer[3] Card not present/keyed percentage (values: 0-100).
ecommerce_percent Integer[3] eCommerce percentage (values: 0-100).
ownership_type String[10] The Ownership Type of the merchant's business.
fed_tax_id String[10] Federal Tax ID (EIN).
cc_average_ticket Integer[2] Average credit card transaction amount rounded to the next dollar (Applicable when Template Application Type is 'credit_card' or 'both').
cc_monthly_volume Integer[2] Average monthly credit card volume rounded to the next dollar (Applicable when Template Application Type is 'credit_card' or 'both').
cc_high_ticket Integer (range: 0-30000) Highest transaction amount rounded to the next dollar (No decimal and applicable when Template Application Type is 'credit_card' or 'both').
ec_average_ticket Integer[2] Average eCheck transaction amount rounded to the next dollar (Applicable when Template Application Type is 'echeck' or 'both').
ec_monthly_volume Integer[2] Average monthly echeck volume rounded to the next dollar (Applicable when Template Application Type is 'echeck' or 'both').
ec_high_ticket Integer (range: 0-30000) Highest transaction amount rounded to the next dollar (No decimal and applicable when Template Application Type is 'echeck' or 'both').
website String[100]Merchant's business website (Required if "ecommerce_percent" is greater than 0).
bank_account Object (Optional) The Bank Account Object.
legal_name String[100] (Optional) Merchant legal name (leave blank if same as DBA name).
contact Object (Optional) The Contact Object.
client_app_id String[50] (Optional) Client-Issued ID to uniquely identify the merchant (Returned unmodified).
app_complete_endpoint String[400] (Optional) Client-side Redirect URL called after merchant completes application.
is_test String (Optional) For testing only. When this property is set to "true", the application will be submitted in demo mode. (Values: 'true', 'false'; Default: 'false')
preferred_language String[5] (Optional) Merchant’s preferred language. English(“en-US”) will be used if no value is supplied. See Preferred Language for supported values.

Note: The sum total of "swiped_percent", "keyed_percent" and "ecommerce_percent" must add up to 100.

 

Example Boarding Request

POST {BaseURL}/boardmerchant HTTP/1.1
Authorization: Basic czZCaGfSafSa3F0ZCaGfMzpn3Mfpn3DFSa3FZCaGf0MzpnZCaGfFZCaGpnZCfF0Mzpn3F0Mzpn3DF
Content-Type: application/json

{
    "template_id": "7564",
    "client_app_id": "12345",
    "email": "totalhome@example.com",
    "dba_name": "Discount Home Goods",
    "app_delivery": "direct",
    "website": "http://www.example.com",
    "ownership_type": "llp",
    "fed_tax_id": "00-0000000",
    "cc_average_ticket": 15,
    "cc_monthly_volume": 10000,
    "cc_high_ticket": 1500,
    "ec_average_ticket": 25,
    "ec_monthly_volume": 2000,
    "ec_high_ticket": 1500,
    "business_type": "school",
    "business_category": "education",
    "business_description": "School",
    "preferred_language": "en-US"
    "swiped_percent": 0,
    "keyed_percent": 0,
    "ecommerce_percent": 100,
    "legal_name": "Total Home Goods, LLP.",
    "location": {
        "address_line_1": "1200 West Hartford Pkwy.",
        "address_line_2": "Suite 2000",
        "city": "Dover",
        "state_province": "DE",
        "postal_code": "55022",
        "phone_number": "555-555-1212"
    },
    "primary_principal": {
        "first_name": "Bob",
        "last_name": "Fairview",
        "middle_name": "Nathaniel",
        "title": "Dr.",
        "date_of_birth": "2017-06-05",
        "address_line_1": "1354 Oak St.",
        "address_line_2": "Unit 203",
        "city": "Dover",
        "state_province": "DE",
        "postal_code": "55022",
        "ssn": "1234",
        "ownership_percent": 100,
        "phone_number": "555-555-1234"
    },
    "contact": {
        "first_name": "Jeffery",
        "last_name": "Todd",
        "email": "jtodd@example.com",
        "phone_number": "555-555-3456"
    },
    "bank_account": {
        "account_holder_name": "Bob Fairview",
        "routing_number": "011103093",
        "account_number": "01234567890123"
    },
    "app_complete_endpoint": "http://www.example.com"
}

 

Boarding Response

 

Boarding Response Variables


Variable Description
status Object Status of the API Request.
  response_code String Status of the boarding request. See Appendix 11 for a complete list of response codes. (values: "Received", "Error")
  reason_code String Returns a reason code if there is an error with the request. Otherwise, returns empty (""). See Appendix 4 for a complete list of reason codes.
  reason_text String A message that accompanies the "reason_code".
result Object Not available when the response code is 'Error'.
  app_link String[400] A full page or iframeable link, set in the request app_delivery field, that can be used to retrieve and resume the generated merchant application. No link will be returned for the Default.
  epic_app_id String[128] Fortis internal ID. Can be created that can be used to uniquely reference an application if a client_app_id is not supplied.
  client_app_id String[20] Optional unique ID generated on the client to distinctly identify an application. Enforcement of uniqueness must be performed on the client. (Returned unmodified).
  dba_name String[100] Merchant "Doing Business As" name. (Returned unmodified).
  email String[100] Merchant email address (Returned unmodified).
  app_delivery String[20] The app delivery method to the Merchant. See app_delivery (Returned unmodified).

 

Example Boarding Response

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 550

{
  "result": {
    "app_link": "https://mpa.epicpay.com/ezapp/signup/7271bd8180684862928555caf201f156",
    "epic_app_id": "7271bd8180684862928555caf201f156",
    "client_app_id": "ABC123",
    "dba_name": "Discount Home Goods",
    "email": "totalhome@example.com",
    "app_delivery": "link_full_page"
  },
  "status": {
    "response_code": "Received",
    "reason_code": "",
    "reason_text": ""
  }
}

Merchant Application


Using the MPA iframe

 

To generate an iframe-ready MPA link, use the Board a Merchant API method with "app_delivery" set to "link_iframe".

Fortis partners may elect to present the MPA to a prospective merchant through an iframe: a seamless way of integrating the application onto the partner's website. The application is designed to accept custom styling to fit the partner's needs. For more information, contact your Fortis relationship manager to discuss whitelabel options.

Hosting the iframe on your website is easy. Simply add an iframe element to your website and set the src attribute equal to the app_link generated by the Boarding API. Inline styling may be added to the iframe element itself, but it will not affect the application page it hosts. The following code snippet is a basic implementation of an iframe:

 

<iframe src="{app_link}"></iframe>

 

Events

 

The MPA iframe will post messages to the page hosting it (the parent page). This allows the parent page to listen to events happening within the iframe in a safe and secure manner, and perform actions accordingly. In order to take advantage of this feature, the parent page must have an event listener that can receive and read posted messages from the iframe. For more information, see this page on the Mozilla Dev Docs: Window.postMessage() . The message format is in JSON. To see a demonstration of an event listener, see the Live Demo section below.

 

Live Demo

The following demo webpage is built to show how an event listener can be used to receive and act upon messages posted by an iframe. It hosts an iframed application that posts messages to its parent (the demo page, in this case) in the same manner the MPA would. The demo page will then display a message and scroll itself based on the output of the iframe. The demo also has an option to display the JavaScript code used to drive itself.

Click here to see it in action.

 

iframe Message Variables


Variable Description
EpicIFrame Object Root object for all messages.
  loaded Boolean Returned when the iframe finishes loading (values: true)
  modal Object Returned when the signer clicks "Verify Info" to submit the merchant information for verification.
    reason String Indicates the result of merchant information verification (values: "agreement", "info", "error").
"agreement": The merchant information has passed verification, and the MPA advances to the Terms of Service agreement.
"info": The user has opened an information popup (i.e. "See Rate Detail").
"error": The merchant information has failed verification.
  submitted Object Returned when the signer clicks "I Agree" to complete the application.
    status String Indicates the status of the application upon submission (values: "approved", "pending", "error").
"approved": The application was successful and has been automatically approved.
"pending": The application was submitted and is pending review for approval.
"error": An internal error has been hit.
  resize Object Returned whenever the size of the iframe's viewport changes.
    height Integer Indicates the current height of the iframe in pixels.

Example iframe Message

{
    "EpicIFrame": {
        "modal": {
            "reason": "agreement"
        }
    }
}

Webhooks

 

Introduction


Fortis partners can opt to receive a webhook whenever one of their merchant applications is pended, approved, or declined by Fortis. For example, the agent would receive one webhook messages if a merchant is immediately approved, or two webhooks if they were pended and then subsequently approved after review. Partners may also opt to receive the Extended Merchant Approval payload in place of the standard approval payload, which includes the boarded merchant's information. The format for this webhook is JSON. NOTE: Please ensure that your endpoint(s) can receive communication from the following IP addresses: 52.0.151.12, 34.206.191.222.

 

Configuration


Webhooks will only be sent over HTTPS (TLS 1.2), so you must configure your endpoint to receive responses using TLS version 1.2. Optionally, you may secure your endpoint with Basic Authentication. If you do, we will send the username and password that you provide us with each callback. To configure a single endpoint for all responses (and optionally provide us with your Basic Authentication credentials), contact your Account Manager.

For more information on Basic Authentication, see: Wikipedia: Basic Access Authentication.

For more on TLS, see: Wikipedia: Transport Layer Security.

After completing your webhook endpoint, you can test it below.

 

Merchant Approval Webhook Object


Variable Description
result Object Result Object. (Not available when the response code is 'error'.)
   gateway_credential Object Contains the gateway credentials for the merchant.
     epic_id String Unique identifier for the merchant.
     gateway_id String Unique identifier for the merchant's terminal.
     client_app_id String Optional client-issued unique identifier for an application. Enforcement of uniqueness must be performed by the client. (Returned unmodified).
     epic_app_id String Fortis internal ID. Can be used to uniquely reference an application if a client_app_id is not supplied.
     api_key_id String Basic Authentication Username for merchant's Payment API access.
     api_key_password String Basic Authentication Password for merchant's Payment API access.
status Object Status of the API Request.
   response_code String Processing status of the application. See Appendix 11 for a complete list of response codes. (values: "pended", "approved", "declined")
   reason_code String Currently unused.
   reason_text String A message that accompanies the reason_code.

 

Extended Merchant Approval Webhook Object


Variable Description
result Object Result Object. (Not available when the response code is 'error'.)
   gateway_credential Object Contains the gateway credentials for the merchant.
     epic_id String Unique identifier for the merchant.
     gateway_id String Unique identifier for the merchant's terminal.
     client_app_id String Optional client-issued unique identifier for an application. Enforcement of uniqueness must be performed by the client. (Returned unmodified).
     epic_app_id String Fortis internal ID. Can be used to uniquely reference an application if a client_app_id is not supplied.
     api_key_id String Basic Authentication Username for merchant's Payment API access.
     api_key_password String Basic Authentication Password for merchant's Payment API access.
   merchant_info Object Contains the merchant's application information.
     legal_name String Legal name of the merchant.
     website String Website associated with the merchant.
     business_type String The business type that best describes the merchant. (See Business Categories and Business Types)
     business_category String The business category that best describes the merchant. (See Business Categories and Business Types)
     business_description String User-entered description of the business entered during the application.
     ownership_type String The type of ownership in which the business is registered. (See Ownership Types)
     fed_tax_id String Federal tax ID. Returns with first 5 digits masked.
     is_test String Indicates whether the application was launched in demo mode. (Values: 'true', 'false'; Default: 'false')
     location Object The Location Object.
     primary_principal Object The Primary Principal Object.
     bank_account Object The Bank Account Object.
     cc_monthly_volume Int Expected monthly volume through credit card.
     cc_average_ticket Int Expected average ticket through credit card.
     cc_high_ticket Int Expected maximum ticket through credit card.
     ec_monthly_volume Int Expected monthly volume through eCheck.
     ec_average_ticket Int Expected average ticket through eCheck.
     ec_high_ticket Int Expected maximum ticket through eCheck.
     swiped_percent Byte Percentage of commerce made through a swiped card.
     keyed_percent Byte Percentage of commerce made through entering card or bank information.
     ecommerce_percent Byte Percentage of commerce made through online transactions.
     app_complete_endpoint String Endpoint where the boarding webhook will be sent.
     dba_name String DBA name of the merchant. Matches the legal name if not provided.
     email String Primary email associated with the merchant.
     client_app_id String Optional client-issued unique identifier for an application. Enforcement of uniqueness must be performed on the client. (Returned unmodified).
     epic_app_id String Fortis internal ID. Can be used to uniquely reference an application if a client_app_id is not supplied.
     epic_id String Unique identifier for the merchant.
status Object Status of the API Request.
   response_code String Processing status of the application. (See Appendix 11 for a complete list of Response Codes)
   reason_code String Currently unused.
   reason_text String A message that accompanies the reason_code.

 

Merchant Pended Webhook Object


Variable Description
result Object Result Object. (Not available when the response code is 'error'.)
   merchant_info Object Contains the merchant's application information.
     client_app_id String Optional client-issued unique identifier for an application. Enforcement of uniqueness must be performed by the client. (Returned unmodified).
     epic_app_id String Fortis internal ID. Can be used to uniquely reference an application if a client_app_id is not supplied.
     epic_id String Unique identifier for the merchant.
     dba_name String DBA name of the merchant. Matches the legal name if not provided.
     email String Primary email associated with the merchant.
status Object Status of the API Request.
   response_code String Processing status of the application. (See Appendix 11 for a complete list of Response Codes)
   reason_code String Currently unused.
   reason_text String A message that accompanies the reason_code.

 

Merchant Declined/Closed Webhook Object


Variable Description
result Object Result Object. (Not available when the response code is 'error'.)
   merchant_info Object Contains the merchant's application information.
     epic_id String Unique identifier for the merchant.
     dba_name String DBA name of the merchant. Matches the legal name if not provided.
     email String Primary email associated with the merchant.
     client_app_id String Optional client-issued unique identifier for an application. Enforcement of uniqueness must be performed on the client. (Returned unmodified).
     epic_app_id String Fortis internal ID. Can be used to uniquely reference an application if a client_app_id is not supplied.
     location Object The Location Object.
status Object Status of the API Request.
   response_code String Processing status of the application. (See Appendix 11 for a complete list of Response Codes)
   reason_code String Currently unused.
   reason_text String A message that accompanies the reason_code.

 

Example Merchant Approval Webhook Object

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 291

{
    "result": {
        "gateway_credential": {
            "epic_id": "43123",
            "gateway_id": "00000000000000000000000000000000",
            "client_app_id": "12345",
            "epic_app_id": "7271bd8180684862928555caf201f156",
            "api_key_id": "API_Key",
            "api_key_password": "API_Pass"
        }
    },
    "status": {
        "response_code": "approved",
        "reason_code": "",
        "reason_text": "Application Approved"
    }
}

 

Example Extended Merchant Approval Webhook Object

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1612

{
    "result": {
        "gateway_credential": {
            "epic_id": "12345",
            "gateway_id": "00000000000000000000000000000000",
            "client_app_id": "12345",
            "epic_app_id": "7271bd8180684862928555caf201f156",
            "api_key_id": "API_Key",
            "api_key_password": "API_Pass"
        },
        "merchant_info": {
            "legal_name": "Total Home Goods, LLP.",
            "website": "http://www.example.com",
            "business_type": "school",
            "business_category": "education",
            "business_description": "School",
            "ownership_type": "llp",
            "fed_tax_id": "****0000",
            "is_test": "true",
            "location": {
                "address_line_1": "1200 West Hartford Pkwy.",
                "address_line_2": "Suite 2000",
                "city": "Dover",
                "state_province": "DE",
                "postal_code": "55022",
                "phone_number": "555-555-1212"
            },
            "primary_principal": {
                "first_name": "Bob",
                "last_name": "Fairview",
                "middle_name": "Nathaniel",
                "title": "Dr.",
                "date_of_birth": "2017-06-05",
                "ssn": "****1234",
                "ownership_percent": 100,
                "address_line_1": "1354 Oak St.",
                "address_line_2": "Unit 203",
                "city": "Dover",
                "state_province": "DE",
                "postal_code": "55022",
                "phone_number": "555-555-1234"
            },
            "bank_account": {
                "routing_number": "011103093",
                "account_number": "01234567890123",
                "account_holder_name": "Bob Fairview"
            },
            "cc_monthly_volume": 10000,
            "cc_average_ticket": 15,
            "cc_high_ticket": 1500,
            "ec_monthly_volume": 2000,
            "ec_average_ticket": 25,
            "ec_high_ticket": 1500,
            "swiped_percent": 0,
            "keyed_percent": 0,
            "ecommerce_percent": 100,
            "app_complete_endpoint": "http://www.example.com",
            "dba_name": "Total Home Goods, LLP.",
            "email": "totalhome@example.com",
            "client_app_id": "12345",
            "epic_app_id": "7271bd8180684862928555caf201f156",
            "epic_id": "12345"
        }
    },
    "status": {
        "response_code": "approved",
        "reason_code": "",
        "reason_text": "Application Approved"
    }
}

 

Example Pended Merchant Webhook Object

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 246

{
    "result": {
        "merchant_info": {
            "dba_name": "Discount Home Goods",
            "email": "totalhome@example.com",
            "client_app_id": "12345",
            "epic_app_id": "7271bd8180684862928555caf201f156",
            "epic_id": "43123"
        }
    },
    "status": {
        "response_code": "pended",
        "reason_code": "",
        "reason_text": "Application Pended"
    }
}

 

Example Merchant Declined/Closed Webhook Object

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 456
{
    "result": {
        "merchant_info": {
            "epic_id": "43123",
            "dba_name": "Total Home Goods, LLP.",
            "email": "totalhome@example.com",
            "client_app_id": "clientID",
            "epic_app_id": "7271bd8180684862928555caf201f156",
            "location": {
                "address_line_1": "1200 West Hartford Pkwy.",
                "address_line_2": "Suite 2000",
                "city": "Dover",
                "state_province": "DE",
                "postal_code": "55022",
                "phone_number": "555-555-1212"
            }
        }
    },
    "status": {
        "response_code": "closed",
        "reason_code": "",
        "reason_text": "Closed By Merchant"
    }
}

Merchant Boarding Webhook Tester


Appendix 1 - Contact Info Objects

 

Location Object


Property Description
address_line_1 String[100] Merchant's business address line 1.
address_line_2 String[20] Merchant's business address line 2.
city String[50] Merchant's business city.
state_province String[2] Merchant's business two-digit state or province code.
postal_code String[10] Merchant's business postal code.
phone_number String[20] (Required) Merchant's business phone number.

 

Primary Principal Object


Property Description
first_name String[20] (Required) Primary principal or signer's first name.
last_name String[20] (Required) Primary principal or signer's last name.
middle_name String[20] Primary principal or signer's middle name.
title String[20] Primary principal or signer's title.
date_of_birth Date[YYYY-MM-DD] Primary principal or signer's date of birth.
address_line_1 String[100] Primary principal or signer's residential address line 1.
address_line_2 String[20] Primary principal or signer's residential address line 2.
city String[50] Primary principal or signer's city.
state_province String[2] Primary principal or signer's two-digit state code.
postal_code String[10] Primary principal or signer's postal code.
ssn String[4] Last four digits of the primary principal or signer's social security number.
ownership_percent Integer[3] Percentage of business owned by primary principal or signer (must be between 0 and 100).
phone_number String[20] Primary principal or signer's phone number.

 

Contact Object


Additional contact or technical contact's information.

Property Description
first_name String[20] Contact's first name.
last_name String[20] Contact's last name.
email String[20] Contact's email address.
phone_number String[20] (Required) Contact's phone.

Appendix 2 - Bank Account Object


Property Description
routing_number String[9] Nine-digit Bank routing number.
account_number String[17] Bank account number.
account_holder_name String[40] Name on bank account.

 

Appendix 3 - Ownership Types


 

The type of ownership in which the business is registered.

Ownership Type Description
c Public Corporation
gov Government
llc Limited Liability Company
llp Limited Liability Partnership
np Non-Profit Charitable Organization
p Partnership
po Political Organization
s Private Corporation
sp Sole Proprietor
te Other Tax Exempt

Appendix 4 - Reason Codes


NOTE: Codes are not case sensitive; use a case insensitive comparison to handle response values (i.e. code should be written in a way that will interpret "e01" and "E01" as identical values).

Code Description
E01 Unauthorized.
E02 Invalid Request.
E03 Invalid Request Header.
E04 Invalid Request Data.
E99 Error.

 

Appendix 5 - Average Ticket Ranges


Value Description
1 Under $16
2 $16-$25
3 $26-$50
4 $51-$250
5 $251-$500
6 $501-$1,000
7 More than $1,000

 

Appendix 6 - Monthly Volume Ranges


Value Description
1 Under $5,000
2 $5,000-$10,000
3 $10,001-$25,000
4 $25,001-$50,000
5 $50,001-$100,000
6 $100,001-$165,000
7 More than $165,000

 

Appendix 7 - Business Categories and Business Types


Business Category Business Type Description
beauty_and_personal_care beauty_salon Beauty Salon
beauty_and_personal_care hair_salon_barbershop Hair Salon/Barbershop
beauty_and_personal_care independent_stylist_barber Independent Stylist/Barber
beauty_and_personal_care massage_therapist Massage Therapist
beauty_and_personal_care nail_salon Nail Salon
beauty_and_personal_care other Other
beauty_and_personal_care spa Spa
beauty_and_personal_care tanning_salon Tanning Salon
beauty_and_personal_care tattoo_piercing Tattoo/Piercing
casual_use events_festivals Events/Festivals
casual_use miscellaneous_goods Miscellaneous Goods
casual_use miscellaneous_services Miscellaneous Services
casual_use other Other
casual_use outdoor_markets Outdoor Markets
education child_care Child Care
education instructor_teacher Instructor/Teacher
education other Other
education school School
education tutor Tutor
food_and_drink bakery Bakery
food_and_drink bar_club_lounge Bar/Club/Lounge
food_and_drink caterer Caterer
food_and_drink coffee_tea_shop Coffee/Tea Shop
food_and_drink convenience_store Convenience Store
food_and_drink food_truck_cart Food Truck/Cart
food_and_drink grocery_market Grocery/Market
food_and_drink other Other
food_and_drink outdoor_markets Outdoor Markets
food_and_drink private_chef Private Chef
food_and_drink quick_service_restaurant Quick Service Restaurant
food_and_drink sit_down_restaurant Sit-Down Restaurant
food_and_drink specialty_shop Specialty Shop
health_care_and_fitness acupuncture Acupuncture
health_care_and_fitness alternative_medicine Alternative Medicine
health_care_and_fitness care_giver Care Giver
health_care_and_fitness chiropractor Chiropractor
health_care_and_fitness dentist_orthodontist Dentist/Orthodontist
health_care_and_fitness gym_health_club Gym/Health Club
health_care_and_fitness massage_therapist Massage Therapist
health_care_and_fitness medical_practitioner Medical Practitioner
health_care_and_fitness optometrist_laser_eye_surgery Optometrist/Eye Care
health_care_and_fitness other Other
health_care_and_fitness personal_trainer Personal Trainer
health_care_and_fitness psychiatrist Psychiatrist
health_care_and_fitness therapist Therapist
health_care_and_fitness veterinary_services Veterinary Services
home_and_repair automotive_services Automotive Services
home_and_repair carpet_cleaning Carpet Cleaning
home_and_repair cleaning Cleaning
home_and_repair clothing_alterations Clothing Alteration
home_and_repair computer_electronics_and_appliance_repair Computer/Electronics/Appliances
home_and_repair dry_cleaning_and_laundry Dry Cleaning and Laundry
home_and_repair electrical_services Electrical Services
home_and_repair flooring Flooring
home_and_repair general_contracting General Contracting
home_and_repair heating_and_air_conditioning Heating and Air Conditioning
home_and_repair installation_services Installation Services
home_and_repair junk_removal Junk Removal
home_and_repair landscaping Landscaping
home_and_repair locksmith_services Locksmith Services
home_and_repair moving Moving
home_and_repair other Other
home_and_repair painting Painting
home_and_repair pest_control Pest Control
home_and_repair plumbing Plumbing
home_and_repair roofing Roofing
home_and_repair shoe_repair Shoe Repair
home_and_repair watch_jewelry_repair Watch/Jewelry Repair
leisure_and_entertainment airlines Airlines and Airline Carriers
leisure_and_entertainment car_rental Car Rental
leisure_and_entertainment events_festivals Events/Festivals
leisure_and_entertainment lodging Hotels, Motels, Resorts, Central Reservation Services
leisure_and_entertainment movies_film Movies/Film
leisure_and_entertainment museum_cultural Museum/Cultural
leisure_and_entertainment music Music
leisure_and_entertainment other Other
leisure_and_entertainment performing_arts Performing Arts
leisure_and_entertainment sporting_events Sporting Events
leisure_and_entertainment sports_recreation Sports Recreation
leisure_and_entertainment tourism Tourism
non_profit automobile_association Automobile Association
non_profit charitable_organization Charitable and Social Service Organization
non_profit civic_social_and_fraternal_association Civic, Social, and Fraternal Association
non_profit membership_organization Membership Organizations (Not Elsewhere Classified)
non_profit political_organization Political Organization
non_profit religious_organization Religious Organization
professional_services accounting Accounting
professional_services child_care Child Care
professional_services consulting Consulting
professional_services delivery Delivery
professional_services design Design
professional_services interior_design Interior Design
professional_services legal_services Legal Services
professional_services marketing_advertising Marketing/Advertising
professional_services nanny_services Nanny Services
professional_services notary_services Notary Services
professional_services other Other
professional_services photography Photography
professional_services printing_services Printing Services
professional_services real_estate Real Estate
professional_services software_development Software Development
retail art_photo_and_film Art, Photo and Film
retail books_mags_music_and_video Books, Mags, Music and Video
retail clothing_and_accessories Clothing and Accessories
retail convenience_store Convenience Store
retail electronics Electronics
retail eyewear Eyewear
retail flowers_and_gifts Flowers and Gifts
retail furniture_home_goods Furniture/Home Goods
retail grocery_market Grocery/Market
retail hardware_store Hardware Store
retail hobby_shop Hobby Shop
retail jewelry_and_watches Jewelry and Watches
retail office_supply Office Supply
retail other Other
retail outdoor_markets Outdoor Markets
retail pet_store Pet Store
retail specialty_shop Specialty Shop
retail sporting_goods Sporting Goods
transportation bus Bus
transportation delivery Delivery
transportation limousine Limousine
transportation moving Moving
transportation other Other
transportation private_shuttle Private Shuttle
transportation taxi Taxi
transportation town_car Town Car

 

Appendix 8 - Payment Types


Value Description
eCom Payfac Credit Card.
ACH Fortis ACH.

 

Appendix 9 - Transaction Types


Value Description
Sale Credit Card Sale.
Debit ACH Sale.
Credit ACH Refund.
Return Credit Card Return.

 

Appendix 10 - App Delivery Types


Value Description
direct Fortis emails the app link directly to the merchant. Merchant will not be required to enter PIN.
link_full_page Full page link returned in the response. PIN will be required (sent to Merchant's email as entered).
link_iframe iFrame link returned in the response. PIN will be required (sent to Merchant's email as entered).

 

Appendix 11 - Response Codes


NOTE: Codes are not case sensitive; use a case insensitive comparison to handle response values (i.e. code should be written in a way that will interpret "Received" and "received" as identical values).

Code Reason Text Description
Received "" Indicates a successful application submission/request.
Error See Reason Codes Indicates an unsuccessful application submission/request.
Pended "Application Pended" Indicates the application is under review for approval.
Approved "Application Approved" Indicates a successful application and a successfully boarded merchant.
Declined "Merchant is declined" Indicates the application was rejected upon review, or was withdrawn by the merchant.
Closed "Closed By Merchant" Indicates that the merchant account has been closed by the merchant.
Closed "Closed By Fortis" Indicates that the merchant account has been closed by the EpicPay Gateway Team at Fortis.
Closed "Closed By Risk" Indicates that the merchant account has been closed by the Fortis Risk department.

Appendix 12 - Preferred Language


Language Code Description
en-US English
fr-CA French Canadian

Boarding API Version History


Version Revision Date Description
2.1.0 3/28/2022 Added new fields to Boarding Request Variables and the Extended Merchant Approval Webhook Object: "cc_average_ticket", "cc_monthly_volume", "ec_average_ticket", and "ec_monthly_volume". These fields replace the legacy range fields formerly used for each, and should contain integers representing a dollar amount.
2.0.2 3/16/2021 Updated BaseURL to https://board-api.epicpay.com/v1/.
2.0.1 1/17/2020 Added the Merchant Closed Webhook Object under the Webhooks section and to the webhook tester. This is the same as Declined, but returns a different "response_code" if the merchant account is closed.
1.6.1 11/27/2019 Added the Merchant Declined Webhook Object under the Webhooks section.
1.5.2 11/13/2019 Added the Using the MPA iframe section. Added new webhook payloads for the merchant application status under Webhooks. Updated the webhook tester to use the new payloads.
1.4.1 10/30/2019 Updated "response_code" and "reason_code" for boarding and webhook responses.
1.3.4 9/05/2019 Added custom field values to the Boarding Webhook Tester.
1.3.3 8/28/2019 Clarified requirements for "business_type" and "business_category" on the boarding request.
1.3.2 6/28/2019 Clarified requirements in Board a Merchant regarding "business_category" and "business_type". Added a Webhooks section to Merchant Boarding.
1.3.0 12/26/2018 Upgrade to the Authentication Process (Api Key ID / Password)