curl --request GET \
--url https://laso.finance/fund-card-balanceimport requests
url = "https://laso.finance/fund-card-balance"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://laso.finance/fund-card-balance', 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://laso.finance/fund-card-balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://laso.finance/fund-card-balance"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://laso.finance/fund-card-balance")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/fund-card-balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"top_up_id": "<string>",
"status": "paid",
"funded_usd": 123,
"deposit_address": "<string>",
"network": "base",
"asset": "USDC",
"payment_network": "solana",
"note": "<string>"
}Load a reloadable card balance
Pay USDC to load the account holder’s reloadable card balance at the card issuer.
Why this exists: the card issuer only accepts USDC on Base, and a Laso managed agent wallet holds USDC on Solana. Pay this route from either chain and Laso bridges the payment to your own deposit address at the issuer over Circle’s CCTP, which burns on the source chain and mints native USDC on Base.
Price: exactly the amount you are loading, and exactly that amount is credited to the balance. Loading $50 costs $50 and puts $50 on the card. Laso covers Circle’s bridging fee by burning slightly more than requested.
A linked card issuer account is required. The account holder sets it up at https://laso.finance/agent/dashboard/verified/card.
Delivery starts once your payment settles. The response confirms the payment and returns a top_up_id; the transfer to your card balance follows and usually lands in under a minute. A payment made on Base is already on the issuer’s chain, so it is forwarded without a bridge. Watch the top-up under top_ups in GET /list-card-transactions, where status moves paid → bridging → delivered → credited and the transaction hash behind each leg appears as it lands, or poll GET /get-card-deposit-address until balance reflects it.
Follow with POST /create-reloadable-card to create a card against the balance once it has arrived.
If the top-up’s status becomes failed, nothing is stranded: the USDC you paid has credited your Laso account balance. Retry, or recover it with POST /withdraw.
curl --request GET \
--url https://laso.finance/fund-card-balanceimport requests
url = "https://laso.finance/fund-card-balance"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://laso.finance/fund-card-balance', 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://laso.finance/fund-card-balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://laso.finance/fund-card-balance"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://laso.finance/fund-card-balance")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/fund-card-balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"top_up_id": "<string>",
"status": "paid",
"funded_usd": 123,
"deposit_address": "<string>",
"network": "base",
"asset": "USDC",
"payment_network": "solana",
"note": "<string>"
}Query Parameters
USD of USDC to load onto the card balance (min $5, max $1,000). The x402 price equals this amount; Laso absorbs the bridge cost.
5 <= x <= 1000Response
Payment settled; delivery to the card balance has started.
Identifies this top-up under top_ups in GET /list-card-transactions.
Always paid here: the payment settled and delivery to the card balance has started. Follow the later states in GET /list-card-transactions.
"paid"
USD loaded onto the card balance.
The account holder's own deposit address at the card issuer, on Base.
"base"
"USDC"
The chain the payment settled on: solana (bridged to Base over CCTP) or base (forwarded directly).
"solana"
Was this page helpful?