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

# Wait for your human to finish the signup

> Long-polls until the human opens the claim link and finishes creating the account. Holds the connection open for about 60 seconds and returns **204 No Content** if they have not finished yet.

**Retry on 204 and nothing else.** The call already blocks for you, so add no sleep between attempts. Every other status is final and retrying will not change the answer: 401 means the token is wrong, 410 means the link expired. Both carry `"terminal": true` in the body. A loop written as "retry until 200" spins at network speed against those, because they answer instantly rather than holding the connection.

On completion it returns your `api_key` — **delivered exactly once**. Store it before doing anything else; a later poll returns the account without it. By that point the human is on their dashboard, their agent wallet is provisioned, and you are already recorded as their connected agent, so `announceAgentConnection` is not needed on this path.



## OpenAPI

````yaml /api-reference/openapi.json get /signup-status
openapi: 3.1.0
info:
  title: Laso Finance x402 API
  version: 1.0.0
  x-docs-revision: ebe5d18aa264
  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:
  /signup-status:
    get:
      summary: Wait for your human to finish the signup
      description: >-
        Long-polls until the human opens the claim link and finishes creating
        the account. Holds the connection open for about 60 seconds and returns
        **204 No Content** if they have not finished yet.


        **Retry on 204 and nothing else.** The call already blocks for you, so
        add no sleep between attempts. Every other status is final and retrying
        will not change the answer: 401 means the token is wrong, 410 means the
        link expired. Both carry `"terminal": true` in the body. A loop written
        as "retry until 200" spins at network speed against those, because they
        answer instantly rather than holding the connection.


        On completion it returns your `api_key` — **delivered exactly once**.
        Store it before doing anything else; a later poll returns the account
        without it. By that point the human is on their dashboard, their agent
        wallet is provisioned, and you are already recorded as their connected
        agent, so `announceAgentConnection` is not needed on this path.
      operationId: getSignupStatus
      parameters:
        - name: claim_token
          in: query
          required: true
          schema:
            type: string
          description: The claim_token from POST /signup.
        - name: claim_code
          in: query
          required: true
          schema:
            type: string
          description: The claim_code from the same POST /signup response.
      responses:
        '200':
          description: The human completed the signup
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: claimed
                  user_id:
                    type: string
                    description: The Laso user id of the new account.
                    example: usr_1a2b3c...
                  api_key:
                    type: string
                    nullable: true
                    description: >-
                      Your lasoak_ key. Delivered EXACTLY ONCE — null on any
                      later poll.
                    example: lasoak_...
                  api_key_note:
                    type: string
                    description: >-
                      Present only when api_key is null, explaining that it was
                      already delivered.
                  auth:
                    type: object
                    description: >-
                      An id_token / refresh_token bundle you can use
                      immediately.
                  callable_base_url:
                    type: string
                  next_steps:
                    type: array
                    items:
                      type: string
        '204':
          description: >-
            Not claimed yet. Call again — this is the only status you should
            retry.
        '401':
          description: 'Unknown or invalid claim token. Terminal: do not retry.'
        '410':
          description: >-
            The claim link expired before anyone opened it. Terminal: do not
            retry — call POST /signup for a fresh one.

````