Skip to main content
Embedded Payments

Initiate transfers and fund your client’s account

Depending on the way you operate your Embedded Payments solution, you may need to facilitate transfers to your client’s external bank account. This means you must make either one or two transfers to allocate funds to your client’s account. If your client has a LIMITED_DDA_PAYMENTS account, your client or another party can also fund their account using their externally addressable account number.

This process depends on whether you already have a Treasury account—any J.P. Morgan account for your organization that has been confirmed as usable for Embedded Payments—and whether you intend to also use a Processing account—a J.P. Morgan account provided to your organization for the specific use of processing transactions in Embedded Payments.

If you have a Processing Account, you must:

  • Transfer Funds from Your Platform's Treasury Account: Initiate transfers from your platform's Treasury account into your Processing account.
  • Transfer Funds from Your Platform's Processing Account: Move funds from your platform's Processing account into your client's Limited DDA or LIMITED_DDA_PAYMENTS account.

If you do not have a processing account, you can:

  • Transfer Funds from Your Platform's Treasury Account: Directly transfer funds from your platform's Treasury account into your client's Limited DDA or LIMITED_DDA_PAYMENTS account.

This process allows you to control when funds are made available to your client, giving them the flexibility to manage their finances effectively. For example, if your client receives payments in stages, you can move the funds to their Embedded Payment account as soon as your process dictates. 

Transfer funds from your Treasury account to your Processing account

Use the /v2/transactions resource to make a TRANSFER transaction from your treasury account to your processing account.

  1. Get the account ID for your Treasury Account and Processing Account with a request to GET /accounts to list all your accounts.
  2. Use the ID in the account object of the account with “category”: “DDA” for Treasury Account and “category”: PROCESSING for Processing Account.

Use the /v2/transactions resource to make a TRANSFER transaction from your treasury account to your processing account. Your request must include:

  • Your Treasury account ID as the debtorAccountId.
  • Your Processing account ID as the creditorAccountId.
  • A  transactionReferenceId. This is a unique ID generated by you and can be used for your own records. 

Sample request:

Sample request
{
   "transactionReferenceId": "hdsads12334",
   "amount": 30.88,
   "currency": "USD",
   "type": "TRANSFER",
   "debtorAccountId": "yuhf3da9ec6e492f8e35bc3edfb98920",
   "creditorAccountId": "8d5c3da9ec6e492f8e35bc3edfb92942"
}

Add funds to your Processing account from an external source

To fund your processing account from a different bank account:

  1. Get the addressable account number for your Processing account with a request to GET /accounts to list all your accounts.
  2.  Use the accountNumber in the paymentRoutingInformation object of the account with “category”: “PROCESSING”.
  3. If you are transferring funds via ACH payment, use routing number 028000024. If you are transferring funds via wire payment, use routing number 021000021.

Draw commissions

At this stage, if you need to hold back funds or take a commission from this transaction, you should do this now. 

To take commission or fees related to your commerce activities, you can transfer funds from your Processing account to your Treasury account.

Use the /v2/transactions resource to make a TRANSFER transaction from your treasury account to your processing account. Your request must include:

  • Processing account to your Treasury account.
  • Processing account to your Management account
  • Limited_DDA account to your Management Account
  • Limited_DDA_Payment account to your Management Account
  • Limited_DDA account to your Treasury Account
  • Limited_DDA_Payments account to your Treasury Account 

Use the /v2/transactions resource to make a TRANSFER transaction from your account or your client account to your Treasury account. Your request must include:

  • Your or your client's account ID as the debtorAccountId.
  • Your Treasury account ID as the creditorAccountId.
  • A  transactionReferenceId. This is a unique ID generated by you and can be used for your own records. 

Transfer funds to your client's Embedded Payments account

Transferring funds to your client’s account will have different implications based on their account type. Funds held in a LIMITED_DDA account are not immediately available to clients.  Your platform maintains security interest over these funds until the platform is ready to settle to an account in the client’s control.

Funds held in a LIMITED_DDA_Payments account are immediately available to the client.  This account can accept inbound funds from your platform and via an externally addressable account number.  This account can be used by your clients to settle to an account in your clients’ control, or for your client to make a business related payment. Use the /v2/transactions resource to make a TRANSFER transaction from your account to your clients Embedded Payments account.

