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

# Close a virtual account

> Close an accessible virtual account. Pending transfers from it are canceled, cards attached to it are closed, and its remaining balance is moved to the Account's primary virtual account shortly after the response, so the returned `balance` may still be non-zero. Inbound transfers addressed to a closed virtual account are returned. The primary virtual account cannot be closed, and closing cannot be reversed.



## OpenAPI

````yaml /openapi-v2.json post /v2/virtual-accounts/{virtualAccountId}/close
openapi: 3.1.0
info:
  title: Slash Public API V2
  description: >-
    Send money for a Slash legal entity. Every request uses an API key. Transfer
    creation returns a Transfer that links its resulting transactions.
  version: 0.0.1
servers:
  - url: https://api.slash.com
    description: production
security:
  - api_key: []
paths:
  /v2/virtual-accounts/{virtualAccountId}/close:
    parameters:
      - name: x-legal-entity
        in: header
        required: true
        description: >-
          The legal entity to act on. Required on every request; a user API key
          can act on any legal entity its user has access to.
        schema:
          type: string
          pattern: ^le_[a-zA-Z0-9]+$
    post:
      summary: Close a virtual account
      description: >-
        Close an accessible virtual account. Pending transfers from it are
        canceled, cards attached to it are closed, and its remaining balance is
        moved to the Account's primary virtual account shortly after the
        response, so the returned `balance` may still be non-zero. Inbound
        transfers addressed to a closed virtual account are returned. The
        primary virtual account cannot be closed, and closing cannot be
        reversed.
      parameters:
        - name: virtualAccountId
          in: path
          required: true
          description: Virtual account id with the `subaccount_` prefix.
          schema:
            type: string
      responses:
        '200':
          description: The closed virtual account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/virtual-account'
              example:
                id: subaccount_payroll123
                name: Payroll
                accountId: sa_group_primary123
                accountType: default
                status: closed
                balance:
                  amount: 125000
                  currency: USD
        '400':
          $ref: >-
            #/components/responses/PublicApiV2Error400InvalidRequestShapeVirtualAccountsClose
        '401':
          $ref: '#/components/responses/PublicApiV2Error401Unauthorized'
        '403':
          $ref: >-
            #/components/responses/PublicApiV2Error403ForbiddenForbiddenLegalEntityUserApiKeyRequired
        '404':
          $ref: '#/components/responses/PublicApiV2Error404NotFoundNotFoundNotEnabled'
        '409':
          $ref: '#/components/responses/PublicApiV2Error409Conflict'
        '429':
          $ref: '#/components/responses/PublicApiV2RateLimited'
        '500':
          $ref: '#/components/responses/PublicApiV2Error500Internal'
