curl --request POST \
--url https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wallet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"card_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1,
"idempotency_key": "<string>",
"payment_type": "transfer",
"currency": "USD",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"from_hold": false
}
'import requests
url = "https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card"
payload = {
"wallet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"card_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1,
"idempotency_key": "<string>",
"payment_type": "transfer",
"currency": "USD",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"from_hold": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallet_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
card_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 1,
idempotency_key: '<string>',
payment_type: 'transfer',
currency: 'USD',
user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
from_hold: false
})
};
fetch('https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card', 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/payment/cards/account-to-card",
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([
'wallet_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'card_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 1,
'idempotency_key' => '<string>',
'payment_type' => 'transfer',
'currency' => 'USD',
'user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'from_hold' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.finogates.com/v1/platform/payment/cards/account-to-card"
payload := strings.NewReader("{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.finogates.com/v1/platform/payment/cards/account-to-card")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}"
response = http.request(request)
puts response.read_body{
"status_code": 123,
"data": "<unknown>",
"query_generated_time": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Account-to-Card Transfer (Money Out)
Push funds from your wallet out to an enrolled user’s card. The transfer is reviewed by Finogate before it is sent.
curl --request POST \
--url https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wallet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"card_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1,
"idempotency_key": "<string>",
"payment_type": "transfer",
"currency": "USD",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"from_hold": false
}
'import requests
url = "https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card"
payload = {
"wallet_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"card_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1,
"idempotency_key": "<string>",
"payment_type": "transfer",
"currency": "USD",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"from_hold": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallet_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
card_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 1,
idempotency_key: '<string>',
payment_type: 'transfer',
currency: 'USD',
user_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
from_hold: false
})
};
fetch('https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card', 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/payment/cards/account-to-card",
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([
'wallet_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'card_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 1,
'idempotency_key' => '<string>',
'payment_type' => 'transfer',
'currency' => 'USD',
'user_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'from_hold' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.finogates.com/v1/platform/payment/cards/account-to-card"
payload := strings.NewReader("{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.finogates.com/v1/platform/payment/cards/account-to-card")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/payment/cards/account-to-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"card_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1,\n \"idempotency_key\": \"<string>\",\n \"payment_type\": \"transfer\",\n \"currency\": \"USD\",\n \"user_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"from_hold\": false\n}"
response = http.request(request)
puts response.read_body{
"status_code": 123,
"data": "<unknown>",
"query_generated_time": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Headers
Optional. A unique value you choose so a retry of the same transfer doesn't run twice. Sending the same key returns the original transfer.
120Body
Platform request to initiate one debit-card transfer.
Direction is fixed by the endpoint path (/card-to-account for AFT,
/account-to-card for OCT). The optional idempotency key is supplied
via the X-Idempotency-Key HTTP header rather than the body — matching
the rest of Finogate's API surface (Stripe / Square convention).
payment_type mirrors the rest of the payments API: transfer moves
funds between the user's OWN wallet and OWN card (card-to-wallet on
card-to-account, wallet-to-card on account-to-card). send (moving funds
to a different party's card) is reserved and not yet supported.
REQUIRED. The wallet to credit (card-to-account) or debit (account-to-card). The cardholder/owner is resolved from this wallet — mirroring the wallet-to-bank flow.
UUID of the enrolled card to transact on
Transfer amount in major units
x > 0Required. A unique value you pick per transfer (UUID recommended). Reusing the same key with an identical request returns the original transfer; reusing it with a different request is rejected. Passed in the body, matching the other wallet payment endpoints.
1 - 120Required. transfer moves funds between the user's own wallet and own card. send (to another party's card) is reserved and not yet supported.
transfer, send "transfer"
3Optional safety cross-check. The owner is resolved from wallet_id; if user_id is supplied it must match that owner or the request is rejected.
Account-to-card (money-out) only. When true, the transfer draws the amount from the wallet's frozen (held) balance instead of its available balance; the held balance must cover the amount or the request is rejected with insufficient_held_funds. Ignored on card-to-account (money-in), which has no wallet source to draw from — sending true there is rejected. Omit (or send false) for a normal transfer from available balance.
false
Response
Successful Response
Standard response wrapper for single-object responses and errors.
Generic over the payload type. A route that declares
CommonResponse[SomeModel] gets the real data schema rendered in
OpenAPI/Swagger; a bare CommonResponse leaves data untyped.

