International Wire Cancellations

International wire transfers can be requested by originators to be canceled at any time. There is no deadline by which a transfer must be canceled.

Outgoing transfer cancellations

If you sent an outgoing transfer by mistake, you can request to cancel it via our Cancellation API to recall the funds. If Column has not submitted the transfer request to the Swift network yet, we will mark it as returned and full funds will be credited back to the originator account.

However, if Column has already submitted the transfer request to the Swift network, we will forward your cancellation request directly to the financial institution that is currently processing the transfer, which may be an intermediary bank or the beneficiary bank. It is up to them to decide if they should accept or reject your cancellation request.

If the funds have not been credited to the beneficiary account yet, it is very likely that your cancellation request will be accepted. Otherwise, the beneficiary bank will need to contact the beneficiary. If the beneficiary accepts your cancellation request, funds will be returned shortly. However, if your cancellation request is rejected by an intermediary bank, the beneficiary bank or the beneficiary, no funds will be returned.

Column sends webhook events when a cancellation request is submitted, rejected or accepted.

curl https://api.column.com/transfers/international-wire/swft_xxx/cancel' \
  -XPOST \
  -u :<YOUR API KEY> \
  -d cancellation_reason="requested_by_originator"

Cancellation Reasons

All supported cancellation reasons for outgoing transfers are listed at our Cancellation API. The cancellation_reason fields of international transfer objects store the enum strings in your cancellation API requests.

Example

The following is an example of outgoing transfer cancellation tracking (Read more), which was rejected by the beneficiary bank because the beneficiary refused to return the funds.

  1. Column sent USD 10.00 to LUMIILITXXX via our correspondent bank CHASUS33XXX
  2. Column sent a cancellation request of the above transfer
  3. The Swift Tracking system TRCKCHZZXXX forwarded the cancellation request to LUMIILITXXX
  4. LUMIILITXXX contact the beneficiary for authorization to return the transfer
  5. LUMIILITXXX completed the transfer and credited USD 10.00 to the beneficiary account because the beneficiary refused to return the funds
  6. The Swift Tracking system TRCKCHZZXXX notified Column that the cancellation request has been rejected.

Note: financial institutions have their own internal policies to handle cancellation requests. In this example, the beneficiary bank decided to contact the beneficiary even though the cancellation request was received before funds were credited to the beneficiary account.

