# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/fixed-routes/validate \
--body '<request-json>'Validate if a fixed route can be created.
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/fixed-routes/validate"
payload = {
"sweepTargetAccountId": "ewa_abc123",
"fixedRouteType": "FIAT_TO_CRYPTO",
"sourceRail": "ACH",
"sourceRails": ["ACH", "WIRE"],
"sourceCurrency": "USD",
"destinationRail": "BASE",
"destinationCurrency": "USDC",
"braleAutomationId": "<string>",
"documentIds": ["<string>"]
}
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({
sweepTargetAccountId: 'ewa_abc123',
fixedRouteType: 'FIAT_TO_CRYPTO',
sourceRail: 'ACH',
sourceRails: ['ACH', 'WIRE'],
sourceCurrency: 'USD',
destinationRail: 'BASE',
destinationCurrency: 'USDC',
braleAutomationId: '<string>',
documentIds: ['<string>']
})
};
fetch('https://sandbox.api.infinite.dev/v1/fixed-routes/validate', 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://sandbox.api.infinite.dev/v1/fixed-routes/validate",
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([
'sweepTargetAccountId' => 'ewa_abc123',
'fixedRouteType' => 'FIAT_TO_CRYPTO',
'sourceRail' => 'ACH',
'sourceRails' => [
'ACH',
'WIRE'
],
'sourceCurrency' => 'USD',
'destinationRail' => 'BASE',
'destinationCurrency' => 'USDC',
'braleAutomationId' => '<string>',
'documentIds' => [
'<string>'
]
]),
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://sandbox.api.infinite.dev/v1/fixed-routes/validate"
payload := strings.NewReader("{\n \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\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://sandbox.api.infinite.dev/v1/fixed-routes/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/fixed-routes/validate")
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 \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"error": "FIAT_TO_CRYPTO route requires a wallet as sweep target",
"minimumAmount": {
"currency": "USD",
"exponent": 2,
"value": "12345",
"displayValue": "123.45"
}
}Validate if a fixed route can be created
Checks if a fixed route configuration is valid before creating it. Returns validation result with any errors.
# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/fixed-routes/validate \
--body '<request-json>'Validate if a fixed route can be created.
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/fixed-routes/validate"
payload = {
"sweepTargetAccountId": "ewa_abc123",
"fixedRouteType": "FIAT_TO_CRYPTO",
"sourceRail": "ACH",
"sourceRails": ["ACH", "WIRE"],
"sourceCurrency": "USD",
"destinationRail": "BASE",
"destinationCurrency": "USDC",
"braleAutomationId": "<string>",
"documentIds": ["<string>"]
}
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({
sweepTargetAccountId: 'ewa_abc123',
fixedRouteType: 'FIAT_TO_CRYPTO',
sourceRail: 'ACH',
sourceRails: ['ACH', 'WIRE'],
sourceCurrency: 'USD',
destinationRail: 'BASE',
destinationCurrency: 'USDC',
braleAutomationId: '<string>',
documentIds: ['<string>']
})
};
fetch('https://sandbox.api.infinite.dev/v1/fixed-routes/validate', 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://sandbox.api.infinite.dev/v1/fixed-routes/validate",
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([
'sweepTargetAccountId' => 'ewa_abc123',
'fixedRouteType' => 'FIAT_TO_CRYPTO',
'sourceRail' => 'ACH',
'sourceRails' => [
'ACH',
'WIRE'
],
'sourceCurrency' => 'USD',
'destinationRail' => 'BASE',
'destinationCurrency' => 'USDC',
'braleAutomationId' => '<string>',
'documentIds' => [
'<string>'
]
]),
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://sandbox.api.infinite.dev/v1/fixed-routes/validate"
payload := strings.NewReader("{\n \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\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://sandbox.api.infinite.dev/v1/fixed-routes/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/fixed-routes/validate")
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 \"sweepTargetAccountId\": \"ewa_abc123\",\n \"fixedRouteType\": \"FIAT_TO_CRYPTO\",\n \"sourceRail\": \"ACH\",\n \"sourceRails\": [\n \"ACH\",\n \"WIRE\"\n ],\n \"sourceCurrency\": \"USD\",\n \"destinationRail\": \"BASE\",\n \"destinationCurrency\": \"USDC\",\n \"braleAutomationId\": \"<string>\",\n \"documentIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"error": "FIAT_TO_CRYPTO route requires a wallet as sweep target",
"minimumAmount": {
"currency": "USD",
"exponent": 2,
"value": "12345",
"displayValue": "123.45"
}
}Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Body
The destination account ID for the fixed route
"ewa_abc123"
The type of fixed route to create
FIAT_TO_CRYPTO, CRYPTO_TO_FIAT, CRYPTO_TO_CRYPTO, FIAT_TO_FIAT, FIAT_TO_CRYPTO_TO_FIAT "FIAT_TO_CRYPTO"
Source rail - payment rail for incoming deposits (e.g., ACH, WIRE, SEPA)
"ACH"
Optional list of inbound rails for a USD bank pay-in deposit account. Omit to accept ACH and wire. SWIFT is included only when listed. When sourceRail is sent instead, it is treated as a one-element list. Crypto deposit routes still use a single sourceRail.
ACH, ACH_SAME_DAY, WIRE, FED_NOW, RTP, EREBOR, EREBOR_RAIL, BALANCE, SWIFT, SEPA, SEPA_INSTANT, TIPS, FASTER_PAYMENTS, BACS, CHAPS, ELIXIR, NICS, EFT, INTERAC, NPP, BECS, UPI, IMPS, IMPS_WITH_FIRC, NEFT, RTGS, BI_FAST, ARTAJASA, PIX, TED, TEF, SPEI, COELSA, SINPE, CIPS, CFXPS, CHATS, ZENGIN, KFTC, FAST_SG, MEPS, DUITNOW, PROMPTPAY, INSTAPAY, PESONET, NAPAS, BEFTN, SLIPS, ZAHAV, GHIPSS, NIBSS, PESALINK, RTC_ZA, TZS_RTGS, EGP_ACH, JOD_ACH, NPSS, MADA, QPS, DOP_ACH, GTQ_ACH, HNL_ACH, PEN_ACH, JMD_ACH, USD_ACH_SV, USD_ACH_EC, CLP_TEF, PSE, COP_ACH, BOB_RTGS, PYG_ACH, CERTIS, DKK_TIPS, SENT, NKS, BANKGIROT, HKD_FPS, IBFT, TRY_FAST, ETHEREUM, BASE, POLYGON, SOLANA, TRON, BITCOIN, ARBITRUM ["ACH", "WIRE"]
How incoming payments are matched to this deposit account. DEDICATED issues a unique account number and the sender does not include a payment reference. REFERENCE uses a shared account number and the sender must include sourceAccount.depositInstructions.reference on the payment (wire memo or ACH addenda). Omit to keep the default for the requested rails. USD ACH, wire, and SWIFT bank pay-ins only.
DEDICATED, REFERENCE Source currency for deposits (e.g., USD, EUR)
"USD"
Destination rail - chain/network for outgoing sweep (e.g., BASE, ETHEREUM)
"BASE"
Destination currency to convert to (e.g., USDC, USDT)
"USDC"
Bound Brale wire automation ID for legacy onramp routes. Omit for new standby-pool routes (Solana SBC intermediary).
Standing supporting agreement document ID for a third-party SWIFT fixed route.
1Response
Validation result
Whether the fixed route configuration is valid
true
Error message if validation failed
"FIAT_TO_CRYPTO route requires a wallet as sweep target"
Minimum deposit amount for this route. Deposits below this floor are not swept.
Show child attributes
Show child attributes
Was this page helpful?