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

# Create wallet transaction challenge

> Handles `POST /v1/auth/wallet/transaction-challenge` via `post.v1.auth.wallet.transaction_challenge`.



## OpenAPI

````yaml /openapi/phoenix-public-api.json post /v1/auth/wallet/transaction-challenge
openapi: 3.1.0
info:
  title: Phoenix Eternal API
  description: >-
    RESTful API for accessing Phoenix Eternal perpetual trading data. Provides
    real-time orderbook levels, asset information, and market metadata.
  termsOfService: https://www.phoenix.trade/terms-of-service
  contact:
    name: Phoenix Development Team
    url: https://github.com/Ellipsis-Labs/phoenix
  license:
    name: Proprietary
  version: 1.0.0
servers:
  - url: https://perp-api.phoenix.trade
    description: Phoenix Eternal Perp API
security: []
tags:
  - name: Auth
    description: Wallet and session authentication.
  - name: Exchange
    description: Exchange, market, candle, and no-referral register-instruction workflows.
  - name: Invite
    description: Invite validation, referral activation, and wallet allowlist checks.
  - name: Notifications
    description: Trader notification reads and acknowledgement helpers.
  - name: Trader
    description: Trader state, account history, and transaction builders.
externalDocs:
  url: https://docs.phoenix.trade
  description: Phoenix developer documentation
paths:
  /v1/auth/wallet/transaction-challenge:
    post:
      tags:
        - Auth
      summary: Create wallet transaction challenge
      description: >-
        Handles `POST /v1/auth/wallet/transaction-challenge` via
        `post.v1.auth.wallet.transaction_challenge`.
      operationId: post.v1.auth.wallet.transaction_challenge
      requestBody:
        description: JSON request payload for `post.v1.auth.wallet.transaction_challenge`.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletTransactionChallengeRequest'
            example:
              wallet_pubkey: string
        required: true
      responses:
        '200':
          description: Challenge issued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletTransactionChallengeResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '500':
          $ref: '#/components/responses/ErrorResponse'
        '503':
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    WalletTransactionChallengeRequest:
      type: object
      required:
        - wallet_pubkey
      properties:
        wallet_pubkey:
          type: string
          description: |-
            Solana wallet pubkey the caller intends to authenticate as. The
            challenge transaction is built with this pubkey as the fee payer /
            sole signer.
    WalletTransactionChallengeResponse:
      type: object
      required:
        - nonce_id
        - unsigned_transaction
        - expires_at
      properties:
        expires_at:
          type: string
          description: RFC3339 timestamp at which this challenge expires.
        nonce_id:
          type: string
          description: |-
            Opaque server-issued nonce identifier. Echo on the subsequent login
            call.
        unsigned_transaction:
          type: string
          description: >-
            Base64-encoded unsigned Solana legacy transaction (bincode wire

            format) containing a single Memo program instruction that encodes
            the

            login challenge. Wallets are allowed to include additional

            ComputeBudget or Lighthouse instructions before signing (some inject

            these automatically, in arbitrary positions), but the Memo

            instruction, the recent blockhash, and the wallet's required-signer

            slot must be preserved. The transaction uses a deterministic,

            non-recent blockhash and is never submitted on-chain.
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: string
  responses:
    ErrorResponse:
      description: Standard JSON error payload.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'

````