Register a customer API bank connection
curl --request POST \
--url https://api.dualentry.com/public/v2/bank-connections/ \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"connection_source_id": "<string>",
"institution_name": "<string>",
"accounts": [
{
"account_id": "<string>",
"account_name": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}
'import requests
url = "https://api.dualentry.com/public/v2/bank-connections/"
payload = {
"connection_source_id": "<string>",
"institution_name": "<string>",
"accounts": [
{
"account_id": "<string>",
"account_name": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connection_source_id: '<string>',
institution_name: '<string>',
accounts: [
{
account_id: '<string>',
account_name: '<string>',
truncated_account_number: '<string>',
currency_iso_4217_code: '<string>'
}
]
})
};
fetch('https://api.dualentry.com/public/v2/bank-connections/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dualentry.com/public/v2/bank-connections/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connection_source_id' => '<string>',
'institution_name' => '<string>',
'accounts' => [
[
'account_id' => '<string>',
'account_name' => '<string>',
'truncated_account_number' => '<string>',
'currency_iso_4217_code' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dualentry.com/public/v2/bank-connections/"
payload := strings.NewReader("{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://api.dualentry.com/public/v2/bank-connections/")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualentry.com/public/v2/bank-connections/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"id": 123,
"connection_source_id": "<string>",
"status": "<string>",
"institution_name": "<string>",
"successfully_aggregated_at": "2023-11-07T05:31:56Z",
"last_sync_at": "2023-11-07T05:31:56Z",
"accounts": [
{
"id": 123,
"account_id": "<string>",
"account_name": "<string>",
"status": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}{
"errors": {},
"success": false
}{
"errors": {},
"success": false
}Bank Connections
Register a customer API bank connection
Register or upsert a customer-built bank connection and optional accounts under source_type=customer_api.
POST
/
public
/
v2
/
bank-connections
/
Register a customer API bank connection
curl --request POST \
--url https://api.dualentry.com/public/v2/bank-connections/ \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"connection_source_id": "<string>",
"institution_name": "<string>",
"accounts": [
{
"account_id": "<string>",
"account_name": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}
'import requests
url = "https://api.dualentry.com/public/v2/bank-connections/"
payload = {
"connection_source_id": "<string>",
"institution_name": "<string>",
"accounts": [
{
"account_id": "<string>",
"account_name": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connection_source_id: '<string>',
institution_name: '<string>',
accounts: [
{
account_id: '<string>',
account_name: '<string>',
truncated_account_number: '<string>',
currency_iso_4217_code: '<string>'
}
]
})
};
fetch('https://api.dualentry.com/public/v2/bank-connections/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dualentry.com/public/v2/bank-connections/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connection_source_id' => '<string>',
'institution_name' => '<string>',
'accounts' => [
[
'account_id' => '<string>',
'account_name' => '<string>',
'truncated_account_number' => '<string>',
'currency_iso_4217_code' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dualentry.com/public/v2/bank-connections/"
payload := strings.NewReader("{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://api.dualentry.com/public/v2/bank-connections/")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dualentry.com/public/v2/bank-connections/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connection_source_id\": \"<string>\",\n \"institution_name\": \"<string>\",\n \"accounts\": [\n {\n \"account_id\": \"<string>\",\n \"account_name\": \"<string>\",\n \"truncated_account_number\": \"<string>\",\n \"currency_iso_4217_code\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"id": 123,
"connection_source_id": "<string>",
"status": "<string>",
"institution_name": "<string>",
"successfully_aggregated_at": "2023-11-07T05:31:56Z",
"last_sync_at": "2023-11-07T05:31:56Z",
"accounts": [
{
"id": 123,
"account_id": "<string>",
"account_name": "<string>",
"status": "<string>",
"truncated_account_number": "<string>",
"currency_iso_4217_code": "<string>"
}
]
}{
"errors": {},
"success": false
}{
"errors": {},
"success": false
}Authorizations
Headers
Optional. A unique value (a UUID works well) identifying this operation. If the request is repeated with the same key, the original response is replayed instead of the operation running again, so a retry cannot create a duplicate record. Results are replayable for 48 hours. Reusing a key with a different request body returns 422.
Maximum string length:
255Body
application/json
Response
Created
Date and time the record was created
Date and time the record was last updated
Show child attributes
Show child attributes
Last modified on September 8, 2026
Was this page helpful?