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

# Create Wallet Transfer

> Moves tokens between two custody wallets of your company and your users.

#### Request

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Authorization | Header | Yes | `Bearer <access>` obtained from **POST /api/token**. |
| clientId | Path | Yes | Your client ID, from **GET /api/infoClient**. |
| userId | Path | Yes | Your client ID or the ID of one of your users (from **GET /api/b2b2b/&#123;clientId&#125;/users**). The user must be approved. |

#### Request Body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| asset | string | Yes | Token to transfer, e.g. `USDC`. |
| walletOriginId | uuid | Yes | Origin custody wallet. |
| walletDestinationId | uuid | Yes | Destination custody wallet. |
| amountSent | number | Yes | Amount to transfer, greater than 0. |

Both wallets must be `accepted`, belong to your company or your users, hold the same token and be on the same network. The origin must have enough balance.

#### Response

The transfer: `id`, `status` (`pending`), `symbolTypeSent`, `symbolTypeReceived`, `amountSent`, `amountReceived`, `walletOriginId`, `walletDestinationId`, `originUserId`, `destinationUserId`, `walletTransferType` (`transfer`) and `registerDate`.

#### Errors

| Status | When |
| --- | --- |
| 400 | Invalid body, wallets not accepted or on different networks, or insufficient balance. |
| 401 | Missing or invalid token. |



## OpenAPI

````yaml /business/openapi.json post /api/b2b2b/{clientId}/wallet/transfer/{userId}
openapi: 3.1.0
info:
  title: Kravata Business API
  version: '1.0'
  description: >-
    Kravata Business API: on-ramp and off-ramp orders, accounts and wallets,
    users, custody wallets and transfers.
servers:
  - url: https://testapi.kravata.co
    description: Test
  - url: https://apiv2.kravata.co
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Authentication
  - name: Accounts
  - name: Wallets
  - name: Users
  - name: Ramp Orders
  - name: Custody
  - name: Webhooks
paths:
  /api/b2b2b/{clientId}/wallet/transfer/{userId}:
    post:
      tags:
        - Custody
      summary: Create Wallet Transfer
      description: >-
        Moves tokens between two custody wallets of your company and your users.


        #### Request


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | Authorization | Header | Yes | `Bearer <access>` obtained from **POST
        /api/token**. |

        | clientId | Path | Yes | Your client ID, from **GET /api/infoClient**.
        |

        | userId | Path | Yes | Your client ID or the ID of one of your users
        (from **GET /api/b2b2b/&#123;clientId&#125;/users**). The user must be
        approved. |


        #### Request Body


        | Field | Type | Required | Description |

        | --- | --- | --- | --- |

        | asset | string | Yes | Token to transfer, e.g. `USDC`. |

        | walletOriginId | uuid | Yes | Origin custody wallet. |

        | walletDestinationId | uuid | Yes | Destination custody wallet. |

        | amountSent | number | Yes | Amount to transfer, greater than 0. |


        Both wallets must be `accepted`, belong to your company or your users,
        hold the same token and be on the same network. The origin must have
        enough balance.


        #### Response


        The transfer: `id`, `status` (`pending`), `symbolTypeSent`,
        `symbolTypeReceived`, `amountSent`, `amountReceived`, `walletOriginId`,
        `walletDestinationId`, `originUserId`, `destinationUserId`,
        `walletTransferType` (`transfer`) and `registerDate`.


        #### Errors


        | Status | When |

        | --- | --- |

        | 400 | Invalid body, wallets not accepted or on different networks, or
        insufficient balance. |

        | 401 | Missing or invalid token. |
      operationId: create-wallet-transfer
      parameters:
        - name: clientId
          in: path
          required: true
          description: ''
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          description: ''
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                asset:
                  type: string
                walletOriginId:
                  type: string
                walletDestinationId:
                  type: string
                amountSent:
                  type: integer
            example:
              asset: USDC
              walletOriginId: '{{walletId}}'
              walletDestinationId: '{{destinationWalletId}}'
              amountSent: 20
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  amountReceived:
                    type: integer
                  amountSent:
                    type: integer
                  destinationUserId:
                    type: string
                  id:
                    type: string
                  originUserId:
                    type: string
                  registerDate:
                    type: string
                  status:
                    type: string
                  symbolTypeReceived:
                    type: string
                  symbolTypeSent:
                    type: string
                  walletDestinationId:
                    type: string
                  walletOriginId:
                    type: string
                  walletTransferMonetaries:
                    type: array
                    items:
                      type: object
                      properties:
                        amount:
                          type: integer
                        currency:
                          type: string
                        enviroment:
                          type: string
                        operation:
                          type: string
                        result:
                          type: integer
                        walletTransferRequestId:
                          type: string
                  walletTransferNumber:
                    type: string
                  walletTransferType:
                    type: string
              examples:
                api-b2b2b-wallet-transfer:
                  summary: api/b2b2b/wallet/transfer
                  value:
                    amountReceived: 18
                    amountSent: 20
                    destinationUserId: 08597c65-c25b-4a7c-8c68-f1180bce65f4
                    id: 2c05adbf-1e9e-4e8e-8983-becc4704bf9e
                    originUserId: 08597c65-c25b-4a7c-8c68-f1180bce65f4
                    registerDate: '2025-09-24 13:12:01.741481'
                    status: pending
                    symbolTypeReceived: USDC
                    symbolTypeSent: USDC
                    walletDestinationId: 18f5d977-988c-4a22-a366-e58a425c747e
                    walletOriginId: bcfb7a40-e614-4d9b-a810-d129194a91fc
                    walletTransferMonetaries:
                      - amount: 20
                        currency: USDC
                        enviroment: simulation
                        operation: amountSent
                        result: 20
                        walletTransferRequestId: 2c05adbf-1e9e-4e8e-8983-becc4704bf9e
                      - amount: 20
                        currency: USDC
                        enviroment: simulation
                        operation: rateToken
                        result: 0
                        walletTransferRequestId: 2c05adbf-1e9e-4e8e-8983-becc4704bf9e
                      - amount: 20
                        currency: USDC
                        enviroment: simulation
                        operation: amountReceived
                        result: 18
                        walletTransferRequestId: 2c05adbf-1e9e-4e8e-8983-becc4704bf9e
                    walletTransferNumber: T000001
                    walletTransferType: transfer
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Access token from POST /api/token (valid 5 minutes).

````