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

# Select checkout crypto

> Locks the crypto asset and payable amount for the session from the quoted `crypto_options`. Used by the payer during checkout. No merchant API key required.



## OpenAPI

````yaml /openapi/merchant.json post /checkout-sessions/{id}/select-crypto
openapi: 3.1.0
info:
  title: WakaPay Merchant API
  description: >-
    Crypto checkout API for WakaPay merchants. Create sessions with a signed
    organisation API key, then track payment through status, asset selection,
    and on-chain binding.
  version: 1.0.0
servers:
  - url: https://api.wakapay.cash
    description: Production
  - url: http://localhost:8080
    description: Local
security: []
tags:
  - name: Checkout
    description: Crypto checkout sessions for merchants and payers.
paths:
  /checkout-sessions/{id}/select-crypto:
    post:
      tags:
        - Checkout
      summary: Select checkout crypto
      description: >-
        Locks the crypto asset and payable amount for the session from the
        quoted `crypto_options`. Used by the payer during checkout. No merchant
        API key required.
      operationId: selectCheckoutCrypto
      parameters:
        - name: id
          in: path
          required: true
          description: Checkout session UUID.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectCryptoRequest'
            example:
              crypto_currency: USDT
      responses:
        '200':
          description: Session updated with selected crypto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutSessionPublicResponse'
        '400':
          description: Expired session, invalid state, or unsupported ticker.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Checkout session not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Crypto cannot be changed after a tx hash is bound.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security: []
components:
  schemas:
    SelectCryptoRequest:
      type: object
      required:
        - crypto_currency
      properties:
        crypto_currency:
          type: string
          enum:
            - BTC
            - USDT
            - BNB
            - SOL
            - USDC
            - ETH
          description: >-
            Ticker the payer selects; must appear in the session
            `crypto_options`.
          example: USDT
    CheckoutSessionPublicResponse:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - pending
            - waiting_payment
            - partial
            - paid
            - expired
            - failed
          example: waiting_payment
        source:
          type: string
          example: API
        from_payment_link:
          type: boolean
        anonymous:
          type: boolean
        requires_payer_identity:
          type: boolean
        identity_options:
          type: array
          items:
            type: string
        product_payment_link_id:
          type:
            - string
            - 'null'
          format: uuid
        total_amount_crypto:
          type:
            - string
            - 'null'
          example: '8.33333333'
        crypto_currency:
          type:
            - string
            - 'null'
          example: USDT
        crypto_options:
          type: array
          items:
            $ref: '#/components/schemas/CryptoPaymentOption'
        fiat_currency:
          type: string
          example: XAF
        total_amount_fiat:
          type: string
          example: '5000.00000000'
        wallet_address:
          type: string
          description: Merchant receiving wallet.
        supported_networks:
          type: array
          items:
            type: string
        expires_at:
          type: string
          format: date-time
        overpaid:
          type: boolean
        bound_tx_hash:
          type:
            - string
            - 'null'
        payer_wallet_address:
          type:
            - string
            - 'null'
        chain_id:
          type:
            - string
            - 'null'
        user:
          type: object
          properties:
            id:
              type: string
            email:
              type:
                - string
                - 'null'
            telegram_id:
              type:
                - string
                - 'null'
            username:
              type:
                - string
                - 'null'
    ErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
          example: 401
        message:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          example: Missing X-Wakapay-Key, X-Wakapay-Timestamp, or X-Wakapay-Signature
        error:
          type: string
          example: Unauthorized
    CryptoPaymentOption:
      type: object
      properties:
        ticker:
          type: string
          example: USDT
        id:
          type: string
          example: tether
        unit_price_fiat:
          type: string
          description: Unit price of 1 crypto in the session quote currency.
          example: '600.00000000'
        amount:
          type: string
          description: Crypto amount the payer must send.
          example: '8.33333333'

````