components:
  schemas:
    virtual-account:
      title: VirtualAccount
      description: >-
        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.
      type: object
      properties:
        id:
          type: string
          description: Virtual account id with the `subaccount_` prefix.
        name:
          type: string
        accountId:
          type: string
          description: Parent Account id with the `sa_group_` prefix.
        accountType:
          type: string
          enum:
            - primary
            - default
        status:
          type: string
          enum:
            - open
            - closed
        balance:
          allOf:
            - $ref: '#/components/schemas/Money'
          description: Current ledger balance. Zero for a newly created virtual account.
        commission:
          $ref: '#/components/schemas/virtual-account-commission'
      required:
        - id
        - name
        - accountId
        - accountType
        - status
        - balance
      additionalProperties: false
    Money:
      type: object
      description: A signed monetary amount expressed in minor units.
      properties:
        amount:
          type: integer
          description: Amount in the currency's minor units.
        currency:
          type: string
          pattern: ^[A-Z]{3}$
          description: Uppercase ISO 4217 currency code.
      required:
        - amount
        - currency
      additionalProperties: false
      title: Money
    virtual-account-commission:
      title: VirtualAccountCommission
      description: Funds diverted to the Account's primary virtual account.
      oneOf:
        - title: Flat fee
          type: object
          properties:
            id:
              type: string
              description: Commission configuration id.
            type:
              type: string
              enum:
                - flat_fee
            amount:
              allOf:
                - $ref: '#/components/schemas/UsdMoney'
              description: Fixed USD amount collected each period.
            frequency:
              type: string
              enum:
                - monthly
                - yearly
            startsAt:
              type: string
              format: date-time
              description: RFC 3339 date and time when collection begins.
          required:
            - id
            - type
            - amount
            - frequency
          additionalProperties: false
        - title: Take rate
          type: object
          properties:
            id:
              type: string
              description: Commission configuration id.
            type:
              type: string
              enum:
                - take_rate
            rate:
              type: number
              minimum: 0
              maximum: 1
              description: Fraction of incoming funds diverted. `0.1` means 10%.
          required:
            - id
            - type
            - rate
          additionalProperties: false
    PublicApiV2ErrorInvalidRequestShape:
      title: PublicApiV2ErrorInvalidRequestShape
      description: >-
        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.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - invalid_request
            details:
              type: object
              properties: {}
              additionalProperties:
                type: string
          required:
            - code
            - details
    PublicApiV2ErrorUnauthorized:
      title: PublicApiV2ErrorUnauthorized
      description: API key authentication is missing or invalid.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - unauthorized
            details:
              type: object
              properties: {}
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorForbidden:
      title: PublicApiV2ErrorForbidden
      description: >-
        The credential can see the resource but is not permitted to perform this
        action on it; the missing permission is not disclosed. When the resource
        is a field of the request, `details` names that `field` and the `id` it
        received.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - forbidden
            details:
              type: object
              properties:
                field:
                  type: string
                  description: Dot path of the request field at fault.
                  example: fromAccount
                id:
                  type: string
                  description: The identifier that field carried, when it is one.
                  example: subaccount_source123
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorForbiddenLegalEntity:
      title: PublicApiV2ErrorForbiddenLegalEntity
      description: The credential is not permitted to act for the selected legal entity.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - forbidden
            details:
              type: object
              properties: {}
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorUserApiKeyRequired:
      title: PublicApiV2ErrorUserApiKeyRequired
      description: >-
        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.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - user_api_key_required
            details:
              type: object
              properties: {}
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorNotFound:
      title: PublicApiV2ErrorNotFound
      description: >-
        No resource matches the identifier, it belongs to another legal entity,
        or the credential cannot view it. When the identifier is a field of the
        request, `details` names that `field` and the `id` it received.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - not_found
            details:
              type: object
              properties:
                field:
                  type: string
                  description: Dot path of the request field at fault.
                  example: destinationId
                id:
                  type: string
                  description: The identifier that field carried, when it is one.
                  example: le_contact_destination_bank123
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorNotFoundNotEnabled:
      title: PublicApiV2ErrorNotFoundNotEnabled
      description: Public API v2 is not enabled for the selected legal entity.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - not_found
            details:
              type: object
              properties: {}
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorConflict:
      title: PublicApiV2ErrorConflict
      description: >-
        The resource is not in a state that allows this action; `message` says
        which state blocks it, and `details.field` names the field that
        referenced it when one did.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - conflict
            details:
              type: object
              properties:
                field:
                  type: string
                  description: Dot path of the request field at fault.
                  example: internationalWire.fxQuoteId
                id:
                  type: string
                  description: The identifier that field carried, when it is one.
                  example: fx_quote_2rj4l7hmrrrcv
              additionalProperties: false
          required:
            - code
            - details
    PublicApiV2ErrorInternal:
      title: PublicApiV2ErrorInternal
      description: >-
        Slash could not complete the request. Quote `referenceId` when
        contacting Slash support.
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          properties:
            code:
              type: string
              enum:
                - internal
            details:
              type: object
              properties: {}
              additionalProperties: false
          required:
            - code
            - details
    UsdMoney:
      type: object
      description: A positive USD amount expressed in cents.
      properties:
        amount:
          type: integer
          minimum: 1
          description: Amount in cents. For example, `1250` represents USD 12.50.
          example: 1250
        currency:
          type: string
          enum:
            - USD
      required:
        - amount
        - currency
      additionalProperties: false
      title: UsdMoney
    Error:
      type: object
      properties:
        code:
          type: string
          description: >-
            Machine-readable reason; branch on this, not on `message`. Every
            code an endpoint can return is listed on its reference page; the
            ones shared by all endpoints are explained in the Errors guide.
          example: invalid_request
        message:
          type: string
          description: >-
            Human-readable explanation, safe to show to an operator. Wording may
            change; use `code` and `details` programmatically.
        details:
          type: object
          description: >-
            The values behind `message`, keyed per `code`. For example
            `insufficient_funds` carries `available` and `requested`;
            `invalid_request` from contract validation carries one entry per
            failing field, keyed by JSON pointer. Empty when the code has no
            variable data.
          additionalProperties:
            type: string
          example:
            available: $120.00
            requested: $500.00
        referenceId:
          type: string
          description: Unique id of this failure. Quote it when contacting Slash support.
          example: 4001-2alj5if
      required:
        - code
        - message
        - details
        - referenceId
      additionalProperties: false
      title: Error
  responses:
    PublicApiV2Error400InvalidRequestShapeVirtualAccountsClose:
      description: >-
        - `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.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PublicApiV2ErrorInvalidRequestShape'
          examples:
            invalid_request_request_shape:
              summary: invalid_request (request shape)
              value:
                code: invalid_request
                message: >-
                  Invalid `virtualAccountId`: Expected a valid ID beginning with
                  "subaccount_".
                details:
                  /virtualAccountId: Expected a valid ID beginning with "subaccount_".
                referenceId: 4001-2alj5if
    PublicApiV2Error401Unauthorized:
      description: '- `unauthorized` — API key authentication is missing or invalid.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PublicApiV2ErrorUnauthorized'
          examples:
            unauthorized:
              summary: unauthorized
              value:
                code: unauthorized
                message: API key authentication is missing or invalid.
                details: {}
                referenceId: 4011-2alj5if
    PublicApiV2Error403ForbiddenForbiddenLegalEntityUserApiKeyRequired:
      description: >-
        - `forbidden` — The credential can see the resource but is not permitted
        to perform this action on it; the missing permission is not disclosed.
        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.

        - `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.
      content:
        application/json:
          schema:
            anyOf:
              - title: forbidden
                allOf:
                  - $ref: '#/components/schemas/PublicApiV2ErrorForbidden'
              - title: forbidden (legal entity)
                allOf:
                  - $ref: '#/components/schemas/PublicApiV2ErrorForbiddenLegalEntity'
              - title: user_api_key_required
                allOf:
                  - $ref: '#/components/schemas/PublicApiV2ErrorUserApiKeyRequired'
          examples:
            forbidden:
              summary: forbidden
              value:
                code: forbidden
                message: >-
                  This credential is not permitted to do that on `fromAccount`
                  subaccount_source123.
                details:
                  field: fromAccount
                  id: subaccount_source123
                referenceId: 4031-2alj5if
            forbidden_legal_entity:
              summary: forbidden (legal entity)
              value:
                code: forbidden
                message: This credential is not permitted to do that.
                details: {}
                referenceId: 4031-2alj5if
            user_api_key_required:
              summary: user_api_key_required
              value:
                code: user_api_key_required
                message: >-
                  Public API v2 requires a user API key. Create one under
                  Settings → API keys in the Slash dashboard.
                details: {}
                referenceId: 4031-2alj5if
    PublicApiV2Error404NotFoundNotFoundNotEnabled:
      description: >-
        - `not_found` — No resource matches the identifier, it belongs to
        another legal entity, or the credential cannot view it. When the
        identifier is a field of the request, `details` names that `field` and
        the `id` it received.

        - `not_found (API not enabled)` — Public API v2 is not enabled for the
        selected legal entity.
      content:
        application/json:
          schema:
            anyOf:
              - title: not_found
                allOf:
                  - $ref: '#/components/schemas/PublicApiV2ErrorNotFound'
              - title: not_found (API not enabled)
                allOf:
                  - $ref: '#/components/schemas/PublicApiV2ErrorNotFoundNotEnabled'
          examples:
            not_found:
              summary: not_found
              value:
                code: not_found
                message: '`destinationId` le_contact_destination_bank123 was not found.'
                details:
                  field: destinationId
                  id: le_contact_destination_bank123
                referenceId: 4041-2alj5if
            not_found_not_enabled:
              summary: not_found (API not enabled)
              value:
                code: not_found
                message: The requested resource was not found.
                details: {}
                referenceId: 4041-2alj5if
    PublicApiV2Error409Conflict:
      description: >-
        - `conflict` — The resource is not in a state that allows this action;
        `message` says which state blocks it, and `details.field` names the
        field that referenced it when one did.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PublicApiV2ErrorConflict'
          examples:
            conflict:
              summary: conflict
              value:
                code: conflict
                message: The FX quote has already been used.
                details:
                  field: internationalWire.fxQuoteId
                  id: fx_quote_2rj4l7hmrrrcv
                referenceId: 4091-2alj5if
    PublicApiV2RateLimited:
      description: >-
        The request exceeded the applicable rate limit. The response body is
        plain text; clients must not depend on a response-body schema for this
        status.
    PublicApiV2Error500Internal:
      description: >-
        - `internal` — Slash could not complete the request. Quote `referenceId`
        when contacting Slash support.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PublicApiV2ErrorInternal'
          examples:
            internal:
              summary: internal
              value:
                code: internal
                message: >-
                  An unexpected error occurred. If this keeps happening, contact
                  Slash support with the reference id below.
                details: {}
                referenceId: 5001-2alj5if
  securitySchemes:
    api_key:
      type: apiKey
      name: X-API-Key
      in: header
      description: >-
        User API key authentication. Create a key under Settings → API keys in
        the Slash dashboard (https://app.slash.com/global-settings/api-keys) and
        send the `x-legal-entity` header naming the legal entity to act on with
        every request. Keys scoped to a legal entity are rejected with `403
        user_api_key_required`.

````