List direct-route transfers
curl --request GET \
--url https://api.sandbox.rails.wayex.com/v1/transfers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sandbox.rails.wayex.com/v1/transfers"
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.rails.wayex.com/v1/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.sandbox.rails.wayex.com/v1/transfers",
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.rails.wayex.com/v1/transfers"
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.rails.wayex.com/v1/transfers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.rails.wayex.com/v1/transfers")
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{
"data": [
{
"id": "<string>",
"counterpartyId": "<string>",
"customerId": "<string>",
"status": "created",
"sourceDepositInstructions": {
"kind": "crypto",
"address": "<string>",
"currency": "USDC",
"network": "ethereum",
"amount": "<string>"
},
"references": {
"payoutHoldReason": "<string>",
"quoteId": "<string>",
"providerQuoteId": "<string>",
"liquidationAddress": "<string>",
"vaultId": "<string>",
"disbursementVaultId": "<string>",
"depositReference": "<string>",
"depositTxHash": "<string>",
"depositSourceAddress": "<string>",
"payinReference": "<string>",
"tradeId": "<string>",
"sweepTxId": "<string>",
"sweepTxHash": "<string>",
"failedSweepTxIds": [
"<string>"
],
"onforwardTxId": "<string>",
"failedOnforwardTxIds": [
"<string>"
],
"onforwardToAddress": "<string>",
"onforwardTxHash": "<string>",
"onforwardDepositId": "<string>",
"fiatWithdrawalId": "<string>",
"rejectedFiatWithdrawals": [
"<string>"
],
"stablecoinWithdrawalId": "<string>",
"fxFundingPayoutId": "<string>",
"sendTxId": "<string>",
"sendTxHash": "<string>",
"failedSendTxIds": [
"<string>"
],
"payoutId": "<string>",
"ledgerEntryRefs": [
"<string>"
],
"lastCaseReason": "<string>",
"lastCaseAt": "<string>"
},
"timeline": [
{
"status": "created",
"at": "2023-11-07T05:31:56Z",
"providerRef": "<string>",
"description": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"type": "offramp",
"source": {
"currency": "USDC",
"network": "ethereum",
"amount": "<string>"
},
"destination": {
"account_holder_name": "<string>",
"bsb_code": "<string>",
"account_number": "<string>",
"bank_country": "<string>",
"currency": "AUD"
},
"destinationAmount": "<string>",
"destinationCurrency": "AUD",
"routeId": "<string>",
"quoteId": "<string>",
"metadata": {},
"developerFee": {
"amount": "<string>",
"currency": "AUD"
},
"exchangeRate": "<string>"
}
],
"hasMore": true,
"nextCursor": "<string>"
}Direct-route records
List direct-route transfers
Lists conversions automatically created when customers fund direct payment routes.
GET
/
v1
/
transfers
List direct-route transfers
curl --request GET \
--url https://api.sandbox.rails.wayex.com/v1/transfers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sandbox.rails.wayex.com/v1/transfers"
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.rails.wayex.com/v1/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.sandbox.rails.wayex.com/v1/transfers",
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.rails.wayex.com/v1/transfers"
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.rails.wayex.com/v1/transfers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.rails.wayex.com/v1/transfers")
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{
"data": [
{
"id": "<string>",
"counterpartyId": "<string>",
"customerId": "<string>",
"status": "created",
"sourceDepositInstructions": {
"kind": "crypto",
"address": "<string>",
"currency": "USDC",
"network": "ethereum",
"amount": "<string>"
},
"references": {
"payoutHoldReason": "<string>",
"quoteId": "<string>",
"providerQuoteId": "<string>",
"liquidationAddress": "<string>",
"vaultId": "<string>",
"disbursementVaultId": "<string>",
"depositReference": "<string>",
"depositTxHash": "<string>",
"depositSourceAddress": "<string>",
"payinReference": "<string>",
"tradeId": "<string>",
"sweepTxId": "<string>",
"sweepTxHash": "<string>",
"failedSweepTxIds": [
"<string>"
],
"onforwardTxId": "<string>",
"failedOnforwardTxIds": [
"<string>"
],
"onforwardToAddress": "<string>",
"onforwardTxHash": "<string>",
"onforwardDepositId": "<string>",
"fiatWithdrawalId": "<string>",
"rejectedFiatWithdrawals": [
"<string>"
],
"stablecoinWithdrawalId": "<string>",
"fxFundingPayoutId": "<string>",
"sendTxId": "<string>",
"sendTxHash": "<string>",
"failedSendTxIds": [
"<string>"
],
"payoutId": "<string>",
"ledgerEntryRefs": [
"<string>"
],
"lastCaseReason": "<string>",
"lastCaseAt": "<string>"
},
"timeline": [
{
"status": "created",
"at": "2023-11-07T05:31:56Z",
"providerRef": "<string>",
"description": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"type": "offramp",
"source": {
"currency": "USDC",
"network": "ethereum",
"amount": "<string>"
},
"destination": {
"account_holder_name": "<string>",
"bsb_code": "<string>",
"account_number": "<string>",
"bank_country": "<string>",
"currency": "AUD"
},
"destinationAmount": "<string>",
"destinationCurrency": "AUD",
"routeId": "<string>",
"quoteId": "<string>",
"metadata": {},
"developerFee": {
"amount": "<string>",
"currency": "AUD"
},
"exchangeRate": "<string>"
}
],
"hasMore": true,
"nextCursor": "<string>"
}What this endpoint does
Lists conversions automatically created when customers fund direct payment routes.When to use it
Use it for transfer search, reconciliation, and monitoring across customers and routes. Narrow server-side withstatus (one value or a comma-separated list; an unknown value is rejected with 400) and hold_reason (matches the machine code on references.payoutHoldReason or references.lastCaseReason) instead of paging the whole list and filtering client-side.
Before you call
Authenticate with an API key that can read this resource. Results are restricted to the tenant account bound to that key.Money and balance effect
This is a read-only request. It does not reserve, debit, credit, or settle money.States and completion
Thestatus field carries the enum values shown in the schema, not display copy. Broadly: awaiting_payin, awaiting_deposit, and the deposit_* states are waiting on funds; awaiting_client_action (client-gated routes only) is waiting on your progress or refund decision; states such as screening, fx_executed, sweeping, pooled, payout_instructed, sending, and refunding are in flight; on_hold, payout_held, and frozen are holds; completed, failed, cancelled, expired, and reversed are terminal. When a completed AUD payout is later returned by the receiving bank the transfer passes through returned and reversing and settles at reversed — treat returned and reversing as in-flight, not as an end state. A refunded client-gated payment takes the same path (refunding, returned, reversing, reversed). Treat only completed as settled — never infer settlement from creation alone.
Safe retries
GET requests are read-only and may be retried with normal exponential backoff. Do not send anIdempotency-Key.
Read Activity and history for the complete workflow.Authorizations
BearerApiKey
Send the same Wayex API key as Authorization: Bearer <key>.
Query Parameters
Available options:
onramp, offramp Filter by lifecycle status. One value or a comma-separated list (e.g. payout_held,on_hold); each must be a valid transfer status (400 otherwise).
Filter to transfers whose references.payoutHoldReason or references.lastCaseReason equals this machine code.
Example:
25
Available options:
-created_at, created_at, -updated_at, updated_at Created at or before this instant (ISO 8601 with offset). Inclusive. 400 if malformed.
Created at or after this instant (ISO 8601 with offset, e.g. 2026-09-01T00:00:00+10:00). Inclusive. 400 if malformed or later than to.
Response
A cursor-paginated page of transfers.

