What is ACH in Valor?
Valor ACH transaction is an electronic payment method to transfer funds between bank accounts. ACH transactions are commonly used for a variety of purposes, including direct deposits, bill payments, and electronic funds transfers. Here's a detailed description of the process:
Initiation: An ACH transaction begins when an individual or organization authorizes a transfer. This could be through payroll for direct deposit, a consumer paying a bill online, or a business initiating a payment to a vendor.
Batch Processing: ACH transactions are processed in batches rather than individually. Banks and payment processors gather these transactions and submit them at specific intervals throughout the day.
Clearing and Settlement: The transactions are sent to the ACH network, where they are sorted and forwarded to the receiving bank. This process is managed by the National Automated Clearing House Association (NACHA) in the U.S.
Receiving Bank: The receiving bank processes the incoming ACH transaction, credits the account if it is a deposit, or debits it if it is a payment.
Completion: Funds are typically available within 1-2 business days, though some ACH transactions can settle the same day.
ACH transactions are known for being a cost-effective and efficient means of transferring money, particularly for recurring payments and large volumes of transactions. They are also secure, utilizing encryption and various authentication methods to protect against fraud and unauthorized access.
Sale API
Instead of using a credit card or cash, a buyer authorizes a debit from their bank account. The transaction is then processed in batches by the ACH network, eventually moving funds from the buyer's bank to the seller's bank. This process can take one to several business days.
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://securelink-staging.valorpaytech.com:4430/?achsale=', [
'body' => '{"appid":"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN","appkey":"Tv26MihzxwblHyk6gEuVelY2XwQE58jU","epi":"2319916062","txn_type":"achsale","account_number":"9884210510","routing_number":"021000021","payee_name":"ABU","account_type":"C","entry_class":"Business","amount":"5.87","state_tax":"0","city_tax":"0","reduced_tax":"0","card_type":"Debit"}',
'headers' => [
'accept' => 'application/json',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://securelink-staging.valorpaytech.com:4430/?achsale="
payload = {
"appid": "Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN",
"appkey": "Tv26MihzxwblHyk6gEuVelY2XwQE58jU",
"epi": "2319916062",
"txn_type": "achsale",
"account_number": "9884210510",
"routing_number": "021000021",
"payee_name": "ABU",
"account_type": "C",
"entry_class": "Business",
"amount": "5.87",
"state_tax": "0",
"city_tax": "0",
"reduced_tax": "0",
"card_type": "Debit"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://securelink-staging.valorpaytech.com:4430/?achsale=");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achsale\",\"account_number\":\"9884210510\",\"routing_number\":\"021000021\",\"payee_name\":\"ABU\",\"account_type\":\"C\",\"entry_class\":\"Business\",\"amount\":\"5.87\",\"state_tax\":\"0\",\"city_tax\":\"0\",\"reduced_tax\":\"0\",\"card_type\":\"Debit\"}");
CURLcode ret = curl_easy_perform(hnd);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://vt-staging.valorpaytech.com:4430/?app_id=Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN&auth_key=Tv26MihzxwblHyk6gEuVelY2XwQE58jU&mtype=achsale&epi=2319916062&account_type=C&amount=5.87&state_tax_amount=0.23&city_tax_amount=0&/?achsale=");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://securelink-staging.valorpaytech.com:4430/?achsale=");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achsale\",\"account_number\":\"9884210510\",\"routing_number\":\"021000021\",\"payee_name\":\"ABU\",\"account_type\":\"C\",\"entry_class\":\"Business\",\"amount\":\"5.87\",\"state_tax\":\"0\",\"city_tax\":\"0\",\"reduced_tax\":\"0\",\"card_type\":\"Debit\"}");
CURLcode ret = curl_easy_perform(hnd);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://securelink-staging.valorpaytech.com:4430/?achsale="
payload := strings.NewReader("{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achsale\",\"account_number\":\"9884210510\",\"routing_number\":\"021000021\",\"payee_name\":\"ABU\",\"account_type\":\"C\",\"entry_class\":\"Business\",\"amount\":\"5.87\",\"state_tax\":\"0\",\"city_tax\":\"0\",\"reduced_tax\":\"0\",\"card_type\":\"Debit\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("accept", "application/json")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
require 'uri'
require 'net/http'
url = URI("https://securelink-staging.valorpaytech.com:4430/?achsale=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'application/json'
request.body = "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achsale\",\"account_number\":\"9884210510\",\"routing_number\":\"021000021\",\"payee_name\":\"ABU\",\"account_type\":\"C\",\"entry_class\":\"Business\",\"amount\":\"5.87\",\"state_tax\":\"0\",\"city_tax\":\"0\",\"reduced_tax\":\"0\",\"card_type\":\"Debit\"}"
response = http.request(request)
puts response.read_body
Field Type Length Mandatory/Optional Example Value Description
uid Numeric 10 Mandatory 2223413579 A unique id of the request, A client can send any number of 10 digit
app_id String 32 Mandatory 464DA39FddCFB44D54F6C22CEF9098E5 Application id, an unique id given for the application
auth_key String 32 Mandatory 15B8BCFDB74287yt92608354A1444050 Authorization key (API key) given for application contact [email protected]
mtype Numeric 4 Mandatory achsale Message type 0100
epi Numeric 10 Mandatory 2536419865 10 digit number will be generated as a part of merchant boarding
amount Numeric 10 Mandatory 100.50 Transaction amount (Maximum amount 99,999.99)
state_tax_amount Numeric 4 Optional 10.00 Currency - (Ex. 00.00)
city_tax_amount Numeric 4 Optional 10.00 Currency - (Ex. 00.00)
reduced_tax_amount Numeric 4 Optional 10.00 Currency - (Ex. 00.00)
account_number Numeric 19 Mandatory 4012881888818888 Customer card number 15 to 19 digits
routing_number Numeric 9 Mandatory 122545874 Routing number is a nine-digit code used to identify a financial institution within the
username String 25 Optional test002 Customer user name
userid Numeric 4 Optional 13241 It is the userid of the merchant to be updated
payee_name String 25 Optional Jhon Smith
{
"error_no": "S00",
"msg": "APPROVED",
"mesg": "APPROVED",
"amount": "5.87",
"epi": "2319916062",
"routing_number": "****00021",
"account_number": "****210510",
"check_number": "1741263053",
"document_id": 223045339,
"entry_class": "CCD",
"received_on": "2025-03-06T12:10:55Z",
"posting_date": "2025-03-06T06:00:00Z",
"current_state": "Pending",
"desc": "AUTH NUM: 10014823C",
"verification_status": "Authorized",
"reference_number": "67c990cd4ef0b"
}
Void API
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://securelink-staging.valorpaytech.com:4430/?achvoid=', [
'body' => '{"appid":"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN","appkey":"Tv26MihzxwblHyk6gEuVelY2XwQE58jU","epi":"2319916062","txn_type":"achvoid","uid":"67c98e250d2ea"}',
'headers' => [
'accept' => 'application/json',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://securelink-staging.valorpaytech.com:4430/?achvoid="
payload = {
"appid": "Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN",
"appkey": "Tv26MihzxwblHyk6gEuVelY2XwQE58jU",
"epi": "2319916062",
"txn_type": "achvoid",
"uid": "67c98e250d2ea"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://securelink-staging.valorpaytech.com:4430/?achvoid=';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({
appid: 'Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN',
appkey: 'Tv26MihzxwblHyk6gEuVelY2XwQE58jU',
epi: '2319916062',
txn_type: 'achvoid',
uid: '67c98e250d2ea'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://securelink-staging.valorpaytech.com:4430/?achvoid=");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achvoid\",\"uid\":\"67c98e250d2ea\"}");
CURLcode ret = curl_easy_perform(hnd);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://securelink-staging.valorpaytech.com:4430/?achvoid=");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achvoid\",\"uid\":\"67c98e250d2ea\"}");
CURLcode ret = curl_easy_perform(hnd);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://securelink-staging.valorpaytech.com:4430/?achvoid="
payload := strings.NewReader("{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achvoid\",\"uid\":\"67c98e250d2ea\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("accept", "application/json")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
require 'uri'
require 'net/http'
url = URI("https://securelink-staging.valorpaytech.com:4430/?achvoid=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'application/json'
request.body = "{\"appid\":\"Vw7RdW6IPmRH4Z2feCE8Pp1iqeahSonN\",\"appkey\":\"Tv26MihzxwblHyk6gEuVelY2XwQE58jU\",\"epi\":\"2319916062\",\"txn_type\":\"achvoid\",\"uid\":\"67c98e250d2ea\"}"
response = http.request(request)
puts response.read_body
Field Type Length Mandatory/Optional Example Value Description
uid Numeric 10 Mandatory fsf658695sddsd A unique id of the request in alphanumeric
app_id String 32 Mandatory 464DA39FddCFB44D54F6C22CEF9098E5 Application id, an unique id given for the application
auth_key String 32 Mandatory 15B8BCFDB74287yt92608354A1444050 Authorization key (API key) given for application contact [email protected]
mtype Numeric 4 Mandatory achvoid Message type 0100
epi Numeric 10 Mandatory 2536419865 10 digit number will be generated as a part of merchant boarding
{
"error_no": "S00",
"msg": "APPROVED",
"mesg": "APPROVED",
"epi": "2319916062",
"desc": "VOIDED SUCCESSFULLY",
"reference_number": "67c98e250d2ea"
}