JPM

We currently use jpm for subscription payments. They offer better pricing compared to usio.

Auth

JPM uses mtls for all api calls that we make. The mtls certs are stored in secrets manager, and retrieved once per lambda startup, where they are reused for each invocation.

Some endpoints also require us to sign the body of the request with a json web signature.

The tls and signing certs are created by us and sent to jpm for renewal every year.

ACH

All our traffic that goes through JPM is through ACH.

Webhooks/Callbacks

JPM will send us a webhook/callback when the status of the payment changes. Note that the completed status does not mean that the payment is final, it just means that JPM has sent it to the ACH network. It can still be returned later.

For our webhook purposes we really only care about RETURNED and REJECTED, which means we need to mark the payment as such in our db.

transactionStatus Description

PENDING

Payment pending initial validation.

ACCEPTED

Payment received by J.P. Morgan and initial validation completed.

HOLD

Payment under internal review. (Only applicable to US ACH)

CLEARED

Payment cleared internal review. (Only applicable to US ACH)

COMPLETED

Payment completed J.P. Morgan processing and sent to payment network. (Only applicable to US ACH)

REJECTED

Payment failed J.P. Morgan processing and not sent to payment network. Payment rejected.

RETURNED

Payment sent to payment network. Payment failed to post. Payment returned.

jpm ach flow