Creating a transfer

How to perform a fund transfer between accounts.

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

ParameterTypeDescription
origination_account_id
required
stringBond account UUID (36 characters) for the originating account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b.
destination_account_id
required
stringBond account UUID (36 characters) for the transfer destination account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b.
descriptionstringFreeform description for the transfer.
amount
required
stringTransfer amount as a decimal string, for example 8550 being $85.50.
Currently only USD is supported.
ach
required if the origination or destination account is an external account
objectDetails of the ach transfer to be made, as shown in the ach object table below.

The ach object has the structure shown in the table below.

ACH objectTypeDescription
class_code
required
stringACH Standard Entry Class (SEC) code. One of:
ARC, CBR, CCD, CIE, COR, CTX, IAT, MTE, PBR, POP, POS, PPD, RCK, TEL, WEB
same_day
required
booleanACH transfer network. Either false=standard, or true=same-day-ach.

Internal account-to-account transfers

An example of a request to make a $10.00 internal transfer is shown below.

curl --request POST \
     --url https://sandbox.bond.tech/api/v0.1/transfers \
     --header 'Accept: application/json' \
     --header 'Authorization: YOUR-AUTHORIZATION' \
     --header 'Content-Type: application/json' \
     --header 'Identity: YOUR-IDENTITY' \
     --data '
{
     "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
     "destination_account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
     "description": "GIFT",
     "amount": 1000
}
'
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://sandbox.bond.tech/api/v0.1/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["Identity"] = 'YOUR-IDENTITY'
request["Authorization"] = 'YOUR-AUTHORIZATION'
request.body = "{\"origination_account_id\":\"6f0e7dcb-6073-42df-bf02-ce71bd5fac3b\",\"destination_account_id\":\"225641a5-f6e4-4ae1-b5e0-326e6b98842e\",\"description\":\"GIFT\",\"amount\":1000}"

response = http.request(request)
puts response.read_body
const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Identity: 'YOUR-IDENTITY',
    Authorization: 'YOUR-AUTHORIZATION'
  },
  body: JSON.stringify({
    origination_account_id: '6f0e7dcb-6073-42df-bf02-ce71bd5fac3b',
    destination_account_id: '225641a5-f6e4-4ae1-b5e0-326e6b98842e',
    description: 'GIFT',
    amount: 1000
  })
};

fetch('https://sandbox.bond.tech/api/v0.1/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.1/transfers"

payload = {
    "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
    "destination_account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
    "description": "GIFT",
    "amount": 1000
}
headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Identity": "YOUR-IDENTITY",
    "Authorization": "YOUR-AUTHORIZATION"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
var client = new RestClient("https://sandbox.bond.tech/api/v0.1/transfers");
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Identity", "YOUR-IDENTITY");
request.AddHeader("Authorization", "YOUR-AUTHORIZATION");
request.AddParameter("application/json", "{\"origination_account_id\":\"6f0e7dcb-6073-42df-bf02-ce71bd5fac3b\",\"destination_account_id\":\"225641a5-f6e4-4ae1-b5e0-326e6b98842e\",\"description\":\"GIFT\",\"amount\":1000}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"origination_account_id\":\"6f0e7dcb-6073-42df-bf02-ce71bd5fac3b\",\"destination_account_id\":\"225641a5-f6e4-4ae1-b5e0-326e6b98842e\",\"description\":\"GIFT\",\"amount\":1000}");
Request request = new Request.Builder()
  .url("https://sandbox.bond.tech/api/v0.1/transfers")
  .post(body)
  .addHeader("Accept", "application/json")
  .addHeader("Content-Type", "application/json")
  .addHeader("Identity", "YOUR-IDENTITY")
  .addHeader("Authorization", "YOUR-AUTHORIZATION")
  .build();

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

An example of a response to a successful internal transfer request is shown below. The response 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",
  "date_updated": "2020-10-09T17:14:09.686688",
  "date_settled": "2020-10-13T17:14:09.686688",
  "transfer_id": "4ead6cdc-77eb-45fa-9959-3f166385a60a",
  "transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
  "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
  "destination_account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
  "description": "GIFT",
  "amount": 1000
}

A successful request results in a completed status.

ACH external transfers

An example of an ACH external transfer request is shown below:

{
    "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
    "destination_account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
    "amount": 1000,
    "ach": {
        "class_code": "WEB", 
        "same_day": true
    }
}

A successful 200 response to this ACH external transfer looks like:

{
  "date_created": "2020-10-09T17:14:09.686688",
  "date_updated": "2020-10-09T17:14:09.686688",
  "date_settled": "2020-10-13T17:14:09.686688",
  "transfer_id": "4ead6cdc-77eb-45fa-9959-3f166385a60a",
  "transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
  "origination_account_id": "6f0e7dcb-6073-42df-bf02-ce71bd5fac3b",
  "destination_account_id": "225641a5-f6e4-4ae1-b5e0-326e6b98842e",
  "description": "GIFT",
  "amount": 1000,
  "status": "submitted",
  "ach": {
    "ach_class_code": "WEB",
    "same_day": true
  }
}

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

Credit Card Account to/from Linked Account transfers

For all transfers between a Credit Card Account and Linked Account, the v0/transfers API endpoint will be used. Furthermore, all v0 transfers involving a Credit Card Account and Linked Account use the Credit Card Account ID as the origination_account_id value.

Here is an example using the following account IDs for a $50.00 ACH transfer.

Credit Card Account: 26d1d34a-585a-493e-904f-e2a5feff42c0
Linked Account: 0aca3af5-b7af-4c40-afdc-c2b610e59e5b

If repaying from the Linked Account to the Credit Card Account, set the ach_direction body parameter to debit. The request payload is shown below:

{
  "origination_account_id": "26d1d34a-585a-493e-904f-e2a5feff42c0",  
  "account_id": "0aca3af5-b7af-4c40-afdc-c2b610e59e5b",
  "ach_class_code": "WEB",
  "ach_description": "manual",
  "ach_direction": "debit",
  "ach_network": "same-day-ach",
  "amount": "50.00",
  "type": "ach"
}

To move funds out of the Credit Card Account to the Linked Account, set the ach_direction to credit, as shown in the request payload below:

{
  "origination_account_id": "26d1d34a-585a-493e-904f-e2a5feff42c0",  
  "account_id": "0aca3af5-b7af-4c40-afdc-c2b610e59e5b",
  "ach_class_code": "WEB",
  "ach_description": "manual",
  "ach_direction": "credit",
  "ach_network": "same-day-ach",
  "amount": "50.00",
  "type": "ach"
}

📘

Correct Usage

For v0 transfers, using the ach_direction parameter will control the direction of funds movement, rather than switching the origination_account_id and account_id.