Skip to main content
POST
/
v1
/
auth
/
wallet
/
transaction-challenge
Create wallet transaction challenge
curl --request POST \
  --url https://perp-api.phoenix.trade/v1/auth/wallet/transaction-challenge \
  --header 'Content-Type: application/json' \
  --data '
{
  "wallet_pubkey": "string"
}
'
{
  "expires_at": "<string>",
  "nonce_id": "<string>",
  "unsigned_transaction": "<string>"
}

Body

application/json

JSON request payload for post.v1.auth.wallet.transaction_challenge.

wallet_pubkey
string
required

Solana wallet pubkey the caller intends to authenticate as. The challenge transaction is built with this pubkey as the fee payer / sole signer.

Response

Challenge issued

expires_at
string
required

RFC3339 timestamp at which this challenge expires.

nonce_id
string
required

Opaque server-issued nonce identifier. Echo on the subsequent login call.

unsigned_transaction
string
required

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.