{
  "cancellation_reason": "requested_by_originator",
  "cancellation_status": "rejected",
  "completed_amount": 1000,
  "completed_at": "2023-09-04T21:00:00Z",
  "completed_currency_code": "USD",
  "events": [
    {
      ...
      "instructed_amount": 1000,
      "instructed_currency_code": "USD",
      "instructed_fi": "CHASUS33XXX",
      "settled_amount": 1000,
      "settled_currency_code": "USD",
      "transfer_status": "pending",
      "transfer_status_reason": "Credit transfer has been forwarded to the next bank that provides tracking service",
      "type": "transfer_initiated",
      "updated_at": "2023-09-01T17:21:04Z",
      "updated_by": "CLNOUS66XXX"
    },
    {
      ...
      "instructed_amount": 1000,
      "instructed_currency_code": "USD",
      "instructed_fi": "LUMIILITXXX",
      "settled_amount": 1000,
      "settled_currency_code": "USD",
      "transfer_status": "pending",
      "transfer_status_reason": "Credit transfer has been forwarded to the next bank that provides tracking service",
      "type": "transfer_initiated",
      "updated_at": "2023-09-01T17:22:50Z",
      "updated_by": "CHASUS33XXX"
    },
    {
      ...
      "cancellation_reason": "cancellation requested by the Originator",
      "cancellation_status": null,
      "cancellation_status_reason": null,
      "type": "transfer_cancellation_requested",
      "updated_at": "2023-09-01T20:20:34Z",
      "updated_by": "CLNOUS66XXX"
    },
    {
      ...
      "cancellation_status_reason": "request sent to the tracking system and acknowledged",
      "type": "transfer_cancellation_tracking_updated",
      "updated_at": "2023-09-01T20:20:34Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_status_reason": "request added to cancellation list",
      "type": "transfer_cancellation_tracking_updated",
      "updated_at": "2023-09-01T20:20:34Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_reason": "cancellation requested by the Originator",
      "cancellation_status": null,
      "cancellation_status_reason": null,
      "type": "transfer_cancellation_requested",
      "updated_at": "2023-09-01T20:20:34Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_status_reason": "request forwarded to processing/last agent but delivery acknowledgement not received",
      "type": "transfer_cancellation_tracking_updated",
      "updated_at": "2023-09-01T20:20:34Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_status_reason": "request forwarded to processing/last agent and delivery acknowledgement received",
      "type": "transfer_cancellation_tracking_updated",
      "updated_at": "2023-09-01T20:21:51Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "pending",
      "cancellation_status_reason": null,
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-01T20:24:49Z",
      "updated_by": "CHASUS33XXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "pending",
      "cancellation_status_reason": null,
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-01T20:24:49Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "pending",
      "cancellation_status_reason": "beneficiary authorization is required to return the payment",
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-01T20:27:34Z",
      "updated_by": "CHASUS33XXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "pending",
      "cancellation_status_reason": "beneficiary authorization is required to return the payment",
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-01T20:27:34Z",
      "updated_by": "TRCKCHZZXXX"
    },
    {
      ...
      "settled_amount": 1000,
      "settled_currency_code": "USD",
      "transfer_status": "completed",
      "type": "transfer_updated",
      "updated_at": "2023-09-03T04:38:33Z",
      "updated_by": "LUMIILITXXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "rejected",
      "cancellation_status_reason": "a financial institution refuses to cancel",
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-04T17:21:49Z",
      "updated_by": "CHASUS33XXX"
    },
    {
      ...
      "cancellation_reason": null,
      "cancellation_status": "rejected",
      "cancellation_status_reason": "a financial institution refuses to cancel",
      "type": "transfer_cancellation_responded",
      "updated_at": "2023-09-04T17:21:49Z",
      "updated_by": "TRCKCHZZXXX"
    }
  ],
  ...
  "transfer_status": "completed",
  "transfer_status_reason": null,
  "updated_at": "2023-09-04T17:21:49Z"
}

Incoming transfer cancellations

When Column receives a cancellation request for an incoming transfer, we will send you a swift.incoming_transfer.cancellation_requested webhook event. If you want to accept the cancellation request, you just need to call our Return API to return the funds by specifying cancellation_requested as the return reason. If you want to reject the cancellation request, please just ignore it. We will reject it on your behalf after its deadline (11 calendar days).

Note: Column will never automatically accept any incoming cancellation requests, even if cancellation requests are received before funds are credited to their beneficiary accounts.

curl https://api.column.com/transfers/international-wire/swft_xxx/return' \
  -XPOST \
  -u :<YOUR API KEY> \
  -d return_reason="cancellation_requested"

Cancellation Reasons

Originating financial institutions of incoming transfers may request cancellations via two possible options:

  • Swift service messages: the cancellation_reason fields of incoming transfer objects will be free text format. Tracking information of cancellations may not be available in this case.
  • Swift tracking system: the cancellation_reason fields of incoming transfer objects will be of format <4-char code>: <description>. Tracking information of cancellations will be available. All possible cancellation reasons:
    • AGNT: a financial institution in the payment workflow is incorrect
    • AM09: amount of the payment is incorrect
    • COVR: cover payment has been canceled or returned
    • CURR: currency of the payment is incorrect
    • CUST: cancellation requested by the Originator
    • CUTA: an investigation request has been received and no remediation is possible
    • DUPL: payment is a duplicate of another payment
    • FRAD: original transaction was originated fraudulently
    • TECH: technical problems resulted in an erroneous transaction
    • UPAY: payment is not justified (missing critical information)