curl --request POST \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"return_url": "https://partner.example.com/bank-link/return"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect"
payload = { "return_url": "https://partner.example.com/bank-link/return" }
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({return_url: 'https://partner.example.com/bank-link/return'})
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect', 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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect",
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([
'return_url' => 'https://partner.example.com/bank-link/return'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>",
"Content-Type: application/json"
],
]);
$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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect"
payload := strings.NewReader("{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"bank_link_id": "bal_5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"status": "pending",
"next_action": {
"type": "hosted_link",
"widget_url": "https://bank-link.services.payward.com/link/bal_5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"expires_at": "2026-08-19T11:45:00Z"
},
"accounts_eligibility_status": "unknown"
}
}{
"error": {
"type": "validation_error",
"status": 400,
"instance": "req_123",
"code": "bad_request"
}
}{
"error": {
"type": "authentication_error",
"status": 401,
"instance": "req_123",
"code": "unauthenticated"
}
}{
"error": {
"type": "authorization_error",
"status": 403,
"instance": "req_123",
"code": "forbidden"
}
}{
"error": {
"type": "not_found_error",
"status": 404,
"instance": "req_123",
"code": "bank_link_not_found"
}
}{
"error": {
"type": "conflict_error",
"status": 409,
"instance": "req_123",
"code": "bank_link_activation_restart_required"
}
}{
"error": {
"type": "rate_limit_error",
"status": 429,
"instance": "req_123",
"code": "resource_exhausted"
}
}{
"error": {
"type": "internal_error",
"status": 500,
"instance": "req_123",
"code": "internal"
}
}{
"error": {
"type": "api_error",
"status": 501,
"instance": "req_123",
"code": "unimplemented"
}
}{
"error": {
"type": "service_error",
"status": 503,
"instance": "req_123",
"code": "unavailable"
}
}{
"error": {
"type": "service_error",
"status": 504,
"instance": "req_123",
"code": "deadline_exceeded"
}
}Reconnect bank link
Reconnects a Bank Link whose provider connection expired or was revoked. Returns it in pending with a fresh hosted-widget URL; the user re-authorizes through the provider and a stored credential is never reused. Completing it reconciles the account set: accounts shared again keep their account_link_id, newly shared accounts appear, and accounts no longer shared become removed, which drops them from get and list. An account_link_id is therefore stable but revocable, not permanent.
curl --request POST \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"return_url": "https://partner.example.com/bank-link/return"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect"
payload = { "return_url": "https://partner.example.com/bank-link/return" }
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({return_url: 'https://partner.example.com/bank-link/return'})
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect', 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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect",
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([
'return_url' => 'https://partner.example.com/bank-link/return'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>",
"Content-Type: application/json"
],
]);
$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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect"
payload := strings.NewReader("{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links/{bank_link_id}/reconnect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"return_url\": \"https://partner.example.com/bank-link/return\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"bank_link_id": "bal_5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"status": "pending",
"next_action": {
"type": "hosted_link",
"widget_url": "https://bank-link.services.payward.com/link/bal_5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"expires_at": "2026-08-19T11:45:00Z"
},
"accounts_eligibility_status": "unknown"
}
}{
"error": {
"type": "validation_error",
"status": 400,
"instance": "req_123",
"code": "bad_request"
}
}{
"error": {
"type": "authentication_error",
"status": 401,
"instance": "req_123",
"code": "unauthenticated"
}
}{
"error": {
"type": "authorization_error",
"status": 403,
"instance": "req_123",
"code": "forbidden"
}
}{
"error": {
"type": "not_found_error",
"status": 404,
"instance": "req_123",
"code": "bank_link_not_found"
}
}{
"error": {
"type": "conflict_error",
"status": 409,
"instance": "req_123",
"code": "bank_link_activation_restart_required"
}
}{
"error": {
"type": "rate_limit_error",
"status": 429,
"instance": "req_123",
"code": "resource_exhausted"
}
}{
"error": {
"type": "internal_error",
"status": 500,
"instance": "req_123",
"code": "internal"
}
}{
"error": {
"type": "api_error",
"status": 501,
"instance": "req_123",
"code": "unimplemented"
}
}{
"error": {
"type": "service_error",
"status": 503,
"instance": "req_123",
"code": "unavailable"
}
}{
"error": {
"type": "service_error",
"status": 504,
"instance": "req_123",
"code": "deadline_exceeded"
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
Globally unique public identifier for an account.
14 - 42Opaque public bank-link id.
4 - 128Body
Optional partner URL to return the user to after the hosted widget completes. When supplied it must be an absolute https URL without userinfo; other values are rejected.
1 - 2048Response
Successful response
A provider-neutral linking operation and persistent bank connection.
Show child attributes
Show child attributes