Custom Program
createHold()
The createHold() method creates a hold or reserve on an amount of funds for a specific payment and a given amount of time. The createHold() method allows a hold of up to 50,001.00 (as set by the product parameter MXHLD ). Note that createHold() supports remote deposit capture (RDC).
Use createHold() to place a hold on a specific payment, or a hold against an account in general. A payment hold requires a specific amount and a payment ID. An account hold requires the payment type to hold against, and what payment types are allowed on this PID. A THOLD parameter must be setup for them to do a general hold.
Contact the Galileo Technical Operations Center to update MXHLD (MXHLD must be updated to pass the threshold of 25,000.00) or to configure the THOLD parameter for a general account hold.
Parameters
Parameter Required Data type Pattern Notes
apiLogin Yes String 50 characters or less AbC123-9999 Provider's Web Service Username as provided and authenticated by Galileo for the requesting IP Address.
apiTransKey Yes String 15 characters or less 4sb62fh6w4h7w34g Web Service Password as provided and authenticated by Galileo for the requesting IP Address.
providerId Yes Integer 10 digits or less 9999 Galileo issued unique Provider identifier.
transactionId Yes String 60 characters or less 9845dk-39fdk3fj3-4483483478 A unique system generated ID number that identifies the API transaction with Galileo Processing systems. A UUID is preferred. This must be different for each transaction.
accountNo Yes String PAN or PRN 074103447228 Can be either a PAN (the 16 digit card number) or PRN (a unique 12 digit account identifier).
amount Yes Amount Monetary amount 0 or greater. 25.50 Currency amounts passed as whole or fractional amounts, examples: '100.00', '100', or '100.73'.
expirationDateTime Yes DateTime YYYY-MM-DD HH:MM:SS 2017-01-01 13:00:00 Must be a fully qualified date including the 24 hour format timestamp.
pmtId No Integer Positive integer value 4234888 This parameter value will be the payment ID (pmtId) as returned by getPaymentHistory(). This is the integer value that uniquely identifies a payment on the Galileo system.
description No String Alphanumeric and punctuation One time payroll load. Transaction description.
externalId No String Alphanumeric string up to 60 characters in length. 45348bacd483348 Optional external system ID for a hold.
holdType No String Alphanumeric predefined four character string. AAAB Hold types are pre-configured in coordination with your account manager.
Status Codes
Status Code description
0 Success
2 Invalid parameter(s)
12 Invalid customer account
539-01 Holds are not enabled for this product/program. Please contact client support for more information.
539-02 Provided XID does not map to a valid balance in our system.
539-03 Provided expiration date needs to be in the correct format (YYYY-MM-DD HH:MM:SS) and needs to be in the future.
539-04 Provided payment id is invalid.
539-05 No payment id was provided and the provided account hold type is missing or invalid.
539-06 Amount must be equal to or less than the payment minus any other holds that have already been placed.
539-07 An unknown error occurred while creating the hold. Please contact client support if this error persists.
-1 Indicates that the application record failed to update or return.
Response
<?xml version="1.0" encoding="UTF-8"?>
<response>
   <status_code>0</status_code>
   <status>Success</status>
   <system_timestamp>2017-02-27 17:33:08</system_timestamp>
   <response_data>
     <new_balance>2.79</new_balance>
     <hold_id>453434</hold_id>
   </response_data>
   <processing_time>0.628</processing_time>
   <echo>
     <transaction_id>42562386</transaction_id>
     <provider_transaction_id>GAAP test</provider_transaction_id>
     <provider_timestamp>2017-02-27 17:32:36</provider_timestamp>
   </echo>
</response>

 

Response Description Example value
status_code The status of the response. 0
status The condition of a process or response (such as embossed card, account, freeze, and so on). Success
system_timestamp A system generated timestamp. 2011-10-07 10:25:07
response_data A structure for the response data. It can be empty but usually will contain information. <response_data>
  x
</response_data>
new_balance The balance on the account after the transaction. 2.79
hold_id The ID associated with the hold. 453434
processing_time The time elapsed in processing the transaction. 0.973
echo A data structure that displays transaction id information. <echo>
  x
</echo>
transaction_id A number that represents a transaction. 12345a
provider_transaction_id Secondary transaction identifier (generated by a provider). 77bb
provider_timestamp Store a related timestamp for reporting and troubleshooting purposes. 2013-02-06 10:10:10
Code Snippet

                    # The following shell script will use cURL to call createHold
