curl --request GET \
--url https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}', 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.finogates.com/v1/platform/bank/relink/{bank_account_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": {
"bank_account_id": "e5f6a7b8-c9d0-1234-5678-9abcdef01234",
"user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"relink_bank_url": "https://connect.finogates.com/payment-methods/add-bank/session/sess_2f8a1c9b4d",
"expires_at": "2026-09-18T10:40:00Z"
},
"query_generated_time": 1758191000000
}{
"status_code": 422,
"data": {
"detail": "This bank account was not connected through the instant bank link, so there is no connection to refresh.",
"code": "bank_not_relinkable",
"error_code": 1118
},
"query_generated_time": 1750000000000
}Get a Bank Account Relink Link
Get a ready-made web page link that lets one of your users refresh the
instant connection behind a bank account they already added — the bank has
asked them to sign in again, and until they do, payments from that account
fail with bank_relink_required.
You learn a bank needs this from the payment_method.bank.relink_required
webhook, from relink_required: true on GET /platform/bank-accounts/{user_id},
or from a payment that failed with that reason. Show the page inside your
own website (in an iframe) or open it in its own window; the user signs in
to their bank on it, and the account they already have keeps working — no
new bank account is created.
What you get back
bank_account_id/user_id— the account this link is for.relink_bank_url— the link to load. It can be used once.expires_at— the time the link stops working (about 10 minutes away).
How you find out the result
- When the connection is working again, we send your server a
payment_method.bank.relinkedwebhook with thepayment_method_idanduser_id, andrelink_requiredgoes back to false. - If the user does not finish, nothing changes and no notification is sent. Call this endpoint again for a fresh link — links cannot be renewed.
A bank account that was added manually (routing and account number) has no
instant connection to refresh and is refused with bank_not_relinkable.
The link contains no details about which company connects the bank behind
the scenes. Treat it as a plain string with no meaning of its own.
curl --request GET \
--url https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}', 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.finogates.com/v1/platform/bank/relink/{bank_account_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/bank/relink/{bank_account_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": {
"bank_account_id": "e5f6a7b8-c9d0-1234-5678-9abcdef01234",
"user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"relink_bank_url": "https://connect.finogates.com/payment-methods/add-bank/session/sess_2f8a1c9b4d",
"expires_at": "2026-09-18T10:40:00Z"
},
"query_generated_time": 1758191000000
}{
"status_code": 422,
"data": {
"detail": "This bank account was not connected through the instant bank link, so there is no connection to refresh.",
"code": "bank_not_relinkable",
"error_code": 1118
},
"query_generated_time": 1750000000000
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
The unique ID of the linked bank account whose connection needs refreshing.
"e5f6a7b8-c9d0-1234-5678-9abcdef01234"
Query Parameters
Optional. The bare origin of the page that will embed the link in an iframe (e.g. https://app.example.com). When provided, the page sends the outcome back to that exact window via a browser message. Omit it when opening the link as a full page or popup.
255"https://app.example.com"
Response
A short-lived, single-use hosted relink link.

