---
title: "Cancel a transfer"
method: PUT
path: "/v1/transfers/{transferId}/cancel"
tags: ["transfer"]
---

# Cancel a transfer

`PUT /v1/transfers/{transferId}/cancel`

Transfers may be cancelled up until the transfer has been processed and funds converted. Cancellation is final — it cannot be undone.

{% admonition type="info" name="When can a transfer be cancelled?" %}
A transfer can only be cancelled programmatically via the API if it meets **all** of the following criteria:

- The transfer is not in `funds_converted` or later state.
- There are no processing problems with the transfer.

If the transfer does not meet these criteria, the API will return a **409 Conflict** error with the code `transfer.cancellation.not.allowed`.

For more information about transfer states, see [Tracking Transfers](/guides/product/send-money/tracking-transfers#transfer-statuses).
{% /admonition %}

## Path parameters

- `transferId` integer, required

## Headers

- `X-External-Correlation-Id` string, uuid

## Response `200`

Returns the cancelled transfer object, with or without an `originator` block depending on the type of transfer.

- union
  - Transfer
    - `id` integer — Transfer ID
    - `user` integer — Your user ID
    - `targetAccount` integer — Recipient account ID
    - `sourceAccount` integer, nullable — Refund recipient account ID
    - `quote` integer, nullable — V1 quote ID
    - `quoteUuid` string, uuid — V2 quote ID
    - `status` string — Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses.
    - `reference` string — Deprecated, use `details.reference` instead
    - `rate` number — Exchange rate value
    - `created` string, date-time — Timestamp when transfer was created
    - `business` integer, nullable — Your business profile ID
    - `transferRequest` integer, nullable — Deprecated
    - `details` object
      - `reference` string — Payment reference text
    - `hasActiveIssues` boolean — Are there any pending issues which stop executing the transfer?
    - `sourceCurrency` string — Source currency code
    - `sourceValue` number — Transfer amount in source currency
    - `targetCurrency` string — Target currency code
    - `targetValue` number — Transfer amount in target currency
    - `customerTransactionId` string, uuid — Unique identifier randomly generated per transfer request by the calling client
    - `payinSessionId` string, uuid — ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer
  - OriginatorTransfer
    - `id` integer — Transfer ID
    - `user` integer — Your user ID
    - `targetAccount` integer — Recipient account ID
    - `sourceAccount` integer, nullable — Refund recipient account ID
    - `quote` string — Quote ID
    - `status` string — Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses.
    - `reference` string — Deprecated, use `details.reference` instead
    - `rate` number — Exchange rate value
    - `created` string, date-time — Timestamp when transfer was created
    - `business` integer, nullable — Your business profile ID
    - `transferRequest` integer, nullable — Deprecated
    - `details` object
      - `reference` string — Payment reference text
    - `originator` object — Data block to capture payment originator details
      - `legalEntityType` 'PRIVATE' | 'BUSINESS' — Payment originator legal type
      - `reference` string — Unique customer ID in your system
      - `name` object
        - `givenName` string — Payment originator first name
        - `middleNames` string[] — Payment originator middle name(s)
        - `familyName` string — Payment originator family name
        - `patronymicName` string, nullable — Payment originator patronymic name
        - `fullName` string — Payment originator full legal name
      - `dateOfBirth` string, date — Payment originator date of birth
      - `businessRegistrationCode` string, nullable — Payment originator business registry or incorporation number
      - `address` object
        - `firstLine` string — Payment originator address first line
        - `city` string — Payment originator address city
        - `stateCode` string, nullable — Payment originator address state code
        - `countryCode` string — Payment originator address country code ISO 3166-1 alpha-2
        - `postCode` string — Payment originator address zip code
      - `accountDetails` string — Originator account number
    - `hasActiveIssues` boolean — Are there any pending issues which stop executing the transfer?
    - `sourceCurrency` string — Source currency code
    - `sourceValue` number — Transfer amount in source currency
    - `targetCurrency` string — Target currency code
    - `targetValue` number — Transfer amount in target currency
    - `originalTransferId` string — Unique identifier randomly generated per transfer request by the calling client
    - `payinSessionId` string, uuid — ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer

## Other responses

- `404` — Transfer not found.
- `409` — Transfer cannot be cancelled because it is in a non-cancellable state or has other restrictions. The error response will include the code `transfer.cancellation.not.allowed`.
- `429` — Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header.

---

[API](https://skmtc.net/wise/apis/platform-api.md) · [All operations](https://skmtc.net/wise/apis/platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/wise/platform-api/revisions/4907a1d269ab/schema)
