# SignTransaction

[SignAndSendTransaction](https://docs.solflare.com/solflare/technical/deeplinks/provider-methods/signandsendtransaction) is the simplest and most recommended method for sending a transaction. Solflare submitting the transaction immediately after signing is safer for users and a simpler API for developers than relying on the application to do so.

However, it is also possible for an app to request just the signature from Solflare. Once signed, an app can submit the transaction itself using [web3.js's `sendRawTransaction`](https://solana-labs.github.io/solana-web3.js/classes/Connection.html#sendRawTransaction).&#x20;

### Base URL

```
https://solflare.com/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](https://docs.solflare.com/solflare/technical/deeplinks/provider-methods/connect) session.
* `nonce` **(required)**: A nonce used for encrypting the request, encoded in base58.
* `redirect_link` **(required)**: The URI where Solflare should redirect the user upon completion. Please review [Specifying Redirects](https://docs.solflare.com/solflare/technical/deeplinks/specifying-redirects) for more details. URL-encoded.
* `payload` **(required)**: An encrypted JSON string with the following fields:

  ```json
  {
    "transaction": "...", // serialized transaction, base58 encoded
    "session": "...", // token received from connect-method
  }
  ```

  * `transaction` **(required)**: The [transaction](https://solana-labs.github.io/solana-web3.js/classes/Transaction.html) that Solflare will sign is serialized and encoded in base58.
  * `session` **(required)**: The session token received from the [Connect](https://docs.solflare.com/solflare/technical/deeplinks/provider-methods/connect) method. Please see [Handling Sessions](https://docs.solflare.com/solflare/technical/deeplinks/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](https://docs.solflare.com/solflare/technical/deeplinks/encryption) to learn how apps can decrypt `data` using a shared secret. Encrypted bytes are encoded in base58.

  ```json
  // content of decrypted `data`-parameter
  {
      transaction: "...", // signed serialized transaction, base58 encoded
  }
  ```

  * `transaction`: The signed and serialized transaction that is encoded in base58. Solflare will not submit this transaction. An application can submit this transaction via [web3.js's sendRawTransaction](https://solana-labs.github.io/solana-web3.js/classes/Connection.html#sendRawTransaction).

#### Reject

An `errorCode` and `errorMessage` as query parameters.&#x20;

Please refer to [Errors](https://docs.solflare.com/solflare/technical/deeplinks/limitations#errors) for a full list of possible error codes.

```
{
  "errorCode": "...",
  "errorMessage": "..."
}
```

### Example

Please refer to the [signTransaction](https://github.com/solflare-wallet/deep-link-sample-app/blob/master/App.tsx#L271-L297) method implemented in our demo application.
