# 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/sandbox/accounts/acc_abc123/fund-in \
--body '<request-json>'Simulate account funding (acc_abc123).
# 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/sandbox/accounts/{id}/fund-in"
payload = {
"rail": "WIRE",
"amount": "1000.00",
"currency": "USD",
"network": "BASE",
"reference": "fund_in_123"
}
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({
rail: 'WIRE',
amount: '1000.00',
currency: 'USD',
network: 'BASE',
reference: 'fund_in_123'
})
};
fetch('https://sandbox.api.infinite.dev/v1/sandbox/accounts/{id}/fund-in', 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/sandbox/accounts/{id}/fund-in",
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([
'rail' => 'WIRE',
'amount' => '1000.00',
'currency' => 'USD',
'network' => 'BASE',
'reference' => 'fund_in_123'
]),
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/sandbox/accounts/{id}/fund-in"
payload := strings.NewReader("{\n \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\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/sandbox/accounts/{id}/fund-in")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/sandbox/accounts/{id}/fund-in")
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 \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\n}"
response = http.request(request)
puts response.read_body{
"accountId": "vba_123",
"amount": {
"value": "1000.00",
"currency": "USD"
},
"rail": "WIRE",
"transactionHash": "0x1234"
}Simulate account funding
Simulate inbound funding for a sandbox funding-method account (vba_ for virtual bank accounts, including USD balance accounts; vwa_ for virtual wallets; pba_ for stablecoin balance accounts) using a requested rail.
# 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/sandbox/accounts/acc_abc123/fund-in \
--body '<request-json>'Simulate account funding (acc_abc123).
# 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/sandbox/accounts/{id}/fund-in"
payload = {
"rail": "WIRE",
"amount": "1000.00",
"currency": "USD",
"network": "BASE",
"reference": "fund_in_123"
}
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({
rail: 'WIRE',
amount: '1000.00',
currency: 'USD',
network: 'BASE',
reference: 'fund_in_123'
})
};
fetch('https://sandbox.api.infinite.dev/v1/sandbox/accounts/{id}/fund-in', 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/sandbox/accounts/{id}/fund-in",
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([
'rail' => 'WIRE',
'amount' => '1000.00',
'currency' => 'USD',
'network' => 'BASE',
'reference' => 'fund_in_123'
]),
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/sandbox/accounts/{id}/fund-in"
payload := strings.NewReader("{\n \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\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/sandbox/accounts/{id}/fund-in")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/sandbox/accounts/{id}/fund-in")
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 \"rail\": \"WIRE\",\n \"amount\": \"1000.00\",\n \"currency\": \"USD\",\n \"network\": \"BASE\",\n \"reference\": \"fund_in_123\"\n}"
response = http.request(request)
puts response.read_body{
"accountId": "vba_123",
"amount": {
"value": "1000.00",
"currency": "USD"
},
"rail": "WIRE",
"transactionHash": "0x1234"
}Account id
Pass the funding-method account id returned when the account was created (vba_… for a virtual bank account, including a USD balance account; vwa_… for a virtual wallet; pba_… for a stablecoin balance account). Do not use a top-level acct_ id.
Infinite wallets (inw_)
This endpoint does not credit Infinite wallets (inw_…). That includes treasury vaults and crypto deposit mailboxes created by POST /v1/fixed-routes/virtual-wallets (those are INFINITE_WALLET, not vwa_).
To credit a treasury vault so you can test withdrawals, pick a route whose sweep target is that vault and simulate-deposit with that route’s source account id (vba_… or mailbox inw_…). Funds land on the destination, not the source mailbox.
Stablecoin balance funding
Fund apba_… stablecoin balance account with rail: BLOCKCHAIN plus the network and currency the account holds (e.g. USDT on ETHEREUM). The credit posts immediately and emits a balance.credited webhook. Reuse reference to make retries idempotent.
Sandbox settlement timing
ACH and WIRE on provider-simulated bank accounts, sandbox funds do not settle until 5:00 PM ET on weekdays to mirror production timing. Balance-account fund-in credits immediately.Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Path Parameters
Funding-method account id (vba_ for virtual bank, vwa_ for virtual wallet, pba_ for stablecoin balance)
Body
Funding rail to simulate
WIRE, ACH, BLOCKCHAIN "WIRE"
Funding amount as a decimal string. Fiat rails accept up to 2 decimals; stablecoin balance funding accepts up to 6.
"1000.00"
Funding currency code
"USD"
Blockchain network when rail is BLOCKCHAIN
ETHEREUM, BASE, SOLANA, ARBITRUM, POLYGON, TRON "BASE"
Optional client reference for future providers
"fund_in_123"
Response
Sandbox fund-in simulated successfully
Internal account ID used for the sandbox simulation
"vba_123"
Funding amount returned in our API shape
Show child attributes
Show child attributes
Funding rail simulated
WIRE, ACH, BLOCKCHAIN "WIRE"
Blockchain transaction hash when provided by the sandbox provider
"0x1234"
Was this page helpful?