-->

Introduction

Zift provides a Web Services API which is called via method POST over HTTPS. Requests should contain the API Operation, Authentication Information, and related information specific to the API Operation being performed.

API Endpoints

When starting your integration we recommended that you use our sandbox environment. Once you are satisfied with your integration you can connect to our production system. Below are the API endpoints for our sandbox and production.

API Processing Endpoints:

  • Production: https://secure.zift.io/gates/xurl?
  • Sandbox: https://sandbox-secure.zift.io/gates/xurl?

Terminal Processing Endpoints:

  • Production: https://portal.zift.io/terminals/xurl?
  • Sandbox: https://sandbox-portal.zift.io/terminals/xurl?

Merchant Creation API Endpoints:

  • Production: https://portal.zift.io/gates/onboarding?
  • Sandbox: https://sandbox-portal.zift.io/gates/onboarding?

API Access

If you don't have Zift sandbox API credentials please submit a request to our team. We will create an account for you so you can start working with our API.


Request Sandbox Account
 

Zift API Postman Collection

Transactions

All of our processing API requests are built off of the requestType parameter. For payment transactions the possible values for requestType are sale, sale-auth, credit, refund and void. Additional parameters in the request are used to designate ACH vs. Credit Card transactions and redirection to our secure hosted payment pages (HPP).

The following components make up the basic API request for all sale transactions:

  • API Operation
  • Authentication Information
  • Merchant Context
  • Payment Details
  • Customer Information
  • External Identifiers

Charge (sale)

The table below lists the parameters to build a basic sale request to authorize and capture a credit card or ACH payment.

Authentication Fields
Name Value or Format Description
requestTypesaleRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
back to top
Account Fields
Name Value or Format Description
accountType EnumRequired
Specifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
accountNumberString (20)Conditional
Credit card or bank account number.

accountDataString (500)Conditional
Track/EMV data of a payment card.

accountAccessoryString (10)Required
Card expiration date or bank routing number. This field is required even if it is used with a token.
cscString(4)Card security code (three digits on the back of a payment card).
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Required
Name of the card holder or bank account owner.
holderBirthdateDate (yyyyMMdd)Birthdate of a payment card or bank account holder.
back to top
Transaction Fields
Name Value or Format Description
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionIndustryTypeEnumRequired
Indicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
transactionCategoryTypeEnumRepresents the category type of the transaction. Can be used to represent Bill payment, Recurring, Installment or Healthcare based transactions.
transactionModeTypeP or NMode of the transaction.

P for card present.
N for card not present.

memoString (255)Description of the transaction. Returned in the response.
isPartialAuthorizationBoolean; 0 - disabled, 1 - enabled; default = 0Indicates whether partial authorization is enabled. See Partial Authorization for more information.
feeAmountIntegerContains the amount of the transaction a software system or platform charges as a service fee or processing fee that will be withheld from remittance.

back to top
Billing Address Fields
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
countryCodeString (2)The country of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
back to top
Cross-Reference Fields
Name Value or Format Description
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

transactionInternalCodeString (60)A unique identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the transactionCode. See the cross reference notes for more details.
customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
customerAccountInternalCodeString (60)A unique identifier of a customer within an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the customerAccountCode. See the cross reference notes for more details.
itemCodeString (60)Identifier of a purchased product or service within your system or platform.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
back to top
Extended Logic
Name Value or Format Description
sequenceNumberIntegerSequential number of the payment (e.g. 2nd of 12 payments). Used for installment and recurring payments only
transactionCategory= I or R.
sequenceCountIntegerTotal number of payments in an installment sequence (e.g. 12 payments). Used for installment payments only.
transactionCategory= I
settlementDelayIntegerPeriod for which transaction settlement is delayed.
settlementGroupCodeString(60)Identifier of a settlement group.
subscriptionCodeLongCode of a subscription to a processing bank.
formatEnumDefines what resource is going to be received within an offline callback. Click for a list of possible values and their descriptions.
itemsListList of items included in the transaction. The items parameter follows our subrecord format explained here.

For Level II transactions use this list of subrecord items

back to top
Level II Transaction Fields
Name Value or Format Description
orderCodeString(17)Unique identifier of an order within a submitter's system.
shippingAmountIntegerAmount of shipping and handling fees charged for an order delivery.
dutyAmountIntegerAmount of a duty (import tax) charged on the order/transaction.
taxAmountIntegerTax amount charged on the order/transaction. Included in the total amount. See integration notes for more information.
taxRateIntegerTax rate charged on the order/transaction. Implied 2 decimal places (e.g. 150 = 1.5%; 1000 = 10%)
taxIndicatorEnumDefines how taxes are handled for the transaction.
customerAccountTaxIdString(13)Tax ID of a customer associated with the order/transaction.
back to top
Level III Transaction Fields
Name Value or Format Description
shippingOriginZipCodeString(10)ZIP-code associated with an address from which an order is shipped.
discountAmountIntegerDiscount amount applied to the order/transaction.
taxInvoiceCodeString(15)Tax invoice number associated with the order/transaction.
localTaxAmountIntegerAmount of a local (city, country, etc.) tax charged on the order/transaction.
localTaxIndicatorEnumDefines how a local tax is handled.
nationalTaxAmountIntegerAmount of a national/federal tax charged on the order/transaction.
nationalTaxIndicatorEnumDefines how a national/federal tax is handled.
orderDateDateDate of an order placement.
commodityCodeString(4)Acquirer designated standardized identifier of a group of items associated with the order/transaction.
itemsListList of items included in the transaction. The items parameter follows our subrecord format explained here.

For Level II transactions use this list of subrecord items

back to top
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=sale"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "amount=5000"  \
	-d "accountType=R"  \
	-d "transactionIndustryType=RE"  \
	-d "holderType=P"  \
	-d "holderName=John+Smith"  \
	-d "accountNumber=5499740000000057"  \
	-d "accountAccessory=0422"  \
	-d "street=12+Main+St"  \
	-d "city=Denver"  \
	-d "state=CO"  \
	-d "zipCode=30301"  \
	-d "customerAccountCode=0000000001"  \
	-d "transactionCode=0000000001"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=sale"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&amount=5000"
			+ "&accountType=R"
			+ "&transactionIndustryType=RE"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'sale',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'amount'=>'5000',
			'accountType'=>'R',
			'transactionIndustryType'=>'RE',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=sale"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&amount=5000"
			+ "&accountType=R"
			+ "&transactionIndustryType=RE"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=sale"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&amount=5000"
			 postData =  postData + "&accountType=R"
			 postData =  postData + "&transactionIndustryType=RE"
			 postData =  postData + "&holderType=P"
			 postData =  postData + "&holderName=John+Smith"
			 postData =  postData + "&accountNumber=5499740000000057"
			 postData =  postData + "&accountAccessory=0422"
			 postData =  postData + "&street=12+Main+St"
			 postData =  postData + "&city=Denver"
			 postData =  postData + "&state=CO"
			 postData =  postData + "&zipCode=30301"
			 postData =  postData + "&customerAccountCode=0000000001"
			 postData =  postData + "&transactionCode=0000000001"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'sale',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'amount'=>'5000',
			'accountType'=>'R',
			'transactionIndustryType'=>'RE',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'sale',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'amount':'5000',
			'accountType':'R',
			'transactionIndustryType':'RE',
			'holderType':'P',
			'holderName':'John+Smith',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'sale',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			amount=>'5000',
			accountType=>'R',
			transactionIndustryType=>'RE',
			holderType=>'P',
			holderName=>'John+Smith',
			accountNumber=>'5499740000000057',
			accountAccessory=>'0422',
			street=>'12+Main+St',
			city=>'Denver',
			state=>'CO',
			zipCode=>'30301',
			customerAccountCode=>'0000000001',
			transactionCode=>'0000000001'


      ],
    );
    print $req->content;
                  
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'sale',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'amount':'5000',
			'accountType':'R',
			'transactionIndustryType':'RE',
			'holderType':'P',
			'holderName':'John+Smith',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                  


Endpoint: POST: https://sandbox-secure.zift.io/gates/xurl
Headers: Content-Type=application/x-www-form-urlencoded
Body: x-www-form-urlencoded requestType:sale userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} amount:100 accountType:R transactionIndustryType:RE accountNumber:4111111111111111 accountAccessory:0422 csc:123 holderName:Test Transaction street:41 E 300 S city:Spanish Fork state:UT zipCode:84663 countryCode:US phone:8774561382 email:[email protected]

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeEnumIndicates the type of response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
holderNameString (150)Name of the card holder or bank account owner.
balanceInteger (in cents)For debit and gift cards only. Balance remaining on a card used for the transaction.
currencyCodeString (3)Indicates currency of transaction. If present in the request it will be returned in the response.
originalAmountIntegerAmount provided in the request. Differs from amount value if partial authorization has occurred.
cashbackAmountInteger (in cents)cashbackAmount used in the transaction.
feeAmountIntegerContains the amount of the transaction a software system or platform charges as a service fee or processing fee that will be withheld from remittance.

tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
transactionDateDate (yyyyMMdd)Date of the transaction.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Returned in the original transaction response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
requestIdString (40)Identifier of the API request.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
cycleCodeLongIdentifier of a retail cycle associated with the transaction.
warningCodeString (1)Code warning that non-critical issue with the transaction are present.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
providerAvsResponseCodeString (5)AVS response code returned by an underlying payment network or acquirer. Supports legacy systems.
cscResponseCode String (1)CSC response code if CSC has been provided.
providerCscResponseCodeString (3)CSC response code returned by the payment and acquiring networks. Supports legacy systems.
itemsList List of items included in the transaction. ex:

(code=001;itemId=I123;splits=(accountId=20011;trans
actionId=S10001)(accountId=20012;transacti
onId=S10002))

Authorize a Transaction

The table below lists the parameters to authorize a customers card. The authorization request authorizes a specified amount of funds on a cardholders account that can be captured and processed at a later date. If a capture operation is never performed the sale-auth transaction will automatically be voided within the system. Authorizations typically last for 7 days but can vary depending on the cardholders issuing bank.

Authentication Fields
Name Value or Format Description
requestTypesale-authRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
back to top
Authorize Account Fields
Name Value or Format Description
accountType EnumRequired
Specifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
accountNumberString (20)Conditional
Credit card or bank account number.

accountDataString (500)Conditional
Track/EMV data of a payment card.

accountAccessoryString (10)Required
Card expiration date or bank routing number. This field is required even if it is used with a token.
cscString(4)Card security code (three digits on the back of a payment card).
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Required
Name of the card holder or bank account owner.
holderBirthdateDate (yyyyMMdd)Birthdate of a payment card or bank account holder.
back to top
Authorize Transaction Fields
Name Value or Format Description
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionIndustryTypeEnumRequired
Indicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
transactionCategoryTypeEnumRepresents the category type of the transaction. Can be used to represent Bill payment, Recurring, Installment or Healthcare based transactions.
transactionModeTypeP or NMode of the transaction.

P for card present.
N for card not present.

memoString (255)Description of the transaction. Returned in the response.
isPartialAuthorizationBoolean; 0 - disabled, 1 - enabled; default = 0Indicates whether partial authorization is enabled. See Partial Authorization for more information.
feeAmountIntegerContains the amount of the transaction a software system or platform charges as a service fee or processing fee that will be withheld from remittance.

back to top
Authorize Customer Billing Fields
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
countryCodeString (2)The country of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
back to top
Authorize Cross-Reference Fields
Name Value or Format Description
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

transactionInternalCodeString (60)A unique identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the transactionCode. See the cross reference notes for more details.
customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
customerAccountInternalCodeString (60)A unique identifier of a customer within an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the customerAccountCode. See the cross reference notes for more details.
itemCodeString (60)Identifier of a purchased product or service within your system or platform.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
back to top
Authorize Extended Logic
Name Value or Format Description
sequenceNumberIntegerSequential number of the payment (e.g. 2nd of 12 payments). Used for installment and recurring payments only
transactionCategory= I or R.
sequenceCountIntegerTotal number of payments in an installment sequence (e.g. 12 payments). Used for installment payments only.
transactionCategory= I
settlementDelayIntegerPeriod for which transaction settlement is delayed.
settlementGroupCodeString(60)Identifier of a settlement group.
subscriptionCodeLongCode of a subscription to a processing bank.
formatEnumDefines what resource is going to be received within an offline callback. Click for a list of possible values and their descriptions.
itemsListList of items included in the transaction. The items parameter follows our subrecord format explained here.

For Level II transactions use this list of subrecord items

back to top
Authorize Level II Parameters (credit card only)
Name Value or Format Description
orderCodeString(17)Unique identifier of an order within a submitter's system.
shippingAmountIntegerAmount of shipping and handling fees charged for an order delivery.
dutyAmountIntegerAmount of a duty (import tax) charged on the order/transaction.
taxAmountIntegerTax amount charged on the order/transaction. Included in the total amount. See integration notes for more information.
taxRateIntegerTax rate charged on the order/transaction. Implied 2 decimal places (e.g. 150 = 1.5%; 1000 = 10%)
taxIndicatorEnumDefines how taxes are handled for the transaction.
customerAccountTaxIdString(13)Tax ID of a customer associated with the order/transaction.
back to top
Authorize Level III Parameters (credit card only)
Name Value or Format Description
shippingOriginZipCodeString(10)ZIP-code associated with an address from which an order is shipped.
discountAmountIntegerDiscount amount applied to the order/transaction.
taxInvoiceCodeString(15)Tax invoice number associated with the order/transaction.
localTaxAmountIntegerAmount of a local (city, country, etc.) tax charged on the order/transaction.
localTaxIndicatorEnumDefines how a local tax is handled.
nationalTaxAmountIntegerAmount of a national/federal tax charged on the order/transaction.
nationalTaxIndicatorEnumDefines how a national/federal tax is handled.
orderDateDateDate of an order placement.
commodityCodeString(4)Acquirer designated standardized identifier of a group of items associated with the order/transaction.
itemsListList of items included in the transaction. The items parameter follows our subrecord format explained here.

For Level II transactions use this list of subrecord items

back to top
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=sale-auth"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "transactionIndustryType=RE"  \
	-d "transactionCode=0000000001"  \
	-d "amount=5000"  \
	-d "holderType=P"  \
	-d "holderName=John+Smith"  \
	-d "street=12+Main+St"  \
	-d "city=Denver"  \
	-d "state=CO"  \
	-d "zipCode=30301"  \
	-d "accountType=R"  \
	-d "accountNumber=5499740000000057"  \
	-d "accountAccessory=0422"  \
	-d "customerAccountCode=0000000001"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=sale-auth"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&transactionCode=0000000001"
			+ "&amount=5000"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&accountType=R"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&customerAccountCode=0000000001"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'sale-auth',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'transactionCode'=>'0000000001',
			'amount'=>'5000',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'accountType'=>'R',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'customerAccountCode'=>'0000000001',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=sale-auth"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&transactionCode=0000000001"
			+ "&amount=5000"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&accountType=R"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&customerAccountCode=0000000001"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=sale-auth"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&transactionIndustryType=RE"
			 postData =  postData + "&transactionCode=0000000001"
			 postData =  postData + "&amount=5000"
			 postData =  postData + "&holderType=P"
			 postData =  postData + "&holderName=John+Smith"
			 postData =  postData + "&street=12+Main+St"
			 postData =  postData + "&city=Denver"
			 postData =  postData + "&state=CO"
			 postData =  postData + "&zipCode=30301"
			 postData =  postData + "&accountType=R"
			 postData =  postData + "&accountNumber=5499740000000057"
			 postData =  postData + "&accountAccessory=0422"
			 postData =  postData + "&customerAccountCode=0000000001"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'sale-auth',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'transactionCode'=>'0000000001',
			'amount'=>'5000',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'accountType'=>'R',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'customerAccountCode'=>'0000000001',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'sale-auth',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionIndustryType':'RE',
			'transactionCode':'0000000001',
			'amount':'5000',
			'holderType':'P',
			'holderName':'John+Smith',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'accountType':'R',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'customerAccountCode':'0000000001'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'sale-auth',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			transactionIndustryType=>'RE',
			transactionCode=>'0000000001',
			amount=>'5000',
			holderType=>'P',
			holderName=>'John+Smith',
			street=>'12+Main+St',
			city=>'Denver',
			state=>'CO',
			zipCode=>'30301',
			accountType=>'R',
			accountNumber=>'5499740000000057',
			accountAccessory=>'0422',
			customerAccountCode=>'0000000001'


      ],
    );
    print $req->content;
                  
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'sale-auth',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionIndustryType':'RE',
			'transactionCode':'0000000001',
			'amount':'5000',
			'holderType':'P',
			'holderName':'John+Smith',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'accountType':'R',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'customerAccountCode':'0000000001'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                  

Endpoint: POST:https://sandbox-secure.zift.io/gates/xurl
Headers: Content-Type=application/x-www-form-urlencoded
Body: x-www-form-urlencoded requestType:sale-auth userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} amount:100 accountType:C transactionIndustryType:RE accountNumber:1234567 accountAccessory:324377516 csc:123 holderName:Test Transaction street:41 E 300 S city:Spanish Fork state:UT zipCode:84663 countryCode:US phone:8774561382 email:[email protected]

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypesale-authIndicates the type of response.
accountIdString (12)Indicates the accountId
accountType EnumIndicates the accountType used in the transaction. If present in the request it will be returned in the response.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
holderNameString (150)Name of the card holder or bank account owner.
tokenString (40)Token associated with the payment card or bank account. Can be used to process future transactions.
balanceInteger (in cents)For debit and gift cards only. Balance remaining on a card used for the transaction.
currencyCodeString (3)Indicates currency of transaction. If present in the request it will be returned in the response.
amountInteger (in cents)Specifies the total authorized amount. Always returned in the response.
originalAmountIntegerAmount provided in the request. Differs from amount value if partial authorization has occurred.
cashbackAmountInteger (in cents)cashbackAmount used in the transaction.
taxAmountInteger (in cents) Tax amount charged on the order/transaction. Included in the total amount. Optional in the request, not always present in the response.
tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
transactionDateDate (yyyyMMdd)Date of the transaction.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
requestIdString (40)Identifier of the API request.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
splitsListList of split payment scenarios included in the transaction. ex:

(accountId=20011;transactionId=S10001)
(accountId=20012;transactionId=S10002)
(accountId=20013;transactionId=S10003)
itemsListList of items included in the transaction.
warningCodeString (1)Code warning that non-critical issue with the transaction are present.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
providerAvsResponseCodeString (5)AVS response code returned by an underlying payment network or acquirer. Supports legacy systems.
cscResponseCode String (1)CSC response code if CSC has been provided.

Capture an Authorized Amount

The table below lists the parameters to capture funds that have previously been authorized on a customers card. If a capture operation is never performed on a previously authorized card the sale-auth transaction will automatically be voided within the system. Authorizations typically last for 7 days but can vary depending on the cardholders issuing bank.

Authentication Fields
Name Value or Format Description
requestTypecaptureRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
back to top
Capture Transaction Fields
Name Value or Format Description
transactionIdLongRequired
Unique identifier of the transaction within Zift. Returned in the original transaction response.
amountInteger (in cents)Amount of the transaction that is going to be captured. By default it is equal to the total amount of the original transaction but can be set to a lower value for partial capture.

transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

settlementDelayIntegerPeriod for which transaction settlement is delayed.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
tipAmountInteger (in cents)For restaurant industry only. Amount of tips.

tipRecipientCodeString(15)Unique identifier of a person within your organization that is going to receive tips.
back to top
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=capture"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "transactionId=123456"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=capture"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionId=123456"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'capture',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionId'=>'123456',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=capture"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionId=123456"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=capture"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&transactionId=123456"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'capture',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionId'=>'123456',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'capture',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionId':'123456'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'capture',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			transactionId=>'123456'


      ],
    );
    print $req->content;
                  
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'capture',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionId':'123456'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                  

Endpoint: POST: https://sandbox-secure.zift.io/gates/xurl?
Headers: Content-Type=application/x-www-form-urlencoded
Body: x-www-form-urlencoded requestType:capture userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} transactionId:{{transactionId}} amount:100

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecaptureIndicates the type of response.
accountIdString (12)Indicates the accountId
amountInteger (in cents)Specifies the total authorized amount of the transaction.
remainingAmountInteger (in cents)Remaining amount of the original transaction that has not been voided or refunded back. The value of 0 indicates that a full void or refund has been issued on the transaction.
taxAmountInteger (in cents) Tax amount charged on the order/transaction. Included in the total amount. Optional in the request, not always present in the response.
tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString(60)originalTransactionCode used in the transaction. If present in the request it will be returned in the response.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
terminalMessageString (100)Internal field for exchange of control messages between TMS system and the terminal. See integration notes for more information.

Refund or Void a Transaction

If you have a transaction that needs to be reversed but can no longer be voided because it has been settled you would use the refund request. If you have a transaction that needs to be reversed but has not settled use the void request. Below is an example of a basic void and refund request.

