Skip to main content
Beta version available

The Global Payments 2 API is currently available in beta. Contact our team to start your integration process.

Global Payments

Initiate a Real-Time Payments request

In this tutorial, you'll learn how to use the Global Payments API to initiate a Real-Time Payments (RTP) request for several common use cases. By the end of this tutorial, you'll know how to:

  • Create a well-formed RTP request payload
  • Interpret a successful response

Before you begin

To retrieve the status of an RTP request, you will need the following:

  • A registered and fully onboarded developer account on the J.P. Morgan Payments Developer Portal.
  • An active project that provides you with the credentials used to make a request.
  • A bank account configured for each country where you want to perform an RTP transaction.

Create and send an RTP request

RTP request payloads may vary depending on the use case. In this step, you’ll learn how to create and send RTP requests for vendor payments, wallet withdrawals and drawdowns, and merchant payouts.

Tip

RTP requests for the Global Payments API have different required payment parameters depending on the region. The following examples show the minimum required fields for the United States.

Vendor payments

Use RTP to pay vendors for goods and services and reduce costly follow-ups. The following shows an example for a vendor payment in the United States:

POST /tsapi/v1/payments HTTP/1.1
Json
{
  "payments": {
    "paymentIdentifiers": {
      "endToEndId": "pl210g9t231r13541130"
    },
    "requestedExecutionDate": "2022-10-15",
    "transferType": "CREDIT",
    "paymentType": "RTP",
    "paymentCurrency": "USD",
    "paymentAmount": 500,
    "debtor": {
      "debtorName": "John Doe",
      "debtorAccount": {
        "accountId": "000678901234567",
        "accountType": "DDA"
      },
      "ultimateDebtor": {
        "ultimateDebtorName": "Jane Smith",
        "postalAddress": {
          "addressType": "ADDR",
          "streetName": "Fantasy Lane",
          "buildingNumber": "9999",
          "postalCode": "99999",
          "townName": "Imaginary City",
          "country": "US",
          "countrySubDvsn": "ZZ"
        },
        "dateAndPlaceOfBirth": {
          "birthDate": "1984-01-01",
          "cityOfBirth": "Hull city",
          "countryOfBirth": "BR"
        },
        "individualId": {
          "id": "001"
        }
      }
    },
    "debtorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "021000021",
          "idType": "USABA"
        }
      }
    },
    "creditorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "071000013",
          "idType": "USABA"
        }
      }
    },
    "creditor": {
      "creditorName": "Jane Doe",
      "postalAddress": {
        "addressType": "ADDR",
        "streetName": "Maple Avenue",
        "buildingNumber": "5678",
        "postalCode": "67890",
        "townName": "Rivertown",
        "country": "US",
        "countrySubDvsn": "SFO"
      },
      "dateAndPlaceOfBirth": {
        "birthDate": "2001-01-12",
        "cityOfBirth": "London",
        "countryOfBirth": "UK"
      },
      "creditorAccount": {
        "accountId": "98765432"
      },
      "ultimateCreditor": {
        "ultimateCreditorName": "John Smith",
        "postalAddress": {
          "addressType": "ADDR",
          "streetName": "Flint Ave",
          "buildingNumber": "896",
          "postalCode": "87654",
          "townName": "Los Angeles",
          "country": "US",
          "countrySubDvsn": "ZZ"
        },
        "dateAndPlaceOfBirth": {
          "birthDate": "1999-04-01",
          "cityOfBirth": "Rio",
          "countryOfBirth": "BR"
        },
        "organizationId": {
          "id": "003"
        }
      }
    },
    "remittanceInformation": {
      "unstructuredInformation": [
        "Payment for rustic vintage furniture"
      ]
    }
  }
}

Wallet withdrawals and drawdowns

Use RTP to give users immediate access to funds by initiating transfers from digital wallets to bank accounts. This allows for instantaneous wallet drawdowns and withdrawals. 

Before you begin

To enable this use case, you must first integrate the Global Payments API with your wallet ecosystem. When a consumer initiates a wallet push-out request, you’ll get instant confirmation if the payment goes through successfully.

The following example shows the minimum required fields for a wallet withdrawal request in the United States:

POST /tsapi/v1/payments HTTP/1.1
Json
{
  "payments": {
    "paymentIdentifiers": {
      "endToEndId": "6ZUS5JFPLAFRFDM"
    },
    "requestedExecutionDate": "2023-08-07",
    "transferType": "CREDIT",
    "paymentType": "RTP",
    "paymentCurrency": "USD",
    "paymentAmount": 1202.08,
    "debtor": {
      "debtorName": "John Doe",
      "debtorAccount": {
        "accountId": "000001234567890"
      }
    },
    "debtorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "021000021",
          "idType": "USABA"
        }
      }
    },
    "creditor": {
      "creditorName": "Jane Doe",
      "creditorAccount": {
        "accountId": "000000034257284"
      }
    },
    "creditorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "063100277",
          "idType": "USABA"
        }
      }
    }
  }
}

Merchant payouts

Use RTP to instantly pay out your platform sellers or merchants, sending their current sales proceeds directly to their bank accounts on demand.

Before you begin

To enable this use case, you must first integrate the Global Payments API with your wallet ecosystem. You can then trigger payouts to your sellers or vendors based on their settlement cycles, or let them receive payouts on demand. You’ll get instant confirmation when payments are successful.

The following example shows the minimum required fields for a merchant payout request in the United States:

POST /tsapi/v1/payments HTTP/1.1
Json
{
  "payments": {
    "paymentIdentifiers": {
      "endToEndId": "6ZUS5JFPLAFRFDM"
    },
    "requestedExecutionDate": "2023-08-07",
    "transferType": "CREDIT",
    "paymentType": "RTP",
    "paymentCurrency": "USD",
    "paymentAmount": 1202.08,
    "debtor": {
      "debtorName": "John Doe",
      "debtorAccount": {
        "accountId": "000001234567890"
      }
    },
    "debtorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "021000021",
          "idType": "USABA"
        }
      }
    },
    "creditor": {
      "creditorName": "John Doe",
      "creditorAccount": {
        "accountId": "000000034257284"
      }
    },
    "creditorAgent": {
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "063100277",
          "idType": "USABA"
        }
      }
    }
  }
}

Confirm response

For all use cases, you'll receive a successful response containing a firmRootId and an endToEndId. These values can be used to retrieve the status or payment details of your request.

Example response with endToEndId & firmRootId - HTTP 202 Accepted
Json
{
  "paymentInitiationResponse": {
    "endToEndId": "6ZUS5JFPLAFRFDM",
    "firmRootId": "0b4e7629-5460-401f-8c53-03a0843c4584"
  }
}

You may encounter several error messages when submitting your payment request. The Global Payments API uses standard HTTP response codes and provides additional detail through the error response payload. For more information, see Error Codes.

Connect to the Global Payments API.

Next Steps