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

# SVM Transfers

> Construct SOL and SPL token transfer transactions on Solana with Chainworks.

Build transactions for SOL and token transfers.

## SOL Transfer

Transfer SOL to another address.

**Endpoint:** `/svm/transfer/transaction`

| Parameter      | Type   | Required           | Description                                                   |
| -------------- | ------ | ------------------ | ------------------------------------------------------------- |
| `chain`        | string | Yes                | Always `sol`                                                  |
| `recipient`    | string | Yes                | Recipient public key                                          |
| `amount`       | string | Yes                | Amount in lamports                                            |
| `wallet`       | string | Yes                | Sender public key                                             |
| `sendRoute`    | string | No                 | `Public`, `PublicWithNonce`, `Antimev`, or `AntimevWithNonce` |
| `prioFees`     | string | No                 | Priority fees (see below)                                     |
| `bribeFees`    | string | Based on sendRoute | bribe fees (see below)                                        |
| `nonceAccount` | string | Based on sendRoute | Nonce account for transaction exclusivity                     |

## Token Transfer

Transfer SPL tokens.

**Endpoint:** `/svm/transfer/token/transaction`

| Parameter                               | Type    | Required           | Description                                                   |
| --------------------------------------- | ------- | ------------------ | ------------------------------------------------------------- |
| `chain`                                 | string  | Yes                | Always `sol`                                                  |
| `token`                                 | string  | Yes                | Token mint address                                            |
| `recipient`                             | string  | Yes                | Recipient public key                                          |
| `amount`                                | string  | Yes                | Amount in token decimals                                      |
| `wallet`                                | string  | Yes                | Sender public key                                             |
| `ensureRecipientAssociatedTokenAccount` | boolean | No                 | Create ATA if needed (default: true)                          |
| `sendRoute`                             | string  | No                 | `Public`, `PublicWithNonce`, `Antimev`, or `AntimevWithNonce` |
| `prioFees`                              | string  | No                 | Priority fees (see below)                                     |
| `bribeFees`                             | string  | Based on sendRoute | bribe fees (see below)                                        |
| `nonceAccount`                          | string  | Based on sendRoute | Nonce account for transaction exclusivity                     |

## Multi-Transfer

Send SOL to multiple recipients in one transaction.

**Endpoint:** `/svm/transfer/multi/transaction`

<Tabs>
  <Tab title="Socket.IO">
    ```typescript theme={null}
    socket.emit("/svm/transfer/multi/transaction", {
      chain: "sol",
      wallet: "YourSolanaWalletPublicKey",
      recipients: [
        { address: "Recipient1PublicKey", amount: "100000000" },
        { address: "Recipient2PublicKey", amount: "200000000" },
      ],
    });
    ```
  </Tab>

  <Tab title="HTTP">
    ```typescript theme={null}
    await fetch("https://api.chainworks.co/svm/transfer/multi/transaction", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: CHAINWORKS_API_AUTH_TOKEN,
      },
      body: JSON.stringify({
        chain: "sol",
        wallet: "YourSolanaWalletPublicKey",
        recipients: [
          { address: "Recipient1PublicKey", amount: "100000000" },
          { address: "Recipient2PublicKey", amount: "200000000" },
        ],
      }),
    });
    ```
  </Tab>
</Tabs>

## Multi-Token Transfer

Send an SPL token to multiple recipients in one transaction.

**Endpoint:** `/svm/transfer/multi/token/transaction`

| Parameter                                      | Type      | Required           | Description                                                                                                                               |
| ---------------------------------------------- | --------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `chain`                                        | string    | Yes                | Always `sol`                                                                                                                              |
| `wallet`                                       | string    | Yes                | Sender public key                                                                                                                         |
| `token`                                        | string    | Yes                | Token mint address to transfer                                                                                                            |
| `recipients`                                   | object\[] | Yes                | Recipients to send to (see below)                                                                                                         |
| `defaultEnsureRecipientAssociatedTokenAccount` | boolean   | No                 | Default for creating a recipient's associated token account when missing (default: false). Creating an account may incur \~0.002 SOL rent |
| `sendRoute`                                    | string    | No                 | `Public`, `PublicWithNonce`, `Antimev`, or `AntimevWithNonce`                                                                             |
| `prioFees`                                     | string    | No                 | Priority fees in lamports                                                                                                                 |
| `bribeFees`                                    | string    | Based on sendRoute | Bribe fees in lamports                                                                                                                    |
| `nonceAccount`                                 | string    | Based on sendRoute | Nonce account for transaction exclusivity                                                                                                 |

Each entry in `recipients`:

| Field                          | Type    | Required    | Description                                                                                                   |
| ------------------------------ | ------- | ----------- | ------------------------------------------------------------------------------------------------------------- |
| `wallet`                       | string  | Conditional | Recipient wallet address. Required unless `associatedTokenAccount` is given                                   |
| `associatedTokenAccount`       | string  | Conditional | Recipient associated token account. Defaults to the wallet's default account; required if `wallet` is omitted |
| `amount`                       | string  | Yes         | Amount in raw token units (min 1)                                                                             |
| `ensureAssociatedTokenAccount` | boolean | No          | Create the recipient account if missing. Defaults to `defaultEnsureRecipientAssociatedTokenAccount`           |

**Example:**

<Tabs>
  <Tab title="Socket.IO">
    ```typescript theme={null}
    socket.emit("/svm/transfer/multi/token/transaction", {
      chain: "sol",
      wallet: "YourSolanaWalletPublicKey",
      token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
      recipients: [
        { wallet: "Recipient1PublicKey", amount: "100000000" },
        { wallet: "Recipient2PublicKey", amount: "200000000" },
      ],
    });
    ```
  </Tab>

  <Tab title="HTTP">
    ```typescript theme={null}
    await fetch("https://api.chainworks.co/svm/transfer/multi/token/transaction", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: CHAINWORKS_API_AUTH_TOKEN,
      },
      body: JSON.stringify({
        chain: "sol",
        wallet: "YourSolanaWalletPublicKey",
        token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
        recipients: [
          { wallet: "Recipient1PublicKey", amount: "100000000" },
          { wallet: "Recipient2PublicKey", amount: "200000000" },
        ],
      }),
    });
    ```
  </Tab>
</Tabs>