Name Value or Format Description
requestTypevoid or refundRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
transactionIdLongRequired
Unique identifier of the transaction within Zift. Always present in the response.
amountInteger (in cents)For partial voids/refunds only. Amount of the transaction that is going to be voided or refunded.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
voidReasonCodeEnum Defines a reason why the void is issued. Click here for possible values.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=refund"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "transactionId=123456"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=refund"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionId=123456"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'refund',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionId'=>'123456',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=refund"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionId=123456"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=refund"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&transactionId=123456"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'refund',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionId'=>'123456',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'refund',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionId':'123456'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'refund',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			transactionId=>'123456'


      ],
    );
    print $req->content;
                  
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'refund',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionId':'123456'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                  

Endpoint: POST:https://sandbox-secure.zift.io/gates/xurl?
Headers: Content-Type=application/x-www-form-urlencoded Body: x-www-form-urlencoded requestType:void or refund userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} transactionId:{{transactionId}}

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypevoid or refundIndicates the type of response.
accountIdString (12)Indicates the accountId
remainingAmountInteger (in cents)Remaining amount of the original transaction that has not been voided or refunded back. The value of 0 indicates that a full void or refund has been issued on the transaction.
voidAmountInteger (in cents)Amount of void associated with the transaction.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information

Credit

Use this operation to process an ACH credit transaction and send money to a client, customer or vendors bank account.

Authentication Fields
Name Value or Format Description
requestTypecreditRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
back to top
Credit Account Information
Name Value or Format Description
accountType C or SSpecifies the payment method to be used with this transaction, For ACH transactions you can indicate a checking account (C) or savings account (S).
accountNumberString (20)Required
Bank account number.
accountAccessoryString (10)Required
Bank routing number.
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Required
Name of the card holder or bank account owner.
holderBirthdateDate (yyyyMMdd)Birthdate of a payment card or bank account holder.
back to top
Credit Transaction Fields
Name Value or Format Description
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionIndustryTypeEnumRequired
Indicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
transactionCategoryTypeEnumRepresents the category type of the transaction. Can be used to represent Bill payment, Recurring, Installment or Healthcare based transactions.
transactionModeTypeP or NMode of the transaction.

P for card present.
N for card not present.

memoString (255)Description of the transaction. Returned in the response.
isPartialAuthorizationBoolean; 0 - disabled, 1 - enabled; default = 0Indicates whether partial authorization is enabled. See Partial Authorization for more information.
feeAmountIntegerContains the amount of the transaction a software system or platform charges as a service fee or processing fee that will be withheld from remittance.

back to top
Credit Billing Address Fields
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
countryCodeString (2)The country of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
back to top
Credit Cross-References Fields
Name Value or Format Description
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

transactionInternalCodeString (60)A unique identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the transactionCode. See the cross reference notes for more details.
customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
customerAccountInternalCodeString (60)A unique identifier of a customer within an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the customerAccountCode. See the cross reference notes for more details.
itemCodeString (60)Identifier of a purchased product or service within your system or platform.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
back to top
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=credit"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "transactionIndustryType=RE"  \
	-d "amount=5000"  \
	-d "accountType=C"  \
	-d "holderType=P"  \
	-d "holderName=John+Smith"  \
	-d "accountNumber=1234567"  \
	-d "accountAccessory=324377516"  \
	-d "street=12+Main+St"  \
	-d "city=Denver"  \
	-d "state=CO"  \
	-d "zipCode=30301"  \
	-d "customerAccountCode=0000000001"  \
	-d "transactionCode=0000000001"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=credit"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&amount=5000"
			+ "&accountType=C"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&accountNumber=1234567"
			+ "&accountAccessory=324377516"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'credit',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'amount'=>'5000',
			'accountType'=>'C',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'accountNumber'=>'1234567',
			'accountAccessory'=>'324377516',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=credit"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&amount=5000"
			+ "&accountType=C"
			+ "&holderType=P"
			+ "&holderName=John+Smith"
			+ "&accountNumber=1234567"
			+ "&accountAccessory=324377516"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=credit"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&transactionIndustryType=RE"
			 postData =  postData + "&amount=5000"
			 postData =  postData + "&accountType=C"
			 postData =  postData + "&holderType=P"
			 postData =  postData + "&holderName=John+Smith"
			 postData =  postData + "&accountNumber=1234567"
			 postData =  postData + "&accountAccessory=324377516"
			 postData =  postData + "&street=12+Main+St"
			 postData =  postData + "&city=Denver"
			 postData =  postData + "&state=CO"
			 postData =  postData + "&zipCode=30301"
			 postData =  postData + "&customerAccountCode=0000000001"
			 postData =  postData + "&transactionCode=0000000001"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'credit',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'amount'=>'5000',
			'accountType'=>'C',
			'holderType'=>'P',
			'holderName'=>'John+Smith',
			'accountNumber'=>'1234567',
			'accountAccessory'=>'324377516',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'credit',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionIndustryType':'RE',
			'amount':'5000',
			'accountType':'C',
			'holderType':'P',
			'holderName':'John+Smith',
			'accountNumber':'1234567',
			'accountAccessory':'324377516',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'credit',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			transactionIndustryType=>'RE',
			amount=>'5000',
			accountType=>'C',
			holderType=>'P',
			holderName=>'John+Smith',
			accountNumber=>'1234567',
			accountAccessory=>'324377516',
			street=>'12+Main+St',
			city=>'Denver',
			state=>'CO',
			zipCode=>'30301',
			customerAccountCode=>'0000000001',
			transactionCode=>'0000000001'


      ],
    );
    print $req->content;
                  
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'credit',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionIndustryType':'RE',
			'amount':'5000',
			'accountType':'C',
			'holderType':'P',
			'holderName':'John+Smith',
			'accountNumber':'1234567',
			'accountAccessory':'324377516',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                  

Endpoint: POST:https://sandbox-secure.zift.io/gates/xurl
Headers: Content-Type=application/x-www-form-urlencoded
Body: x-www-form-urlencoded requestType:credit userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} amount:100 accountType:R transactionIndustryType:RE accountNumber:4111111111111111 accountAccessory:0422 csc:123 holderName:Test Transaction street:41 E 300 S city:Spanish Fork state:UT zipCode:84663 countryCode:US phone:8774561382 email:[email protected]

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecreditIndicates the type of response.
accountIdString (12)Indicates the accountId
accountType EnumIndicates the accountType used in the transaction. If present in the request it will be returned in the response.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
accountAccessoryString (10)Card expiration date or bank routing number.
holderNameString (150)Name of the card holder or bank account owner.
tokenString (40)Token associated with the payment card or bank account. Can be used to process future transactions.
balanceInteger (in cents)For debit and gift cards only. Balance remaining on a card used for the transaction.
currencyCodeString (3)Indicates currency of transaction. If present in the request it will be returned in the response.
amountInteger (in cents)Specifies the total authorized amount of the transaction.
originalAmountIntegerAmount provided in the request. Differs from amount value if partial authorization has occurred.
cashbackAmountInteger (in cents)cashbackAmount used in the transaction.
taxAmountInteger (in cents) Tax amount charged on the order/transaction. Included in the total amount. Optional in the request, not always present in the response.
tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
transactionDateDate (yyyyMMdd)Date of the transaction.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
requestIdString (40)Identifier of the API request.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
splitsListList of split payment scenarios included in the transaction. ex:

(accountId=20011;transactionId=S10001)
(accountId=20012;transactionId=S10002)
(accountId=20013;transactionId=S10003)
itemsListList of items included in the transaction.
warningCodeString (1)Code warning that non-critical issue with the transaction are present.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
providerAvsResponseCodeString (5)AVS response code returned by an underlying payment network or acquirer. Supports legacy systems.
cscResponseCode String (1)CSC response code if CSC has been provided.
providerCscResponseCodeString (3)CSC response code returned by the payment and acquiring networks. Supports legacy systems.

Account Verification

An operation used to verify that a credit card, debit card or ACH Account is active and perform AVS verification without actual authorization.

You can also use this operation to verify an account number is valid and has been entered correctly which can help avoid unnecessary and costly ACH returns.

Authentication Fields
Name Value or Format Description
requestTypeaccount-verificationRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
back to top
Account Fields
Name Value or Format Description
accountTypeEnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions. Note: This field is only used when verifying an ACH account. It is not used when verifying a debit/credit card.
accountNumberString (20)Conditional
Credit card or bank account number.

accountDataString (500)Conditional
Track/EMV data of a payment card.

accountAccessoryString (10)Conditional
Card expiration date or bank routing number. This field is required even if it is used with a token.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Conditional
Name of the card holder or bank account owner.
cscString(4)Card security code (three digits on the back of a payment card).
back to top
Transaction Fields
Name Value or Format Description
tokenString (40)Conditional
The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
transactionIndustryTypeEnumRequired
Indicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
transactionDateDate (yyyyMMdd)Date of the transaction.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
back to top
Billing Address Fields
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
countryCodeString (2)The country of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
back to top
Account Verification Conditions
If token is used.

Field Usage
accountNumber Not used
accountAccessory Required
holderName Required
token Required
csc Optional

//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=account-verification"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "transactionIndustryType=RE"  \
	-d "accountAccessory=0422"  \
	-d "accountNumber=5499740000000057"  \
	-d "accountType=R"  \
	-d "transactionCode=0000000001"  \
	-d "customerAccountCode=0000000001"  \
	-d "holderName=John+Smith"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=account-verification"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&accountAccessory=0422"
			+ "&accountNumber=5499740000000057"
			+ "&accountType=R"
			+ "&transactionCode=0000000001"
			+ "&customerAccountCode=0000000001"
			+ "&holderName=John+Smith"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                  
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'account-verification',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'accountAccessory'=>'0422',
			'accountNumber'=>'5499740000000057',
			'accountType'=>'R',
			'transactionCode'=>'0000000001',
			'customerAccountCode'=>'0000000001',
			'holderName'=>'John+Smith',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                  
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=account-verification"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&transactionIndustryType=RE"
			+ "&accountAccessory=0422"
			+ "&accountNumber=5499740000000057"
			+ "&accountType=R"
			+ "&transactionCode=0000000001"
			+ "&customerAccountCode=0000000001"
			+ "&holderName=John+Smith"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                  
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=account-verification"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&transactionIndustryType=RE"
			 postData =  postData + "&accountAccessory=0422"
			 postData =  postData + "&accountNumber=5499740000000057"
			 postData =  postData + "&accountType=R"
			 postData =  postData + "&transactionCode=0000000001"
			 postData =  postData + "&customerAccountCode=0000000001"
			 postData =  postData + "&holderName=John+Smith"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                  
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'account-verification',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'transactionIndustryType'=>'RE',
			'accountAccessory'=>'0422',
			'accountNumber'=>'5499740000000057',
			'accountType'=>'R',
			'transactionCode'=>'0000000001',
			'customerAccountCode'=>'0000000001',
			'holderName'=>'John+Smith',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                  
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'account-verification',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'transactionIndustryType':'RE',
			'accountAccessory':'0422',
			'accountNumber':'5499740000000057',
			'accountType':'R',
			'transactionCode':'0000000001',
			'customerAccountCode':'0000000001',
			'holderName':'John+Smith'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                  
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'account-verification',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			transactionIndustryType=>'RE',
			accountAccessory=>'0422',
			accountNumber=>'5499740000000057',
			accountType=>'R',
			transactionCode=>'0000000001',
			customerAccountCode=>'0000000001',
			holderName=>'John+Smith'


      ],
    );
    print $req->content;
                  
##python_processing_account-verification##
                  

                    Endpoint: https://sandbox-secure.zift.io/gates/xurl?
Headers: Content-Type=application/x-www-form-urlencoded
Body: x-www-form-urlencoded requestType:account-verification userName:{{username-trans-sand}} password:{{password-trans-sand}} accountId:{{accountId-sand}} accountType:R transactionIndustryType:RE accountNumber:4111111111111111 accountAccessory:0422 csc:123 holderName:Test Transaction street:41 E 300 S city:Spanish Fork state:UT zipCode:84663 countryCode:US

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeaccount-verificationIndicates the type of response.
accountIdString (12)Indicates the accountId
transactionDateDate (yyyyMMdd)Date of the transaction.
terminalIdString (12)Terminal ID associated with the transaction.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
tokenString (40)Token associated with the payment card or bank account. Can be used to process future transactions.
accountAccessoryString (10)Card expiration date or bank routing number.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
terminalMessageString (100)Internal field for exchange of control messages between TMS system and the terminal. See integration notes for more information.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
providerAvsResponseCodeString (5)AVS response code returned by an underlying payment network or acquirer. Supports legacy systems.
cscResponseCode String (1)CSC response code if CSC has been provided.
providerCscResponseCodeString (3)CSC response code returned by the payment and acquiring networks. Supports legacy systems.

Authentication

Authentication is used to generate a temporary password for use with the proxynization API. The temporary password from from the authentication call will be used by the proxynization API to authenticate your request and return a temporary token to your payment page.

Name Value or Format Description
requestTypeauthenticationSpecifies the type of operation to be performed.
userNameString (50)Name of a user that initiates the API call.
passwordString (32)Password of a user that initiates the API call.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
contextTypeapi or
proxynization
Defines what API a temporary password will be used for.

Allowed Values
api indicates standard processing API - default
proxynization indicates proxynization API
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=authentication"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=authentication"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'authentication',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=authentication"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=authentication"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'authentication',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body##
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'authentication',
			'userName':'myUsername',
			'password':'myP%40ssword'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })##
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'authentication',
			userName=>'myUsername',
			password=>'myP%40ssword'


      ],
    );
    print $req->content;##
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'authentication',
			'userName':'myUsername',
			'password':'myP%40ssword'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)on##
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeauthenticationIndicates the type of response.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
passwordExpirationDateDate (yyyyMMddHHmmSS)The date and time this the temporary password will expire.
temporaryPasswordString (20)The system generated temporary password.

Convenience Fee

Our convenience fee logic allows you to assess surcharges and service fees. See below for details and restrictions on how to utilize this feature.

A service fee allows government and education merchants to add an additional fee to a transaction. The additional fee can be added to the total amount or processed separately as its own transaction. You can use our convenience fee logic to automatically process a second transaction to collect the fee amount for your platform and service. In this scenario you would make a convenience-fee request and we will return to you the feeAmount. You will then make a sale request and include the feeAmount returned in the previous call in the feeAmount field. The amount in the sale request should be the total combined amount. We will process two transactions, one for the sale/service amount and one for the fee amount.

A surcharge is an additional fee added to a credit card transaction intended to cover the merchant’s cost to process the transaction. Surcharging is not allowed on debit cards and is highly regulated by the card brands, federal and state governments and must be done correctly. Our convenience fee logic can be used to determine the surcharge amount or you can calculate it on your end. A surcharge is always done in one transaction and must be implemented by passing the surcharge amount in the feeAmount field in the sale request. Please contact us if you intend to implement surcharges so we can help you set it up in a manner that is compliant with the card brands, state and federal law. For more information please refer to our article about surcharging.

Name Value or Format Description
requestTypeconvenience-feeSpecifies the type of operation to be performed.
userNameString (50)Name of a user that initiates the API call.
passwordString (32)Password of a user that initiates the API call.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
accountType Type of the account. This value doesn't affect the cost of transaction processing, it is used for validation purposes only. Click here for a list of possible values and their descriptions.
accountNumberString (20)Credit card or bank account number.

accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Name of the card holder or bank account owner.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionDateDate (yyyyMMdd)Date of the transaction.
transactionIndustryTypeEnumIndicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeconvenience-feeIndicates the type of response.
accountIdString (12)Indicates the accountId
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
feeAmountIntegerAmount of service fee included in amount field.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.

Tokenization

Tokenization allows you to convert a card number or bank account number into a PCI compliant token. As a Level I PCI Compliant platform we store the actual card or bank account number giving you the ability to reference it with a token for future processing. You can use the concepts and tools described below to help reduce your exposure to sensitive data and PCI scope.

Create a Token

The tokenization request allows you to submit a card number or bank account directly to our servers for secure storage. We will return a token which can be used to reference the card or bank account for future API calls.

By default we tokenize all credit card and bank account data sent to our servers. This allows you to easily save payment methods for your customers. The tokenization request can be used as a standalone operation for tokenization only. The tokenization call is typically used to help your customers manage the payment methods (cards on file) in your system.

Name Value or Format Description
requestTypetokenizationRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
accountType EnumRequired
Specifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
accountNumberString (20)Required
Credit card or bank account number.

accountAccessoryString (10)Required
Card expiration date or bank routing number. This field is required even if it is used with a token.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
holderNameString (150)Name of the card holder or bank account owner.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

verificationModeEnumDefines how pre-tokenization verification is handled.
NN Indicates that pre-tokenization verification of the payment card or bank account is not performed.
PF Indicates that pre-tokenization verification of the payment card or bank account is performed by a processor. If verification fails, tokenization request is declined.
clientHostString (60)IP-address or a host associated with a submitter that originated the transaction.
Create a Token Billing Address Information
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
countryCodeString (2)The country of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=tokenization"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "accountType=R"  \
	-d "accountNumber=5499740000000057"  \
	-d "accountAccessory=0422"  \
	-d "transactionCode=0000000001"  \
	-d "holderName=Tony+Stark"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=tokenization"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&accountType=R"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&transactionCode=0000000001"
			+ "&holderName=Tony+Stark"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'tokenization',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'accountType'=>'R',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'transactionCode'=>'0000000001',
			'holderName'=>'Tony+Stark',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=tokenization"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&accountType=R"
			+ "&accountNumber=5499740000000057"
			+ "&accountAccessory=0422"
			+ "&transactionCode=0000000001"
			+ "&holderName=Tony+Stark"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=tokenization"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&accountType=R"
			 postData =  postData + "&accountNumber=5499740000000057"
			 postData =  postData + "&accountAccessory=0422"
			 postData =  postData + "&transactionCode=0000000001"
			 postData =  postData + "&holderName=Tony+Stark"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'tokenization',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'accountType'=>'R',
			'accountNumber'=>'5499740000000057',
			'accountAccessory'=>'0422',
			'transactionCode'=>'0000000001',
			'holderName'=>'Tony+Stark',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'tokenization',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'accountType':'R',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'transactionCode':'0000000001',
			'holderName':'Tony+Stark'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'tokenization',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			accountType=>'R',
			accountNumber=>'5499740000000057',
			accountAccessory=>'0422',
			transactionCode=>'0000000001',
			holderName=>'Tony+Stark'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'tokenization',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'accountType':'R',
			'accountNumber':'5499740000000057',
			'accountAccessory':'0422',
			'transactionCode':'0000000001',
			'holderName':'Tony+Stark'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)##
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypetokenizationIndicates the type of response.
accountIdString (12)Indicates the accountId
accountType EnumIndicates the accountType used in the transaction. If present in the request it will be returned in the response.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
accountAccessoryString (10)Card expiration date or bank routing number.
tokenString (40)Token associated with the payment card or bank account. Can be used to process future transactions.
holderNameString (150)Name of the card holder or bank account owner.
requestIdString (40)Identifier of the API request.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
terminalMessageString (100)Internal field for exchange of control messages between TMS system and the terminal. See integration notes for more information.

Charge With a Token

To process a transaction using a token follow the same method used in the Charge operation and replace the accountNumber parameter with token.

