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

# Get the fee schedule

> Returns the fee and limits of every paid product: the route, the `amount` range it accepts, the fee rate, and the minimum fee. Free, no auth or payment header, so you can budget before you have an account.

Fees are added on top of `amount`. The total is `amount + max(amount × fee_rate, min_fee)`, rounded up to the cent. The international card's `fee_rate` is the rate in effect now, including any running fee promotion. For the exact total of one specific request, read the `amount` in that route's 402 challenge: requesting a paid route without a payment header returns the quote and charges nothing.



## OpenAPI

````yaml /api-reference/openapi.json get /get-pricing
openapi: 3.1.0
info:
  title: Laso Finance x402 API
  version: 1.0.0
  x-docs-revision: eb9650e41e48
  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. The same
    402 also carries an MPP (Machine Payments Protocol) challenge in
    WWW-Authenticate; an MPP client pays with USDC on Base by replaying with
    `Authorization: Payment ...`, and routes, prices, and responses are
    identical.


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


    ## Rate limits


    Every response carries the request budget so you can pace yourself without
    probing for a limit:


    | Header | Meaning |

    | --- | --- |

    | `RateLimit-Limit` | Requests permitted per window |

    | `RateLimit-Remaining` | Requests still available |

    | `RateLimit-Reset` | Seconds until the window rolls over |

    | `RateLimit-Policy` | The policy these numbers describe, as
    `limit;w=seconds` |


    The same values are repeated as `X-RateLimit-*` for clients that only parse
    that spelling.


    Most routes advertise the service-wide ceiling. `POST /signup` enforces its
    own per-IP budget on top of it and overwrites these headers with its own
    numbers. `POST /refresh-card-data` is limited per card rather than per
    caller, so its headers keep the service-wide values and the per-card budget
    is reported only on rejection.


    Every rejection is a `429` carrying `Retry-After` in seconds and a matching
    `retry_after_seconds` field in the body, computed from the limit that
    actually rejected the request. Wait that long and retry once. Do not retry
    in a tight loop.


    ## API versioning


    Every response carries the contract version in an `X-Laso-Api-Version`
    header, and `GET /version` returns the same value as `api_version` alongside
    the policy below in machine-readable form. It is distinct from
    `X-Laso-Docs-Version`, which tracks the prose and moves whenever the
    documentation changes.


    | Change | What happens to `api_version` |

    | --- | --- |

    | New route, new optional request field, new response field | Unchanged.
    Tolerate unknown response fields. |

    | Breaking change | Ships under a new `api_version`. |


    A route being retired is marked `deprecated` in this description and answers
    with a `Deprecation: true` response header, plus a `Link` header with
    `rel="successor-version"` pointing at its replacement. Once a removal date
    is set it is published in a `Sunset` header (RFC 9745 / RFC 8594). There is
    no blanket notice period: the `Sunset` date on each deprecated route is the
    commitment.


    For step-by-step instructions, read https://laso.finance/SKILL.md
servers:
  - url: https://laso.finance
    description: Production
security: []
paths:
  /get-pricing:
    get:
      summary: Get the fee schedule
      description: >-
        Returns the fee and limits of every paid product: the route, the
        `amount` range it accepts, the fee rate, and the minimum fee. Free, no
        auth or payment header, so you can budget before you have an account.


        Fees are added on top of `amount`. The total is `amount + max(amount ×
        fee_rate, min_fee)`, rounded up to the cent. The international card's
        `fee_rate` is the rate in effect now, including any running fee
        promotion. For the exact total of one specific request, read the
        `amount` in that route's 402 challenge: requesting a paid route without
        a payment header returns the quote and charges nothing.
      operationId: getPricing
      responses:
        '200':
          description: Fee schedule
          content:
            application/json:
              schema:
                type: object
                properties:
                  note:
                    type: string
                    description: How fees are applied.
                  products:
                    type: array
                    items:
                      type: object
                      properties:
                        product:
                          type: string
                          description: Product identifier.
                          example: bank_payment
                        route:
                          type: string
                          description: The paid route that sells this product.
                          example: /send-bank-payment
                        amount_currencies:
                          type:
                            - array
                            - 'null'
                          items:
                            type: string
                          description: >-
                            Currencies the route's `amount` may be denominated
                            in. `null` for gift cards, whose `amount` is in the
                            product's own currency.
                        min_amount:
                          type: number
                          description: Smallest `amount` the route accepts.
                        max_amount:
                          type: number
                          description: Largest `amount` the route accepts.
                        fee_rate:
                          type: number
                          description: >-
                            Fee as a fraction of `amount` (0.0025 is 0.25%),
                            added on top.
                          example: 0.0025
                        min_fee:
                          type: number
                          description: >-
                            Smallest fee charged, in the `amount` currency. The
                            fee is `max(amount × fee_rate, min_fee)`.
                          example: 1.5
                        note:
                          type:
                            - string
                            - 'null'
                          description: Product-specific pricing rules, when there are any.
              example:
                note: >-
                  Fees are added on top of the amount you request: the recipient
                  or card receives the full amount, and you pay amount plus fee.
                  The 402 challenge of a paid route carries the exact total for
                  that request.
                products:
                  - product: usa_prepaid_card
                    route: /get-card
                    amount_currencies:
                      - USD
                    min_amount: 5
                    max_amount: 1000
                    fee_rate: 0
                    min_fee: 0
                    note: No fee. The price is the amount loaded on the card.
                  - product: bank_payment
                    route: /send-bank-payment
                    amount_currencies:
                      - USD
                    min_amount: 10
                    max_amount: 50000
                    fee_rate: 0.0025
                    min_fee: 1.5
                    note: null
      security: []

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.