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

# Transfer funds

> Move funds between two Qash accounts.

<Note>
  Requires `Authorization: Bearer <user-access-token>` — the token from [Verify login code](/api-reference/users/verify-otp). No `X-Api-Key`, `X-Api-Secret`, or `userId` — the token already identifies the sending user.
</Note>

Transfers funds between two Qash accounts. Both accounts must have sufficient balance in the same currency. Use [Get balance](/api-reference/financials/balance) to retrieve account IDs and current balances.

## Request

```http theme={null}
POST /api/v1/transactions/transfer
Authorization: Bearer <user-access-token>
Content-Type: application/json
```

### Body

| Field           | Type   | Required | Description                                                                   |
| --------------- | ------ | -------- | ----------------------------------------------------------------------------- |
| `fromAccountId` | number | No       | Source account ID. If omitted, the token's user's primary account is used     |
| `toAccountId`   | number | **Yes**  | Destination account ID — can belong to a different user                       |
| `amount`        | number | **Yes**  | Decimal amount in USDC (e.g. `50` = USDC 50.00) — not a smallest-unit integer |
| `description`   | string | **Yes**  | Description of the transfer                                                   |

```json theme={null}
{
  "fromAccountId": 619,
  "toAccountId": 620,
  "amount": 50,
  "description": "Service payment"
}
```

## Response

**201 Created**

```json theme={null}
{
  "id": 4502,
  "status": "COMPLETED",
  "amount": 50,
  "description": "Service payment"
}
```

| Field         | Type   | Description                         |
| ------------- | ------ | ----------------------------------- |
| `id`          | number | Transaction ID                      |
| `status`      | string | `"COMPLETED"` on success            |
| `amount`      | number | Decimal amount transferred, in USDC |
| `description` | string | Description provided in the request |

## Errors

| HTTP status | Error                                  | Cause                                        |
| ----------- | -------------------------------------- | -------------------------------------------- |
| `400`       | Validation message                     | Missing required field or invalid format     |
| `400`       | `One or both accounts do not exist`    | Source or destination account does not exist |
| `400`       | `Insufficient balance in account <id>` | Source account has insufficient funds        |
| `401`       | `Invalid or expired token`             | Missing, expired, or malformed access token  |
