Request Phantom to sign the prepared transaction and return the signature. After receiving the signature, your app can broadcast the transaction itself with sendRawTransaction in web3.js, giving you full control over timing, batching, or custom error handling.

Base URL

https://phantom.app/ul/v1/signTransaction

Query string parameters

  • dapp_encryption_public_key (required): The original encryption public key used from the app side for an existing Connect session.
  • nonce (required): A nonce used for encrypting the request, encoded in base58.
  • redirect_link (required): The URI where Phantom should redirect the user upon completion. For more details, see Specify redirects. URL-encoded.
  • payload (required): An encrypted JSON string with the following fields:
    {
      "transaction": "...", // serialized transaction, base58 encoded
      "session": "...", // token received from connect-method
    }
    
    • transaction (required): The transaction that Phantom will sign, serialized and encoded in base58.
    • session (required): The session token received from the Connect method. For more details, see Handle sessions.

Returns

Approve

  • nonce: A nonce used for encrypting the response, encoded in base58.
  • data: An encrypted JSON string. Refer to Encryption to learn how apps can decrypt data using a shared secret. Encrypted bytes are encoded in base58.
    // content of decrypted `data`-parameter
    {
        transaction: "...", // signed serialized transaction, base58 encoded
    }
    
    • transaction: The signed, serialized transaction that is base58 encoded. Phantom will not submit this transactions. An application can submit this transactions itself using sendRawTransaction in web3.js.

Reject

An errorCode and errorMessage as query parameters. For a full list of possible error codes, see Errors.
{
  "errorCode": "...",
  "errorMessage": "..."
}

Example

Refer to the signTransaction method implemented in our React Native demo application.