---
title: "Update a virtual account"
method: PATCH
path: "/v2/virtual-accounts/{virtualAccountId}"
---

# Update a virtual account

`PATCH /v2/virtual-accounts/{virtualAccountId}`

## Request

- Base URL: `https://api.slash.com`
- URL: `https://api.slash.com/v2/virtual-accounts/{virtualAccountId}`
- Auth: API key in header `X-API-Key`

Rename an accessible virtual account or replace its commission. Omitted fields are left as they are. The primary virtual account of an Account and closed virtual accounts cannot be updated.

## Path parameters

- `virtualAccountId` string, required

## Request body

- VirtualAccountUpdate: Fields to change on a virtual account. Omitted fields are left as they are. A virtual account has at most one commission, so `commission` replaces the current one; sending a different `type` switches it.
  - `name` string: New display name for the virtual account.
  - `commission` union: Optionally divert funds from this virtual account to its Account's primary virtual account.
    - object
      - `type` 'flat_fee', required
      - `amount` UsdMoney, required: A positive USD amount expressed in cents.
        - `amount` integer, required: Amount in cents. For example, `1250` represents USD 12.50.
        - `currency` 'USD', required
      - `frequency` 'monthly' | 'yearly', required
      - `startsAt` string, date-time: Optional RFC 3339 date and time when collection begins.
    - object
      - `type` 'take_rate', required
      - `rate` number, required: Fraction of incoming funds to divert. `0.1` means 10%.

## Response `200`

The updated virtual account.

- VirtualAccount: A balance-bearing virtual account. Virtual accounts in eligible bank Accounts can source or receive API v2 transfers; Global USD virtual accounts are readable but cannot be used by the API v2 transfer endpoints.
  - `id` string, required: Virtual account id with the `subaccount_` prefix.
  - `name` string, required
  - `accountId` string, required: Parent Account id with the `sa_group_` prefix.
  - `accountType` 'primary' | 'default', required
  - `status` 'open' | 'closed', required
  - `balance` Money, required: A signed monetary amount expressed in minor units.
    - `amount` integer, required: Amount in the currency's minor units.
    - `currency` string, required: Uppercase ISO 4217 currency code.
  - `commission` union: Funds diverted to the Account's primary virtual account.
    - object
      - `id` string, required: Commission configuration id.
      - `type` 'flat_fee', required
      - `amount` UsdMoney, required: A positive USD amount expressed in cents.
        - `amount` integer, required: Amount in cents. For example, `1250` represents USD 12.50.
        - `currency` 'USD', required
      - `frequency` 'monthly' | 'yearly', required
      - `startsAt` string, date-time: RFC 3339 date and time when collection begins.
    - object
      - `id` string, required: Commission configuration id.
      - `type` 'take_rate', required
      - `rate` number, required: Fraction of incoming funds diverted. `0.1` means 10%.

## Other responses

- `400`: - `invalid_request (request shape)` — The body, query, or headers failed validation, or a required header is missing. `details` has one entry per failing location, keyed by JSON pointer or header name.
- `401`: - `unauthorized` — API key authentication is missing or invalid.
- `403`: - `forbidden` — The credential is not permitted to perform this action on the resource. When the resource is a field of the request, `details` names that `field` and the `id` it received. - `forbidden (legal entity)` — The credential is not permitted to act for the selected legal entity. - `not_available` — Public API v2 is not yet available. Use [Public API v1](https://docs.slash.com/introduction) in the meantime. - `user_api_key_required` — The API key is scoped to a legal entity rather than a user. Every v2 request needs a user API key, created under Settings → API keys in the Slash dashboard, together with the `x-legal-entity` header.
- `404`: - `not_found` — No resource matches the identifier. When the identifier is a field of the request, `details` names that `field` and the `id` it received.
- `409`: - `primary_virtual_account` — The virtual account is the account's primary one, which cannot be closed or updated. - `virtual_account_closed` — The virtual account, or the account it belongs to, is closed.
- `429`: The request exceeded the applicable rate limit. The response body is plain text, not the error object; clients must not depend on its wording.
- `500`: - `internal` — Slash could not complete the request. Quote `referenceId` when contacting Slash support.

## Changes

- **2026-10-16** `8b5d371ffeea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/slashfi/apis/slash-public-api/changes/v2/virtual-accounts/:virtualAccountId/patch.md)

---

[API](https://skmtc.dev/slashfi/apis/slash-public-api.md) - [All operations](https://skmtc.dev/slashfi/apis/slash-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/slashfi/apis/slash-public-api/revisions/eaed2d63c9e2?raw)
