Links

SignAndSendTransaction

Once an application is connected to Phantom, it can prompt the user for permission to send transactions on their behalf.
In order to send a transaction, an application must:
  1. 1.
    Create an unsigned transaction.
  2. 2.
    Have the transaction be signed and submitted to the network by the user's Phantom wallet.
  3. 3.
    Optionally await network confirmation using a Solana JSON RPC connection.
For more information about the nature of Solana transactions, please review the solana-web3.js docs as well as the Solana Cookbook.
For a sample transaction using Phantom deeplinks, check out our deeplinking demo app.

Base URL

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

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. Please review Specifying Redirects for more details. URL-encoded.
  • payload (required): An encrypted JSON string with the following fields:
    {
    "transaction": "...", // serialized transaction, base58-encoded
    "sendOptions": "..." // an optional Solana web3.js sendOptions object
    "session": "...", // token received from the connect method
    }
    • transaction (required): The transaction that Phantom will sign and submit, serialized and encoded in base58.
    • sendOptions (optional): An optional object that specifies options for how Phantom should submit the transaction. This object is defined in Solana web3.js.
    • session (required): The session token received from the Connect method. Please see Handling Sessions for more details.

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
    {
    "signature": "..." // transaction-signature
    }
    • signature: The first signature in the transaction, which can be used as its transaction id.

​
❌
Reject

An errorCode and errorMessage as query parameters. Please refer to Errors for a full list of possible error codes.
{
"errorCode": "...",
"errorMessage": "..."
}

Example