curl --request GET \
--url https://laso.finance/send-paymentimport requests
url = "https://laso.finance/send-payment"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://laso.finance/send-payment', 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/send-payment",
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/send-payment"
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/send-payment")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/send-payment")
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{
"auth": {
"id_token": "<string>",
"refresh_token": "<string>",
"expires_in": "<string>"
},
"callable_base_url": "<string>",
"user_id": "<string>",
"kyc_required": true,
"kyc_url": "<string>",
"message": "<string>",
"platform": "venmo",
"amount": 123,
"recipient_id": "<string>"
}{
"auth": {
"id_token": "<string>",
"refresh_token": "<string>",
"expires_in": "<string>"
},
"callable_base_url": "<string>",
"user_id": "<string>",
"success": true,
"message": "<string>",
"platform": "venmo",
"amount": 123,
"recipient_id": "<string>",
"payment_id": "<string>",
"status_url": "https://laso.finance/get-payment-status?payment_id=abc123",
"state": "<string>"
}{
"error": "<string>"
}Send a payment via Venmo or PayPal
Pay USDC to send money to a Venmo or PayPal recipient. The x402 USDC price is the requested amount plus a 4.9% fee (with a $1.50 minimum fee). On-chain payment credits the calling wallet’s Laso account balance via the standard deposit webhook; the callable then debits the gross amount and dispatches the payout.
Asynchronous. A dispatched payout answers 202 Accepted, not 200: the payment is recorded and handed to the payout provider, which settles it afterwards. Poll the returned status_url (GET /get-payment-status?payment_id=...) until state reaches a terminal value rather than treating the 202 as money received. A 200 means the opposite: nothing was dispatched because identity verification is required.
KYC required. The first time a wallet sends a Venmo or PayPal payout it must complete identity verification. If the wallet is not yet verified the response returns kyc_required: true and a kyc_url — open the URL, complete the flow, and retry. If you don’t want to proceed, the credited account balance can be withdrawn with POST /withdraw.
Recipient details. For Venmo, recipient_id is the recipient’s 10-digit U.S. phone number, and the first and last name are optional. No email is needed. For PayPal, recipient_id is the recipient’s PayPal email, which also serves as recipient_email (so recipient_email is optional), and the first and last name are required.
Fee: 4.9% with a $1.50 minimum (included in the USDC price).
curl --request GET \
--url https://laso.finance/send-paymentimport requests
url = "https://laso.finance/send-payment"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://laso.finance/send-payment', 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/send-payment",
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/send-payment"
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/send-payment")
.asString();require 'uri'
require 'net/http'
url = URI("https://laso.finance/send-payment")
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{
"auth": {
"id_token": "<string>",
"refresh_token": "<string>",
"expires_in": "<string>"
},
"callable_base_url": "<string>",
"user_id": "<string>",
"kyc_required": true,
"kyc_url": "<string>",
"message": "<string>",
"platform": "venmo",
"amount": 123,
"recipient_id": "<string>"
}{
"auth": {
"id_token": "<string>",
"refresh_token": "<string>",
"expires_in": "<string>"
},
"callable_base_url": "<string>",
"user_id": "<string>",
"success": true,
"message": "<string>",
"platform": "venmo",
"amount": 123,
"recipient_id": "<string>",
"payment_id": "<string>",
"status_url": "https://laso.finance/get-payment-status?payment_id=abc123",
"state": "<string>"
}{
"error": "<string>"
}Query Parameters
USD amount to send to the recipient (min $5, max $1,000). The x402 payment price is this amount plus a 4.9% fee (with a $1.50 minimum).
5 <= x <= 1000Payment platform.
venmo, paypal Recipient identifier. For Venmo: 10-digit U.S. phone number. For PayPal: email address.
Recipient's first name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo.
Recipient's last name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo.
PayPal only. Recipient's email address; defaults to recipient_id (the PayPal email). Ignored for Venmo.
Response
Identity verification is required, so no payout was dispatched. The x402 payment you made was still credited to your Laso account balance: complete the flow at kyc_url and retry, or call POST /withdraw to pull the USDC back to your wallet.
Show child attributes
Show child attributes
true URL the wallet owner must open to complete identity verification. No payout was sent, but the x402 payment you made was still credited to your Laso account balance. After verifying, retry /send-payment to dispatch the payout, or call POST /withdraw to pull the credited USDC back to your wallet.
Human-readable explanation of the KYC requirement and how to recover the credited funds via retry or POST /withdraw.
venmo, paypal Was this page helpful?