Sending a Global ACH

Overview

Let's assume you want to send money to a customer located in another country. You want to settle this payment cheaply, and you do not have a bank account domiciled in the country you are sending to. You can send a Global ACH payment by creating a cross_border type Payment Order from a bank account domiciled in the US to a supported foreign currency via the final settlement system the payment rail will be received in. Note that Global ACH does not support full-life cycle tracking of Returns and is credit only, unlike US ACH. In this guide, we will walk you through:

  • How to choose the right clearing rail subtype and understand the fields required
  • How to send a Global ACH payment

Choosing the right subtype

Before sending a Global ACH, you must determine the right settlement system for the payment you are planning on sending money to. This will depend on the desired settlement time of the currency and what our partner bank is capable of.

Note that depending on the region of the payment, you will need to include the appropriate purpose code along with the appropriate Counterparty address and External Account information to settle the payment. Here is a list of the regions currently supported and the information required to transact in them:

SubtypeReceiving CountryReceiving Account InformationPurpose Code
EFTCanadaRouting Number Type: CPA RoutingCPA Codes
NEFTIndiaRouting Number Type: IFSC CodeFETERS Payment Receipt Codes

🚧

Minumum Amounts

Contact your bank to understand the minimum amounts supported to transact within each subtype.

Example: Sending CAD via an EFT Cross Border Payment

This example will demonstrate how to send CAD to your counterparty via a Global ACH payment. For this example, let's assume that your originating account is setup to send payments with the cross_border payment type.

In this example, we're using the eft subtype to delineate that the EFT settlement rail will be used to settle this payment. This is required for Global ACH payments that need to be settled in Canada. Note that because this payment is settling in Canada we must provide a CPA Code in the purpose field. This is the API call.

Note that foreign_exchange_indicator is necessary to specify in which currency you would like to denominate the transacted amount in. Learn more about it here. In this example we are sending C$20 from a USD account so will delineate variable_to_fixed.

curl --request POST \
  -u ORGANIZATION_ID:API_KEY \
  --url https://app.moderntreasury.com/api/counterparties \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "cross_border",
    "subtype": "eft",
    "currency": "cad",
    "amount": 2000,
    "direction": "credit",
    "originating_account_id": "edefd193-c0bf-4d68-b123-d17eb21f500c",
    "receiving_account": {
      "party_name": "John Smith",
      "party_type": "individual",
      "party_address": {
        "line1": "200 Main Ave",
        "line2": "Suite 210",
        "locality": "Toronto",
        "region": "Ontario",
        "postal_code": "400054",
        "country": "CA"
      },
      "routing_details": [{
        "routing_number": "001000562",
        "routing_number_type": "ca_cpa"
      }],
      "account_details": [{
        "account_number": "0001007",
        "account_number_type": "other"
      }]
    },
    "foreign_exchange_indicator": "variable_to_fixed",
    "purpose": "350", 
  }'
{
    "id": "2bb6a37b-9b8c-4e1f-8c6d-d3a89bb2f6d0",
    "object": "payment_order",
    "type": "cross_border",
    "amount": 2000,
    "direction": "credit",
    "originating_account_id": "edefd193-c0bf-4d68-b123-d17eb21f500c",
    "receiving_account": {
        "id": "836c2e60-4c84-4f37-9f46-c11dd13ed8cc",
        "object": "external_account",
        "live_mode": false,
        "account_type": "other",
        "party_name": "John Smith",
        "party_type": "individual",
        "party_address": {
            "id": "c3e1fd34-fbe1-4378-afd7-f8bd24e8f062",
            "object": "address",
            "live_mode": false,
            "line1": "200 Main Ave",
            "line2": "Suite 210",
            "locality": "Toronto",
            "region": "Ontario",
            "postal_code": "400054",
            "country": "CA",
            "created_at": "2023-03-04T00:20:30Z",
            "updated_at": "2023-03-04T00:20:30Z"
        },
        "account_details": [
            {
                "id": "09eb778b-cdac-4128-9b29-30e5cd942fe4",
                "object": "account_detail",
                "live_mode": false,
                "account_number_safe": "1007",
                "account_number_type": "other",
                "discarded_at": null,
                "created_at": "2023-03-04T00:20:30Z",
                "updated_at": "2023-03-04T00:20:30Z"
            }
        ],
        "routing_details": [
            {
                "id": "3071677c-f665-4f9f-9574-e473365529ae",
                "object": "routing_detail",
                "live_mode": false,
                "payment_type": null,
                "routing_number": "001000562",
                "routing_number_type": "ca_cpa",
                "bank_name": "CANADIAN IMPERIAL BANK OF COMMERCE",
                "bank_address": {
                    "id": "e786f831-f849-4ddc-a282-85f0cb9a8fb1",
                    "object": "address",
                    "live_mode": false,
                    "line1": "1015 KING ST. W.",
                    "line2": null,
                    "locality": "HAMILTON",
                    "region": "ON",
                    "postal_code": "L8S 1L3",
                    "country": "CA",
                    "created_at": "2023-03-04T00:20:23Z",
                    "updated_at": "2023-03-04T00:20:23Z"
                },
                "discarded_at": null,
                "created_at": "2023-03-04T00:20:30Z",
                "updated_at": "2023-03-04T00:20:30Z"
            }
        ],
        "name": null,
        "metadata": {},
        "verification_status": "unverified",
        "contact_details": [],
        "discarded_at": null,
        "created_at": "2023-03-04T00:20:30Z",
        "updated_at": "2023-03-04T00:20:30Z"
    },
    "receiving_account_id": "836c2e60-4c84-4f37-9f46-c11dd13ed8cc",
    "receiving_account_type": "external_account",
    "currency": "CAD",
    "effective_date": "2023-03-04",
    "priority": "normal",
    "description": null,
    "statement_descriptor": null,
    "remittance_information": null,
    "metadata": {},
    "status": "needs_approval",
    "counterparty_id": null,
    "charge_bearer": null,
    "foreign_exchange_indicator": "variable_to_fixed",
    "foreign_exchange_contract": null,
    "transaction_monitoring_enabled": false,
    "originating_party_name": null,
    "ultimate_originating_party_name": null,
    "ultimate_originating_party_identifier": null,
    "ultimate_receiving_party_name": null,
    "ultimate_receiving_party_identifier": null,
    "created_at": "2023-03-04T00:20:30Z",
    "updated_at": "2023-03-04T00:20:30Z",
}

If you have additional account numbers or routing numbers for the counterparty, you may create multiple account details or routing details in the external account.