Skip to main content
This guide is for teams building agent wallets. If you are an agent or a developer with one wallet, start with the agent quickstart instead. Laso Finance turns USDC in an agent wallet into things the rest of the world accepts: prepaid cards, gift cards, payouts to debit cards, Venmo, PayPal, and US bank accounts. Every product is a plain HTTPS route paid over x402 (or MPP), so if your wallet can already pay an x402 endpoint, it can already use Laso. Locus, Sponge, and Ampersend integrate Laso today.

What your users get

GET /get-pricing returns every product’s fee rate, minimum fee, and amount limits. It is free and needs no auth, so you can show prices in your UI before a user has an account. The USA prepaid card has no fee; most other routes add a fee on top of the requested amount. The 402 challenge on each paid request always carries the exact fee-inclusive total.

How identity works

There is nothing to register on our side, and your users never visit laso.finance.
  • The paying wallet is the account. Laso reads the payer from each x402 or MPP payment. The first paid request from a new wallet creates a Laso account for it, and the response includes that account’s credentials (auth.id_token, auth.refresh_token).
  • Free sign-in without paying. GET /auth with a SIGN-IN-WITH-X header proves ownership of the wallet and returns the same credentials. Use it for read-only calls before a first purchase.
  • Bearer tokens for everything else. Card details, balances, status checks, and webhooks use Authorization: Bearer <id_token>. Tokens last about an hour; POST /auth with the refresh_token renews them for free. See authentication.
Pay from one wallet per end user, not a shared treasury wallet. Every card, payout, and balance belongs to the wallet that paid for it. If all of your users pay from one pooled address, they all share one Laso account, and any of them holding its token can read the others’ card numbers.

Choose an integration path

Best when your wallet already finds x402 services on its own, the way Sponge and Ampersend do.GET https://laso.finance/discovery/resources is a free, unauthenticated x402 resource catalog in the Bazaar list shape (x402Version, items, pagination). Each item carries the route URL, its description, and the same accepts payment options its 402 challenge quotes. Filter with the standard network, scheme, payTo, type, limit, and offset query parameters:
Index it alongside your other providers and new Laso routes appear in your catalog without a release on your side. Re-fetch at least daily; responses are cacheable for 60 seconds.

Reference integration

The whole integration is three calls: sign in, pay, and poll. This TypeScript example uses the official x402 v2 client packages, @x402/fetch, @x402/evm, and @x402/extensions.
For Solana wallets, register the Solana scheme on the same client. Laso’s challenges quote both Base and Solana, and the client pays with whichever scheme you registered:
Laso accepts x402 v2 only. Older v1 clients (the unscoped x402-fetch and x402-axios packages, or an X-PAYMENT header) are rejected with errorReason: "unsupported_x402_version" and nothing is charged.

Behaviors your integration should handle

  • Budget for the fee-inclusive total. The amount you pass is face value. Most routes charge face value plus a fee, so a request for the user’s entire balance as face value will fail. Read limits from GET /get-pricing and the exact total from the 402 challenge.
  • Asynchronous fulfillment. USA cards need a short poll of /get-card-data. International cards stay queued for up to about a day, so report the state instead of polling every few seconds. Register a webhook with POST /register-webhook to get signed delivery events instead of polling.
  • Identity verification belongs to the human. Venmo and PayPal payouts and the bank account flow need the account owner to verify their identity first. Instead of failing, they return a verification link (kyc_url on /send-payment, kycUrl in the banking calls). Show the link to your user; never let the agent fill in the form for them. GET /get-kyc-status reports when they are done.
  • Nothing is lost when fulfillment fails. A payment that settles but cannot be fulfilled (verification needed, a provider outage, a validation error) is credited to the user’s Laso account balance. The agent can retry, or return the funds to a Solana address with POST /withdraw.
  • Retry a refused payment with a fresh challenge. A rejected signature or payment comes back as another 402 with a new challenge. Sign the new one; never resend the same payload. See error handling.

Launch checklist

1

Price check

Call GET /get-pricing and confirm your UI shows the fee-inclusive total for each product you expose.
2

Sign in a test user

Call GET /auth from a fresh test wallet and confirm you receive id_token, refresh_token, and user_id.
3

Order a test USA card

Pay GET /get-card?amount=5 from that wallet and poll /get-card-data until status is "ready".
4

Refresh a token

Call POST /auth with the refresh_token and confirm the new id_token works on /get-account-balance.
5

Check isolation

Order from a second test wallet and confirm its token cannot read the first wallet’s card.

Work with us

We help wallet teams that integrate Laso with launch support, co-marketing, and a listing in these docs next to Locus, Sponge, and Ampersend. Email support@laso.finance with your wallet’s name and the integration path you chose, and we will get back to you.

How x402 works

The 402 challenge, signature, and settlement flow in detail.

API reference

Every route, parameter, and response shape.