Name Value or Format Description
requestTypesale, sale-authRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
accountType EnumRequired
Specifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
accountAccessoryString (10)Required
Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenString (40)Required
The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionIndustryTypeEnumRequired
Indicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
holderNameString (150)Required
Name of the card holder or bank account owner.
Charge Using a Token - Customer Billing Fields
Name Value or Format Description
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
countryCodeString (2)The country of the card holder.
stateString (2)The state of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=sale"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "amount=5000"  \
	-d "accountType=R"  \
	-d "transactionIndustryType=RE"  \
	-d "holderType=P"  \
	-d "holderName=Tony+Stark"  \
	-d "accountNumber="  \
	-d "accountAccessory=0422"  \
	-d "street=12+Main+St"  \
	-d "city=Denver"  \
	-d "state=CO"  \
	-d "zipCode=30301"  \
	-d "customerAccountCode=0000000001"  \
	-d "transactionCode=0000000001"  \
	-d "token=MC10000000254965411111 "  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=sale"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&amount=5000"
			+ "&accountType=R"
			+ "&transactionIndustryType=RE"
			+ "&holderType=P"
			+ "&holderName=Tony+Stark"
			+ "&accountNumber="
			+ "&accountAccessory=0422"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"
			+ "&token=MC10000000254965411111 "
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'sale',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'amount'=>'5000',
			'accountType'=>'R',
			'transactionIndustryType'=>'RE',
			'holderType'=>'P',
			'holderName'=>'Tony+Stark',
			'accountNumber'=>'',
			'accountAccessory'=>'0422',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',
			'token'=>'MC10000000254965411111 ',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=sale"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&amount=5000"
			+ "&accountType=R"
			+ "&transactionIndustryType=RE"
			+ "&holderType=P"
			+ "&holderName=Tony+Stark"
			+ "&accountNumber="
			+ "&accountAccessory=0422"
			+ "&street=12+Main+St"
			+ "&city=Denver"
			+ "&state=CO"
			+ "&zipCode=30301"
			+ "&customerAccountCode=0000000001"
			+ "&transactionCode=0000000001"
			+ "&token=MC10000000254965411111 "

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=sale"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&amount=5000"
			 postData =  postData + "&accountType=R"
			 postData =  postData + "&transactionIndustryType=RE"
			 postData =  postData + "&holderType=P"
			 postData =  postData + "&holderName=Tony+Stark"
			 postData =  postData + "&accountNumber="
			 postData =  postData + "&accountAccessory=0422"
			 postData =  postData + "&street=12+Main+St"
			 postData =  postData + "&city=Denver"
			 postData =  postData + "&state=CO"
			 postData =  postData + "&zipCode=30301"
			 postData =  postData + "&customerAccountCode=0000000001"
			 postData =  postData + "&transactionCode=0000000001"
			 postData =  postData + "&token=MC10000000254965411111 "


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'sale',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'amount'=>'5000',
			'accountType'=>'R',
			'transactionIndustryType'=>'RE',
			'holderType'=>'P',
			'holderName'=>'Tony+Stark',
			'accountNumber'=>'',
			'accountAccessory'=>'0422',
			'street'=>'12+Main+St',
			'city'=>'Denver',
			'state'=>'CO',
			'zipCode'=>'30301',
			'customerAccountCode'=>'0000000001',
			'transactionCode'=>'0000000001',
			'token'=>'MC10000000254965411111 ',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'sale',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'amount':'5000',
			'accountType':'R',
			'transactionIndustryType':'RE',
			'holderType':'P',
			'holderName':'Tony+Stark',
			'accountNumber':'',
			'accountAccessory':'0422',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001',
			'token':'MC10000000254965411111 '


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'sale',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			amount=>'5000',
			accountType=>'R',
			transactionIndustryType=>'RE',
			holderType=>'P',
			holderName=>'Tony+Stark',
			accountNumber=>'',
			accountAccessory=>'0422',
			street=>'12+Main+St',
			city=>'Denver',
			state=>'CO',
			zipCode=>'30301',
			customerAccountCode=>'0000000001',
			transactionCode=>'0000000001',
			token=>'MC10000000254965411111 '


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'sale',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'amount':'5000',
			'accountType':'R',
			'transactionIndustryType':'RE',
			'holderType':'P',
			'holderName':'Tony+Stark',
			'accountNumber':'',
			'accountAccessory':'0422',
			'street':'12+Main+St',
			'city':'Denver',
			'state':'CO',
			'zipCode':'30301',
			'customerAccountCode':'0000000001',
			'transactionCode':'0000000001',
			'token':'MC10000000254965411111 '


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeEnumIndicates the type of response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
holderNameString (150)Name of the card holder or bank account owner.
balanceInteger (in cents)For debit and gift cards only. Balance remaining on a card used for the transaction.
currencyCodeString (3)Indicates currency of transaction. If present in the request it will be returned in the response.
originalAmountIntegerAmount provided in the request. Differs from amount value if partial authorization has occurred.
cashbackAmountInteger (in cents)cashbackAmount used in the transaction.
feeAmountIntegerContains the amount of the transaction a software system or platform charges as a service fee or processing fee that will be withheld from remittance.

tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
transactionDateDate (yyyyMMdd)Date of the transaction.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Returned in the original transaction response.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
requestIdString (40)Identifier of the API request.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
cycleCodeLongIdentifier of a retail cycle associated with the transaction.
warningCodeString (1)Code warning that non-critical issue with the transaction are present.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
providerAvsResponseCodeString (5)AVS response code returned by an underlying payment network or acquirer. Supports legacy systems.
cscResponseCode String (1)CSC response code if CSC has been provided.
providerCscResponseCodeString (3)CSC response code returned by the payment and acquiring networks. Supports legacy systems.
itemsList List of items included in the transaction. ex:

(code=001;itemId=I123;splits=(accountId=20011;trans
actionId=S10001)(accountId=20012;transacti
onId=S10002))

Get a Token Profile

requestType=get-profile

Use this operation to retrieve additional card holder data stored with a token for a card or bank account you have tokenized.

Name Value or Format Description
requestTypeget-profileRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
tokenString (40)Required
The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=get-profile"  \
	-d "userName=myUsername"  \
	-d "password=myP%40ssword"  \
	-d "accountId=2001"  \
	-d "token=XVC01P0000000084632147254611114111001111"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=get-profile"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&token=XVC01P0000000084632147254611114111001111"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'get-profile',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'token'=>'XVC01P0000000084632147254611114111001111',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=get-profile"
			+ "&userName=myUsername"
			+ "&password=myP%40ssword"
			+ "&accountId=2001"
			+ "&token=XVC01P0000000084632147254611114111001111"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=get-profile"
			 postData =  postData + "&userName=myUsername"
			 postData =  postData + "&password=myP%40ssword"
			 postData =  postData + "&accountId=2001"
			 postData =  postData + "&token=XVC01P0000000084632147254611114111001111"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'get-profile',
			'userName'=>'myUsername',
			'password'=>'myP%40ssword',
			'accountId'=>'2001',
			'token'=>'XVC01P0000000084632147254611114111001111',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'get-profile',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'token':'XVC01P0000000084632147254611114111001111'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'get-profile',
			userName=>'myUsername',
			password=>'myP%40ssword',
			accountId=>'2001',
			token=>'XVC01P0000000084632147254611114111001111'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'get-profile',
			'userName':'myUsername',
			'password':'myP%40ssword',
			'accountId':'2001',
			'token':'XVC01P0000000084632147254611114111001111'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)#
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeget-profileIndicates the type of response.
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
holderNameString (150)Name of the card holder or bank account owner.
holderTypeP or OType of a payment card or bank account holder. Set value to O for level II and level III transactions. P, personal, is the default.
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
stateString (2)The state of the card holder.
zipY - yes, N - no; default - YIndicates whether an export response file is returned as an archived ZIP file or a .csv file.

Proxynization.js

Our proxynization API is a JavaScript library that can be embedded into your payment pages. This library allows you to generate temporary tokens from your payment page before data is submitted to your system helping to reduce PCI scope.

Proxynization Implementation Overview

  • Reference our proxynization.js library on your payment page. Below are production and sandbox links to our proxynization library.
    • Production: https://secure.zift.io/services/api.proxynization.js
    • Sandbox: https://sandbox-secure.zift.io/services/api.proxynization.js
  • Use the authentication request to receive a temporary password which will be valid for 10 minutes. Make sure you use the correct contextType when makeing the authentication call. Use: contextType=proxynization
  • Submit the proxynization request with your previously received temporary password to get a proxy number;
  • Use the returned proxy number in the accountNumber field for subsequent sale, credit and tokenization requests.

See the workflow section below implementation details.

Security Constraint

JavaScript by nature has security limitations. Since it is a client-side language its source code is entirely accessible. Therefore, it is impossible to secure passwords within JavaScript. Consequently, you should never use javascript to directly make calls to the Zift API endpoints such as sale or sale-auth.

