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

# Batch transfer (SOL + SPL + Token-2022)

> One→one or one→many transfer of native SOL and/or any SPL / Token-2022
token. Accepts either a batched `items[]` array or the legacy
single-item shorthand.

Items are grouped by `sender` (one fee payer per tx) and packed into
the fewest possible 1232-byte transactions. The server detects each
mint's token program via one batched `getMultipleAccounts` and emits
`create_associated_token_account_idempotent` + `transfer_checked` for
non-SOL items.

Replaces `POST /api/sol/transfer` from `public.raze.sh` with a batched
shape and Token-2022 autodetection.




## OpenAPI

````yaml openapi-spec/trading.yaml post /utils/sol/transfer
openapi: 3.0.3
info:
  title: Raze Trading API
  description: >
    Trading endpoints for Solana token swaps — quote, buy, sell, and raw
    instructions.


    Runs on port 8082.


    **Auth methods**: `Authorization: Bearer sk_...` header, `X-API-Key: sk_...`
    header, or `?apiKey=sk_...` query param.
  version: 2.0.0
servers:
  - url: https://router.raze.bot
    description: >-
      Raze global trading router — GeoDNS routes to the nearest region
      automatically
security: []
paths:
  /utils/sol/transfer:
    post:
      summary: Batch transfer (SOL + SPL + Token-2022)
      description: |
        One→one or one→many transfer of native SOL and/or any SPL / Token-2022
        token. Accepts either a batched `items[]` array or the legacy
        single-item shorthand.

        Items are grouped by `sender` (one fee payer per tx) and packed into
        the fewest possible 1232-byte transactions. The server detects each
        mint's token program via one batched `getMultipleAccounts` and emits
        `create_associated_token_account_idempotent` + `transfer_checked` for
        non-SOL items.

        Replaces `POST /api/sol/transfer` from `public.raze.sh` with a batched
        shape and Token-2022 autodetection.
      operationId: utilsSolTransfer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferRequest'
            example:
              sender: treasuryWalletPubkeyHere...
              items:
                - receiver: RecipientPubkeyA...
                  amount: 0.1
                - receiver: RecipientPubkeyB...
                  tokenAddress: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                  amount: 5
              simulate: true
      responses:
        '200':
          description: Transactions built
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UtilsResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
components:
  schemas:
    TransferRequest:
      type: object
      description: |
        Batch transfer. Either pass `items[]` for the full batched form, or use
        the top-level `sender` / `receiver` / `tokenAddress` / `amount` for the
        legacy single-item shape. Items are grouped by sender and packed into
        the fewest possible 1232-byte transactions.
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/TransferItem'
        sender:
          type: string
        receiver:
          type: string
        tokenAddress:
          type: string
        amount:
          type: number
        feeTipLamports:
          type: integer
          description: Optional override for the Raze tip lamports (min 900000).
        transactionsFeeLamports:
          type: integer
          description: |
            Optional priority fee in lamports. When set, compute-budget
            instructions are added to every output tx.
        encoding:
          type: string
          enum:
            - base64
            - base58
          default: base64
        maxInstructionsPerTx:
          type: integer
          description: |
            Optional cap on non-fee instructions per tx. Default = whatever fits
            the 1232-byte budget.
        simulate:
          type: boolean
          default: false
    UtilsResponse:
      type: object
      description: |
        Shared envelope for every `/utils/sol/*` write endpoint. Optional
        fields are omitted from the JSON when unset.
      properties:
        success:
          type: boolean
        transactions:
          type: array
          description: Serialized partially-signed transactions in submission order.
          items:
            type: string
        batches:
          type: array
          description: |
            For batch endpoints (`transfer`, `burn`): packing metadata.
            `batches[i]` describes `transactions[i]`.
          items:
            $ref: '#/components/schemas/BatchInfo'
        mint:
          type: string
          description: Set by `/utils/sol/launch` — the mint of the launched token.
        platform:
          type: string
          description: Set by `/utils/sol/launch` and `/utils/sol/fees/claim`.
        status:
          type: object
          description: Set by `/utils/sol/fees/config` for `action=status` reads.
        simulations:
          type: array
          description: |
            Set when the request had `simulate: true`. One entry per built tx,
            in the same order as `transactions`. Each entry is the RPC
            `simulateTransaction` `value` object (logs / unitsConsumed / err).
          items:
            type: object
        error:
          type: string
      required:
        - success
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
        details:
          type: string
      required:
        - success
        - error
    TransferItem:
      type: object
      description: One leg of a batched transfer.
      properties:
        sender:
          type: string
          description: |
            Payer + sender for this item. Optional — falls back to the
            top-level `sender` field. Items with different senders end up in
            separate transactions (one fee payer per tx).
        receiver:
          type: string
        tokenAddress:
          type: string
          description: |
            SPL or Token-2022 mint. Omit (or pass the wSOL mint) for native SOL.
            The token program is autodetected per mint.
        amount:
          type: number
          description: >-
            UI-denominated amount; decimals are resolved from the mint when
            non-SOL.
      required:
        - receiver
        - amount
    BatchInfo:
      type: object
      description: |
        Per-transaction packing metadata returned by batch endpoints. Lets the
        caller correlate input items → serialized txs for partial-retry logic
        when one tx in a batch lands and another doesn't.
      properties:
        signers:
          type: array
          items:
            type: string
          description: Required signers for this tx (fee payer first).
        itemIndices:
          type: array
          items:
            type: integer
          description: Indices into the request's `items[]` array packed into this tx.
        instructionCount:
          type: integer
          description: >-
            Non-fee instructions in this tx (excludes compute-budget + fee
            transfers).
      required:
        - signers
        - itemIndices
        - instructionCount
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
    BearerAuth:
      type: http
      scheme: bearer

````