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

# Make budget transfers

> Transfer funds from one budget to another within an account.

## Make a budget transfer

<Note>
  **POST** `/v2/budgets/{budgetId}/transfer`
</Note>

### Before you start

If you haven't already, [create a new budget](/pages/budgets/create-budgets) and grab the newly-created budget's `id`.

### Things to know

* **The currency must be enabled on both budgets.** The currency you specify in the transfer must exist on both the source and destination budgets.
* **The `amount` field is a string.** Provide the amount as a string, for example `"300"` or `"300.00"`.
* **Webhooks are triggered for both budgets.** A successful transfer triggers a `BoxDebited` webhook for the source budget and a `BoxCredited` webhook for the destination budget.

### Request

Use this request to transfer funds from one budget to another, within an account.

<CodeGroup>
  ```bash Sample request theme={null}
  curl -i -X POST \
    'https://api.equalsmoney.com/v2/budgets/b489ea2c-0dd1-4fb1-b345-de5a596a5527/transfer?accountId=F12345' \
    -H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
    -H 'Content-Type: application/json' \
    -d '{
      "destinationBudgetId": "4bf13dc8-d128-4521-99b8-4002b8987499",
      "currency": "USD",
      "amount": "300",
      "reference": "Q4 allocation"
    }'
  ```

  ```bash Request structure theme={null}
  curl -i -X POST \
    'https://api.equalsmoney.com/v2/budgets/{budgetId}/transfer?accountId={accountId}' \
    -H 'Authorization: ApiKey YOUR_API_KEY_HERE' \
    -H 'Content-Type: application/json' \
    -d '{
      "destinationBudgetId": "string",
      "currency": "string",
      "amount": "string",
      "reference": "string"
    }'
  ```
</CodeGroup>

#### Path parameters

<ParamField body="accountId" type="string" required>
  The ID of the account that this budget belongs to.

  Allowable values: An existing `accountId`
</ParamField>

#### Request body schema

<ParamField body="destinationBudgetId" type="string" required>
  The ID of the budget to which you're transferring funds.

  Allowable values: An existing `budgetId` (≤ 36 characters)
</ParamField>

<ParamField body="currency" type="string" required>
  The currency code for the currency that the transfer is in, in ISO 4217 format.

  Allowable values: 3 characters (`^[A-Z]{3}$`)
</ParamField>

<ParamField body="amount" type="string" required>
  The amount of funds that you're transferring.

  Allowable values: A valid string
</ParamField>

<ParamField body="reference" type="string">
  An optional reference for the transfer.

  Allowable values: ≤ 18 characters (alphanumeric and basic punctuation)
</ParamField>

### Response

If your request is successful, you'll receive a `200` response.

<CodeGroup>
  ```json Sample response theme={null}
  {
    "success": true,
    "debitBoxTransactionId": 179032,
    "creditBoxTransactionId": 179033
  }
  ```

  ```json Response structure theme={null}
  {
    "success": boolean,
    "debitBoxTransactionId": number,
    "creditBoxTransactionId": number
  }
  ```
</CodeGroup>

### Error responses

If your request is unsuccessful, you'll receive one of the following error responses.

```json 404 — Source budget not found theme={null}
{
  "path": "/v2/budgets/b489ea2c-0dd1-4fb1-b345-de5a596a5527/transfer",
  "message": "source budget not found"
}
```

```json 404 — Destination budget not found theme={null}
{
  "path": "/v2/budgets/b489ea2c-0dd1-4fb1-b345-de5a596a5527/transfer",
  "message": "destination budget not found"
}
```

```json 400 — Cannot transfer to/from forwardDeposits budget theme={null}
{
  "path": "/v2/budgets/b489ea2c-0dd1-4fb1-b345-de5a596a5527/transfer",
  "message": "Cannot transfer money from/to \"forwardDeposits\" budget"
}
```

For more detailed information about this request and its response, [see the API reference](/api-reference/payments/create-a-budget-to-budget-transfer).