# and return the json response.

curl -d '{"apiLogin":"AbC1234-9999", "apiTransKey":"9845dk-39fdk3fj3-4483483478", "transactionId":"45k-dk3fj3-44478", "accountNo":"074103447228", "amount":"25.50", "expirationDateTime":"2017-01-01 13:00:00"}' \ 
-H "response-content-type: json" \ 
-X POST https://**your-full-implementation-url**/createHold
                
                    // The following Java code will make a createHold call
// and print the json response.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util. *;

class GalileoAPICall
{
    public static void main(String[] args) {
        try {
            Map<String,Object> params = new LinkedHashMap<>();
           params.put("apiLogin", "AbC1234-9999");
           params.put("apiTransKey", "9845dk-39fdk3fj3-4483483478");
           params.put("transactionId", "45k-dk3fj3-44478");
           params.put("accountNo", "074103447228");
           params.put("amount", "25.50");
           params.put("expirationDateTime", "2017-01-01 13:00:00");
            StringBuilder postData = new StringBuilder();
            for (Map.Entry<String,Object> param : params.entrySet()) {
                if (postData.length() != 0) postData.append('&');
                postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                postData.append('=');
                postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
            }
            byte[] postDataBytes = postData.toString().getBytes("UTF-8");

            URL url = new URL("https://**your-full-implementation-url**/createHold");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("response-content-type", "json");
            conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
            conn.setDoOutput(true);
            conn.getOutputStream().write(postDataBytes);

            String xmlOutput;

            Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            for (int c; (c = in.read()) >= 0;) {
                System.out.print((char)c);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
                
                    # The following Python code will call createHold
# and print the json response.

import requests
headers = {'response-content-type': 'json'}
payload = {'apiLogin': 'AbC1234-9999', 'apiTransKey': '9845dk-39fdk3fj3-4483483478', 'transactionId': '45k-dk3fj3-44478', 'accountNo': '074103447228', 'amount': '25.50', 'expirationDateTime': '2017-01-01 13:00:00'}
r = requests.post(url='https://**your-full-implementation-url**/createHold', data=payload, headers=headers)
try:
    print(r.json())
except:
    print(r.status_code)
                
                    // The following PHP code will make a createHold call
// and prints the json response.

$endpoint = 'https://**your-full-implementation-url**/createHold';
$params = array('apiLogin'=>'AbC1234-9999', 'apiTransKey'=>'9845dk-39fdk3fj3-4483483478', 'transactionId'=>'45k-dk3fj3-44478', 'accountNo'=>'074103447228', 'amount'=>'25.50', 'expirationDateTime'=>'2017-01-01 13:00:00');

$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_URL, $endpoint);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('response-content-type: json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);
curl_close($curl);
$json = new json_decode($result, true);
print_r($json);

                
                    // The following C# code will make a createHold call
// and print the json response.

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

byte[] data = Encoding.ASCII.GetBytes(
    "apiLogin=AbC1234-9999&apiTransKey=9845dk-39fdk3fj3-4483483478&transactionId=45k-dk3fj3-44478&accountNo=074103447228&amount=25.50&expirationDateTime=2017-01-01 13:00:00");
WebRequest request = WebRequest.Create("https://**your-full-implementation-url**/createHold");
request.Method = "POST"\;
request.ContentLength = data.Length;
request.Headers.Add("response-content-type", "json");
using (Stream stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
string responseContent = null;
using (WebResponse response = request.GetResponse())
{
    using (Stream stream = response.GetResponseStream())
    {
        using (StreamReader sr = new StreamReader(stream))
        {
            responseContent = sr.ReadToEnd();
        }
    }
}
Console.WriteLine(responseContent);
                
                    # The following Ruby code will make a createHold call
# and print the json response.

require 'uri'
require 'net/http'

uri = URI("https://**your-full-implementation-url**/createHold")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['response-content-type'] = 'json'
request.body = {apiLogin: 'AbC1234-9999', apiTransKey: '9845dk-39fdk3fj3-4483483478', transactionId: '45k-dk3fj3-44478', accountNo: '074103447228', amount: '25.50', expirationDateTime: '2017-01-01 13:00:00'}.to_json
response = https.request(request)
puts response