Proxynization.js Workflow

  • Include api.proxynization.js

    Copy the following lines and paste them to your HTML page. This will enable the proxynization functionality within your application.

    <script type="text/javascript" src="https://[server-name]/services/api.proxynization.js"></script>  
  • Implement the callback function.

    The callback function will be invoked once the proxynization response is returned from our system. We generate a function call which invokes the pre-defined callback function and passes the proxynization results into it. Post-proxynization logic (such as submission of the form to your server) should be included in the callback function.

    The callback function must declare three parameters: responseCode, responseMessage and proxyNumber:

    Parameter Description
    responseCode Zift generated response code. Possible values are listed in the table.
    responseMessage Zift generated response message, associated with the responseCode value. Possible values are listed in the table.
    proxyNumber Temporary proxy number.

    Callback function example:

     function clientCallback(responseCode, responseMessage, proxyNumber){
                  if(responseCode == "A01"){
                    document.getElementById('accountNumber').value = proxyNumber;
                    paymentForm.submit();
                  } else{
                    alert(responseMessage);
                    return false; }} 
                 
  • Make the authentication request.

    Retrieve the temporary password from the authentication call response and assign it to the Proxynization API object. To obtain the temporary password, submit an authentication request, using your credentials:

    https://sandbox-secure.zift.io/gates/xurl?requestType=authentication&userName=*****&password=*****&contextType=proxynization 

    Server-side code example:

     ProxynizationAPI.password = '<?php echo (getPass()); ?>'; 
                 

    Final JavaScript code example:

     (ProxynizationAPI.password = '7e850d1d-0f94-4281-92f9-2c2c8bc8f70e';) 
                 
  • Implement your payment form and insert a proxynization call within the form's submit action.

    process() function takes two parameters:

    • The first parameter can either be the value of account number, or it can be the ID of the component from which the value can be obtained. If the value of the parameter starts with a hashtag (#) symbol, the first parameter is assumed to be the ID of the component. If a hashtag is not present, the first parameter is assumed to be an account number.
    • The second parameter is the name of the callback function (previously implemented, see step 2), that will be called when the proxynization call is completed.

    Proxynization call example:

    <input type="button" onClick="ProxynizationAPI.process('#accountNumber','clientCallback');"/>
                 

How to use the proxy number

The proxynization call is used to generate a temporary token (proxy number) for a credit card or bank account number. The resulting temporary token can be substituted for the actual credit card or bank account number in various API calls such as sale or sale-auth.

Terminal Cloud

Terminal Cloud: Overview

Zift's terminal cloud allows you to connect one or more terminals to your Point of Sale system without directly integrating with the terminal itself. When you order a terminal from Zift, it comes with Zift's terminal application already installed. When turned on, the terminal will automatically connect and register with Zift's terminal cloud. At this point the terminal is ready to accept instructions from your Point of Sale system and payments from the customer.

Connecting to a terminal is as simple as running a sale transaction. To initiate a transaction, your Point of Sale system will make a sale call to Zift's terminal API (see API endpoints below). The terminal will take over and ask the customer for payment. Once complete, the result of the transaction will be returned to your original API request.

All typical transaction types are supported by our terminal cloud. Using the terminal cloud you can charge a card, refund, void and under special circumstances perform a credit.

Terminal Cloud API Endpoints
  • Production: https://portal.zift.io/terminals/xurl?
  • Sandbox: https://sandbox-portal.zift.io/terminals/xurl?
Integration Considerations

Only terminals loaded with Zift terminal application may use the Zift terminal cloud. If you have an existing terminal you may purchase a new terminal from Zift.

Transactions must be initiated from your Point of Sale system. You cannot original transactions at the terminal when in terminal cloud configuration.

When integrating with the terminal API make sure your server configuration allows enough time to complete the transactions. There are a number of factors that can affect response times from the terminal. For example, the local network may be running slow or the customer may not be ready to swipe their card. We recommend allowing up to 180 seconds for a given HTTP request to complete. If your server terminates the connection due to 'time out' before it is completed, the transaction will complete but your Point of Sale system will not be informed of the transaction result.

Terminal Cloud: Sale / Sale-auth

The Sale and Sale-auth API calls will tell the terminal to ask for payment. When the sale API call is issued, the terminal screen will ask the customer to confirm the amount. Once confirmed, the customer will swipe or dip (EMV) their card. The terminal will then display the transaction result. Once all terminal operations are complete, the terminal cloud will return your original API request with the result of the transaction.

Transaction Fields
Name Value or Format Description
requestTypesaleRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (12)Required
Terminal ID associated with the transaction.
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
transactionIndustryTypeEnumIndicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
taxAmountIntegerTax amount charged on an item. Amount in cents.
receiptModeEnumValue identifying how the transaction receipt is delivered to the customer.
   N = no receipt is printed out
   E = receipt is sent to a customer via an e-maill
   T = receipt is printed out via the terminal
   P = receipt is printed out via a POS
ticketIdString (12)Unique identifier of a ticket provided by the terminal.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
holderNameString (150)Name of the card holder or bank account owner.
emailString (100)Email associated with a payment card or bank account holder.
transactionDateDate (yyyyMMdd)Date of the transaction.
holderVerificationModeTypeEnumDefines how a payment card is verified.
isPartialAuthorizationBoolean; 0 - disabled, 1 - enabled; default = 0Indicates whether partial authorization is enabled. See Partial Authorization for more information.
settlementGroupCodeString(60)Identifier of a settlement group.
processingModeEnumDefines how the transaction is processed.
memoString (255)Description of the transaction. Returned in the response.
Cross-reference Fields (optional)
Name Value or Format Description
ticketNumberString (20)External Cross-Reference. Unique identifier of a ticket from the integrator's Point of Sale system.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
customerAccountInternalCodeString (60)A unique identifier of a customer within an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the customerAccountCode. See the cross reference notes for more details.
laneCodeString(10)Identifier of a lane associated with the transaction.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=sale"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=12456789"  \
	-d "terminalId=001"  \
	-d "amount=2000"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=sale"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=12456789"
			+ "&terminalId=001"
			+ "&amount=2000"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'sale',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'12456789',
			'terminalId'=>'001',
			'amount'=>'2000',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=sale"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=12456789"
			+ "&terminalId=001"
			+ "&amount=2000"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=sale"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=12456789"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&amount=2000"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'sale',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'12456789',
			'terminalId'=>'001',
			'amount'=>'2000',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'sale',
			'userName':'username',
			'password':'password',
			'accountId':'12456789',
			'terminalId':'001',
			'amount':'2000'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'sale',
			userName=>'username',
			password=>'password',
			accountId=>'12456789',
			terminalId=>'001',
			amount=>'2000'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'sale',
			'userName':'username',
			'password':'password',
			'accountId':'12456789',
			'terminalId':'001',
			'amount':'2000'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypesaleIndicates the type of response.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
entryModeTypeEnumDefines how payment information is entered. See integration notes for more information.
cscResponseCode String (1)CSC response code if CSC has been provided.
balanceInteger (in cents)For debit and gift cards only. Balance remaining on a card used for the transaction.
cycleCodeLongIdentifier of a retail cycle associated with the transaction. If empty no cycle was opened.
entryMediumTypeEnumentryMediumType used in the transaction.
holderVerificationModeTypeEnumholderVerificationModeType used in the transaction.
holderNameString (150)Name of the card holder or bank account owner.
amountInteger (in cents)Specifies the total authorized amount of the transaction.
extendedAccountTypeEnum Brand of a payment card or type of an account used in the transaction. Always present in the response. Click here for a list of possible values and their descriptions.
warningCodeString (1)Code warning that non-critical issue with the transaction are present.
accountType EnumIndicates the accountType used in the transaction. If present in the request it will be returned in the response.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
transactionDateDate (yyyyMMdd)Date of the transaction.
providerTransactionCodeString (25)Identifier of the transaction from the card networks.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
tokenString (40)Token associated with the payment card or bank account. Can be used to process future transactions.
accountIdString (12)Indicates the accountId
originalAmountIntegerAmount provided in the request. Differs from amount value if partial authorization has occurred.
providerResponseCodeString (20)Response code returned by the payment and acquiring networks. See integration notes for more information. Not always
present in the response, supports legacy systems.
accountAccessoryString (10)Card expiration date or bank routing number.
providerCscResponseCodeString (3)CSC response code returned by the payment and acquiring networks. Supports legacy systems.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
currencyCodeString (3)Indicates currency of transaction. If present in the request it will be returned in the response.
terminalMessageString (100)Internal field for exchange of control messages between TMS system and the terminal. See integration notes for more information.

Terminal Cloud: Capture

The capture call allows you to capture a previous sale-auth transaction. When you call capture, the terminal screen will indicate the transaction has been capture. You do not need to interact with the terminal as this is just informational. When the capture is complete the API response will be delivered to you. Keep track of your transactionId from your previous sale-auth call. You will need it to complete the capture.

Name Value or Format Description
requestTypecaptureRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (12)Required
Terminal ID associated with the transaction.
transactionIdLongRequired
Unique identifier of the transaction within Zift. Returned in the original transaction response.
receiptModeEnumValue identifying how the transaction receipt is delivered to the customer.
   N = no receipt is printed out
   E = receipt is sent to a customer via an e-maill
   T = receipt is printed out via the terminal
   P = receipt is printed out via a POS
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
amountInteger (in cents)Specifies the total authorized amount of the transaction.
tipAmountInteger (in cents)For restaurant industry only. Amount of tips.

tipRecipientCodeString(15)Unique identifier of a person within your organization that is going to receive tips.
emailString (100)Email associated with a payment card or bank account holder.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=capture"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456798"  \
	-d "terminalId=001"  \
	-d "transactionId=987654312"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=capture"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456798"
			+ "&terminalId=001"
			+ "&transactionId=987654312"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'capture',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456798',
			'terminalId'=>'001',
			'transactionId'=>'987654312',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=capture"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456798"
			+ "&terminalId=001"
			+ "&transactionId=987654312"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=capture"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456798"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&transactionId=987654312"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'capture',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456798',
			'terminalId'=>'001',
			'transactionId'=>'987654312',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'capture',
			'userName':'username',
			'password':'password',
			'accountId':'123456798',
			'terminalId':'001',
			'transactionId':'987654312'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'capture',
			userName=>'username',
			password=>'password',
			accountId=>'123456798',
			terminalId=>'001',
			transactionId=>'987654312'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'capture',
			'userName':'username',
			'password':'password',
			'accountId':'123456798',
			'terminalId':'001',
			'transactionId':'987654312'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecaptureIndicates the type of response.
accountIdString (12)Indicates the accountId
terminalIdString (32)terminalId used in the transaction request.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
remainingAmountInteger (in cents)Remaining amount of the original transaction that has not been voided or refunded back. The value of 0 indicates that a full void or refund has been issued on the transaction.
taxAmountInteger (in cents) Tax amount charged on the order/transaction. Included in the total amount. Optional in the request, not always present in the response.
tipAmountInteger (in cents)For restaurant industry only. tipAmount used in the transaction. Optional in the request, not always present in the response.
emailString (100)Email associated with a payment card or bank account holder.
responseCodeString (5)Response code returned by the terminal.
responseMessageString (255)Response message returned by the terminal

Terminal Cloud: Void

The void call allows you to void a previous transaction. You can run a void against any type of transaction such as sale, sale-auth, credit, etc. When you call void the terminal will indicate the transaction has been voided and will automatically print a receipt if your terminal is equipped with this feature.

Name Value or Format Description
requestTypevoidRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdintegerRequired
accountId used in the original transaction request.
terminalIdString (12)Required
Terminal ID associated with the transaction.
transactionIdLongRequired
Unique identifier of the transaction within Zift. Always present in the response.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
receiptModeEnumValue identifying how the transaction receipt is delivered to the customer.
   N = no receipt is printed out
   E = receipt is sent to a customer via an e-maill
   T = receipt is printed out via the terminal
   P = receipt is printed out via a POS
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
transactionCodeString (60)An identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.

originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
voidReasonCodeEnum Defines a reason why the void is issued. Click here for possible values.
emailString (100)Email associated with a payment card or bank account holder.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=void"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456789"  \
	-d "terminalId=001"  \
	-d "transactionId=987654321"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=void"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&transactionId=987654321"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'void',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'transactionId'=>'987654321',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=void"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&transactionId=987654321"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=void"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456789"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&transactionId=987654321"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'void',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'transactionId'=>'987654321',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'void',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'transactionId':'987654321'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'void',
			userName=>'username',
			password=>'password',
			accountId=>'123456789',
			terminalId=>'001',
			transactionId=>'987654321'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'void',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'transactionId':'987654321'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypevoidIndicates the type of response.
accountIdString (12)Indicates the accountId
terminalIdString (32)terminalId used in the transaction request.
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
remainingAmountInteger (in cents)Remaining amount of the original transaction that has not been voided or refunded back. The value of 0 indicates that a full void or refund has been issued on the transaction.
emailString (100)Email associated with a payment card or bank account holder.
voidReasonCodeEnum Defines a reason why the void is issued. Click here for possible values.
responseCodeString (5)Response code returned by the terminal.
responseMessageString (255)Response message returned by the terminal

Terminal Cloud: Refund

The refund call allows you to refund a specified amount against an existing transaction.

Name Value or Format Description
requestTyperefundRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (12)Required
Terminal ID associated with the transaction.
transactionIdLongRequired
Unique identifier of the transaction within Zift. Always present in the response.
amountInteger (in cents)Required
Specifies the total amount of the credit in cents (not dollars) ex: $5.00 = 500¢
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
receiptModeEnumValue identifying how the transaction receipt is delivered to the customer.
   N = no receipt is printed out
   E = receipt is sent to a customer via an e-maill
   T = receipt is printed out via the terminal
   P = receipt is printed out via a POS
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
emailString (100)Email associated with a payment card or bank account holder.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=refund"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456789"  \
	-d "terminalId=001"  \
	-d "transactionId=987654312"  \
	-d "amount=2000"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=refund"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&transactionId=987654312"
			+ "&amount=2000"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'refund',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'transactionId'=>'987654312',
			'amount'=>'2000',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=refund"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&transactionId=987654312"
			+ "&amount=2000"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=refund"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456789"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&transactionId=987654312"
			 postData =  postData + "&amount=2000"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'refund',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'transactionId'=>'987654312',
			'amount'=>'2000',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'refund',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'transactionId':'987654312',
			'amount':'2000'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'refund',
			userName=>'username',
			password=>'password',
			accountId=>'123456789',
			terminalId=>'001',
			transactionId=>'987654312',
			amount=>'2000'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'refund',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'transactionId':'987654312',
			'amount':'2000'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTyperefundIndicates the type of response.
accountIdintegeraccountId used in the original transaction request.
terminalIdString (32)terminalId used in the transaction request.
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
transactionIdLongUnique identifier of the transaction within Zift. Always present in the response.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
originalTransactionCodeString (60)Value of transactionCode supplied in the original transaction. Used for void only.
remainingAmountInteger (in cents)Remaining amount of the original transaction that has not been voided or refunded back. The value of 0 indicates that a full void or refund has been issued on the transaction.
emailString (100)Email associated with a payment card or bank account holder.
responseCodeString (5)Response code returned by the terminal.
responseMessageString (255)Response message returned by the terminal

Terminal Cloud: Credit

The credit call is similar to a refund but does not have an original transaction context. Use this call to credit a specified amount the customer's card.

Transaction Fields
Name Value or Format Description
requestTypecreditRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (12)Required
Terminal ID associated with the transaction.
amountInteger (in cents)Required
Specifies the total amount of the credit in cents (not dollars) ex: $5.00 = 500¢
taxAmountIntegerTax amount charged on the order/transaction. Included in the total amount. See integration notes for more information.
transactionIndustryTypeEnumIndicates the industry related to this merchant and specific transaction. Click here for a list of possible values and their descriptions.
receiptModeEnumValue identifying how the transaction receipt is delivered to the customer.
   N = no receipt is printed out
   E = receipt is sent to a customer via an e-maill
   T = receipt is printed out via the terminal
   P = receipt is printed out via a POS
ticketIdString (12)Unique identifier of a ticket provided by the terminal.
transactionOriginCodeString (35)Identifier of a location within a merchant's application or integration from which the transaction is originated. For example, you can use this field if you send us transactions from a back end billing system and a front end point of sale. We assign each integrator their respective code to be included when the transaction is submitted. To indicate different locations, append the location value after the transaction origin code using : as a separator.
userCodeString (60)Identifier of a user supplied by the integrator's Point of Sale system.
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
holderNameString (150)Name of the card holder or bank account owner.
emailString (100)Email associated with a payment card or bank account holder.
transactionDateDate (yyyyMMdd)Date of the transaction.
holderVerificationModeTypeEnumDefines how a payment card is verified.
isPartialAuthorizationBoolean; 0 - disabled, 1 - enabled; default = 0Indicates whether partial authorization is enabled. See Partial Authorization for more information.
settlementGroupCodeString(60)Identifier of a settlement group.
processingModeEnumDefines how the transaction is processed.
memoString (255)Description of the transaction. Returned in the response.
Cross-reference Fields (optional)
Name Value or Format Description
ticketNumberString (20)External Cross-Reference. Unique identifier of a ticket from the integrator's Point of Sale system used in the original request.
transactionCodeString (60)An identifier of the transaction from an external system. If present in the request it will be returned in the response.
transactionInternalCodeString (60)A unique identifier of the transaction from an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the transactionCode. See the cross reference notes for more details.
customerAccountCodeString(60)A merchant defined cross-reference field which can be used to identify a customer within an external system. It is stored on the transaction record and returned in the response. See the cross reference notes for more details.
customerAccountInternalCodeString (60)A unique identifier of a customer within an external system. It is stored on the transaction record and returned in the response. It should only be used as a supplement to the customerAccountCode. See the cross reference notes for more details.
laneCodeString(10)Identifier of a lane associated with the transaction.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=credit"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456789"  \
	-d "terminalId=001"  \
	-d "amount=2000"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=credit"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&amount=2000"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'credit',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'amount'=>'2000',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=credit"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456789"
			+ "&terminalId=001"
			+ "&amount=2000"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=credit"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456789"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&amount=2000"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'credit',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456789',
			'terminalId'=>'001',
			'amount'=>'2000',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'credit',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'amount':'2000'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'credit',
			userName=>'username',
			password=>'password',
			accountId=>'123456789',
			terminalId=>'001',
			amount=>'2000'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'credit',
			'userName':'username',
			'password':'password',
			'accountId':'123456789',
			'terminalId':'001',
			'amount':'2000'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecreditIndicates the type of response.
approvalCodeString (100)Authorization number given by a cardholder's bank account. Often shown on a credit card receipt.
providerTransactionIdString (50)Identifier of the transaction from the processing networks. Provided by the networks. Not always present in the response.
providerResponseMessageString (255)Response message returned by the payment and acquiring networks. Not always present in the response. Supports legacy systems.
accountNumberMaskedString (20)Masked number of a payment card or bank account associated with the transaction (e.g. 4********5655). The first and last 4 digits of an account number. Always present in the response.
avsResponseCodeString (2)AVS response code if address information has been provided. See response codes for more information.
responseCodeString (5)Response code returned by the terminal.
entryModeTypeEnumDefines how payment information is entered. See integration notes for more information.
cscResponseCode String (1)CSC response code if CSC has been provided.

Terminal Cloud: Download Resource (Signature)

The download-resource call allows you to download a signature file associated with a specific transaction. This call will only work with transactions that have been swiped through a signature capable terminal. Transactions run through the standard API or though a non-signature terminals will return an error indicating the signature is not available.

Name Value or Format Description
requestTypedownload-resourceRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdintegerRequired
accountId used in the original transaction request.
transactionIdLongRequired
Unique identifier of the transaction that contains the signature.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-secure.zift.io/gates/xurl? \
	-d "requestType=download-resource"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456"  \
	-d "transactionId=98765432"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-secure.zift.io/gates/xurl?", 
 			 "&requestType=download-resource"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&transactionId=98765432"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-secure.zift.io/gates/xurl?';
    $data = array(
			'requestType'=>'download-resource',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'transactionId'=>'98765432',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-secure.zift.io/gates/xurl?",

			 "requestType=download-resource"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&transactionId=98765432"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-secure.zift.io/gates/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=download-resource"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456"
			 postData =  postData + "&transactionId=98765432"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-secure.zift.io/gates/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'download-resource',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'transactionId'=>'98765432',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-secure.zift.io/gates/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'download-resource',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'transactionId':'98765432'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-secure.zift.io/gates/xurl?',
       [
			requestType=>'download-resource',
			userName=>'username',
			password=>'password',
			accountId=>'123456',
			transactionId=>'98765432'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-secure.zift.io/gates/xurl?'
	    values = {
			'requestType':'download-resource',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'transactionId':'98765432'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypedownload-resourceIndicates the type of response.
accountIdintegeraccountId used in the original transaction request.
terminalIdString (12)Terminal ID associated with the transaction.
contentStringThe content parameter is a base64 encoded text block that represents the signature image. The image format is png. To view the image, base64 decode the text block in the content variable. The result will be the original image in png format.

Terminal Cloud: Capture Signature

The capture-signature call allows you capture a signature from signature capable terminals without running a transaction. This feature can be used in other work flows such as digitally signing documents at the Point of Sale.

Name Value or Format Description
requestTypecapture-signatureRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdintegerRequired
accountId used in the original transaction request.
terminalIdString (12)Required
Terminal ID associated with the transaction.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
titleString (20)Text assigned to a title of the dialog.
contentString (61)Content of the dialog. The format of this field is 2 lines (60 characters divided by a pipe)
buttonCancelString (15)Text assigned to the Cancel button (overrides a default value).
buttonClearString (15)Text assigned to the Clear button (overrides a default value).
buttonOkString (15)Text assigned to the Ok button (overrides a default value).
timeoutInteger (3)Time left until the operation gets cancelled. Value is specified in seconds, ex: 30 = 300 seconds. Max value = 999, default = 30.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=capture-signature"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456"  \
	-d "terminalId=001"  \
	-d "buttonCancel=Decline"  \
	-d "buttonOk=Accept"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=capture-signature"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&terminalId=001"
			+ "&buttonCancel=Decline"
			+ "&buttonOk=Accept"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'capture-signature',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'terminalId'=>'001',
			'buttonCancel'=>'Decline',
			'buttonOk'=>'Accept',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=capture-signature"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&terminalId=001"
			+ "&buttonCancel=Decline"
			+ "&buttonOk=Accept"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=capture-signature"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&buttonCancel=Decline"
			 postData =  postData + "&buttonOk=Accept"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'capture-signature',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'terminalId'=>'001',
			'buttonCancel'=>'Decline',
			'buttonOk'=>'Accept',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'capture-signature',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'terminalId':'001',
			'buttonCancel':'Decline',
			'buttonOk':'Accept'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'capture-signature',
			userName=>'username',
			password=>'password',
			accountId=>'123456',
			terminalId=>'001',
			buttonCancel=>'Decline',
			buttonOk=>'Accept'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'capture-signature',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'terminalId':'001',
			'buttonCancel':'Decline',
			'buttonOk':'Accept'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecapture-signatureIndicates the type of response.
selectedButtonString (1)Button selected on the terminal

1 = Cancel/Decline (Red)
2 = Confirm/Accept/OK (Green)

accountIdintegeraccountId used in the original transaction request.
terminalIdString (32)terminalId used in the transaction request.
imageImage (base64)Base64 encoded text block representing the signature from the terminal. Base64 decode the text block for the png version of the signature image.

Terminal Cloud: Show Message

The show-message call allows you to display a message on the terminal. Your customer can response to those message prompts using the buttons on the terminal. Responses are returned back to your Point of Sale system via the API response.

Name Value or Format Description
requestTypeshow-messageRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Required
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (32)Required
Reference to a terminal associated with the API call.
contentString (255)Required
The content parameter allows you to set a message on the terminal screen. Although this parameter will allow for 255 characters,the actual display size will depend on the terminal you are using. Click here for more details.
button1String (15)Required
The button1 parameter allows you to set the button text on confirm button (green). Although this parameter will allow for 15 characters,the actual display size will depend on the terminal you are using.
button2String (15)The button parameter allows you to set the button text on cancel button (red). Although this parameter will allow for 15 characters,the actual display size will depend on the terminal you are using.
titleString (64)The title parameter allows you to set a message on the top of the terminal screen. Although this parameter will allow for 64 characters,the actual display size will depend on the terminal you are using.
timeoutInteger (3)Time left until the operation gets cancelled. Value is specified in seconds, ex: 30 = 300 seconds. Max value = 999, default = 30.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/terminals/xurl? \
	-d "requestType=show-message"  \
	-d "userName=username"  \
	-d "password=password"  \
	-d "accountId=123456"  \
	-d "terminalId=001"  \
	-d "content=Purchase hyperspace bypass permit"  \
	-d "title=Vogon Inc."  \
	-d "button1=Yes"  \
	-d "button2=No"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/terminals/xurl?", 
 			 "&requestType=show-message"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&terminalId=001"
			+ "&content=Purchase hyperspace bypass permit"
			+ "&title=Vogon Inc."
			+ "&button1=Yes"
			+ "&button2=No"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/terminals/xurl?';
    $data = array(
			'requestType'=>'show-message',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'terminalId'=>'001',
			'content'=>'Purchase hyperspace bypass permit',
			'title'=>'Vogon Inc.',
			'button1'=>'Yes',
			'button2'=>'No',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/terminals/xurl?",

			 "requestType=show-message"
			+ "&userName=username"
			+ "&password=password"
			+ "&accountId=123456"
			+ "&terminalId=001"
			+ "&content=Purchase hyperspace bypass permit"
			+ "&title=Vogon Inc."
			+ "&button1=Yes"
			+ "&button2=No"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/terminals/xurl?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=show-message"
			 postData =  postData + "&userName=username"
			 postData =  postData + "&password=password"
			 postData =  postData + "&accountId=123456"
			 postData =  postData + "&terminalId=001"
			 postData =  postData + "&content=Purchase hyperspace bypass permit"
			 postData =  postData + "&title=Vogon Inc."
			 postData =  postData + "&button1=Yes"
			 postData =  postData + "&button2=No"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/terminals/xurl?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'show-message',
			'userName'=>'username',
			'password'=>'password',
			'accountId'=>'123456',
			'terminalId'=>'001',
			'content'=>'Purchase hyperspace bypass permit',
			'title'=>'Vogon Inc.',
			'button1'=>'Yes',
			'button2'=>'No',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/terminals/xurl?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'show-message',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'terminalId':'001',
			'content':'Purchase hyperspace bypass permit',
			'title':'Vogon Inc.',
			'button1':'Yes',
			'button2':'No'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/terminals/xurl?',
       [
			requestType=>'show-message',
			userName=>'username',
			password=>'password',
			accountId=>'123456',
			terminalId=>'001',
			content=>'Purchase hyperspace bypass permit',
			title=>'Vogon Inc.',
			button1=>'Yes',
			button2=>'No'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/terminals/xurl?'
	    values = {
			'requestType':'show-message',
			'userName':'username',
			'password':'password',
			'accountId':'123456',
			'terminalId':'001',
			'content':'Purchase hyperspace bypass permit',
			'title':'Vogon Inc.',
			'button1':'Yes',
			'button2':'No'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypeshow-messageIndicates the type of response.
selectedButtonString (1)Button selected on the terminal

0 = Cancel/Decline (Red)
1 = Confirm/Accept/OK (Green)

accountIdintegeraccountId used in the original transaction request.
terminalIdString (32)Reference to a terminal associated with the API call.
responseCodeString (5)Response code returned by the terminal.
responseMessageString (255)Response message returned by the terminal

Terminal Cloud: Capture Value

The capture-value call allows to capture a string value (for example a rewards number or an email).

Name Value or Format Description
requestTypecapture-valueSpecifies the type of operation to be performed.
userNameString (50)Name of a user that initiates the API call.
passwordString (32)Password of a user that initiates the API call. When using the terminal API the password is the first 20 characters of your typical API user password.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (32)Reference to a terminal associated with the API call.
userCodeString (60)Identifier of a user supplied by a submitter that initiates the API call.
titleString (20)Text assigned to a title of the dialog.
contentString (61)Content of the dialog. The format of this field is 2 lines (60 characters divided by a pipe)
labelString (30)Text assigned to the input field's label. Only alphanumeric characters ^[\p{L}0-9]*$ are allowed.
timeoutInteger (3)Time left until the operation gets cancelled. Value is specified in seconds, ex: 30 = 300 seconds. Max value = 999, default = 30.
buttonOkString (15)Text assigned to the Ok button (overrides a default value).
buttonCancelString (15)Text assigned to the Cancel button (overrides a default value).

List of parameters sent back as part of the API response.

Name Value or Format Description
responseTypecapture-valueIndicates the type of response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
terminalIdString (32)Reference to a terminal associated with the API call.
selectedButtonString (1)Button selected on the terminal

0 = Cancel/Decline (Red)
1 = Confirm/Accept/OK (Green)

responseCodeString (5)Response code returned by the terminal.
responseMessageString (255)Response message returned by the terminal

Merchant Creation

Merchant Creation and Enrollment Process Overview

The Merchant Creation process (Sometimes referred to as onboarding) allows you to control the collection of information within your site and send the merchant application directly to Zift. The merchant enrollment and activation process has two phases. The first phase is the creation phase where the merchant's business and beneficial ownership information is collected and submitted to Zift . As part of this phase, the merchant will agree to our processing terms and conditions and provide proof of identity if needed. The second phase is underwriting review where we verify the business information and identity of the owners and ultimately activate the new account for processing.

API Creation

If you choose the API method you will need to create all the forms necessary to collect the required merchant creation details on your site. Below are some of the advantages of this integration method:

  • Control over the user experience and form flow
  • Complete control over ‘look and feel’
  • Ability to direct the user to different paths depending on the API response
  • Simplified integration into the Zift merchant creation API.


 

When using the API integration method, the API will validate the inputs and respond with specific information about any data issues. Once validation has passed, the API will respond with the merchant creation status (approved, declined, hold, etc.) and merchant accountId. You may optionally choose to be notified of the result by specifying a URL in the notifyURL parameter. We recommend using the notifyURL as a method to know the merchants Zift accountId and status of the merchant creation request. For example, if an application goes from 'on hold' to 'approved' the notifyURL will be called to let the integrator know of the status change. Here’s an example of what an API merchant creation could look like: apply.zift.io/demo

The table and examples below show how to create a merchant using your own form or data collection method and passing us the information via the API.

Authentication and Context
Name Value/Format Description
requestTypecreateRequired
Specifies the type of operation to be performed.
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
merchantTypeEnumDefines the type of a merchant to be created.
merchantProfileEnumDefines how accounts, tax IDs, descriptors and deposit accounts of a merchant are going to be configured. Click here for a list of possible values and their descriptions.
merchantCreationPolicyEnumDefines what status an onboarding application should obtain before a merchant is created. Click here for a list of possible values and their descriptions.
profileIdString (20)Required
Indicates the profile used to process the merchant application.
resellerIdString (10)Required
Identifier of a reseller associated with a merchant being created.
clientHostString (60)IP-address or a host associated with a submitter that originated the onboarding request.
portfolioIdIntegerRequired
Associates the merchant application to a Zift portfolio.
merchantIdIntegerAssociates the merchant application to a Zift merchant. When present in the request this field is sent back in the response via the notify URL.
feeTemplateIdIntegerRequired
Indicates the fee template to be used when configuring the new merchant.
distributionSchemaCodeString (20)Indicates the distribution scheme to be used when configuring the new merchant.
processingConfigurationScriptString (63)Required
Indicates the processing configuration to used when configuring the new merchant.
applicationCodeString (15)Identifier of a merchant's onboarding application within a submitter's system. When present in the request this field is sent back in the response via the notify URL.
Appearance and Control
Name Value/Format Description
isEmbeddedEnumIndicates if the header and footer of the onboarding form is rendered. Click for a list of possible values and their descriptions.
pageFormatString (5)This field controls which pages will display when using our hosted merchant creation form.

O - Owner Information (display optional)
B - Business Information (display optional)
D- Deposit Information (display optional)
A- Terms and Conditions (required)

Example Usage
pageFormat=OBDA (display all pages - default)
pageFormat=BDA (suppress owner info page)

notifyURLString (255)The value of notifyURL represents a resource or API endpoint on your system. When an application is completed the results will be delivered to your endpoint. If a new merchant application is not immediately approved updates to the merchant application will also be sent to the notifyURL.
cancelURLString (255)URL used when the user cancels the onboarding application
returnURLString (255)Redirect URL used at the end of the onboarding process regardless of application status
returnURLPolicyEnumIndicates the behavior of the returnURL. Click for a list of possible values and their descriptions.
notificationPolicyEnumDefines how an email notification with a result of an onboarding process is sent to a merchant. Click for a list of possible values and their descriptions.
Officer Information
Name Value/Format Description
officer.titleEnumRequired
Job title of a company's controlling officer.
officer.firstNameString (50)Required
First name of a company's controlling officer.
officer.lastNameString (50)Required
Last name of a company's controlling officer.
officer.street1String (128)Required
Street (line 1) of a mailing address of a company's controlling officer.
officer.street2String (128)Street (line 2) of a mailing address of a company's controlling officer.
officer.cityString (50)Required
City of a mailing address of a company's controlling officer.
officer.stateString (3)Required
State code of a mailing address of a company's controlling officer.
officer.zipCodeString (15)Required
ZIP/postal code of a mailing address of a company's controlling officer.
officer.countryCodeString (2)Required
Country code of a mailing address of a company's controlling officer.
officer.birthDateDate (yyyyMMdd)Required
Birth date of a company's controlling officer.
officer.socialSecurityString (9)Required
Social security number of a company's controlling officer.
officer.phoneString (15)Required
Phone number of a company's controlling officer for discussing any processing issues.

officer.emailString (100)Required
Email of a company's controlling officer.
Owner Information
Name Value/Format Description
owner.X.firstNameString (50)Conditional
First name of a business owner
owner.X.lastNameString (50)Conditional
Last name of a business owner.
owner.X.street1String (128)Conditional
Street (line 1) of a business owner's mailing address.
owner.X.street2String (128)Conditional
Street (line 2) of a business owner's mailing address.
owner.X.cityString (50)Conditional
City of a business owner's mailing address.
owner.X.stateString (3)Conditional
State code of a business owner's mailing address.
owner.X.zipCodeString (15)Conditional
ZIP/postal code of a business owner's mailing address.
owner.X.countryCodeString (2)Conditional
Country code of a business owner's mailing address.
owner.X.emailString (100)Conditional
Email of a business owner.
owner.X.birthDateDate (yyyyMMdd)Conditional
Birth date of a business owner.
owner.X.socialSecurityString (9)Conditional
Social security number of a business owner.
owner.X.phoneString (15)Conditional
Phone number of a business owner for discussing any processing issues.

owner.X.stakePercentageIntegerConditional
Stake owned by a business owner.
Business Information
Name Value/Format Description
business.businessNameString (50)Required
DBA name of the merchant's company.
business.legalNameString (50)Required
Legal name of the merchant's company
business.ownershipStructureTypeEnumRequired
Ownership structure type of the merchant's company.
business.street1String (128)Required
Street Address (Street 1) of the merchant's company.
business.street2String (128)Street Address (Street 2) of the merchant's company.
business.cityString (50)Required
City of the merchant's company.
business.stateString (3)Required
State of the merchant's company.
business.zipCodeString (15)Required
Zip/Postal code of the merchant's company.
business.countryCodeString (2)Required
Country of the merchant's company.
business.descriptorPhoneString (10)Required
Customer service phone of the merchant's company that is shown on card/account holder statements
business.paymentCardDescriptorString (21)Descriptor assigned to payment card transactions associated with the merchant. Shown on card/account holder statements.
business.directDebitDescriptorString (21)Descriptor assigned to direct debit transactions associated with the merchant. Shown on card/account holder statements
business.taxIdString (9)Required
Federal tax ID or Social Security Number of the merchant. Depending on the type selected in business.ownershipStructureType this value may be the same as owner.socialSecurity but must still be submitted separately.

business.webSiteString (255)Required
Website of the merchant's company. Only include the domain name. Do not include the http prefix
Valid: www.zift.io
Invalid: https://www.zift.io
business.emailString (100)Required
Email of the merchant's business. This is used by Zift and the integrator's system to send status updates on the merchant's onboarding applicatoin.
business.descriptionString (255)Required
Description of the merchant's business.
business.contactPhoneString (10)Merchant's contact phone. Used for discussing any processing issues.
business.merchantCategoryCodeString (4)Required
Merchant category code assigned to a merchant's business. For test integrations to our sandbox environment use value '7399'.
business.currencyCodeString (3)Required
Currency used for merchant's transactions. Default: USD
business.registrationYearString (4) (yyyy)Required
Registration year of the merchant's business.
business.timeZoneCodeString (20)Required
Merchant's preferred time-zone. Default: MST.
Transaction Estimates
Name Value/Format Description
estimates.annualDirectDebitVolumeIntegerRequired
Estimated volume of direct debit transactions expected to be processed during a year.
estimates.annualCardsVolumeIntegerRequired
Estimated volume of payment card transactions expected to be processed during a year.
estimates.avgDirectDebitTransactionAmountIntegerRequired
Estimated average amount of direct debit transactions. Amounts must be in whole dollars.
estimates.avgCardsTransactionAmountIntegerRequired
Estimated average amount of payment card transactions. Amounts must be in whole dollars.
estimates.maxTransactionAmountInteger Required
Maximum amount of a transaction.
Deposit Account
Name Value/Format Description
deposit.bankNameString (80)Name of a bank associated with a merchant's deposit account.
deposit.holderNameString (25)Required
Name on the bank account - typically the name of the business. This field does not support the ' character (apostrophe).
deposit.routingNumber String (35)Required
Routing number of a merchant's deposit account.
deposit.accountNumber String (50)Required
Number of a merchant's deposit account.
deposit.accountTypeEnumType of deposit account. Click for a list of possible values and their descriptions.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/gates/onboarding? \
	-d "requestType=create"  \
	-d "userName={{userName}}"  \
	-d "password={{password}}"  \
	-d "profileId=11257624370"  \
	-d "resellerId=1"  \
	-d "portfolioId=100"  \
	-d "feeTemplateId=100028"  \
	-d "processingConfigurationScript=zift10"  \
	-d "merchantType=M"  \
	-d "merchantId="  \
	-d "notifyURL="  \
	-d "cancelURL="  \
	-d "returnURL="  \
	-d "returnURLPolicy=page"  \
	-d "isEmbedded=0"  \
	-d "pageFormat="  \
	-d "officer.firstName=Tony"  \
	-d "officer.lastName=Stark"  \
	-d "officer.street1=41 E 300 N"  \
	-d "officer.street2="  \
	-d "officer.city=Spanish Fork"  \
	-d "officer.state=UT"  \
	-d "officer.zipCode=84653"  \
	-d "officer.phone=5555551212"  \
	-d "[email protected]"  \
	-d "officer.birthDate=19670210"  \
	-d "officer.socialSecurity=123456789"  \
	-d "officer.countryCode=US"  \
	-d "officer.stakePercentage=10"  \
	-d "owner.1.firstName=First"  \
	-d "owner.1.lastName=Owner"  \
	-d "owner.1.street1=41 E 300 N"  \
	-d "owner.1.street2="  \
	-d "owner.1.city=Spanish Fork"  \
	-d "owner.1.state=UT"  \
	-d "owner.1.zipCode=84653"  \
	-d "owner.1.phone=5555551212"  \
	-d "[email protected]"  \
	-d "owner.1.birthDate=19670210"  \
	-d "owner.1.socialSecurity=123456789"  \
	-d "owner.1.countryCode=US"  \
	-d "owner.1.stakePercentage=200"  \
	-d "owner.2.firstName=Second"  \
	-d "owner.2.lastName=Owner"  \
	-d "owner.2.street1=41 E 300 N"  \
	-d "owner.2.street2="  \
	-d "owner.2.city=Spanish Fork"  \
	-d "owner.2.state=UT"  \
	-d "owner.2.zipCode=84653"  \
	-d "owner.2.phone=5555551212"  \
	-d "[email protected]"  \
	-d "owner.2.birthDate=19670210"  \
	-d "owner.2.socialSecurity=123456789"  \
	-d "owner.2.countryCode=US"  \
	-d "owner.2.stakePercentage=10"  \
	-d "owner.3.firstName=Third"  \
	-d "owner.3.lastName=Owner"  \
	-d "owner.3.street1=41 E 300 N"  \
	-d "owner.3.street2="  \
	-d "owner.3.city=Spanish Fork"  \
	-d "owner.3.state=UT"  \
	-d "owner.3.zipCode=84653"  \
	-d "owner.3.phone=5555551212"  \
	-d "[email protected]"  \
	-d "owner.3.birthDate=19670210"  \
	-d "owner.3.socialSecurity=123456789"  \
	-d "owner.3.countryCode=US"  \
	-d "owner.3.stakePercentage=10"  \
	-d "owner.4.firstName=Fourth"  \
	-d "owner.4.lastName=Owner"  \
	-d "owner.4.street1=41 E 300 N"  \
	-d "owner.4.street2="  \
	-d "owner.4.city=Spanish Fork"  \
	-d "owner.4.state=UT"  \
	-d "owner.4.zipCode=84653"  \
	-d "owner.4.phone=5555551212"  \
	-d "[email protected]"  \
	-d "owner.4.birthDate=19670210"  \
	-d "owner.4.socialSecurity=123456789"  \
	-d "owner.4.countryCode=US"  \
	-d "owner.4.stakePercentage=10"  \
	-d "business.businessName=Start Industries"  \
	-d "business.legalName=Start Industries"  \
	-d "business.street1=41 E 300 N"  \
	-d "business.street2="  \
	-d "business.city=Anywhere"  \
	-d "business.state=CT"  \
	-d "business.zipCode=06000"  \
	-d "business.timeZoneCode=EST"  \
	-d "business.descriptorPhone=8604500119"  \
	-d "[email protected]"  \
	-d "business.webSite="  \
	-d "business.taxId=147852369"  \
	-d "business.ownershipStructureType=C"  \
	-d "business.description=Ghostbusting"  \
	-d "estimates.annualCardsVolume=111111"  \
	-d "estimates.annualDirectDebitVolume=222222"  \
	-d "estimates.avgCardsTransactionAmount=2222"  \
	-d "estimates.avgDirectDebitTransactionAmount=1111"  \
	-d "estimates.maxTransactionAmount=12123"  \
	-d "business.countryCode=US"  \
	-d "business.merchantCategoryCode=7399"  \
	-d "business.currencyCode=USD"  \
	-d "deposit.bankName=Stark Bank"  \
	-d "deposit.holderName=Tony Stark"  \
	-d "deposit.accountType=C"  \
	-d "deposit.routingNumber=324377516"  \
	-d "deposit.accountNumber=123456789"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/gates/onboarding?", 
 			 "&requestType=create"
			+ "&userName={{userName}}"
			+ "&password={{password}}"
			+ "&profileId=11257624370"
			+ "&resellerId=1"
			+ "&portfolioId=100"
			+ "&feeTemplateId=100028"
			+ "&processingConfigurationScript=zift10"
			+ "&merchantType=M"
			+ "&merchantId="
			+ "¬ifyURL="
			+ "&cancelURL="
			+ "&returnURL="
			+ "&returnURLPolicy=page"
			+ "&isEmbedded=0"
			+ "&pageFormat="
			+ "&officer.firstName=Tony"
			+ "&officer.lastName=Stark"
			+ "&officer.street1=41 E 300 N"
			+ "&officer.street2="
			+ "&officer.city=Spanish Fork"
			+ "&officer.state=UT"
			+ "&officer.zipCode=84653"
			+ "&officer.phone=5555551212"
			+ "[email protected]"
			+ "&officer.birthDate=19670210"
			+ "&officer.socialSecurity=123456789"
			+ "&officer.countryCode=US"
			+ "&officer.stakePercentage=10"
			+ "&owner.1.firstName=First"
			+ "&owner.1.lastName=Owner"
			+ "&owner.1.street1=41 E 300 N"
			+ "&owner.1.street2="
			+ "&owner.1.city=Spanish Fork"
			+ "&owner.1.state=UT"
			+ "&owner.1.zipCode=84653"
			+ "&owner.1.phone=5555551212"
			+ "[email protected]"
			+ "&owner.1.birthDate=19670210"
			+ "&owner.1.socialSecurity=123456789"
			+ "&owner.1.countryCode=US"
			+ "&owner.1.stakePercentage=200"
			+ "&owner.2.firstName=Second"
			+ "&owner.2.lastName=Owner"
			+ "&owner.2.street1=41 E 300 N"
			+ "&owner.2.street2="
			+ "&owner.2.city=Spanish Fork"
			+ "&owner.2.state=UT"
			+ "&owner.2.zipCode=84653"
			+ "&owner.2.phone=5555551212"
			+ "[email protected]"
			+ "&owner.2.birthDate=19670210"
			+ "&owner.2.socialSecurity=123456789"
			+ "&owner.2.countryCode=US"
			+ "&owner.2.stakePercentage=10"
			+ "&owner.3.firstName=Third"
			+ "&owner.3.lastName=Owner"
			+ "&owner.3.street1=41 E 300 N"
			+ "&owner.3.street2="
			+ "&owner.3.city=Spanish Fork"
			+ "&owner.3.state=UT"
			+ "&owner.3.zipCode=84653"
			+ "&owner.3.phone=5555551212"
			+ "[email protected]"
			+ "&owner.3.birthDate=19670210"
			+ "&owner.3.socialSecurity=123456789"
			+ "&owner.3.countryCode=US"
			+ "&owner.3.stakePercentage=10"
			+ "&owner.4.firstName=Fourth"
			+ "&owner.4.lastName=Owner"
			+ "&owner.4.street1=41 E 300 N"
			+ "&owner.4.street2="
			+ "&owner.4.city=Spanish Fork"
			+ "&owner.4.state=UT"
			+ "&owner.4.zipCode=84653"
			+ "&owner.4.phone=5555551212"
			+ "[email protected]"
			+ "&owner.4.birthDate=19670210"
			+ "&owner.4.socialSecurity=123456789"
			+ "&owner.4.countryCode=US"
			+ "&owner.4.stakePercentage=10"
			+ "&business.businessName=Start Industries"
			+ "&business.legalName=Start Industries"
			+ "&business.street1=41 E 300 N"
			+ "&business.street2="
			+ "&business.city=Anywhere"
			+ "&business.state=CT"
			+ "&business.zipCode=06000"
			+ "&business.timeZoneCode=EST"
			+ "&business.descriptorPhone=8604500119"
			+ "[email protected]"
			+ "&business.webSite="
			+ "&business.taxId=147852369"
			+ "&business.ownershipStructureType=C"
			+ "&business.description=Ghostbusting"
			+ "&estimates.annualCardsVolume=111111"
			+ "&estimates.annualDirectDebitVolume=222222"
			+ "&estimates.avgCardsTransactionAmount=2222"
			+ "&estimates.avgDirectDebitTransactionAmount=1111"
			+ "&estimates.maxTransactionAmount=12123"
			+ "&business.countryCode=US"
			+ "&business.merchantCategoryCode=7399"
			+ "&business.currencyCode=USD"
			+ "&deposit.bankName=Stark Bank"
			+ "&deposit.holderName=Tony Stark"
			+ "&deposit.accountType=C"
			+ "&deposit.routingNumber=324377516"
			+ "&deposit.accountNumber=123456789"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                    
$url = 'https://sandbox-portal.zift.io/gates/onboarding?';
    $data = array(
			'requestType'=>'create',
			'userName'=>'{{userName}}',
			'password'=>'{{password}}',
			'profileId'=>'11257624370',
			'resellerId'=>'1',
			'portfolioId'=>'100',
			'feeTemplateId'=>'100028',
			'processingConfigurationScript'=>'zift10',
			'merchantType'=>'M',
			'merchantId'=>'',
			'notifyURL'=>'',
			'cancelURL'=>'',
			'returnURL'=>'',
			'returnURLPolicy'=>'page',
			'isEmbedded'=>'0',
			'pageFormat'=>'',
			'officer.firstName'=>'Tony',
			'officer.lastName'=>'Stark',
			'officer.street1'=>'41 E 300 N',
			'officer.street2'=>'',
			'officer.city'=>'Spanish Fork',
			'officer.state'=>'UT',
			'officer.zipCode'=>'84653',
			'officer.phone'=>'5555551212',
			'officer.email'=>'[email protected]',
			'officer.birthDate'=>'19670210',
			'officer.socialSecurity'=>'123456789',
			'officer.countryCode'=>'US',
			'officer.stakePercentage'=>'10',
			'owner.1.firstName'=>'First',
			'owner.1.lastName'=>'Owner',
			'owner.1.street1'=>'41 E 300 N',
			'owner.1.street2'=>'',
			'owner.1.city'=>'Spanish Fork',
			'owner.1.state'=>'UT',
			'owner.1.zipCode'=>'84653',
			'owner.1.phone'=>'5555551212',
			'owner.1.email'=>'[email protected]',
			'owner.1.birthDate'=>'19670210',
			'owner.1.socialSecurity'=>'123456789',
			'owner.1.countryCode'=>'US',
			'owner.1.stakePercentage'=>'200',
			'owner.2.firstName'=>'Second',
			'owner.2.lastName'=>'Owner',
			'owner.2.street1'=>'41 E 300 N',
			'owner.2.street2'=>'',
			'owner.2.city'=>'Spanish Fork',
			'owner.2.state'=>'UT',
			'owner.2.zipCode'=>'84653',
			'owner.2.phone'=>'5555551212',
			'owner.2.email'=>'[email protected]',
			'owner.2.birthDate'=>'19670210',
			'owner.2.socialSecurity'=>'123456789',
			'owner.2.countryCode'=>'US',
			'owner.2.stakePercentage'=>'10',
			'owner.3.firstName'=>'Third',
			'owner.3.lastName'=>'Owner',
			'owner.3.street1'=>'41 E 300 N',
			'owner.3.street2'=>'',
			'owner.3.city'=>'Spanish Fork',
			'owner.3.state'=>'UT',
			'owner.3.zipCode'=>'84653',
			'owner.3.phone'=>'5555551212',
			'owner.3.email'=>'[email protected]',
			'owner.3.birthDate'=>'19670210',
			'owner.3.socialSecurity'=>'123456789',
			'owner.3.countryCode'=>'US',
			'owner.3.stakePercentage'=>'10',
			'owner.4.firstName'=>'Fourth',
			'owner.4.lastName'=>'Owner',
			'owner.4.street1'=>'41 E 300 N',
			'owner.4.street2'=>'',
			'owner.4.city'=>'Spanish Fork',
			'owner.4.state'=>'UT',
			'owner.4.zipCode'=>'84653',
			'owner.4.phone'=>'5555551212',
			'owner.4.email'=>'[email protected]',
			'owner.4.birthDate'=>'19670210',
			'owner.4.socialSecurity'=>'123456789',
			'owner.4.countryCode'=>'US',
			'owner.4.stakePercentage'=>'10',
			'business.businessName'=>'Start Industries',
			'business.legalName'=>'Start Industries',
			'business.street1'=>'41 E 300 N',
			'business.street2'=>'',
			'business.city'=>'Anywhere',
			'business.state'=>'CT',
			'business.zipCode'=>'06000',
			'business.timeZoneCode'=>'EST',
			'business.descriptorPhone'=>'8604500119',
			'business.email'=>'[email protected]',
			'business.webSite'=>'',
			'business.taxId'=>'147852369',
			'business.ownershipStructureType'=>'C',
			'business.description'=>'Ghostbusting',
			'estimates.annualCardsVolume'=>'111111',
			'estimates.annualDirectDebitVolume'=>'222222',
			'estimates.avgCardsTransactionAmount'=>'2222',
			'estimates.avgDirectDebitTransactionAmount'=>'1111',
			'estimates.maxTransactionAmount'=>'12123',
			'business.countryCode'=>'US',
			'business.merchantCategoryCode'=>'7399',
			'business.currencyCode'=>'USD',
			'deposit.bankName'=>'Stark Bank',
			'deposit.holderName'=>'Tony Stark',
			'deposit.accountType'=>'C',
			'deposit.routingNumber'=>'324377516',
			'deposit.accountNumber'=>'123456789',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                    
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/gates/onboarding?",

			 "requestType=create"
			+ "&userName={{userName}}"
			+ "&password={{password}}"
			+ "&profileId=11257624370"
			+ "&resellerId=1"
			+ "&portfolioId=100"
			+ "&feeTemplateId=100028"
			+ "&processingConfigurationScript=zift10"
			+ "&merchantType=M"
			+ "&merchantId="
			+ "¬ifyURL="
			+ "&cancelURL="
			+ "&returnURL="
			+ "&returnURLPolicy=page"
			+ "&isEmbedded=0"
			+ "&pageFormat="
			+ "&officer.firstName=Tony"
			+ "&officer.lastName=Stark"
			+ "&officer.street1=41 E 300 N"
			+ "&officer.street2="
			+ "&officer.city=Spanish Fork"
			+ "&officer.state=UT"
			+ "&officer.zipCode=84653"
			+ "&officer.phone=5555551212"
			+ "[email protected]"
			+ "&officer.birthDate=19670210"
			+ "&officer.socialSecurity=123456789"
			+ "&officer.countryCode=US"
			+ "&officer.stakePercentage=10"
			+ "&owner.1.firstName=First"
			+ "&owner.1.lastName=Owner"
			+ "&owner.1.street1=41 E 300 N"
			+ "&owner.1.street2="
			+ "&owner.1.city=Spanish Fork"
			+ "&owner.1.state=UT"
			+ "&owner.1.zipCode=84653"
			+ "&owner.1.phone=5555551212"
			+ "[email protected]"
			+ "&owner.1.birthDate=19670210"
			+ "&owner.1.socialSecurity=123456789"
			+ "&owner.1.countryCode=US"
			+ "&owner.1.stakePercentage=200"
			+ "&owner.2.firstName=Second"
			+ "&owner.2.lastName=Owner"
			+ "&owner.2.street1=41 E 300 N"
			+ "&owner.2.street2="
			+ "&owner.2.city=Spanish Fork"
			+ "&owner.2.state=UT"
			+ "&owner.2.zipCode=84653"
			+ "&owner.2.phone=5555551212"
			+ "[email protected]"
			+ "&owner.2.birthDate=19670210"
			+ "&owner.2.socialSecurity=123456789"
			+ "&owner.2.countryCode=US"
			+ "&owner.2.stakePercentage=10"
			+ "&owner.3.firstName=Third"
			+ "&owner.3.lastName=Owner"
			+ "&owner.3.street1=41 E 300 N"
			+ "&owner.3.street2="
			+ "&owner.3.city=Spanish Fork"
			+ "&owner.3.state=UT"
			+ "&owner.3.zipCode=84653"
			+ "&owner.3.phone=5555551212"
			+ "[email protected]"
			+ "&owner.3.birthDate=19670210"
			+ "&owner.3.socialSecurity=123456789"
			+ "&owner.3.countryCode=US"
			+ "&owner.3.stakePercentage=10"
			+ "&owner.4.firstName=Fourth"
			+ "&owner.4.lastName=Owner"
			+ "&owner.4.street1=41 E 300 N"
			+ "&owner.4.street2="
			+ "&owner.4.city=Spanish Fork"
			+ "&owner.4.state=UT"
			+ "&owner.4.zipCode=84653"
			+ "&owner.4.phone=5555551212"
			+ "[email protected]"
			+ "&owner.4.birthDate=19670210"
			+ "&owner.4.socialSecurity=123456789"
			+ "&owner.4.countryCode=US"
			+ "&owner.4.stakePercentage=10"
			+ "&business.businessName=Start Industries"
			+ "&business.legalName=Start Industries"
			+ "&business.street1=41 E 300 N"
			+ "&business.street2="
			+ "&business.city=Anywhere"
			+ "&business.state=CT"
			+ "&business.zipCode=06000"
			+ "&business.timeZoneCode=EST"
			+ "&business.descriptorPhone=8604500119"
			+ "[email protected]"
			+ "&business.webSite="
			+ "&business.taxId=147852369"
			+ "&business.ownershipStructureType=C"
			+ "&business.description=Ghostbusting"
			+ "&estimates.annualCardsVolume=111111"
			+ "&estimates.annualDirectDebitVolume=222222"
			+ "&estimates.avgCardsTransactionAmount=2222"
			+ "&estimates.avgDirectDebitTransactionAmount=1111"
			+ "&estimates.maxTransactionAmount=12123"
			+ "&business.countryCode=US"
			+ "&business.merchantCategoryCode=7399"
			+ "&business.currencyCode=USD"
			+ "&deposit.bankName=Stark Bank"
			+ "&deposit.holderName=Tony Stark"
			+ "&deposit.accountType=C"
			+ "&deposit.routingNumber=324377516"
			+ "&deposit.accountNumber=123456789"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                    
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/gates/onboarding?")
         request.Method = "POST"
         Dim postData As String
			 postData = "requestType=create"
			 postData =  postData + "&userName={{userName}}"
			 postData =  postData + "&password={{password}}"
			 postData =  postData + "&profileId=11257624370"
			 postData =  postData + "&resellerId=1"
			 postData =  postData + "&portfolioId=100"
			 postData =  postData + "&feeTemplateId=100028"
			 postData =  postData + "&processingConfigurationScript=zift10"
			 postData =  postData + "&merchantType=M"
			 postData =  postData + "&merchantId="
			 postData =  postData + "¬ifyURL="
			 postData =  postData + "&cancelURL="
			 postData =  postData + "&returnURL="
			 postData =  postData + "&returnURLPolicy=page"
			 postData =  postData + "&isEmbedded=0"
			 postData =  postData + "&pageFormat="
			 postData =  postData + "&officer.firstName=Tony"
			 postData =  postData + "&officer.lastName=Stark"
			 postData =  postData + "&officer.street1=41 E 300 N"
			 postData =  postData + "&officer.street2="
			 postData =  postData + "&officer.city=Spanish Fork"
			 postData =  postData + "&officer.state=UT"
			 postData =  postData + "&officer.zipCode=84653"
			 postData =  postData + "&officer.phone=5555551212"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&officer.birthDate=19670210"
			 postData =  postData + "&officer.socialSecurity=123456789"
			 postData =  postData + "&officer.countryCode=US"
			 postData =  postData + "&officer.stakePercentage=10"
			 postData =  postData + "&owner.1.firstName=First"
			 postData =  postData + "&owner.1.lastName=Owner"
			 postData =  postData + "&owner.1.street1=41 E 300 N"
			 postData =  postData + "&owner.1.street2="
			 postData =  postData + "&owner.1.city=Spanish Fork"
			 postData =  postData + "&owner.1.state=UT"
			 postData =  postData + "&owner.1.zipCode=84653"
			 postData =  postData + "&owner.1.phone=5555551212"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&owner.1.birthDate=19670210"
			 postData =  postData + "&owner.1.socialSecurity=123456789"
			 postData =  postData + "&owner.1.countryCode=US"
			 postData =  postData + "&owner.1.stakePercentage=200"
			 postData =  postData + "&owner.2.firstName=Second"
			 postData =  postData + "&owner.2.lastName=Owner"
			 postData =  postData + "&owner.2.street1=41 E 300 N"
			 postData =  postData + "&owner.2.street2="
			 postData =  postData + "&owner.2.city=Spanish Fork"
			 postData =  postData + "&owner.2.state=UT"
			 postData =  postData + "&owner.2.zipCode=84653"
			 postData =  postData + "&owner.2.phone=5555551212"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&owner.2.birthDate=19670210"
			 postData =  postData + "&owner.2.socialSecurity=123456789"
			 postData =  postData + "&owner.2.countryCode=US"
			 postData =  postData + "&owner.2.stakePercentage=10"
			 postData =  postData + "&owner.3.firstName=Third"
			 postData =  postData + "&owner.3.lastName=Owner"
			 postData =  postData + "&owner.3.street1=41 E 300 N"
			 postData =  postData + "&owner.3.street2="
			 postData =  postData + "&owner.3.city=Spanish Fork"
			 postData =  postData + "&owner.3.state=UT"
			 postData =  postData + "&owner.3.zipCode=84653"
			 postData =  postData + "&owner.3.phone=5555551212"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&owner.3.birthDate=19670210"
			 postData =  postData + "&owner.3.socialSecurity=123456789"
			 postData =  postData + "&owner.3.countryCode=US"
			 postData =  postData + "&owner.3.stakePercentage=10"
			 postData =  postData + "&owner.4.firstName=Fourth"
			 postData =  postData + "&owner.4.lastName=Owner"
			 postData =  postData + "&owner.4.street1=41 E 300 N"
			 postData =  postData + "&owner.4.street2="
			 postData =  postData + "&owner.4.city=Spanish Fork"
			 postData =  postData + "&owner.4.state=UT"
			 postData =  postData + "&owner.4.zipCode=84653"
			 postData =  postData + "&owner.4.phone=5555551212"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&owner.4.birthDate=19670210"
			 postData =  postData + "&owner.4.socialSecurity=123456789"
			 postData =  postData + "&owner.4.countryCode=US"
			 postData =  postData + "&owner.4.stakePercentage=10"
			 postData =  postData + "&business.businessName=Start Industries"
			 postData =  postData + "&business.legalName=Start Industries"
			 postData =  postData + "&business.street1=41 E 300 N"
			 postData =  postData + "&business.street2="
			 postData =  postData + "&business.city=Anywhere"
			 postData =  postData + "&business.state=CT"
			 postData =  postData + "&business.zipCode=06000"
			 postData =  postData + "&business.timeZoneCode=EST"
			 postData =  postData + "&business.descriptorPhone=8604500119"
			 postData =  postData + "[email protected]"
			 postData =  postData + "&business.webSite="
			 postData =  postData + "&business.taxId=147852369"
			 postData =  postData + "&business.ownershipStructureType=C"
			 postData =  postData + "&business.description=Ghostbusting"
			 postData =  postData + "&estimates.annualCardsVolume=111111"
			 postData =  postData + "&estimates.annualDirectDebitVolume=222222"
			 postData =  postData + "&estimates.avgCardsTransactionAmount=2222"
			 postData =  postData + "&estimates.avgDirectDebitTransactionAmount=1111"
			 postData =  postData + "&estimates.maxTransactionAmount=12123"
			 postData =  postData + "&business.countryCode=US"
			 postData =  postData + "&business.merchantCategoryCode=7399"
			 postData =  postData + "&business.currencyCode=USD"
			 postData =  postData + "&deposit.bankName=Stark Bank"
			 postData =  postData + "&deposit.holderName=Tony Stark"
			 postData =  postData + "&deposit.accountType=C"
			 postData =  postData + "&deposit.routingNumber=324377516"
			 postData =  postData + "&deposit.accountNumber=123456789"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                    
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/gates/onboarding?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'requestType'=>'create',
			'userName'=>'{{userName}}',
			'password'=>'{{password}}',
			'profileId'=>'11257624370',
			'resellerId'=>'1',
			'portfolioId'=>'100',
			'feeTemplateId'=>'100028',
			'processingConfigurationScript'=>'zift10',
			'merchantType'=>'M',
			'merchantId'=>'',
			'notifyURL'=>'',
			'cancelURL'=>'',
			'returnURL'=>'',
			'returnURLPolicy'=>'page',
			'isEmbedded'=>'0',
			'pageFormat'=>'',
			'officer.firstName'=>'Tony',
			'officer.lastName'=>'Stark',
			'officer.street1'=>'41 E 300 N',
			'officer.street2'=>'',
			'officer.city'=>'Spanish Fork',
			'officer.state'=>'UT',
			'officer.zipCode'=>'84653',
			'officer.phone'=>'5555551212',
			'officer.email'=>'[email protected]',
			'officer.birthDate'=>'19670210',
			'officer.socialSecurity'=>'123456789',
			'officer.countryCode'=>'US',
			'officer.stakePercentage'=>'10',
			'owner.1.firstName'=>'First',
			'owner.1.lastName'=>'Owner',
			'owner.1.street1'=>'41 E 300 N',
			'owner.1.street2'=>'',
			'owner.1.city'=>'Spanish Fork',
			'owner.1.state'=>'UT',
			'owner.1.zipCode'=>'84653',
			'owner.1.phone'=>'5555551212',
			'owner.1.email'=>'[email protected]',
			'owner.1.birthDate'=>'19670210',
			'owner.1.socialSecurity'=>'123456789',
			'owner.1.countryCode'=>'US',
			'owner.1.stakePercentage'=>'200',
			'owner.2.firstName'=>'Second',
			'owner.2.lastName'=>'Owner',
			'owner.2.street1'=>'41 E 300 N',
			'owner.2.street2'=>'',
			'owner.2.city'=>'Spanish Fork',
			'owner.2.state'=>'UT',
			'owner.2.zipCode'=>'84653',
			'owner.2.phone'=>'5555551212',
			'owner.2.email'=>'[email protected]',
			'owner.2.birthDate'=>'19670210',
			'owner.2.socialSecurity'=>'123456789',
			'owner.2.countryCode'=>'US',
			'owner.2.stakePercentage'=>'10',
			'owner.3.firstName'=>'Third',
			'owner.3.lastName'=>'Owner',
			'owner.3.street1'=>'41 E 300 N',
			'owner.3.street2'=>'',
			'owner.3.city'=>'Spanish Fork',
			'owner.3.state'=>'UT',
			'owner.3.zipCode'=>'84653',
			'owner.3.phone'=>'5555551212',
			'owner.3.email'=>'[email protected]',
			'owner.3.birthDate'=>'19670210',
			'owner.3.socialSecurity'=>'123456789',
			'owner.3.countryCode'=>'US',
			'owner.3.stakePercentage'=>'10',
			'owner.4.firstName'=>'Fourth',
			'owner.4.lastName'=>'Owner',
			'owner.4.street1'=>'41 E 300 N',
			'owner.4.street2'=>'',
			'owner.4.city'=>'Spanish Fork',
			'owner.4.state'=>'UT',
			'owner.4.zipCode'=>'84653',
			'owner.4.phone'=>'5555551212',
			'owner.4.email'=>'[email protected]',
			'owner.4.birthDate'=>'19670210',
			'owner.4.socialSecurity'=>'123456789',
			'owner.4.countryCode'=>'US',
			'owner.4.stakePercentage'=>'10',
			'business.businessName'=>'Start Industries',
			'business.legalName'=>'Start Industries',
			'business.street1'=>'41 E 300 N',
			'business.street2'=>'',
			'business.city'=>'Anywhere',
			'business.state'=>'CT',
			'business.zipCode'=>'06000',
			'business.timeZoneCode'=>'EST',
			'business.descriptorPhone'=>'8604500119',
			'business.email'=>'[email protected]',
			'business.webSite'=>'',
			'business.taxId'=>'147852369',
			'business.ownershipStructureType'=>'C',
			'business.description'=>'Ghostbusting',
			'estimates.annualCardsVolume'=>'111111',
			'estimates.annualDirectDebitVolume'=>'222222',
			'estimates.avgCardsTransactionAmount'=>'2222',
			'estimates.avgDirectDebitTransactionAmount'=>'1111',
			'estimates.maxTransactionAmount'=>'12123',
			'business.countryCode'=>'US',
			'business.merchantCategoryCode'=>'7399',
			'business.currencyCode'=>'USD',
			'deposit.bankName'=>'Stark Bank',
			'deposit.holderName'=>'Tony Stark',
			'deposit.accountType'=>'C',
			'deposit.routingNumber'=>'324377516',
			'deposit.accountNumber'=>'123456789',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                    
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/gates/onboarding?',
    method: 'POST',
    headers: headers,
    form: {
			'requestType':'create',
			'userName':'{{userName}}',
			'password':'{{password}}',
			'profileId':'11257624370',
			'resellerId':'1',
			'portfolioId':'100',
			'feeTemplateId':'100028',
			'processingConfigurationScript':'zift10',
			'merchantType':'M',
			'merchantId':'',
			'notifyURL':'',
			'cancelURL':'',
			'returnURL':'',
			'returnURLPolicy':'page',
			'isEmbedded':'0',
			'pageFormat':'',
			'officer.firstName':'Tony',
			'officer.lastName':'Stark',
			'officer.street1':'41 E 300 N',
			'officer.street2':'',
			'officer.city':'Spanish Fork',
			'officer.state':'UT',
			'officer.zipCode':'84653',
			'officer.phone':'5555551212',
			'officer.email':'[email protected]',
			'officer.birthDate':'19670210',
			'officer.socialSecurity':'123456789',
			'officer.countryCode':'US',
			'officer.stakePercentage':'10',
			'owner.1.firstName':'First',
			'owner.1.lastName':'Owner',
			'owner.1.street1':'41 E 300 N',
			'owner.1.street2':'',
			'owner.1.city':'Spanish Fork',
			'owner.1.state':'UT',
			'owner.1.zipCode':'84653',
			'owner.1.phone':'5555551212',
			'owner.1.email':'[email protected]',
			'owner.1.birthDate':'19670210',
			'owner.1.socialSecurity':'123456789',
			'owner.1.countryCode':'US',
			'owner.1.stakePercentage':'200',
			'owner.2.firstName':'Second',
			'owner.2.lastName':'Owner',
			'owner.2.street1':'41 E 300 N',
			'owner.2.street2':'',
			'owner.2.city':'Spanish Fork',
			'owner.2.state':'UT',
			'owner.2.zipCode':'84653',
			'owner.2.phone':'5555551212',
			'owner.2.email':'[email protected]',
			'owner.2.birthDate':'19670210',
			'owner.2.socialSecurity':'123456789',
			'owner.2.countryCode':'US',
			'owner.2.stakePercentage':'10',
			'owner.3.firstName':'Third',
			'owner.3.lastName':'Owner',
			'owner.3.street1':'41 E 300 N',
			'owner.3.street2':'',
			'owner.3.city':'Spanish Fork',
			'owner.3.state':'UT',
			'owner.3.zipCode':'84653',
			'owner.3.phone':'5555551212',
			'owner.3.email':'[email protected]',
			'owner.3.birthDate':'19670210',
			'owner.3.socialSecurity':'123456789',
			'owner.3.countryCode':'US',
			'owner.3.stakePercentage':'10',
			'owner.4.firstName':'Fourth',
			'owner.4.lastName':'Owner',
			'owner.4.street1':'41 E 300 N',
			'owner.4.street2':'',
			'owner.4.city':'Spanish Fork',
			'owner.4.state':'UT',
			'owner.4.zipCode':'84653',
			'owner.4.phone':'5555551212',
			'owner.4.email':'[email protected]',
			'owner.4.birthDate':'19670210',
			'owner.4.socialSecurity':'123456789',
			'owner.4.countryCode':'US',
			'owner.4.stakePercentage':'10',
			'business.businessName':'Start Industries',
			'business.legalName':'Start Industries',
			'business.street1':'41 E 300 N',
			'business.street2':'',
			'business.city':'Anywhere',
			'business.state':'CT',
			'business.zipCode':'06000',
			'business.timeZoneCode':'EST',
			'business.descriptorPhone':'8604500119',
			'business.email':'[email protected]',
			'business.webSite':'',
			'business.taxId':'147852369',
			'business.ownershipStructureType':'C',
			'business.description':'Ghostbusting',
			'estimates.annualCardsVolume':'111111',
			'estimates.annualDirectDebitVolume':'222222',
			'estimates.avgCardsTransactionAmount':'2222',
			'estimates.avgDirectDebitTransactionAmount':'1111',
			'estimates.maxTransactionAmount':'12123',
			'business.countryCode':'US',
			'business.merchantCategoryCode':'7399',
			'business.currencyCode':'USD',
			'deposit.bankName':'Stark Bank',
			'deposit.holderName':'Tony Stark',
			'deposit.accountType':'C',
			'deposit.routingNumber':'324377516',
			'deposit.accountNumber':'123456789'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                    
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/gates/onboarding?',
       [
			requestType=>'create',
			userName=>'{{userName}}',
			password=>'{{password}}',
			profileId=>'11257624370',
			resellerId=>'1',
			portfolioId=>'100',
			feeTemplateId=>'100028',
			processingConfigurationScript=>'zift10',
			merchantType=>'M',
			merchantId=>'',
			notifyURL=>'',
			cancelURL=>'',
			returnURL=>'',
			returnURLPolicy=>'page',
			isEmbedded=>'0',
			pageFormat=>'',
			officer.firstName=>'Tony',
			officer.lastName=>'Stark',
			officer.street1=>'41 E 300 N',
			officer.street2=>'',
			officer.city=>'Spanish Fork',
			officer.state=>'UT',
			officer.zipCode=>'84653',
			officer.phone=>'5555551212',
			officer.email=>'[email protected]',
			officer.birthDate=>'19670210',
			officer.socialSecurity=>'123456789',
			officer.countryCode=>'US',
			officer.stakePercentage=>'10',
			owner.1.firstName=>'First',
			owner.1.lastName=>'Owner',
			owner.1.street1=>'41 E 300 N',
			owner.1.street2=>'',
			owner.1.city=>'Spanish Fork',
			owner.1.state=>'UT',
			owner.1.zipCode=>'84653',
			owner.1.phone=>'5555551212',
			owner.1.email=>'[email protected]',
			owner.1.birthDate=>'19670210',
			owner.1.socialSecurity=>'123456789',
			owner.1.countryCode=>'US',
			owner.1.stakePercentage=>'200',
			owner.2.firstName=>'Second',
			owner.2.lastName=>'Owner',
			owner.2.street1=>'41 E 300 N',
			owner.2.street2=>'',
			owner.2.city=>'Spanish Fork',
			owner.2.state=>'UT',
			owner.2.zipCode=>'84653',
			owner.2.phone=>'5555551212',
			owner.2.email=>'[email protected]',
			owner.2.birthDate=>'19670210',
			owner.2.socialSecurity=>'123456789',
			owner.2.countryCode=>'US',
			owner.2.stakePercentage=>'10',
			owner.3.firstName=>'Third',
			owner.3.lastName=>'Owner',
			owner.3.street1=>'41 E 300 N',
			owner.3.street2=>'',
			owner.3.city=>'Spanish Fork',
			owner.3.state=>'UT',
			owner.3.zipCode=>'84653',
			owner.3.phone=>'5555551212',
			owner.3.email=>'[email protected]',
			owner.3.birthDate=>'19670210',
			owner.3.socialSecurity=>'123456789',
			owner.3.countryCode=>'US',
			owner.3.stakePercentage=>'10',
			owner.4.firstName=>'Fourth',
			owner.4.lastName=>'Owner',
			owner.4.street1=>'41 E 300 N',
			owner.4.street2=>'',
			owner.4.city=>'Spanish Fork',
			owner.4.state=>'UT',
			owner.4.zipCode=>'84653',
			owner.4.phone=>'5555551212',
			owner.4.email=>'[email protected]',
			owner.4.birthDate=>'19670210',
			owner.4.socialSecurity=>'123456789',
			owner.4.countryCode=>'US',
			owner.4.stakePercentage=>'10',
			business.businessName=>'Start Industries',
			business.legalName=>'Start Industries',
			business.street1=>'41 E 300 N',
			business.street2=>'',
			business.city=>'Anywhere',
			business.state=>'CT',
			business.zipCode=>'06000',
			business.timeZoneCode=>'EST',
			business.descriptorPhone=>'8604500119',
			business.email=>'[email protected]',
			business.webSite=>'',
			business.taxId=>'147852369',
			business.ownershipStructureType=>'C',
			business.description=>'Ghostbusting',
			estimates.annualCardsVolume=>'111111',
			estimates.annualDirectDebitVolume=>'222222',
			estimates.avgCardsTransactionAmount=>'2222',
			estimates.avgDirectDebitTransactionAmount=>'1111',
			estimates.maxTransactionAmount=>'12123',
			business.countryCode=>'US',
			business.merchantCategoryCode=>'7399',
			business.currencyCode=>'USD',
			deposit.bankName=>'Stark Bank',
			deposit.holderName=>'Tony Stark',
			deposit.accountType=>'C',
			deposit.routingNumber=>'324377516',
			deposit.accountNumber=>'123456789'


      ],
    );
    print $req->content;
                    
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/gates/onboarding?'
	    values = {
			'requestType':'create',
			'userName':'{{userName}}',
			'password':'{{password}}',
			'profileId':'11257624370',
			'resellerId':'1',
			'portfolioId':'100',
			'feeTemplateId':'100028',
			'processingConfigurationScript':'zift10',
			'merchantType':'M',
			'merchantId':'',
			'notifyURL':'',
			'cancelURL':'',
			'returnURL':'',
			'returnURLPolicy':'page',
			'isEmbedded':'0',
			'pageFormat':'',
			'officer.firstName':'Tony',
			'officer.lastName':'Stark',
			'officer.street1':'41 E 300 N',
			'officer.street2':'',
			'officer.city':'Spanish Fork',
			'officer.state':'UT',
			'officer.zipCode':'84653',
			'officer.phone':'5555551212',
			'officer.email':'[email protected]',
			'officer.birthDate':'19670210',
			'officer.socialSecurity':'123456789',
			'officer.countryCode':'US',
			'officer.stakePercentage':'10',
			'owner.1.firstName':'First',
			'owner.1.lastName':'Owner',
			'owner.1.street1':'41 E 300 N',
			'owner.1.street2':'',
			'owner.1.city':'Spanish Fork',
			'owner.1.state':'UT',
			'owner.1.zipCode':'84653',
			'owner.1.phone':'5555551212',
			'owner.1.email':'[email protected]',
			'owner.1.birthDate':'19670210',
			'owner.1.socialSecurity':'123456789',
			'owner.1.countryCode':'US',
			'owner.1.stakePercentage':'200',
			'owner.2.firstName':'Second',
			'owner.2.lastName':'Owner',
			'owner.2.street1':'41 E 300 N',
			'owner.2.street2':'',
			'owner.2.city':'Spanish Fork',
			'owner.2.state':'UT',
			'owner.2.zipCode':'84653',
			'owner.2.phone':'5555551212',
			'owner.2.email':'[email protected]',
			'owner.2.birthDate':'19670210',
			'owner.2.socialSecurity':'123456789',
			'owner.2.countryCode':'US',
			'owner.2.stakePercentage':'10',
			'owner.3.firstName':'Third',
			'owner.3.lastName':'Owner',
			'owner.3.street1':'41 E 300 N',
			'owner.3.street2':'',
			'owner.3.city':'Spanish Fork',
			'owner.3.state':'UT',
			'owner.3.zipCode':'84653',
			'owner.3.phone':'5555551212',
			'owner.3.email':'[email protected]',
			'owner.3.birthDate':'19670210',
			'owner.3.socialSecurity':'123456789',
			'owner.3.countryCode':'US',
			'owner.3.stakePercentage':'10',
			'owner.4.firstName':'Fourth',
			'owner.4.lastName':'Owner',
			'owner.4.street1':'41 E 300 N',
			'owner.4.street2':'',
			'owner.4.city':'Spanish Fork',
			'owner.4.state':'UT',
			'owner.4.zipCode':'84653',
			'owner.4.phone':'5555551212',
			'owner.4.email':'[email protected]',
			'owner.4.birthDate':'19670210',
			'owner.4.socialSecurity':'123456789',
			'owner.4.countryCode':'US',
			'owner.4.stakePercentage':'10',
			'business.businessName':'Start Industries',
			'business.legalName':'Start Industries',
			'business.street1':'41 E 300 N',
			'business.street2':'',
			'business.city':'Anywhere',
			'business.state':'CT',
			'business.zipCode':'06000',
			'business.timeZoneCode':'EST',
			'business.descriptorPhone':'8604500119',
			'business.email':'[email protected]',
			'business.webSite':'',
			'business.taxId':'147852369',
			'business.ownershipStructureType':'C',
			'business.description':'Ghostbusting',
			'estimates.annualCardsVolume':'111111',
			'estimates.annualDirectDebitVolume':'222222',
			'estimates.avgCardsTransactionAmount':'2222',
			'estimates.avgDirectDebitTransactionAmount':'1111',
			'estimates.maxTransactionAmount':'12123',
			'business.countryCode':'US',
			'business.merchantCategoryCode':'7399',
			'business.currencyCode':'USD',
			'deposit.bankName':'Stark Bank',
			'deposit.holderName':'Tony Stark',
			'deposit.accountType':'C',
			'deposit.routingNumber':'324377516',
			'deposit.accountNumber':'123456789'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                    

List of parameters sent back as part of the API response.

Name Value/Format Description
responseTypecreateIndicates the type of response.
applicationCodeString (15)Identifier of a merchant's onboarding application within a submitter's system. When present in the request this field is sent back in the response via the notify URL.
applicationIdLongUnique identifier of the merchant's onboarding application generated by Zift . When present in the request this field is sent back in the response via the notify URL.
merchantIdIntegerAssociates the merchant application to a Zift merchant. When present in the request this field is sent back in the response via the notify URL.
accountIdIntegerRepresents the accountId of the newly created merchant. This ID is present when the new merchant application is approved or in review (also see merchantCreationPolicy). This ID is not present for declined or pending merchant applications.
cardsDescriptorString (10)Default descriptor for payment card transactions that is assigned during onboarding. It consists of the combination of business name and customer service phone (also see business.paymentCardDescriptor). The value is shown on merchant statements.
directDebitDescriptorString (10)Default descriptor for direct debit transactions that is assigned during onboarding. It consists of the combination of business name and customer service phone (also see business.directDebitDescriptor). The value is shown on merchant statements.
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information

Hosted Creation

In addition to our Onboarding API, we also offer a hosted webpage containing a personalized onboarding application that we can set up upon your request. This is a branded form with your company's logo. To see an example visit apply.zift.io/demo. Your form will have its own URL on our apply.zift.io domain for an easy-to-remember website endpoint to refer potential clients to. We can also implement a webhook from your custom onboarding form to notify your system when an application is completed.


 

Billing API

How it works

The billing system is specifically designed for software platforms that wish to create basic subscription models for their users but do not have capabilities in their own system to perform recurring billing. If you have your own billing system you can use our tokens to execute recurring payment. See our Tokenization API for more details.

Through the API you can create customers, associate payment methods and subscribe these customers to your pre-defined payment plans. At this point our system will take over and perform regular billing according to the schedule defined in your payment plan.

Recurring billing should not be confused with real-time transactions. Real-time transactions are accomplished through our Transaction API. Use the real-time Transaction API if you are processing transactions on demand, and use the Billing API if you need to facilitate a billing schedule and would like Zift to manage the schedule. Examples of real-time transactions include one-off transactions, single payments for products or services and shopping cart integrations. Essentially real-time transactions are transactions that occur once and are not on a specific schedule.

Customers

A customer object represents a record in the billing system which consists of a customer name and basic address information. Customer records can then be associated with other objects such as payment options or payment plans resulting in a subscription.

The ~create request creates a customer which then can save payment methods, and enroll in subscriptions.

Name Value or Format Description
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~find request takes in a set of URL query parameters to filter by, and then returns a list of Customers matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
accountIdIntegerUnique identifier of a merchant account. This ID is generated by Zift when the merchant account is created.
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
streetString (128)The street address of the customer,
cityString (50)The city of the customer.
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~load functionality provides the ability to retrieve the current configuration for a single specified customer in .json format. The parameters are described in the Response Object tab.

The Customer~load request will respond with a single Customer in json format. The parameters are shown in this table.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~modify request takes in parameters to modify the customer specified in the URL endpoint.

Name Value or Format Description
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

Payment Options

A payment option object represents a payment method in the billing system and is associated with a specific customer. A payment option can only be associated with a single customer, however, a customer may be associated with more than one payment option. A payment option can represent a credit card or ACH payment method.

The ~create request creates a Payment Option.

Name Value or Format Description
holderNameString (150)Required
Calculated field. Combines the firstName and lastName parameters from the request.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountNumberString (20)Conditional
Credit card or bank account number.
accountAccessoryString (10)Required
Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenCodeString (40)Conditional
Code of the token associated with the particular payment option.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
cscString(4)Card security code (three digits on the back of a payment card).
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
typeEnumType of the payment method.
accountNumberString (20)Credit card or bank account number.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenCodeString (40)Code of the token associated with the particular payment option.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
cscString(4)Card security code (three digits on the back of a payment card).
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
customerIdInt (20)The ID of the customer in the system.
cardTypeString(20)Type of the card associated with payment option. Used to define the card icon rendered on the user interface.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~find request takes in a set of parameters to filter by, and then returns a list of Payment Options matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
typeEnumType of the payment method.
accountNumberString (20)Credit card or bank account number.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenCodeString (40)Code of the token associated with the particular payment option.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
cscString(4)Card security code (three digits on the back of a payment card).
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
customerIdInt (20)The ID of the customer in the system.
cardTypeString(20)Type of the card associated with payment option. Used to define the card icon rendered on the user interface.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~load functionality provides the ability to retrieve the current payment options from a single specified customer in .json format. The parameters are described in the Response Object tab.


The Customer~load request will respond with a single Customer in json format. The parameters are shown in this table.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
typeEnumType of the payment method.
accountNumberString (20)Credit card or bank account number.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenCodeString (40)Code of the token associated with the particular payment option.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
cscString(4)Card security code (three digits on the back of a payment card).
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
customerIdInt (20)The ID of the customer in the system.
cardTypeString(20)Type of the card associated with payment option. Used to define the card icon rendered on the user interface.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~modify request takes in parameters to modify the customer specified in the URL endpoint. Not all parameters associated with a payment option may be changed. See the request tab for a list of parameters that may be modified.

Payment Option Create Request

Name Value or Format Description
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
holderNameString (150)Name of bank account or credit card holder.
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
stateString (2)The state of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
zipCodeString (15)The ZIP or postal code of the customer.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
typeEnumType of the payment method.
accountNumberString (20)Credit card or bank account number.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
tokenCodeString (40)Code of the token associated with the particular payment option.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
cscString(4)Card security code (three digits on the back of a payment card).
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
zipCodeString (15)The ZIP or postal code of the customer.
customerIdInt (20)The ID of the customer in the system.
cardTypeString(20)Type of the card associated with payment option. Used to define the card icon rendered on the user interface.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~process request creates and processes a transaction on the specified customer's account, using the payment option referenced in the call. The response is a .json object with the transaction details.

Payment Option Create Request

Name Value or Format Description
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
typeEnumType of the transaction to be processed.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction.
accountTypeEnumType of the account that is being used in the transaction.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
accountNumberString (20)Credit card or bank account number.
noteString (255)Any notes related to the transaction.
processingInfoObjectThe processingInfo object is a json object containing further details of a transaction. This field only is included in a transaction record if the transaction has been processed. See Processing Info for the parameters included in this object.

Subscriptions

A subscription object represents an association between a specific customer and payment plan. The referenced payment plan governs the payment schedule and the payment option governs the payment method to be used when billing occurs.

The ~create request creates a Subscription.

Name Value or Format Description
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
noteString (255)Any notes related to the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

The ~find request takes in a set of parameters to filter by, and then returns a list of Subscription objects in .json format matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
createDateFromDate yyyy-MM-ddDate when the subscription was created. The beginning of the range you want to filter by.
createDateToDate yyyy-MM-ddDate when the subscription was created. The end of the range you want to filter by.
lastBillingDateFromDate yyyy--MM-ddDate when the last invoice was created. The beginning of the range you want to filter by.
lastBillingDateToDate yyyy--MM-ddDate when the last invoice was created. The end of the range you want to filter by.
nextBillingDateFromDate yyyy--MM-ddDate when the next invoice will be created. The beginning of the range you want to filter by.
nextBillingDateToDate yyyy--MM-ddDate when the next invoice will be created. The end of the range you want to filter by.
amountFromInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500 The beginning of the range to filter by.
amountToInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500 The end of the range to filter by.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
statusEnumRepresents the current status of the payment plan.
nameString (255)Name of the associated payment plan to search for.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

The adjustments~find request takes in a set of parameters to filter by, and then returns the subscription adjustments as a list of Adjustment objects matching the search

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
effectiveDateDate yyyy-MM-ddEffective date of when the adjustment begins.
endDateDate yyyy-MM-ddDate of when the adjustment ends.
noteString (255)Any notes related to the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
lengthInt (3)Amount of payments for which the adjustment will take place.

The ~load functionality provides the ability to retrieve the current settings from a single specified subscription in .json format. The parameters are described in the Response Object tab.


The Subscription~load request will respond with the settings for a single subscription in json format. The parameters are shown in this table.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
firstNameString (50)First name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the first name of the company's contact person.
lastNameString (50)Last name of the customer. This field is set for both person and organization types of customers. For organizations, this field is used for the last name of the company's contact person.
organizationNameString (50)Name of the organization associated with a customer.
emailString (100)Email associated with the customer.
phoneString (20)Phone number of the customer.
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
street1String (128)Street address of the customer. (line 1).
street2String (128)Street address of the customer. (line 2).
cityString (50)The city of the customer.
countryCodeString (2)The country code of the customer's address. EX: US
stateString (2)The state of the customer.
holderNameString (150)Calculated field. Combines the firstName and lastName parameters from the request.
addressString(100)Address associated with a payment card or bank account holder. The value is a concatenation of the street1, street2, city, state, zipCode and countryCode field values.

The ~modify request takes in parameters to modify the note, nextBillingDate, or the paymentOptionId associated with the subscription specified in the URL endpoint.

Name Value or Format Description
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

The ~cancel request cancels a subscription. See the ~uncancel request tab to reactivate a cancelled subscription.

Subscription Cancel Request

Name Value or Format Description
effectiveDateDate yyyy-MM-ddRequired
Effective date of when the adjustment begins.
noteString (255)Any notes related to the adjustment of the payment plan.

The Subscription ~uncancel request will revert a cancelled subscription back to active status. There are no parameters passed. This request fails if the subscription passed to the request is not in a cancelled state.

The Response Object for either Cancel request will return the Subscription Object with the updated parameters.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

The ~freeze request freezes a subscription. See the ~unfreeze request tab to reactivate a frozen subscription.

Subscription Freeze Request

Name Value or Format Description
effectiveDateDate yyyy-MM-ddRequired
Effective date of when the adjustment begins.
lengthInt (3)Required
Amount of payments for which the adjustment will take place.
noteString (255)Any notes related to the adjustment of the payment plan.

The Subscription ~unfreeze request will revert a frozen subscription back to active status. There are no parameters passed. This request fails if the subscription passed to the request is not in a frozen state.

The Response Object for either Freeze request will return the Subscription Object with the updated parameters.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

The ~pause request pauses a subscription. See the ~unpause request tab to reactivate a paused subscription.

Subscription Pause Request

Name Value or Format Description
effectiveDateDate yyyy-MM-ddRequired
Effective date of when the adjustment begins.
noteString (255)Any notes related to the adjustment of the payment plan.

The Subscription ~unpause request will revert a paused subscription back to active status. There are no parameters passed. This request fails if the subscription passed to the request is not in a paused state.

The Response Object for either Pause request will return the Subscription Object with the updated parameters.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
customerIdInt (20)The ID of the customer in the system.
firstBillingDateDate yyyy-MM-ddDate when the first billing occurred.
lastUpdateDateDate yyyy-MM-ddDate when the payment plan was updated for the last time. In the API request, the date must be submitted in yyyy-MM-dd format.
In the API response, the date is returned in yyyy-MM-dd HH:mm:ss format.
lengthInt (3)Time period for which the payment plan will be active. This value is only used when type is set to F - Fixed. This value cannot exceed 3 years cumulative duration, and this duration is calculated in conjunction with your value for the billingCycleType parameter.
For all maximum values, please see here.
nextBillingDateDate yyyy-MM-ddDate when the next billing will occur. In the API request, the date must be submitted in yyyy-MM-dd format.
noteString (255)Any notes related to the payment plan.
paymentOptionIdInt (20)Reference to the customer's payment option used to collect money on the payment plan.
planIdInt (20)Reference to the payment plan the customer is subscribing to.
planNameString (255)Name of the associated payment plan.
statusEnumRepresents the current status of the payment plan.
typeEnumRepresents the type of payment plan. If this value is set to F - Fixed, you must use the length field to specify the duration of the subscription. The maximum duration is 3 years, therefore the value of this field depends on the plan parameter for billingCycleType. See here for the maximum values.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
pendingAdjustmentTypeEnumType of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentEffectiveDateDate yyyy-MM-ddEffective date of the pending payment plan adjustment. The date must be submitted in the yyyy-MM-dd format. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentNoteString (255)Note associated with the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
pendingAdjustmentLengthInt (3)Length of the pending payment plan adjustment. This field is only included in the response if an adjustment was made to a current subscription.
nextInvoicingDateDate yyyy-MM-ddDate when the next invoicing will occur.
firstInvoicingDateDate yyyy-MM-ddDate when the first invoicing occurred.

Transactions

Transactions represent a record of invoices for the customer.

The ~create request creates a Transaction invoice on the referenced customer's account.

Name Value or Format Description
typeEnumType of the transaction to be created
amountInteger (in cents)Required
Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
noteString (255)Any notes related to the transaction.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction to be created
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
noteString (255)Any notes related to the transaction.

The ~find request takes in a set of parameters to filter by, and then returns a list of Transactions matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
createDateFromDate yyyy-MM-ddDate when the subscription was created. The beginning of the range you want to filter by.
createDateToDate yyyy-MM-ddDate when the subscription was created. The end of the range you want to filter by.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction.
accountTypeEnumType of the account that is being used in the transaction.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
accountNumberString (20)Credit card or bank account number.
noteString (255)Any notes related to the transaction.
processingInfoObjectThe processingInfo object is a json object containing further details of a transaction. This field only is included in a transaction record if the transaction has been processed. See Processing Info for the parameters included in this object.

The ~process request creates and processes a transaction based on the specified payment option.

Name Value or Format Description
accountNumberString (20)Credit card or bank account number. This field is required if you are not using the token field.
tokenString (40)The token value represent a credit card or bank account number in the Zift system. Tokens are received as part of previous
sale or sale-auth requests and can be used in subsequent requests. Tokens can also be generated by using the tokenization
API call. This field is required if you are not providing an accountNumber.
accountAccessoryString (10)Card expiration date or bank routing number. This field is required even if it is used with a token.
streetString (128)The street address of the card holder.
cityString (50)The city of the card holder.
stateString (2)The state of the card holder.
countryCodeString (2)The country of the card holder.
zipCodeString (15)The zip code of the card holder.
phoneString (20)Phone number associated with a payment card or bank account holder.
emailString (100)Email associated with a payment card or bank account holder.
typeEnumType of the transaction to be processed.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
noteString (255)Any notes related to the transaction.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction.
accountTypeEnumType of the account that is being used in the transaction.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
accountNumberString (20)Credit card or bank account number.
noteString (255)Any notes related to the transaction.
processingInfoObjectThe processingInfo object is a json object containing further details of a transaction. This field only is included in a transaction record if the transaction has been processed. See Processing Info for the parameters included in this object.

The ~load functionality provides the ability to retrieve the current payment options from a single specified customer in .json format. The parameters are described in the Response Object tab.


The Transaction~load request will respond with a single transaction in json format. The parameters are shown in this table.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction.
accountTypeEnumType of the account that is being used in the transaction.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
accountNumberString (20)Credit card or bank account number.
noteString (255)Any notes related to the transaction.
processingInfoObjectThe processingInfo object is a json object containing further details of a transaction. This field only is included in a transaction record if the transaction has been processed. See Processing Info for the parameters included in this object.

The ~reverse request takes in parameters to reverse the transaction specified in the URL endpoint.


Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
customerIdInt (20)The ID of the customer in the system.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
dueDateDate yyyy-MM-ddDate when the transaction is due. Defaults to the current date if no value is passed.
typeEnumType of the transaction.
accountTypeEnumType of the account that is being used in the transaction.
creatorCodeString(60)Code of the user that created the transaction. Defaults to the API user's username if no value is passed.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
balanceInt (11)Balance of the customer in cents. Ex: $5.00 = 500
accountNumberString (20)Credit card or bank account number.
noteString (255)Any notes related to the transaction.
processingInfoObjectThe processingInfo object is a json object containing further details of a transaction. This field only is included in a transaction record if the transaction has been processed. See Processing Info for the parameters included in this object.

Allocations

The allocations call is used to show the status of funds being collected.

The ~find request takes in a set of parameters to filter by, and then returns a list of Allocations matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
targetIdInt (20)ID of the object that stores the allocation data.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
targetTransactionTypeEnumType of transaction.

Plans

Payment plans are pre-defined schedules of payments, and can be billed perpetually or for a fixed length. Multiple subscriptions can subscribe to a single payment plan.

The ~create request creates a plan which customers can subscribe to via the Subscribe API calls.

Name Value or Format Description
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)

The ~find request takes in a set of parameters to filter by, and then returns a list of Plans matching the search.

The ~find request does not take in a .json object. The parameters should be passed in the URL query string.
Name Value or Format Description
offsetIntegerIndex of the first record returned to the customer from the search result of a web search. Default = 0
limitIntegerMaximum number of records to load per single search web call made by the customer. Default = 100.
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
createDateFromDate yyyy-MM-ddDate when the subscription was created. The beginning of the range you want to filter by.
createDateToDate yyyy-MM-ddDate when the subscription was created. The end of the range you want to filter by.
amountFromInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500 The beginning of the range to filter by.
amountToInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500 The end of the range to filter by.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)

The ~load functionality provides the ability to retrieve the current plan from a single specified customer in .json format. The parameters are described in the Response Object tab.


The Plan~load request will respond with a single plan in json format. The parameters are shown in this table.

Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)

The ~modify request modifies a plan based on the specified parameters.

Name Value or Format Description
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)
Name Value or Format Description
idInt (20)Identifier of the object used for references; auto-incremented integer value.
codeString(60)Optional secondary identifier. Typically this field is a reference to an ID in your own system to cross-reference it within our system. By default, this value will be given the same value as the object's id which is returned in the response.
accountIdString (12)Specifies which merchant account the plan will be associated with. All customers under the merchant will be able to access and subscribe to the plan.
createDateDate yyyy-MM-ddDate when the record was created. In the response, the date is returned with hour, minute, and second values as well, formatted like yyyy-MM-dd HH:mm:ss
nameString (255)Name of the payment plan.
billingCycleTypeEnumType of the applied billing cycle. Default = M - Monthly.
amountInt (11)The amount of money charged every time billing occurs for this payment plan (e.g. amount of the transaction) in cents. Ex: $5.00 = 500
isActiveBooleanIndicates whether a record is active within the system. (1=true (default), 0=false)

Webhooks

Webhooks Overview

Your system can receive notifications about important events that are not directly related to API calls. For example, when a subscription status is changed through the user interface (UI) or when a bank initiates a chargeback or return process, this event can be delivered through a webhook notification to your system. This allows your system to be notified of external events and record the data or take additional action.

Events

The following are events that will trigger a webhook notification to your system

  • Billing API
    • subscription~create
    • payment-option~create
    • allocation~create
    • payment~process
  • Processing API
    • chargeback
    • return
    • reversal
    • NOC (notification of change)
Responding to Webhook Notifications

Once you have received a webhook notification from our system you will need to acknowledge the notification receipt. This is done by sending back a JSON payload with the notification ID. See the example below.

{"notificationId":"12345"}

If for some reason our system is unable to contact your webhook endpoint or if we do not receive a proper response we will retry the notification on the following schedule.

  • Second notification is sent 5 minutes after the first failed attempt.
  • Third notification is sent 15 minutes after the second failed attempt.
  • Fourth notification is sent 60 minutes after the third failed attempt.
  • Fifth notification is sent 24 hours after the fourth failed attempt.

If the fifth attempt fails, the notification status is changed to "Failed" and no further redelivery will take place.

Webhook Setup

To set up your webhook endpoints send an email to support with the full URL to your webhook endpoint(s) and the events you would like to assign to that endpoint. You can set up different endpoints for different notification events.

Billing Notifications

Your webhook endpoint can be called for the following events:

  • subscription~create
  • payment-option~create
  • allocation~create
  • payment~process

Please contact support for assistance with setting up webhooks.


Billing Webhook Fields
Name Value or Format Description
notificationIdIntegerUnique identifier of the notification.
eventCodeString (64)Type of event that occurred. Example: billing.subscription-created
eventDateTimestampDate of the event execution in timestamp format. Example: 1691036826000
dataTypeobjectDefines the structure of the data where the event occurred.
datastructContains the data fields for the result of the webhook. The fields are listed below.
Sub-Object Data Fields
Name Value or Format Description
objectTypeString (32)Type of object based on which the event that caused notification.
accountIdIntegerAccount ID of the merchant whose account the notification is for.
customerIdIntegerCustomer ID of the customer the notification was generated for.
customerCodeString (256)Supplied identifier of the customer affected by the event. By default, this is the customerId value.
idIntegerIdentifier of the object used for references. This is an auto-incremented value.
codeString (256)Optional identifier of the Merchant that can be used to cross-reference the Merchant record between external systems
typeEnumRepresents the type of transaction. This field will contain null if the notification is not for a transaction.
fieldNameString Name of the field that was modified.
oldValueString Value of the field prior to modification. This is empty if a new object was created.
newValueString Value of the field after modification.
back to top
             {
                "notificationId":81104,
                "eventCode":"billing.transaction-created",
                "eventDate":1685741738000,
                "dataType":"object",
                "data": {
                  "objectType":"payment",
                  "accountId":7128001,
                  "customerId":189924,
                  "customerCode":"189924",
                  "id":1824364,
                  "code":"1824364",
                  "type":"RI"
                }
            }
            
          

Processing Notifications

Your webhook endpoint can be called for the following events:

Chargeback

Chargebacks happen when a cardholder disputes a transaction and asks their bank to reverse it. The original transaction ends up getting reversed and the funds are debited from the merchants bank account. The event is recorded on the transaction list as type chargeback.

Return

A return is related to an ACH (direct debit) transaction and can be for various reasons. The most common is insufficient funds in the bank account or 'no account'. When a return happens from the receiving bank the funds are reversed and the merchant is debited for the original transaction amount. The event is recorded on the transaction list as type return.

Reversal

This happens when a merchant wins a chargeback dispute. In this case the funds are returned back from the cardholder to the merchant and we record it in the system as a reversal. Reversals happen after chargebacks but only if the merchant wins the chargeback.

NOC

This stands for Notice of Change and is related to ACH transactions. Sometimes bank accounts change or a bank is acquired by another bank and the routing number changes. If a merchant, for example, has customers on a recurring billing plan and is billing them monthly via ACH from their bank account and that customers bank gets acquired and their bank account or routing number changes we will get a NOC record back from that bank letting us know about that change so that payment methods an be updated for future billings.

Please contact support for assistance with setting up webhooks.


Processing Webhook Fields
Name Value or Format Description
notificationIdIntegerUnique identifier of the notification.
eventCodeString (64)Type of event that occurred. Example: billing.subscription-created
eventDateTimestampDate of the event execution in timestamp format. Example: 1691036826000
dataTypetransactionDefines the structure of the data where the event occurred.
datastructContains the data fields for the result of the webhook. The fields are listed below.
Sub-Object Data Fields
Name Value or Format Description
objectTypeString (32)Type of object based on which the event that caused notification.
accountIdIntegerAccount ID of the merchant whose account the notification is for.
transactionIdLongUnique identifier of the transaction within Zift. Returned in the original transaction response.
originalTransactionIdLongIdentifier of the original sale transaction. Used for refund transactions only.
transactionCodeString (60)An identifier of the transaction from an external system.
sequenceNumberIntegerSequential number of the payment (e.g. 2nd of 12 payments). This can occur when multiple responses for the same transaction are possible.
amountInteger (in cents)Specifies the total amount of the transaction in cents (not dollars) ex: $5.00 = 500 cents
responseCodeString (5)Response code returned for the transaction. See Response Codes for more information.
responseMessage String (255)Response message returned for the transaction. See Response Codes for more information
accountNumberUpdatedString (20)Updated number of a payment card or bank account if the value has changed.
accountAccessoryUpdatedString (20)Updated accessory of a payment card or bank account if the value has changed.
tokenUpdatedString (20)Updated token code, if the value has changed.
holderNameUpdatedString (20)Updated holder name, if the value has changed.
accountTypeUpdatedString (20)Updated account type, if the value has changed.
back to top
             {
                "notificationId":281854,
                "eventCode":"processing.return-processed",
                "eventDate":1691102716000,
                "dataType":"transaction",
                "data": {
                  "objectType":"return",
                  "accountId":7128001,
                  "transactionId":8609608054,
                  "originalTransactionId":8609608044,
                  "originalTransactionCode":null,
                  "sequenceNumber":1,
                  "amount":1232,
                  "responseCode":"E6515",
                  "responseMessage":"Amount nan"
                }
            } 
            
          

Reporting

Use our reporting API to get detailed information about transactions, transaction history and merchants.

Transaction List

Provides a list of transactions associated with the specified account. Generated in CSV and data formats.

You can specify a specific type of transaction or a combination of transactions you want to receive back in the response with the type parameter. To load a combination of transaction types, multiple pipe-delimited values should be specified as a Type value.

You can indicate response format at the end of the API endpoint

Sandbox
  • https://sandbox-portal.zift.io/reports/transaction-list.data Pipe Delimitted (recommended)
  • https://sandbox-portal.zift.io/reports/transaction-list.csv Comma Separated
Production
  • https://portal.zift.io/reports/transaction-list.data Pipe Delimited (recommended)
  • https://portal.zift.io/reports/transaction-list.csv Comma Separated

Depending on the type of the transaction, transactionDate and settlementDate may vary or be the same.

Name Value or Format Description
userNameString (50)Required
Name of a user that initiates the API call.
passwordString (32)Required
Password of a user that initiates the API call.
accountIdString (12)Conditional
Specifies which merchant account to use with this API call. Your API credentials may be associated with more than one accountId
fromDateDate yyyyMMddhhmmssConditional
Beginning date of the range for which the report is generated. This is defaulted to 00:00:00 for the hour, minute and second values.
toDateDate yyyyMMddhhmmssConditional
End date of the range for which the report is generated. This is defaulted to 00:00:00 for the hour, minute and second values.
batchIdLongConditional
Identifier of a batch for which the report is generated.
statusEnumConditional
Status of transactions included in the report.
typeEnumConditional
The type of transaction or transactions that will be exported. By default all transaction types will be included in the export unless otherwise specified. To load a combination of transaction types, multiple pipe-delimited values should be specified as the transactionType value.
accountType EnumSpecifies the payment method to be used with this transaction. Click here for a list of possible values and their descriptions.
transactionIdLongConditional
Unique identifier of the transaction within Zift. Always present in the response.
settlementStatus EnumIndicates settlement status of the transaction.
recordsOffsetIntegerAllows to set the offset number of record beginning from which records to be included in the response. Default value: 0.
recordsLimitIntegerAllows to set the maximum number of records to be included in the report. Default Value: 5000.
subBatchIdLongIdentifier of a sub-batch for which the report is generated.
transactionAmountIntegerTotal transaction amount in cents which includes discounts, taxes and fees.
holderNameString (150)Name of the card holder or bank account owner.
terminalIdString (3)Reference to a terminal ID. Returns transaction results that only this terminal has processed.
//More examples this http://curl.haxx.se/docs/httpscripting.html
curl -X POST https://sandbox-portal.zift.io/reports/transaction-list.data? \
	-d "userName={userName}"  \
	-d "password={password}"  \
	-d "accountId=123456798"  \
	-d "fromDate=20181201"  \
	-d "toDate=20181230"  \

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class PostExample {
 
    private static int CONNECT_TIMEOUT = 10 * 1000;
    private static int READ_TIMEOUT = 1 * 60 * 1000;
    private static String EMPTY = "";      
 
    public static void main (String[] args) throws IOException{
            
            System.out.println(sendPOST("https://sandbox-portal.zift.io/reports/transaction-list.data?", 
 			 "&userName={userName}"
			+ "&password={password}"
			+ "&accountId=123456798"
			+ "&fromDate=20181201"
			+ "&toDate=20181230"
       
        ));
 
    }              
    public static String sendPOST(String url, String data) throws IOException{
 
      HttpURLConnection conn = null;
      InputStream stream = null;
      URL urlLink = new URL(url);
      OutputStreamWriter writer = null;
 
      conn = (HttpURLConnection)urlLink.openConnection();
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setUseCaches(false);
      conn.setConnectTimeout(CONNECT_TIMEOUT);
      conn.setReadTimeout(READ_TIMEOUT);
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      conn.setRequestMethod("POST");
 
      writer = new OutputStreamWriter(conn.getOutputStream());
      writer.write(data);
      writer.flush();
      writer.close();
 
 
 
      if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          stream = conn.getInputStream();
      } else { 
          stream = conn.getErrorStream();
      }
      if (stream == null){
          System.out.println("Response code is " + conn.getResponseCode());
          return EMPTY;
      }
 
 
       return stream2String(stream);    
    }     
 
    private static String stream2String(InputStream is) throws IOException{
        StringBuilder sb = new StringBuilder(8192);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine())!= null){
            sb.append(line);
        }
        return sb.toString();
    }
}
 
                        
$url = 'https://sandbox-portal.zift.io/reports/transaction-list.data?';
    $data = array(
			'userName'=>'{userName}',
			'password'=>'{password}',
			'accountId'=>'123456798',
			'fromDate'=>'20181201',
			'toDate'=>'20181230',

        );
 
    $options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data),
         ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

                        
using System;
using System.IO;
using System.Net;
using System.Text;

namespace PostExample
{
    class Program
    {
        private static int TIMEOUT = 1 * 60 * 1000;

        static void Main(string[] args)
        {
           System.Console.WriteLine(SendPOST("https://sandbox-portal.zift.io/reports/transaction-list.data?",

			 "userName={userName}"
			+ "&password={password}"
			+ "&accountId=123456798"
			+ "&fromDate=20181201"
			+ "&toDate=20181230"

                ));
        }

	public static String SendPOST(String url, String data)
        {
            WebRequest request = WebRequest.Create(url);

            byte[] byteArray = Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
            request.Timeout = TIMEOUT;
            request.ContentLength = byteArray.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            try
            {
                WebResponse response = request.GetResponse();
                dataStream = response.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                return responseFromServer;
            }
            catch (WebExeption e)
            {
                return e.Message;
            }
        }
    }
}
                        
'More examples  https://msdn.microsoft.com/en-us/library/vstudio/debx8sh9(v=vs.100).aspx
'The command line for compiling the program is the following
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:exe /debug+ /optionstrict+ /out:.\Vb_example.exe Vb_example.vb

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Namespace Examples.System.Net
    Public Class WebRequestPostExample

      Public Shared Sub Main()
         Dim request As WebRequest = WebRequest.Create("https://sandbox-portal.zift.io/reports/transaction-list.data?")
         request.Method = "POST"
         Dim postData As String
			 postData = "userName={userName}"
			 postData =  postData + "&password={password}"
			 postData =  postData + "&accountId=123456798"
			 postData =  postData + "&fromDate=20181201"
			 postData =  postData + "&toDate=20181230"


         Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
         request.ContentType = "application/x-www-form-urlencoded"
         request.ContentLength = byteArray.Length
         Try
             Dim dataStream As Stream = request.GetRequestStream()
             dataStream.Write(byteArray, 0, byteArray.Length)
             dataStream.Close()
             Dim response As WebResponse = request.GetResponse()
             Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
             dataStream = response.GetResponseStream()
             Dim reader As New StreamReader(dataStream)
             Dim responseFromServer As String = reader.ReadToEnd()
             Console.WriteLine(responseFromServer)
             reader.Close()
             dataStream.Close()
             response.Close()
          Catch Exc As WebExeption
             Console.WriteLine(Exc.Message)
          End Try
      End Sub
    End Class
End Namespace
                        
    # More examles http://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html
    require "net/https"
    require "uri"

    uri = URI.parse("https://sandbox-portal.zift.io/reports/transaction-list.data?")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    post_params = {
			'userName'=>'{userName}',
			'password'=>'{password}',
			'accountId'=>'123456798',
			'fromDate'=>'20181201',
			'toDate'=>'20181230',


	              }
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(post_params)
    response = http.request(request)
    puts response.body
                        
 // You have to install module request - npm install request
    var request = require('request');
    var headers = {
    'User-Agent':       'Super Agent/0.0.1',
    'Content-Type':     'application/x-www-form-urlencoded'
    }

    var options = {
    url: 'https://sandbox-portal.zift.io/reports/transaction-list.data?',
    method: 'POST',
    headers: headers,
    form: {
			'userName':'{userName}',
			'password':'{password}',
			'accountId':'123456798',
			'fromDate':'20181201',
			'toDate':'20181230'


         }
    }

    request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        // Print out the response body
        console.log(body)
    }
   })
                        
    #You have to install modul LWP::Protocol::https
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
       $ua->agent("MyApp/0.1 ");
    my $req = $ua->post(
          'https://sandbox-portal.zift.io/reports/transaction-list.data?',
       [
			userName=>'{userName}',
			password=>'{password}',
			accountId=>'123456798',
			fromDate=>'20181201',
			toDate=>'20181230'


      ],
    );
    print $req->content;
                        
     #More examples this https://docs.python.org/3/howto/urllib2.html
     import urllib.parse
     import urllib.request
	    url = 'https://sandbox-portal.zift.io/reports/transaction-list.data?'
	    values = {
			'userName':'{userName}',
			'password':'{password}',
			'accountId':'123456798',
			'fromDate':'20181201',
			'toDate':'20181230'


      }

    data = urllib.parse.urlencode(values)
    data = data.encode('utf-8') # data should be bytes
    req = urllib.request.Request(url, data)
    with urllib.request.urlopen(req) as response:
      the_page = response.read()
    print(the_page)
                        

