Skip to main content
List Virtual Account Transfers
curl --request GET \
  --url https://api.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer', 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.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer",
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.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer"

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.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.spherepay.co/v2/virtual-account/{virtualAccountId}/transfer")

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": 400,
  "detail": "Invalid request parameters",
  "code": "address/invalid",
  "correlationId": "28c61e885c6e5eaa78c1a2183a9b883c"
}
{
"status": 404,
"detail": "Resource not found",
"code": "resource/not-found",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c"
}
{
"status": 422,
"detail": "Validation failed",
"code": "validation/failed",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"errors": [
{
"detail": "Invalid email format",
"pointer": "/email"
},
{
"detail": "Name is required",
"pointer": "/name"
}
]
}
Use this endpoint to retrieve the list of transfers processed through a specific Onramper Account. Each transfer represents a fiat deposit that was automatically converted to stablecoins and forwarded to the destination wallet. Use this endpoint to reconcile incoming deposits, verify conversion amounts, and attribute payments to individual customers.
Each Onramper Account should belong to a single customer. If multiple customers share a virtual account, matching deposits to customers requires manually correlating by amount and timing — which is error-prone. Always create one Onramper Account per customer.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

virtualAccountId
string
required

Response

Bad Request

status
integer
required
detail
string
required
title
string
code
string
errors
object[]
correlationId
string
Last modified on June 18, 2026