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:CCD , PPD , WEB |
same_day required | boolean | ACH transfer network. Either false =standard, or true =same-day-ach. |
Idempotency
Note
The KYC endpoint is idempotent and repeated requests using the same
Idempotency-Key
within a 24 hour period will fail.
Idempotency is a Web API design principle that prevents you from running the same operation multiple times. Because a certain amount of intermittent failure is to be expected, you need a way to reconcile failed requests with a server, and idempotency provides a mechanism for that. Including an idempotency key makes POST requests idempotent, which prompts the API to do the record keeping required to prevent duplicate operations. You can safely retry requests that include an idempotency key as long as the second request occurs within 24 hours from when you first receive the key (keys expire after 24 hours).
Providing the idempotency key string in the header is optional and example is shown below.
{
"Authorization": "YOUR-AUTHORIZATION",
"Identity": "YOUR-IDENTITY",
"Idempotency-Key": "dd6dcedd-2a11-4098-1223-876902123abc"
}
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
Previous documentation referred to the reliance on v0/transfers
API endpoint. That is no longer the case. 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, the Linked Account is the origination_account_id
. The request payload is shown below:
{
"origination_account_id": "0aca3af5-b7af-4c40-afdc-c2b610e59e5b",
"destination_account_id": "26d1d34a-585a-493e-904f-e2a5feff42c0",
"amount": 5000,
"ach": {
"class_code": "WEB",
"same_day": true
}
}
To move funds out of the Credit Card Account to the Linked Account, simply swap the origination_account_id
and the account_id
:
{
"origination_account_id": "26d1d34a-585a-493e-904f-e2a5feff42c0",
"destination_account_id": "0aca3af5-b7af-4c40-afdc-c2b610e59e5b",
"amount": 5000,
"ach": {
"class_code": "WEB",
"same_day": true
}
}
Updated 11 months ago