> ## Documentation Index
> Fetch the complete documentation index at: https://agents.laso.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# 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.

**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.** Both Venmo and PayPal require the recipient's first name and last name. For Venmo, `recipient_id` is the recipient's 10-digit U.S. phone number and `recipient_email` is required. For PayPal, `recipient_id` is the recipient's PayPal email, which also serves as `recipient_email` (so `recipient_email` is optional).

**Fee:** 4.9% with a \$1.50 minimum (included in the USDC price).



## OpenAPI

````yaml /api-reference/openapi.json get /send-payment
openapi: 3.1.0
info:
  title: Laso Finance x402 API
  version: 1.0.0
  x-docs-revision: 9cc027d99202
  x-docs-manifest: https://laso.finance/.well-known/docs-version.json
  contact:
    email: agents+support@laso.finance
  x-guidance: >-
    Laso Finance is a payment-gated (x402) API that lets an AI agent spend USDC
    on real-world financial products: prepaid cards (U.S. and international),
    gift cards, push-to-card transfers to USD/EUR/GBP debit cards, and
    Venmo/PayPal payouts.


    Payment: every paid route is an x402 v2 endpoint. Call it with no payment
    header to receive a 402 challenge listing the accepted networks, then replay
    with a signed USDC payment. Both Base (eip155:8453) and Solana
    (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) are accepted on every paid route;
    the caller picks either chain.


    Identity: `GET /auth` is free and identity-only. Prove wallet ownership with
    a `SIGN-IN-WITH-X` (CAIP-122) header to receive a Firebase id_token, then
    send that token as a Bearer credential to the authenticated read routes
    (`get-card-data`, `get-account-balance`, `get-kyc-status`, etc.). Paid
    routes also return fresh auth credentials in their response, so a payment is
    never required just to obtain a token.


    Recommended flow: (1) `GET /auth` to establish identity, (2) call a paid
    route (e.g. `GET /get-card`) to purchase a product, paying USDC on Base or
    Solana, (3) poll the authenticated read routes with the returned Bearer
    token to fetch the resulting card/transfer details. Full machine-readable
    instructions live at https://laso.finance/SKILL.md.
  description: >-
    Payment-gated API for Laso Finance. All paywalled routes use the x402
    protocol — the caller includes a USDC payment header on Base (eip155:8453)
    or Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) and the server verifies
    payment before processing. Free routes require no payment header.


    ## Getting started


    To set up a wallet for making x402 payments, choose a provider:


    - **Locus** (default): https://paywithlocus.com/SKILL.md

    - **Sponge**: https://wallet.paysponge.com/skill.md — automatic x402 service
    discovery

    - **Ampersend**: https://www.ampersend.ai/getting-started.md — self-custody
    on Base or Solana with dual-approval spending limits. Laso Finance is a
    default skill, so no manual endpoint registration is needed.


    ## How x402 works


    1. Call a paywalled endpoint without a payment header → receive a `402
    Payment Required` response containing payment details (price, recipient
    address, network).

    2. Construct an x402 payment header using the details from the 402 response.

    3. Replay the request with the payment header → the server verifies payment
    and processes the request.


    ## Authentication flow


    `GET /auth` is free: callers prove wallet ownership by sending a
    `SIGN-IN-WITH-X` header (CAIP-122 wallet signature). Paywalled routes
    (`/get-card`, `/order-gift-card`, `/get-push-to-card`, `/order-intl-card`)
    also return fresh auth credentials in their responses, so a payment is never
    required just to obtain a token.


    Most routes return auth credentials (`id_token`, `refresh_token`,
    `expires_in`). Use the `id_token` as a Bearer token to call authenticated
    Laso Finance endpoints like `/get-card-data`. When the `id_token` expires,
    use `POST /auth` with `grant_type: refresh_token` to get a new one.


    ## Important notes


    The `/get-card` USA prepaid card endpoint is U.S. only — issued in USD,
    usable at U.S.-based merchants only, and physical goods must ship to a U.S.
    address. For non-U.S. merchants or non-USD currencies, use `GET
    /order-intl-card` instead (international prepaid card, admin-fulfilled
    within 24 hours). All cards are intended for the caller's own use.


    For step-by-step instructions, read https://laso.finance/SKILL.md
servers:
  - url: https://laso.finance
    description: Production
security: []
paths:
  /send-payment:
    get:
      summary: Send a payment via Venmo or PayPal
      description: >-
        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.


        **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.** Both Venmo and PayPal require the recipient's
        first name and last name. For Venmo, `recipient_id` is the recipient's
        10-digit U.S. phone number and `recipient_email` is required. For
        PayPal, `recipient_id` is the recipient's PayPal email, which also
        serves as `recipient_email` (so `recipient_email` is optional).


        **Fee:** 4.9% with a \$1.50 minimum (included in the USDC price).
      operationId: sendPayment
      parameters:
        - name: amount
          in: query
          required: true
          description: >-
            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).
          schema:
            type: number
            minimum: 5
            maximum: 1000
        - name: platform
          in: query
          required: true
          description: Payment platform.
          schema:
            type: string
            enum:
              - venmo
              - paypal
        - name: recipient_id
          in: query
          required: true
          description: >-
            Recipient identifier. For Venmo: 10-digit U.S. phone number. For
            PayPal: email address.
          schema:
            type: string
        - name: recipient_first_name
          in: query
          required: true
          description: Recipient's first name (English letters A-Z and a-z only).
          schema:
            type: string
        - name: recipient_last_name
          in: query
          required: true
          description: Recipient's last name (English letters A-Z and a-z only).
          schema:
            type: string
        - name: recipient_email
          in: query
          required: false
          description: >-
            Recipient's email address. Required for Venmo. Optional for PayPal,
            where it defaults to recipient_id (the PayPal email).
          schema:
            type: string
            format: email
      responses:
        '200':
          description: Payment dispatched, or KYC required.
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      auth:
                        $ref: '#/components/schemas/AuthCredentials'
                      callable_base_url:
                        type: string
                      user_id:
                        type: string
                      success:
                        type: boolean
                      message:
                        type: string
                      platform:
                        type: string
                        enum:
                          - venmo
                          - paypal
                      amount:
                        type: number
                      recipient_id:
                        type: string
                      state:
                        type: string
                        description: Payment lifecycle state (e.g. `in-process`, `queued`).
                  - type: object
                    properties:
                      auth:
                        $ref: '#/components/schemas/AuthCredentials'
                      callable_base_url:
                        type: string
                      user_id:
                        type: string
                      kyc_required:
                        type: boolean
                        enum:
                          - true
                      kyc_url:
                        type: string
                        description: >-
                          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.
                      message:
                        type: string
                        description: >-
                          Human-readable explanation of the KYC requirement and
                          how to recover the credited funds via retry or POST
                          /withdraw.
                      platform:
                        type: string
                        enum:
                          - venmo
                          - paypal
                      amount:
                        type: number
                      recipient_id:
                        type: string
        '400':
          description: Invalid or missing parameters, or no payer address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Payment required — response body contains x402 payment details.
components:
  schemas:
    AuthCredentials:
      type: object
      properties:
        id_token:
          type: string
          description: ID token — use as Bearer token for Laso Finance APIs
        refresh_token:
          type: string
          description: >-
            Use with POST /auth (grant_type=refresh_token) to get a new id_token
            when it expires
        expires_in:
          type: string
          description: Token lifetime in seconds
    Error:
      type: object
      properties:
        error:
          type: string

````