Originate a Global ACH payment

Send a payment using Global ACH to settle on local rails

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 local clearing system for the target region/currency. 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 cross_border subtype

Before sending a Global ACH, you must determine the country corridor for the payment you are planning on sending money to and it's corresponding local settlement system. 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:

Local Settlement SystemCurrencyReceiving RegionSubtypeReceiving Account TypeReceiving Routing TypePurpose Code
AU BECSAUDAustraliaau_becsLocal Account Number (other)AU BSB (au_bsb)

(Goldmans Sachs will require an additional Swift (swift) routing type)
N/A
CCENMXNMexicomx_ccenCLABE Number (clabe)N/AN/A
CHATSHKDHong
Kong
chatsHK Number hk_number in the format aaaaaa-xxx)

(Citi will also accept Local Account Number (other) without dashes)
Hong Kong Interbank Clearing Code (hk_interbank_clearing_code)

(SVB will require an additional Swift (swift) routing type)
Varies by financial institution
Danish Interbank Clearing SystemDKKDenmarkdk_netsLocal Account Number (other)

(SVB will require IBAN (iban))
Danish Interbank Clearing Code (dk_interbank_clearing_code)

(SVB will alternatively require a SWIFT (swift))
Varies by financial institution
EFTCADCanadaeftLocal Account Number (other)CPA Routing (ca_cpa)

(Goldmans Sachs will require an additional Swift (swift) routing type)
CPA Codes
ELIXIRPLNPolandpl_elixirIBAN (iban)N/A for Citi. SVB will require Swift (swift)N/A
GB BACSGBPUnited KingdombacsLocal Account Number (other)GB Sort Code (gb_sort_code)

(Goldmans Sachs will require an additional Swift (swift) routing type)
N/A
GIROSGDSingaporesg_giroLocal Account Number (other)SWIFT (swift)Varies by financial institution
Hungarian Interbank Clearing SystemHUFHungaryhu_icsLocal Account Number (other)Hungarian Interbank Clearing Code (hu_interbank_clearing_code)N/A
JP ZenginJPYJapanzenginLocal Account Number (other)Zengin Code (jp_zengin_code)

(Goldmans Sachs will require an additional Swift (swift) routing type)
ISO Purpose Codes (Except for ISGDDS)
MASAVILSIsraelmasavIBAN (iban)SWIFT (swift)
NEFTINRIndianeftLocal Account Number (other)IFSC Code (in_ifsc)FETERS Payment Receipt Codes
NICSNOKNorwaynicsIBAN (iban)SWIFT (swift)N/A
NZ BECSNZDNew Zealandnz_becsLocal Account Number (other)New Zealand National Clearing Code (nz_national_clearing_code)

(Goldmans Sachs will require an additional Swift (swift) routing type)
N/A
SENTRONRomaniaro_sentIBAN (iban)SWIFT (swift)N/A
SEPAEURSEPA Zone (Europe)sepaIBAN (iban)SWIFT (swift)N/A
SICCHFSwitzerlandsicIBAN (iban)SWIFT (swift)
SKBNIIDRIndonesiasknbiLocal Account Number (other)Indonesian SKNBI Code (id_sknbi_code)N/A
Swedish BankgirotSEKSwedense_bankgirotIBAN(iban)Swedish Bankgiro Code (se_bankgiro_clearing_code)

(Goldmans Sachs will require an additional Swift (swift) routing type)

(SVB will require just a Swift (swift) routing type)
N/A

🚧

Minimum Amounts

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

Payments that require IDs

Some countries require taxpayer ID numbers as part of the payment instruction sent to the bank.

CountryCurrencyRequired IDs
BrazilBRLFor individuals - Brazilian CPF (br_cpf)
For businesses - Brazilian CNPJ (br_cnpj)

You can now create Legal Entities to store these international taxpayer IDs. Here is the API guide.

Choosing the right FX indicator

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. Depending on your bank you may transact in one or both indicator types.

BankFixed-to-VariableVariable-to-Fixed
SVBNoYes
JPMCYesYes
Goldman SachsYesYes

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.

In this example we are sending C$20 from a USD account so will delineate variable_to_fixed as the foreign_exchange_indicator.

curl --request POST \
  -u ORGANIZATION_ID:API_KEY \
  --url https://app.moderntreasury.com/api/payment_orders \
  -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.

Appendix

ISO Purpose Codes

Purpose of Payment CodesDescription
EPFAMTFamily maintenance
ISSCVEPurchase/sale of services
ISSTDYPayment of study/tuition costs
ISSALAPayment of salary
ISCOMMTransaction is payment of commission
ISACCTTransaction moves funds between 2 accounts of same account holder
ISINVSTransaction if for the payment of mutual funds, investment products and shares
ISISNMPayment of installment
EPLIEXLiving expenses
ISAIRBPayment for air transport related business
ISBEXPBusiness expenses
ISBLDMPayment associated with building maintenance
ISDIVDTransaction is payment of dividends
ISMDCSPayment for medical services
ISRENTPayment of rent
ISPENSPension payment