List of parameters sent back as part of the API response.

Name Value or Format Description
accountIdIntegerUnique identifier of a merchant account. This ID is generated by Zift when the merchant account is created.
account.nameString (100)Name of the merchant account.
transaction.idLongUnique identifier of the transaction. Generated by Zift
transaction.codeString (60)Identifier of the transaction supplied by a submitter.
transaction.batchIdLongIdentifier of the batch associated with the transaction. Generated by Zift
transactionTypeEnumType of the transaction.
transaction.activityDateDateDate when the transaction was submitted.
transaction.activityTimeString (6)Time when the transaction was submitted.
transaction.captureDateDateDate when the transaction was captured.
transaction.captureTimeString (6)Time when the transaction was captured.
transaction.originalAmountIntegerTotal authorized amount of the transaction (without fees, taxes, discounts, etc applied). Amount in cents.
transaction.netAmountIntegerTotal settled amount. Amount in cents.
transaction.submissionTypeEnumSubmission type of the transaction.
transaction.accountTypeGroupEnumType of an account associated with the transaction.
transaction.industryTypeEnumIndustry type of the transaction.
transaction.holderNameString (150)Name of a payment card or bank account holder.
transaction.accountTypeEnumType of an account used in the transaction.
transaction.accountNumberString (20)Masked number of a payment card or bank account associated with the transaction. The first 1 and the last 4 digits of an account number (e.g. 4********1111).
transaction.accountAccessoryString (14)Payment card's expiration date or bank account's routing number.
transaction.tokenString (40)Token associated with a payment card or bank account. Can be used instead of a payment card or bank account number for future transaction processing.
transaction.statusEnumCurrent status of the transaction..
transaction.isSettledBooleanIndicates whether the transaction has been settled at a processor's side.
transaction.memoString (255)Additional information about the transaction.
transaction.approvalCodeString (100)Authorization number given by a cardholder's bank. Often shown on a credit card receipt.
transaction.responseCodeString (5)Response code returned by Zift.
transaction.responseMessageString (255)Response message returned by Zift.
transaction.avsResponseCodeString (5)AVS response code returned by Zift. (if address information has been provided). See response codes for more information.
transaction.cscResponseCodeString (3)CSC response code returned by Zift.
transaction.processor.transactionIdString (50)Identifier of the transaction in the upstream processor or bank system.
transaction.processor.responseCodeString (20)Response code returned by the upstream processor or bank
transaction.processor.responseMessageString (260)Response message returned by the upstream processor or bank
transaction.processor.avsResponseCodeString (5)AVS response code returned by the upstream processor or bank.
transaction.billingAddress.streetString (128)Street of a billing address associated with a payment card or bank account holder.
transaction.billingAddress.cityString (50)City of a billing address associated with a payment card or bank account holder.
transaction.billingAddress.stateString (2)State of a billing address associated with a payment card or bank account holder.
transaction.billingAddress.zipCodeString (15)ZIP code of a billing address associated with a payment card or bank account holder.
transaction.billingAddress.countryCodeString (2)Country of a billing address associated with a payment card or bank account holder.
transaction.billingAddress.phoneString (20)Phone number associated with a payment card or bank account holder.
transaction.billingAddress.emailString (100)Email associated with a payment card or bank account holder.
transaction.terminal.idLongUnique identifier of the terminal if a terminal was used to run the transaction.
transaction.terminal.codeString (60)Identifier of the terminal supplied by a submitter if a terminal was used to run the transaction.
transaction.references.transactionInternalCodeString (60)Unique internal identifier of the transaction supplied by a submitter's system.
transaction.references.customerAccountCodeString (60)Identifier of a customer supplied by a submitter's system.
transaction.references.customerAccountInternalCodeString (60)Unique internal identifier of a customer supplied by a submitter.
transaction.references.itemCodeString (60)Identifier of a purchased product or service supplied by a submitter.
transaction.references.userCodeString (60)Identifier of a user supplied by a submitter.
originalTransactionIdString (20)Used to reference the original transaction ID in the case of chargebacks or returns.