Help us help small businesses. Become a small business champion. Learn more

eCommerce, POS, and mobile

Gravity’s latest payment processing solutions are built to be fast, scalable, and easy to integrate.

Emergepay is the cloud-based multi-interface integration that’s simple, fast, and works with any OS or platform—which makes it capable of being run on almost anything that can access the internet.

  • 24/7 user support
  • Full-service integration
  • Dedicated relationship manager

Integrate directly with cloud-based devices

Castle MP200 | Vega 3000 | Vega 3000 Mobile | Clover Flex (Coming soon)

Enjoy all of these features out of the box…

Accept credit cards

Accept debit cards with PIN

ACH payments

Save card support

Recurring billing from saved card token

PCI compliance and data security

Apple Pay and Google Pay (Coming soon)

Signature capture (Coming soon)

If a cloud platform is not right for you… Our core solution, EI Server, is a battle-tested strong arm for developers big & small and integrates with most hardware solutions.

Why choose Gravity as your strategic development partner?

Because we’re a privately held company, our focus is always going to be on creating long-term relationships—not on squeezing our partners in order to maximize our quarterly earnings.

Developer making software integrations

We're on your side

  • Expert 24/7 human support. No robots
  • Devoted industry consultants who solve your clients’ unique challenges
  • Ongoing business-education opportunities

Know what you're paying for

  • Total visibility into payments
  • Never any hidden fees or nasty surprises
  • Non-commissioned sales reps

Designed for independent businesses

  • Services to grow businesses
  • State-of-the-art processing technology
  • Price parity on processing and POS integrations

Secure and simple—emergepay API

Our developers are constantly looking for–and creating–great API solutions.

The cloud-based emergepay API is simple to use and available in common languages like JavaScript, TypeScript, PHP, and C#. emergepay makes it simple to add a payment modal, payment window, or a set of fields embedded into your application or site.

//transactionType: "CreditSale"
//install the npm modules: 'npm install express cors emergepay-sdk'
var express = require("express");
var cors = require("cors");
var sdk = require("emergepay-sdk");

//Your private and secure creditials
var oid = "your_oid"; //Organization ID
var authToken = "your_authToken"; //Secretly generated specific to you org
var environmentUrl = "environment_url"; //Sandbox or Production environment
var emergepay = new sdk.emergepaySdk({ oid: oid, authToken: authToken, environmentUrl: environmentUrl });

var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());

app.post("/start-transaction", function (req, res) {
    var amount = "0.01";
    var config = {
        transactionType: sdk.TransactionType.CreditSale,
        method: "modal",
        fields: [
            {
                id: "base_amount",
                value: amount
            },
            {
                id: "external_tran_id",
                value: emergepay.getExternalTransactionId()
            }
        ]
    };
  
    emergepay.startTransaction(config)
    .then(function (transactionToken) {
        res.send({
            transactionToken: transactionToken
        });
    })
    .catch(function (err) {
        res.send(err.message);
    });
});

console.log("listening on port 5555");
app.listen(5555);
//transactionType: "CreditSale"
//install the npm modules: 'npm install express cors emergepay-sdk
import * as express from "express";
import * as cors from "cors";
import {emergepaySdk, TransactionType} from "emergepay-sdk";

//Your private and secure creditials
const oid: string = "your_oid";
const authToken: string = "your_authToken";
const environmentUrl: string = "environment_url";
const emergepay: emergepaySdk = new emergepaySdk({oid, authToken, environmentUrl});

const app: any = express();

app.use(express.json());
app.use(express.urlencoded({extended:true}));
app.use(cors());

//The client side can hit this endpoint by issuing a POST request to
//localhost:5555/start-transaction
//base_amount and external_tran_id are required in the fields array.
app.post("/start-transaction", (req, res) => {
    const amount = "0.01";
    const config: any = {
        transactionType: TransactionType.CreditSale,
        method: "hostedFields",
        fields: [
            {
                id : "base_amount",
                value : amount
            },
            {
                id : "external_tran_id",
                value : emergepay.getExternalTransactionId()
            }
        ]
    };

    emergepay.startTransaction(config)
        .then(transactionToken => {
            res.send({
                transactionToken: transactionToken
            });
        })
        .catch(err => {
            res.send(err.message);
        });
});

console.log("listening on port 5555");
app.listen(5555);
//transactionType: "CreditSale"
 array(
    'transactionType' => 'CreditSale',
    'method' => 'hostedFields',
    'fields' => array(
      array('id' => 'base_amount', 'value' => '0.01'),
      array('id' => 'external_tran_id', 'value' => GUID())
    )
  )
);

//Configure the request
$request = curl_init($url);
curl_setopt($request, CURLOPT_HEADER, false);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $authToken));
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, json_encode($body));

//Issue the request and get the response
$response = curl_exec($request);
curl_close($request);

