curl --request POST \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"return_url": "https://partner.example.com/bank-link/return",
"external_reference": "order-abc-123"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links"
payload = {
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"return_url": "https://partner.example.com/bank-link/return",
"external_reference": "order-abc-123"
}
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({
method_id: '3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b',
return_url: 'https://partner.example.com/bank-link/return',
external_reference: 'order-abc-123'
})
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links', 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",
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([
'method_id' => '3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b',
'return_url' => 'https://partner.example.com/bank-link/return',
'external_reference' => 'order-abc-123'
]),
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"
payload := strings.NewReader("{\n \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\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")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links")
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 \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\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-07-02T16:00:00Z"
},
"accounts_eligibility_status": "unknown"
}
}Create bank link
Creates a Bank Link for a funding method that requires linking. Returns it in pending with a hosted-widget URL to complete it. method_id must be one this account can currently use. Use GET /v1/accounts/{account_id}/funds/deposits/methods?asset_symbol={asset_symbol} to discover them. Any other value is rejected with bank_link_method_not_linkable rather than creating a link that cannot complete. Provider identifiers, access tokens, owner names and raw bank numbers are never returned: the link and its accounts are referenced only by bank_link_id and account_link_id.
curl --request POST \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"return_url": "https://partner.example.com/bank-link/return",
"external_reference": "order-abc-123"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links"
payload = {
"method_id": "3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b",
"return_url": "https://partner.example.com/bank-link/return",
"external_reference": "order-abc-123"
}
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({
method_id: '3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b',
return_url: 'https://partner.example.com/bank-link/return',
external_reference: 'order-abc-123'
})
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links', 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",
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([
'method_id' => '3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b',
'return_url' => 'https://partner.example.com/bank-link/return',
'external_reference' => 'order-abc-123'
]),
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"
payload := strings.NewReader("{\n \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\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")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/funds/bank-links")
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 \"method_id\": \"3f9a1c2e-8b7d-4e6f-9a1b-2c3d4e5f6a7b\",\n \"return_url\": \"https://partner.example.com/bank-link/return\",\n \"external_reference\": \"order-abc-123\"\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-07-02T16:00:00Z"
},
"accounts_eligibility_status": "unknown"
}
}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 - 42Body
Funding method to link. Use a method ID, never a name. Use GET /v1/accounts/{account_id}/funds/deposits/methods?asset_symbol={asset_symbol} to discover the methods available to this account.
1 - 64Optional 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 - 2048Optional partner correlation value.
1 - 64Response
Successful response
The Bank Link, in pending with a next_action.
Show child attributes
Show child attributes