Making an ACH transfer

What is an ACH transfer and how do we use them.

To execute an internal transfer, use the POST /transfers operation and provide the body parameters as shown in the table below.

▶ Run in Postman

Parameter

Type

Description

origination_account_id
required

string

Bond account UUID (36 characters) for the originating account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b.
Use the card_account_id.

account_id
required

string

Bond account UUID (36 characters) for the transfer destination account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b.
Use the external_account_id.

type
required

string

The type of transfer being initiated. Use ach.

ach_class_code
required

string

ACH SEC code.

ach_direction
required

string

ACH transfer direction of the money movement. Possible values are debit or credit.

The direction is in reference to the funds at the receiving account. An ACH debit "pulls" funds to the originating account, debiting the receiver. An ACH credit "pushes" funds from the originator to the receiver, crediting the receiver.

ach_network
required

string

ACH transfer network. Either ach or same-day-ach

ach_description
required

string

Freeform, alphanumeric description (maximum 10 characters) of the ACH transfer. Describes the purpose of the transfer and is displayed on the receiver's account statement.

amount
required

string

Transfer amount as a decimal string with two digits of precision, for example 175.00.
Currently only USD is supported.

An example of a request to transfer $175.00 is shown below.

curl --request POST \
     --url https://sandbox.bond.tech/api/v0/transfers \
     --header 'Accept: application/json' \
     --header 'Authorization: YOUR-AUTHORIZATION' \
     --header 'Content-Type: application/json' \
     --data '
{
     "type": "ach",
     "amount": "175.00",
     "origination_account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
     "account_id": "9dc86a8a-4c12-4107-84a8-e7cf6a76586f",
     "ach_class_code": "CIE",
     "ach_direction": "credit",
     "ach_network": "ach",
     "ach_description": "GIFT"
}
'
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://sandbox.bond.tech/api/v0/transfers")

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["Authorization"] = 'YOUR-AUTHORIZATION'
request.body = "{\"type\":\"ach\",\"amount\":\"175.00\",\"origination_account_id\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"account_id\":\"9dc86a8a-4c12-4107-84a8-e7cf6a76586f\",\"ach_class_code\":\"CIE\",\"ach_direction\":\"credit\",\"ach_network\":\"ach\",\"ach_description\":\"GIFT\"}"

response = http.request(request)
puts response.read_body
const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: 'YOUR-AUTHORIZATION'
  },
  body: JSON.stringify({
    type: 'ach',
    amount: '175.00',
    origination_account_id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
    account_id: '9dc86a8a-4c12-4107-84a8-e7cf6a76586f',
    ach_class_code: 'CIE',
    ach_direction: 'credit',
    ach_network: 'ach',
    ach_description: 'GIFT'
  })
};

fetch('https://sandbox.bond.tech/api/v0/transfers', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
import requests

url = "https://sandbox.bond.tech/api/v0/transfers"

payload = {
    "type": "ach",
    "amount": "175.00",
    "origination_account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "account_id": "9dc86a8a-4c12-4107-84a8-e7cf6a76586f",
    "ach_class_code": "CIE",
    "ach_direction": "credit",
    "ach_network": "ach",
    "ach_description": "GIFT"
}
headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": "YOUR-AUTHORIZATION"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
var client = new RestClient("https://sandbox.bond.tech/api/v0/transfers");
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "YOUR-AUTHORIZATION");
request.AddParameter("application/json", "{\"type\":\"ach\",\"amount\":\"175.00\",\"origination_account_id\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"account_id\":\"9dc86a8a-4c12-4107-84a8-e7cf6a76586f\",\"ach_class_code\":\"CIE\",\"ach_direction\":\"credit\",\"ach_network\":\"ach\",\"ach_description\":\"GIFT\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"type\":\"ach\",\"amount\":\"175.00\",\"origination_account_id\":\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\"account_id\":\"9dc86a8a-4c12-4107-84a8-e7cf6a76586f\",\"ach_class_code\":\"CIE\",\"ach_direction\":\"credit\",\"ach_network\":\"ach\",\"ach_description\":\"GIFT\"}");
Request request = new Request.Builder()
  .url("https://sandbox.bond.tech/api/v0/transfers")
  .post(body)
  .addHeader("Accept", "application/json")
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "YOUR-AUTHORIZATION")
  .build();

Response response = client.newCall(request).execute();

The response shown below includes the unique transfer_id representing the transfer. Note that the transfer amount is expressed as a decimal string in cents.

{
  "date_created": "2020-10-09T17:14:09.686688",
  "transfer_id": "4ead6cdc-77eb-45fa-9959-3f166385a60a",
  "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
  "account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
  "type": "ach",
  "ach_direction": "credit",
  "ach_class_code": "WEB",
  "ach_network": "ach",
  "ach_description": "GIFT",
  "status": "pending",
  "ach_return_code": null,
  "failure_reason": null,
  "amount_in_cents": "17500",
  "iso_currency_code": "USD"
}

A successful request results in a completed status.

For a complete specification and interactive examples, see Creating a transfer in the Bond API Reference.


Did this page help you?