echo $response;

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
?>
//transactionType: "CreditSale"
public async Task<object> StartTransactionAsync(StartTransactionModel config)
{
  var response = new object();

//Use your private and secure creditials
  const string OID = "your_oid";
  const string AUTH_TOKEN = "your_authToken";
  const string ENDPOINT_URL = "environment_url";

  string url = $"{ENDPOINT_URL}/orgs/{OID}/transactions/start";

  var contents = new
  {
    transactionData = new
    {
      transactionType = "CreditSale",
      method = "hostedFields",
      fields = new[]
      {
        new { id = "base_amount",           value = config.Amount },
        new { id = "external_tran_id",      value = Guid.NewGuid().ToString() },
        new { id = "billing_name",          value = config.BillingName },
        new { id = "billing_address",       value = config.BillingAddress },
        new { id = "billing_postal_code",   value = config.BillingPostalCode },
        new { id = "transaction_reference", value = config.TransactionReference },
        new { id = "cashier_id",            value = config.CashierId }
      }
    }
  };

  try
  {
    using (var client = new HttpClient())
    {
      var transactionJson = JsonConvert.SerializeObject(contents);

      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
      request.Headers.Add("Authorization", $"Bearer {AUTH_TOKEN}");
      request.Content = new StringContent(transactionJson, Encoding.UTF8, "application/json");

      var httpResponse = await client.SendAsync(request);
      var data = await httpResponse.Content.ReadAsStringAsync();
      response = JsonConvert.DeserializeObject(data);
    }
  }
  catch (Exception exc)
  {
    throw exc;
  }

  return response;
}

Get started now

Complete the form below...

  • This field is for validation purposes and should be left unchanged.

...or schedule a call.

Call us now at 866-701-4700 x467. Or schedule a time for one of our consultants call you.

Schedule it now
[gravityform id="37" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper' id='gform_wrapper_37' ><div id='gf_37' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_37' id='gform_37' action='/developers/#gf_37'> <div class='gform_body'><ul id='gform_fields_37' class='gform_fields top_label form_sublabel_below description_below'><li id='field_37_1' class='gfield gf_left_half gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible' ><label class='gfield_label' for='input_37_1' >First Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_1' id='input_37_1' type='text' value='' class='medium' placeholder='First Name*' aria-required="true" aria-invalid="false" /></div></li><li id='field_37_2' class='gfield gf_right_half gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible' ><label class='gfield_label' for='input_37_2' >Last Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_2' id='input_37_2' type='text' value='' class='medium' placeholder='Last Name*' aria-required="true" aria-invalid="false" /></div></li><li id='field_37_3' class='gfield gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible' ><label class='gfield_label' for='input_37_3' >Email<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_3' id='input_37_3' type='email' value='' class='medium' placeholder='Email*' aria-required="true" aria-invalid="false" /> </div></li><li id='field_37_9' class='gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible' ><label class='gfield_label' for='input_37_9' >Phone</label><div class='ginput_container ginput_container_phone'><input name='input_9' id='input_37_9' type='tel' value='' class='medium' placeholder='Phone Number' aria-invalid="false" /></div></li><li id='field_37_4' class='gfield gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible' ><label class='gfield_label' for='input_37_4' >Business Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_37_4' type='text' value='' class='medium' placeholder='Business Name*' aria-required="true" aria-invalid="false" /></div></li><li id='field_37_7' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_7' id='input_37_7' type='hidden' class='gform_hidden' aria-invalid="false" value='Gravity Website' /></li><li id='field_37_8' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_8' id='input_37_8' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_37_13' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_13' id='input_37_13' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_37_12' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_12' id='input_37_12' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_37_11' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_11' id='input_37_11' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_37_10' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_10' id='input_37_10' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></li><li id='field_37_14' class='gfield mixpanel-id field_sublabel_below field_description_below gfield_visibility_hidden' ><label class='gfield_label' for='input_37_14' >Mixpanel ID</label><div class='ginput_container ginput_container_text'><input name='input_14' id='input_37_14' type='text' value='' class='medium' aria-invalid="false" /></div></li><li id='field_37_15' class='gfield gf-post-slug field_sublabel_below field_description_below gfield_visibility_hidden' ><label class='gfield_label' for='input_37_15' >Post Slug (js)</label><div class='ginput_container ginput_container_text'><input name='input_15' id='input_37_15' type='text' value='' class='medium' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_37' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_37"]){return false;} if( !jQuery("#gform_37")[0].checkValidity || jQuery("#gform_37")[0].checkValidity()){window["gf_submitting_37"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_37"]){return false;} if( !jQuery("#gform_37")[0].checkValidity || jQuery("#gform_37")[0].checkValidity()){window["gf_submitting_37"]=true;} jQuery("#gform_37").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=37&amp;title=&amp;description=&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_37' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='37' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_37' value='WyJbXSIsIjFkZWJiYTQzOTc0NWE5NmY1ODc3NTgwMWVlMTJhNGM1Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_37' id='gform_target_page_number_37' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_37' id='gform_source_page_number_37' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_37' id='gform_ajax_frame_37' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 37, 'https://gravitypayments.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery('#gform_ajax_frame_37').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_37');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_37').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_37').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_37').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_37').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_37').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_37').val();gformInitSpinner( 37, 'https://gravitypayments.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery(document).trigger('gform_page_loaded', [37, current_page]);window['gf_submitting_37'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_37').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_37').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [37]);window['gf_submitting_37'] = false;}, 50);}else{jQuery('#gform_37').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [37, current_page]);} );} );</script><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 37) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }jQuery('#input_37_9').mask('(999) 999-9999').bind('keypress', function(e){if(e.which == 13){jQuery(this).blur();} } );} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [37, 1]) } ); </script>