API guide — Wire transfer lifecycle: initiation, monitoring, and completion

Before you start

This guide walks you through an example of usage of the Memo Bank API – initiate and track a wire transfer.

📑 For an in-depth understanding of the Memo Bank API resources and how you can interact with them, take a tour of our Memo Bank API Reference.

API authentication and signature

Each request to the Memo Bank API must be authenticated. See on API Reference | Getting started how to create and manage your API credentials, create and sign your authentication token.

Setup your webhooks

Memo Bank uses webhooks to inform your system on mandate statuses. Understanding how our webhooks function is essential for tracking the status of a transfer and managing any necessary follow-up after execution.

📑 Follow the API Reference | Webhooks to configure them for your API application and find all the details on the webhooks events structure.

Wire transfers lifecycle

The wire_transfers API resource is used for international wire transfers going through Swiftnet. Their lifecycle can be summarized as follows:

  • Transfer initiation. A transfer is initiated by the API client, i.e. your application. The transfer is verified and acknowledged by Memo Bank, or rejected if our checks fail.
  • Transfer execution. Transfers management is regulated by Swift for all participating banks.

Wire transfers are executed immediately, but they may need a few days before they are confirmed by the recipient bank. Your application should consider a transfer as done only at this stage.

Transfers can be rejected or returned. Memo Bank may reject a transfer in some specific cases or banks can return it before it is credited to your counterparty.

1. Initiate a wire transfer: hands on

You can initiate a Wire transfer to Japan Bob from a given account with a POST to /wire_transfers .

POST /v2/wire_transfers HTTP/1.1
Authorization: Bearer ***

{
  "instructed_amount": 105050,
  "instructed_currency": "JPY",
  "local_iban": "FR7617338000010109143651430",
  "beneficiary": {
	"name": "Japan Bob",
    "account_identifier": {
      "type": "account_number_and_bic",
      "account_number": "654987",
      "bic": "AEONJPJT"
    },
	"bank_country": "JP",
	"address": {
      "street": "Test Street",
      "postal_code": "75008",
      "city": "Tokyo",
      "country": "JP"
    },
	"type":"person"
  },
  "purpose": "goods_purchase",
  "message": "This is a reference message",
  "internal_note": "This is my internal note",
  "custom_id": "202504111631",
  "custom_metadata": "{'key':'value'}"
}

The local_iban links to the account or the virtual IBAN from which the transfer amount will be debited.

Depending on the destination bank and country, specific account identifiers are required. Check our API documentation for detailed information on the supported identifiers and their applicability.

You will need to add a message to share with the transfer beneficiary bank. We recommend to use a meaningful message of at least 10 chars to mitigate the risk of delay or return by the recipient bank.

Finally, you may want to include a custom_id and/or custom_metadata . These values are not shared with the beneficiary bank and are only used for your own purposes.

If the previous POST request is accepted by Memo Bank, your system will receive a response similar to the example below:

HTTP 200 OK

{
	"id": "38f8b0de-0d7b-45fc-9038-e39b6009c7c1",
	"reference": "6fcab94a-830d-343e-80ae-53b37b5605ea",
	"instructed_amount": 105050,
	"instructed_currency": "JPY",
	"local_iban": "FR7617338000010109143651430",
	"beneficiary_account_identifier": {
		"type": "account_number_and_bic",
		"account_number": "654987",
		"bic": "AEONJPJT"
	},
	"message": "This is a reference message",
	"internal_note": "This is my internal note",
	"custom_id": "080420251631",
	"custom_metadata": "{'key': 'value'}",
	"status": "pending"
}

The Memo Bank response contains a representation of your transfer request state.

  • The 200 OK response code indicates that Memo Bank acknowledges your transfer initiation request.
  • The "status": "pending" indicates that it is about to be processed.

The id is a unique value that will allows you to keep track of the transfer status all along its lifecycle.

📑 See the API documentation to have the full list of fields representing a transfer.

2. Transfer lifecycle follow-up

We encourage you to setup a webhooks URL to receive status updates for your initiated wire transfers in real time.

POST your/webhook.uri HTTP 1.1

{
  "id": "ad8340e7-0675-4182-9c95-520e7c9a72a3",
  "date": "2025-04-11T15:30:00+00:00",
  "event_type": "wire_transfer_confirmed",
  "resource_type": "wire_transfer",
  "resource_id": "38f8b0de-0d7b-45fc-9038-e39b6009c7c1"
}

The resource_id allows you to understand which transfer a webhook notification refers to.

Once a transfer has been correctly executed by Memo Bank, your will receive a notification of type wire_transfer and "event_type": "wire_transfer_confirmed" .

wire transfer lifecyle

You can now consider the transfer as done.

Find more details about the webhooks events structure in the API Reference | Webhooks.

GET wire transfer details

You can retrieve the same information, as well as additional data using GET /wire_transfers/<transfer-id> . Following the example above, we will now get the details of 38f8b0de-0d7b-45fc-9038-e39b6009c7c1 .

Polling strategy is not recommended. Use webhooks to eliminate the overhead of periodic requests and enable asynchronous, event-driven notifications of transfers status changes.

GET /v2/transfers/38f8b0de-0d7b-45fc-9038-e39b6009c7c1 HTTP/1.1
Authorization: Bearer ***

HTTP 200 OK 

{
	"id": "38f8b0de-0d7b-45fc-9038-e39b6009c7c1",
	"reference": "6fcab94a-830d-343e-80ae-53b37b5605ea",
	"instructed_amount": 105050,
	"instructed_currency": "JPY",
	"account_id": "cd09799d-2475-4d31-8bd2-11c104733258",
	"local_iban": "FR7617338000010109143651430",
	"beneficiary_account_identifier": {
		"type": "account_number_and_bic",
		"account_number": "654987",
		"bic": "AEONJPJT"
	},
	"message": "This is a reference message",
	"internal_note": "This is my internal note",
	"uetr": "daae753e-8f76-48ba-bde0-4e365a845b74",
	"custom_id": "080420251631",
	"custom_metadata": "{'key': 'value'}",
	"status": "confirmed"
}

The uetr fields contains the Unique End-to-end Transaction Reference. It is featured in all payment instruction messages carried over Swift, and can be shared with your counterparties to track the transfer status.

Create a mandatory attachment

Under certains conditions, a supporting document may be required before the transfer can be executed. In these cases, a wire_transfer_attachment_required webhook will be sent by Memo Bank upon transfer initiation.

Use the wire_transfers/{id}/attachments endpoint to create an attachment for a given wire transfer, so that the transfer can be automatically unblocked.

Errors and idempotency

A transfer may be rejected if there is any issue with your request, or it can fail in case of network issues. It is very important to follow the API idempotency strategy to safely retry failed requests without accidentally performing the same operation twice. We encourage you to have this implemented as a precondition to production rollout.

Going further

Please refer to our functional help pages to understand the countries and currencies supported by Memo Bank. You can also refer to our FAQs for more information.