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.
Parameter | Type | Description |
---|---|---|
origination_account_id required | string | Bond account UUID (36 characters) for the originating account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b . |
destination_account_id required | string | Bond account UUID (36 characters) for the transfer destination account, for example 6f0e7dcb-6073-42df-bf02-ce71bd5fac3b . |
description | string | Freeform description for the transfer. |
amount required | string | Transfer 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 | object | Details 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 object | Type | Description |
---|---|---|
class_code required | string | ACH 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 | boolean | ACH 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 theorigination_account_id
andaccount_id
.
Updated about 1 year ago