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

# Create crypto transfer

> Transfer crypto from your Pasteaza balance to an external wallet.

Send crypto from your available Pasteaza balance to a wallet on a supported network. Pasteaza validates the destination, calculates the applicable fee, and returns a transfer reference you can use to track the transaction.

## Endpoint

```http theme={null}
POST /v1/disbursements/crypto
```

## Headers

```http theme={null}
Authorization: Bearer sk_test_xxx
Content-Type: application/json
Idempotency-Key: crypto-transfer-ORDER-1042
```

Use a unique `Idempotency-Key` for each transfer. Reuse the same key only when retrying the same request.

## Request body

| Field | Type | Required | Description |
| - | - | - | - |
| `amount` | string | Yes | Amount of the selected asset to send, such as `10.50`. |
| `asset` | string | Yes | The asset to send. Currently supports `USDC` and `USDT`. |
| `network` | string | Yes | The destination network. Currently supports `SOLANA`. |
| `destinationAddress` | string | Yes | Recipient's wallet address on the selected network. |
| `merchantReference` | string | No | Your unique reference for the transfer. |
| `metadata` | object | No | Additional data associated with the transfer. |

## Example request

```bash theme={null}
curl https://api.oyapasteaza.com/v1/disbursements/crypto \
  -H "Authorization: Bearer sk_test_xxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: crypto-transfer-ORDER-1042" \
  -d '{
    "amount": "10.5",
    "asset": "USDC",
    "network": "SOLANA",
    "destinationAddress": "7M9p...xQ2a",
    "merchantReference": "ORDER_1042",
    "metadata": {
      "customerId": "CUS_001"
    }
  }'
```

## Successful response

```json theme={null}
{
  "status": true,
  "message": "Crypto transfer submitted.",
  "data": {
    "reference": "cw_91fe80aa755748d4bc58",
    "merchantReference": "ORDER_1042",
    "asset": "USDC",
    "network": "SOLANA",
    "amount": "10.5",
    "fee": "0.025",
    "totalDebit": "10.525",
    "destinationAddress": "7M9p...xQ2a",
    "status": "SUBMITTED",
    "transactionSignature": "5hY...m8Q",
    "failureReason": null,
    "metadata": {
      "customerId": "CUS_001"
    },
    "submittedAt": "2026-08-15T12:00:03.000Z",
    "confirmedAt": null,
    "failedAt": null,
    "createdAt": "2026-08-15T12:00:01.000Z"
  }
}
```

<Note>
  `fee` is the complete fee charged for the transfer. `totalDebit` is the total amount deducted from your balance.
</Note>

## Errors

| Code | Meaning |
| - | - |
| `authentication_failed` | The API key is missing or invalid. |
| `validation_failed` | A required field or the `Idempotency-Key` header is missing or invalid. |
| `insufficient_balance` | Your available balance cannot cover the amount and fee. |
| `crypto_transfer_failed` | The transfer could not be submitted. The message explains what to correct. |

## Next step

<CardGroup cols={2}>
  <Card title="Verify crypto transfer" icon="circle-check" href="/disbursements/crypto-transfer/verify-crypto-transfer-status">
    Retrieve the latest transfer status.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/getting-started/webhooks">
    Receive the final transfer result automatically.
  </Card>
</CardGroup>


## OpenAPI

````yaml openapi.yaml POST /v1/disbursements/crypto
openapi: 3.1.0
info:
  title: Pasteaza API
  version: 1.0.0
  description: Collect and disburse bank and crypto payments with Pasteaza.
servers:
  - url: https://api.oyapasteaza.com
    description: Pasteaza API — the API key selects test or live mode
security:
  - bearerAuth: []
tags:
  - name: Hosted Checkout
  - name: Virtual Accounts
  - name: Dedicated Bank Accounts
  - name: Temporary Crypto Wallets
  - name: Dedicated Crypto Wallets
  - name: Bank Transfers
  - name: Crypto Transfers
paths:
  /v1/disbursements/crypto:
    post:
      tags:
        - Crypto Transfers
      summary: Create crypto transfer
      operationId: createCryptoTransfer
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount
                - asset
                - network
                - destinationAddress
              properties:
                amount:
                  type: string
                  pattern: ^\d+(\.\d+)?$
                  example: '10.50'
                asset:
                  $ref: '#/components/schemas/CryptoAsset'
                network:
                  $ref: '#/components/schemas/CryptoNetwork'
                destinationAddress:
                  type: string
                  example: 7M9pXcRNsFj4UkQw8bY5dL6sT2aZ3gH1vPqEeKxQ2aBc
                merchantReference:
                  type: string
                  example: CRYPTO-PAYOUT-1001
                metadata:
                  $ref: '#/components/schemas/Metadata'
      responses:
        '201':
          description: Crypto transfer created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        default:
          $ref: '#/components/responses/Error'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      description: A unique key for safely retrying this request.
      schema:
        type: string
        example: 2d3d82e4-70b8-4a1e-a78a-69415a601980
  schemas:
    CryptoAsset:
      type: string
      enum:
        - USDC
        - USDT
      example: USDC
    CryptoNetwork:
      type: string
      enum:
        - SOLANA
      example: SOLANA
    Metadata:
      type: object
      additionalProperties: true
      example:
        orderId: ORD-1042
    SuccessResponse:
      type: object
      required:
        - status
        - message
        - data
      properties:
        status:
          type: boolean
          const: true
        message:
          type: string
        data:
          type: object
          additionalProperties: true
    ErrorResponse:
      type: object
      required:
        - status
        - message
        - code
      properties:
        status:
          type: boolean
          const: false
        message:
          type: string
        code:
          type: string
  responses:
    Error:
      description: Request failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Pasteaza secret key
      description: >-
        Use an `sk_test_...` key in the playground. Never enter a live key in
        shared environments.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.