To transfer funds to your client's account:

  1. Use GET /clients/{id} to return your client's profile, including the accounts allocated to them.
  2. Use GET /accounts to list accounts and get the account ID into which to make the transfer.
  3. Use POST /v2/transactions to make a TRANSFER transaction from your Embedded Payments account to your client's Embedded Payments account. Your request must include:
    • Your account ID as the debtorAccountId.
    • Your client's Embedded Payments account ID as the creditorAccountId.
    • A  transactionReferenceId.

Sample request:

Sample request
{
"transactionReferenceId": "123abc",
"amount": 3100,
"currency": "USD",
"type": "TRANSFER",
"debtorAccountId": "8d5c3da9ec6e492f8e35bc3edfb92942",
"creditorAccountId": "d5aaf0db11e747daa2d955806f6eb14e"
}

Enable your client and others to add funds to your client’s account from an external source

Account types LIMITED_DDA_PAYMENTS can be funded from sources other than your platform and your platform’s Processing Account. To enable your client and others to add funds to your client’s account, you need to make your client aware of the externally addressable account and routing number.

Steps to obtain addressable account information:

  1. Retrieve Account Details: Get the addressable account number for your client’s LIMITED_DDA_PAYMENTS account by making a request to GET /accounts/{id}. This will provide the necessary account details, including the paymentRoutingInformation.
  2. Locate Account Number: Use the accountNumber found in the paymentRoutingInformation object of the account with "category": "LIMITED_DDA_PAYMENTS".
  3. Routing Numbers for Fund Transfers:
    • ACH Payments: For transferring funds via ACH payment, use the routing number 028000024.
    • Wire Payments: For transferring funds via wire payment, use the routing number 021000021.
    • Wire & RTP Payments: for transferring funds via wire and RTP, use the routing number 021000021.

Request an ACH Direct Debit

As a platform, you may want the ability to issue a direct debit from your processing account to pull funds from an external account, such as collecting recurring fees, or from a linked account, such as recouping funds from processing chargebacks.

How it works

To request a direct debit transaction, use POST v2/transactions.

In your request, you need to include:

  • type (string): The type of transaction. For these transactions, this value must always be “ACH.”
  • amount (decimal): The amount of money to be paid in the transaction.
  • currency (string): The currency used in the transaction. Should be set to "USD", if provided.
  • recipientId (string): The recipient ID of the recipient you would like to debit funds from, such as linked account or external account. 
  • transactionReferenceId (string): Your reference number for this transaction. It must be unique for every payment.
  • creditorAccountId (string): The ID of the account where the funds are to be credited.

To initiate a request, use POST /transactions.
Sample request body:

{
  "type": "ACH",
  "amount": "1.25",
  "currency": "USD",
  "transactionReferenceId": "1762189959",
  "recipientId": "616d93a1-ce53-4c71-b03b-02a11396db28",
  "creditorAccountId": "adpro765e14741c5a44acc570af517ab"
}

Sample response body:

{
  "id": "AEOaOUObYhOEydC",
  "transactionReferenceId": "1762189959",
  "status": "COMPLETED",
  "type": "ACH",
  "debtorAccountId": null,
  "creditorAccountId": "adpro765e14741c5a44acc570af517ab",
  "amount": 1.25,
  "currency": "USD",
  "localInstrumentCode": "WEB",
  "createdAt": "2025-11-03T17:12:41Z",
  "targetCurrency": "null",
  "targetAmount": null,
  "recipientId": "616d93a1-ce53-4c71-b03b-02a11396db28",
  "memo": null,
  "fxInformation": null,
  "debtorName": "Monica Geller",
  "creditorName": "",
  "debtorAccountNumber": "...9492",
  "creditorAccountNumber": "...6483",
  "paymentDate": null
}

You can alternatively use the recipient information block if the recipient ID is not available to issue a direct debit.

Sample request body:

{
  "type": "ACH",
  "amount": "1.25",
  "currency": "USD",
  "transactionReferenceId": "1762189959",
  "recipient":
    {
      "clientId": "1000010400",
      "recipientType": "INDIVIDUAL",
      "firstName": "Monica",
      "lastName": "Gellar",
      "account": {
        "number": "182119492",
        "type": "CHECKING",
        "countryCode": "US",
        "routingInformation": [
          {
            "routingNumber": "541798298",
            "transactionType": "ACH",
            "routingCodeType": "USABA"
          }
        ]
      },
      "accountType": "LINKED_ACCOUNT"
    },
  "creditorAccountId": "adpro765e14741c5a44acc570af517ab"
}