curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"amount": 1,
"creditorAccount": "string",
"currency": "EUR",
"debtorAccount": "string"
}
'import requests
url = "https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers"
payload = {
"amount": 1,
"creditorAccount": "string",
"currency": "EUR",
"debtorAccount": "string"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 1, creditorAccount: 'string', currency: 'EUR', debtorAccount: 'string'})
};
fetch('https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers', 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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers",
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([
'amount' => 1,
'creditorAccount' => 'string',
'currency' => 'EUR',
'debtorAccount' => 'string'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers"
payload := strings.NewReader("{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers")
.header("Idempotency-Key", "<idempotency-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}"
response = http.request(request)
puts response.read_body{
"amount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"creditorAccount": "<string>",
"currency": "<string>",
"debtorAccount": "<string>",
"endToEndId": "<string>",
"id": 123,
"sepaMessageId": "<string>",
"settlementDate": "2023-12-25",
"status": "CREATED",
"transferType": "INTERNAL",
"updatedAt": "2023-11-07T05:31:56Z"
}Initiate liquidity transfer
Moves liquidity between settlement accounts, or withdraws it to a registered safeguarding account.
curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"amount": 1,
"creditorAccount": "string",
"currency": "EUR",
"debtorAccount": "string"
}
'import requests
url = "https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers"
payload = {
"amount": 1,
"creditorAccount": "string",
"currency": "EUR",
"debtorAccount": "string"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 1, creditorAccount: 'string', currency: 'EUR', debtorAccount: 'string'})
};
fetch('https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers', 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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers",
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([
'amount' => 1,
'creditorAccount' => 'string',
'currency' => 'EUR',
'debtorAccount' => 'string'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers"
payload := strings.NewReader("{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-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.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers")
.header("Idempotency-Key", "<idempotency-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v1/nostro-accounts/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 1,\n \"creditorAccount\": \"string\",\n \"currency\": \"EUR\",\n \"debtorAccount\": \"string\"\n}"
response = http.request(request)
puts response.read_body{
"amount": 123,
"createdAt": "2023-11-07T05:31:56Z",
"creditorAccount": "<string>",
"currency": "<string>",
"debtorAccount": "<string>",
"endToEndId": "<string>",
"id": 123,
"sepaMessageId": "<string>",
"settlementDate": "2023-12-25",
"status": "CREATED",
"transferType": "INTERNAL",
"updatedAt": "2023-11-07T05:31:56Z"
}Overview
This endpoint initiates a liquidity transfer. The optionaltransferType field selects what happens; it defaults to INTERNAL:
transferType | What it does | Accounts | Guide |
|---|---|---|---|
INTERNAL (default) | Moves liquidity between the SCT and SCT Inst settlement accounts of the same BIC, in CENTROlink or EKS | CENTROlink: source and destination settlement accounts. EKS: registered operational account as debtor, destination settlement account as creditor | Transfers between settlement accounts |
SAFEGUARDING | Pays funds out of the settlement account of the selected scheme to a registered safeguarding account, as a SEPA payment | Registered operational account as debtor, registered safeguarding account as creditor | Withdraw to safeguarding |
paymentScheme (SEPACT or SEPAINST) is required for SAFEGUARDING and must be absent for INTERNAL. purpose (optional, up to 140 characters) sets the purpose of the SAFEGUARDING payment and defaults to Transfer to safeguarding account; INTERNAL ignores it. Transfers across clearing systems are not supported.
The Idempotency-Key header is required; repeating a request with the same key returns the original transfer. Requires the transaction-manager role or a read-write API client.Headers
Body
Basic liquidity transfer request example
Amount in minor currency units
Creditor (Recipient) Account IBAN. INTERNAL: the destination settlement account. SAFEGUARDING: a registered safeguarding account
1 - 34Currency units
1 - 3Debtor (Sender) Account IBAN. INTERNAL: the source settlement account for CENTROlink, the registered operational account for EKS. SAFEGUARDING: a registered operational account
1 - 34SEPACT or SEPAINST. Decides which settlement account is debited and how fast the payment settles. Required for SAFEGUARDING, must be absent for INTERNAL
SEPACT, SEPAINST Purpose of the safeguarding payment. Defaults to "Transfer to safeguarding account" when absent or blank. Ignored for INTERNAL
140"Transfer to safeguarding account"
INTERNAL (default) moves liquidity between settlement accounts of the same BIC; SAFEGUARDING pays funds out of the settlement account of the selected scheme to a registered safeguarding account, as a SEPA payment
INTERNAL, SAFEGUARDING Response
Liquidity transfer initiated
CREATED, SENT_TO_CLEAR, ACCEPTED, REJECTED, COMPLETED INTERNAL, SAFEGUARDING