International Wire Tracking
International wire transfers are notoriously difficult to track status updates. Unlike domestic wire transfers that are sent directly from originating banks to beneficiary banks, international wire routing usually involve one or multiple intermediary banks. Both intermediary banks and the beneficiary bank of an international wire transfer may delay transfer request processing due to their operation guidance, holiday schedules, etc.
In addition, intermediary banks or beneficiary banks may fail to process transfer requests and have to return funds back to originating banks, resulting further delays. Therefore, international wire transfers may take several days or even weeks for beneficiaries and originators to receive their funds. Also, intermediary banks and beneficiary banks may charge processing fees. As a result, funds received by beneficiaries may be less than funds sent by originators.
In order to better understand current statuses of international transfers, Column provides the Tracking API for you to get routing details, charges, and other information of international wires.
Note
TRCKCHZZXXX
is the BIC of the Swift Tracking system, which will process and forward all tracking update messages. In addition, some financial institutions have not integrated with the Swift Tracking system directly, or may have integrated via some other message systems. In such cases, TRCKCHZZXXX
will update tracking statuses on their behalf. Therefore, you may see tracking updates from TRCKCHZZXXX
even though it is not involved in the actually routing of transfer messages.
In addition, some financial institutions may report tracking updates from BICs that are different from the BICs in transfer request messages. For example, CIBKCNBJXXX
may report tracking updates on behalf of transfer requests to CIBKCNBJ430
.
Internal status and tracking status
Each international wire transfer object has two statuses:
- Internal status: this status is used inside the Column system, available as
status
in Transfer Object. It provides more granular transfer updates posted by the Column system until a transfer is sent to the correspondent bank. Once a transfer is settled between Column and the correspondent bank, it is marked ascompleted
. - Tracking status: this status is used to track global routing status inside the Swift system, available as
transfer_status
in Tracking Object. If a beneficiary bank successfully processed a transfer request and credited to the beneficiary account, it is marked ascompleted
. If the beneficiary bank rejected the transfer request, it is marked asrejected
. Before that it is always marked aspending
.
Outgoing transfer tracking
Suppose you sent USD 519.74
to a beneficiary account with ARMIAM22
, and it was routed to the beneficiary bank as follows:
- Column sent
USD 519.74
to our correspondent bankCHASUS33
. CHASUS33
found the correspondent bank forARMIAM22
isCITIUS33
. So the transfer request was forwarded toCITIUS33
.CITIUS33
chargedUSD 10.00
as its processing fee, and forwardedUSD 509.74
toARMIAM22
.ARMIAM22
processed the transfer request successfully and creditedUSD 509.74
to the beneficiary account.
The details of the outgoing transfer object and tracking object will be as follows.
Outgoing transfer object
{
...
"amount": 51974,
"charge_bearer": "SHAR",
"charges": [
{
"agent": "",
"amount": 1000,
"currency_code": "USD"
}
],
"instructed_amount": 51974,
"instructed_currency_code": "USD",
"intermediary_fis": [
"CHASUS33",
"CITIUS33"
],
"settled_amount": 51974,
"settled_currency_code": "USD",
...
}
Outgoing transfer tracking details
{
...
"completed_at": "2023-08-23T14:08:00Z",
"events": [
{
...
"instructed_amount": 51974,
"instructed_currency_code": "USD",
"settled_amount": 51974,
"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-08-23T14:02:35Z",
"updated_by": "CLNOUS66XXX"
},
{
...
"instructed_amount": null,
"instructed_currency_code": null,
"settled_amount": 51974,
"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_updated",
"updated_at": "2023-08-23T14:04:00Z",
"updated_by": "CHASUS33XXX"
},
{
...
"charges": [
{
"agent": "",
"amount": 1000,
"currency_code": "USD"
}
],
"instructed_amount": 51974,
"instructed_currency_code": "USD",
"settled_amount": 50974,
"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-08-23T14:05:03Z",
"updated_by": "CITIUS33XXX"
},
{
...
"charges": [
{
"agent": "",
"amount": 1000,
"currency_code": "USD"
},
{
"agent": "",
"amount": 0,
"currency_code": "USD"
}
],
"settled_amount": 50974,
"settled_currency_code": "USD",
"transfer_status": "completed",
"transfer_status_reason": null,
"type": "transfer_updated",
"updated_at": "2023-08-23T14:13:33Z",
"updated_by": "ARMIAM22XXX"
}
],
"transfer_status": "completed",
...
}
Incoming transfer tracking
Incoming transfer tracking are very similar to outgoing transfer tracking. Suppose POALILIT
sent USD 16,747.35
to a beneficiary account in your platform, and it was routed to Column as follows:
POALILIT
sentUSD 16,747.35
to its correspondent bankCHASUS33
.- Since
CHASUS33
is our correspondent bank as well, so it can forward the transfer request to Column directly. However, it chargedUSD 30.00
as the processing fee, and sentUSD 16,717.35
to Column. - Column successfully processed the transfer request and credited
USD 16,717.35
to the beneficiary account.
The details of the incoming transfer object and tracking object will be as follows.
Incoming transfer object
{
...
"amount": 1671735,
"charge_bearer": "SHAR",
"charges": [
{
"agent": "CHASUS33XXX",
"amount": 3000,
"currency_code": "USD"
}
],
"instructed_amount": 1674735,
"instructed_currency_code": "USD",
"intermediary_fis": [
"CHASUS33"
],
"settled_amount": 1671735,
"settled_currency_code": "USD",
...
}
Incoming transfer tracking object
{
...
"completed_at": "2023-08-23T12:17:50Z",
"events": [
{
...
"instructed_amount": 1674735,
"instructed_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-08-22T12:56:03Z",
"updated_by": "POALILITXXX"
},
{
...
"charges": [
{
"agent": "CHASUS33XXX",
"amount": 3000,
"currency_code": "USD"
}
],
"instructed_amount": 1674735,
"instructed_currency_code": "USD",
"settled_amount": 1671735,
"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-08-23T00:38:48Z",
"updated_by": "CHASUS33XXX"
},
{
...
"settled_amount": 1671735,
"settled_currency_code": "USD",
"transfer_status": "completed",
"transfer_status_reason": null,
"type": "transfer_updated",
"updated_at": "2023-08-23T12:20:18Z",
"updated_by": "CLNOUS66"
}
],
"transfer_status": "completed",
...
}
Note
You can track incoming international wire transfers to Column even before we receive them by using their UETRs. This is very helpful if some incoming transfers are taking longer than expected because they are delayed or rejected by intermediary banks.
Cover transfers
Routing of an international wire transfer usually involves multiple hops from the originating bank to the beneficiary bank, and each hop involves two banks: the instructing bank and the instructed bank. Ideally, when the instructing bank forwards a transfer request message to the instructed bank, funds will be settled between them directly.
However, this will not be what usually happen in reality. Sometimes the instructing bank and the instructed bank do not have a direct correspondent relationship established, and thus they cannot settle funds directly. Instead, they must each involve their own correspondent banks in order to settle the funds. In such cases, after the instructing bank forwarded a customer transfer request to the instructed bank, it will send another cover transfer to its correspondent bank, which will really move the funds. The cover transfer says to its correspondent bank: "Please debit my account that you hold and credit the instructed bank's account with its correspondent."
Note that the correspondent banks of the instructing and instructed banks may be located in the same country or monetary zone. So this cover transfer may go through a local clearing system and not through the Swift network.
Our international wire tracking API provides update events of cover transfers in addition to update events of their corresponding customer transfers, and they are indicated with is_cover_transfer_event = true
. Although cover transfer events will not impact statues of customer transfers directly, they provide more granular details. For example, sometimes the beneficiary bank of a customer transfer will report "Credit to the beneficiary's account is pending as status Originator is waiting for funds provided via a cover". Even after funds are settled via a cover transfer, the beneficiary bank may not update the transfer status because it may take them several days to process it due to holidays or internal policies. In such case, our tracking API will return a cover transfer event that shows the beneficiary bank has received the funds, but not credited to the beneficiary account yet.
The following is an example of outgoing transfers involving funds cover transfers:
- Column sent
USD 15.00
toCIBKCNBJ430
via our correspondent bankCHASUS33XXX
CIBKCNBJXXX
reported on behalf ofCIBKCNBJ430
that the transfer request has been received, but cannot be processed until funds are settled via a cover transfer because it has no direct corresponding relationship withCHASUS33XXX
CHASUS33XXX
sent the cover transfer toCIBKCNBJ430
CIBKCNBJXXX
reported on behalf ofCIBKCNBJ430
that the cover transfer has been receivedCIBKCNBJXXX
reported on behalf ofCIBKCNBJ430
that the transfer has been completed and credited to the beneficiary account
{
...
"completed_amount": 1500,
"completed_at": "2023-08-29T01:54:00Z",
"completed_currency_code": "USD",
"events": [
{
...
"instructed_amount": 1500,
"instructed_currency_code": "USD",
"instructed_fi": "CHASUS33XXX",
"is_cover_transfer_event": false,
"settled_amount": 1500,
"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-08-22T04:01:03Z",
"updated_by": "CLNOUS66XXX"
},
{
...
"instructed_amount": 1500,
"instructed_currency_code": "USD",
"instructed_fi": "CIBKCNBJ430",
"is_cover_transfer_event": false,
"settled_amount": 1500,
"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-08-22T10:31:01Z",
"updated_by": "CHASUS33XXX"
},
{
...,
"is_cover_transfer_event": false,
"transfer_status": "pending",
"transfer_status_reason": "Credit to the beneficiary's account is pending as status Originator is waiting for funds provided via a cover",
"type": "transfer_updated",
"updated_at": "2023-08-22T10:31:21Z",
"updated_by": "CIBKCNBJXXX"
},
{
...
"instructed_amount": 1500,
"instructed_currency_code": "USD",
"instructed_fi": "CIBKCNBJXXX",
"is_cover_transfer_event": true,
"settled_amount": 1500,
"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_cover_initiated",
"updated_at": "2023-08-22T10:31:33Z",
"updated_by": "CHASUS33XXX"
},
{
...
"is_cover_transfer_event": true,
"settled_amount": 1500,
"settled_currency_code": "USD",
"transfer_status": "completed",
"type": "transfer_cover_updated",
"updated_at": "2023-08-22T10:31:21Z",
"updated_by": "CIBKCNBJXXX"
},
{
...
"is_cover_transfer_event": false,
"settled_amount": 1500,
"settled_currency_code": "USD",
"transfer_status": "completed",
"type": "transfer_updated",
"updated_at": "2023-08-29T01:55:04Z",
"updated_by": "CIBKCNBJXXX"
}
],
...
"transfer_status": "completed",
"updated_at": "2023-08-29T01:55:04Z"
}