createAccountTransfer()
Bundles a load, adjustment, and fee into one API call. Transfers occur between two accounts on a single program. This method can be used to transfer between accounts of separate customers, or between accounts related to the same customer. The sender's PAN or PRN should be passed as the 'accountNo' parameter. Contact the Galileo Processing Internal Operations team to make this method available.
Parameters
Parameter Required Data type Pattern Notes
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'.
transferToAccountNo Yes String

PAN or PRN

074103447300

Can be either a PAN (the 16 digit card number) or a PRN (a unique 12 digit account identifier).
message No String

Alphanumeric string including punctuation, with a maximum length of 2000 characters.

Thanks again for lunch!

An optional message for the transfer recipient (in situations of a customer to customer transfer).
type No String Three alphanumeric types defined in coordination with Galileo. Note that any codes will be defined through a request to Galileo. Transaction types must be set-up before they pass a value in the type column. You can define templates for different types of transfers using this field. If your cardholders will be doing a lot of account transfers, having type templates makes controlling payments, adjustments, and fees a lot easier.
If you're interested in using type, contact Galileo.
Status Codes
Status Code description
0 Success
2 Invalid parameter(s)
12 Invalid customer account
445-01 The transfer-to account could not be found.
445-02 Invalid transfer-to account--the account is in an incorrect status. Possible causes of this status include; the destination account is not found, or it has a limit violation.
445-03 The transfer-to account product is not authorized.
445-04 Sender velocity check failure.
445-05 Recipient velocity check failure.
445-06 Sender insufficient balance.
445-07 Invalid/unconfigured cross program transfer. When transferring from an account under one program ID to an account with a different program_id, a configuration must be in place to allow such a transfer.
24 Duplicate transaction
-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>2018-02-19 16:16:41</system_timestamp>
   <response_data>
     <old_balance>1000</old_balance>
     <new_balance>975</new_balance>
     <adjustment_trans_id>1022819</adjustment_trans_id>
     <transfer_account_id>17</transfer_account_id>
     <sender_fee_amount>0</sender_fee_amount>
     <payment_trans_id>2901282</payment_trans_id>
     <transfer_to_account>
       <old_balance>0</old_balance>
       <new_balance>25</new_balance>
     </transfer_to_account>
   </response_data>
   <processing_time>1.743</processing_time>
   <echo>
     <transaction_id>612928925</transaction_id>
     <provider_transaction_id>GAAP test</provider_transaction_id>
     <provider_timestamp>2018-02-19 16:15:44</provider_timestamp>
   </echo>
</response>
 
Response Description Example value
status The condition of a process or response (such as embossed card, account, freeze, and so on). Success
status_code The status of the response. 0
system_timestamp A system generated timestamp. 2011-02-02 11:11:12
response_data A structure for the response data. It can be empty but usually will contain information. <response_data>
   <new_account>
   </new_account>
</response_data>
processing_time The time elapsed in processing the transaction. 1.723
old_balance The old balance on the source or destination account. 1000
new_balance The new balance on the source or destination account. 975
adjustment_trans_id The trans ID associated with the adjustment. 1022819
transfer_account_id The account associated with the transfer. 17
sender_fee_amount The fee applied to the C2C transfer. 0
payment_trans_id The transaction ID. 2901282
transfer_to_account The destination of funds. Destination of funds contains old and new values. <transfer_to_account>
  <old_balance>0</old_balance>
  <new_balance>25</new_balance>
</transfer_to_account>
echo A structure that displays transaction ID information. <echo>
  <transaction_id>...</transaction_id>
</echo>
transaction_id A number that represents a transaction. 12345a
provider_timestamp Store a related timestamp for reporting and troubleshooting purposes. 2013-02-06 10:10:10
provider_transaction_id Secondary transaction identifier (generated by a provider). 77bb
Code Snippet
                    # The following shell script will use cURL to call createAccountTransfer
# and return the json response.

curl -d '{"transactionId":"45k-dk3fj3-44478", "accountNo":"074103447228", "amount":"25.50", "transferToAccountNo":"074103447300"}' \ 
-H "response-content-type: json" \ 
-H "Authorization: Bearer **your-access-token**" \ 
-X POST https://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer
                
                    // The following Java code will make a createAccountTransfer 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("transactionId", "45k-dk3fj3-44478");
           params.put("accountNo", "074103447228");
           params.put("amount", "25.50");
           params.put("transferToAccountNo", "074103447300");
            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://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("response-content-type", "json");
            conn.setRequestProperty("Authorization", "Bearer **your-access-token");
            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 createAccountTransfer
# and print the json response.

import requests
headers = {'response-content-type': 'json', 'Authorization': 'Bearer {}'.format(**your-access-token**)}
payload = {'transactionId': '45k-dk3fj3-44478', 'accountNo': '074103447228', 'amount': '25.50', 'transferToAccountNo': '074103447300'}
r = requests.post(url='https://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer', data=payload, headers=headers)
try:
    print(r.json())
except:
    print(r.status_code)
                
                    // The following PHP code will make a createAccountTransfer call
// and prints the json response.

$endpoint = 'https://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer';
$params = array('transactionId'=>'45k-dk3fj3-44478', 'accountNo'=>'074103447228', 'amount'=>'25.50', 'transferToAccountNo'=>'074103447300');

$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',
    'Authorization: Bearer **your-access-token**'
));
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 createAccountTransfer call
// and print the json response.

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

byte[] data = Encoding.ASCII.GetBytes(
    "transactionId=45k-dk3fj3-44478&accountNo=074103447228&amount=25.50&transferToAccountNo=074103447300");
WebRequest request = WebRequest.Create("https://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer");
request.Method = "POST"\;
request.ContentLength = data.Length;
request.Headers.Add("response-content-type", "json");
request.Headers.Add("Authorization","Bearer **your-access-token**");
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 createAccountTransfer call
# and print the json response.

require 'uri'
require 'net/http'

uri = URI("https://sandbox.galileo-ft.com/intserv/4.0/createAccountTransfer")
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['Authorization'] = 'Bearer **your-access-token**'
request.body = {transactionId: '45k-dk3fj3-44478', accountNo: '074103447228', amount: '25.50', transferToAccountNo: '074103447300'}.to_json
response = https.request(request)
puts response