Skip to main content

Verify a U.S. bank account and ownership

In this tutorial, you will learn how to verify a United States bank account status and authenticate the account owner’s name. By the end of this tutorial, you will know how to:

  • Verify if an account exists and is active.
  • Verify if an account is likely to result in a debit return.
  • Validate the account status along with the beneficiary.
  • Determine the required and optional field parameters.
Tip

Verification is available for specific payment methods in the United States.

Before you begin

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

  • registered and fully onboarded Developer Account on the J.P. Morgan Payments Developer Portal.
  • An active project that provides you with the credentials to make a request.

Verify and authenticate a bank account

Validating account status evaluates a bank account and determines if the account number is in good standing. To do this call a POST request to the v2/validations/accounts endpoint. The following example shows the required fields for an Account verification request. 

Example POST v2/validations/accounts
Json
[
  {
    "requestId": "123e4567-e89b-12d3-a456-426614174000",
    "account": {
      "accountNumber": "12345",
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "122199983",
          "idType": "ABA"
        }
      }
    },
    "entity": {
      "individual": {
        "firstName": "Jane",
        "lastName": "Abbot",
        "fullName": "Jane Abbot"
      }
    }
  }
]

The following example shows a deterministic account validation response for a single provider:

Example response: deterministic account validation response for a single provider
Json
[
  {
    "requestId": "123e4567-e89b-12d3-a456-426614174000",
    "responses": [
      {
        "codes": {
          "verification": {
            "code": 1002,
            "message": "Open Valid"
          },
          "authentication": {
            "code": 5002,
            "message": "Ownership Match"
          }
        },
        "provider": "JPMC_ACH",
        "details": {
          "paymentCheckContributingStatus": "Contributed",
          "accountNumber": "XXXX5",
          "financialInstitutionId": {
            "clearingSystemId": {
              "id": "122199983",
              "idType": "ABA"
            }
          }
        }
      }
    ]
  }
]

The following example shows a deterministic account validation response for multiple providers:

Example response: Deterministic account validation response for multiple providers
Json
[
  {
    "requestId": "123e4567-e89b-12d3-a456-426614174000",
    "responses": [
      {
        "codes": {
          "verification": {
            "code": 1001,
            "message": "Open Valid"
          }
        },
        "provider": "JPMC_ACH",
        "details": {
          "accountNumber": "XXXX5",
          "financialInstitutionId": {
            "clearingSystemId": {
              "id": "122199983",
              "idType": "ABA"
            }
          }
        }
      },
      {
        "codes": {
          "authentication": {
            "code": 6002,
            "message": "Ownership No Match"
          }
        },
        "provider": "EWS",
        "details": {
          "paymentCheckContributingStatus": "Contributed",
          "accountNumber": "XXXX5",
          "financialInstitutionId": {
            "clearingSystemId": {
              "id": "122199983",
              "idType": "ABA"
            }
          }
        }
      }
    ]
  }
]

Probabilistic account validation

The following example shows a probabilistic account validation request:

Example request: Probabilistic account validation response
Json
[
  {
    "requestId": "123e4567-e89b-12d3-a456-426614174000",
    "profileName": "brie",
    "account": {
      "accountNumber": "61231234337",
      "financialInstitutionId": {
        "clearingSystemId": {
          "id": "021000021",
          "idType": "ABA"
        }
      }
    },
    "entity": {
      "individual": {
        "firstName": "George",
        "lastName": "White"
      }
    },
    "transactions": []
  }
]

The following example shows a probabilistic account validation response:

Example response: Probabilistic account validation response
Json
[
  {
    "requestId": "123e4567-e89b-12d3-a456-426614174000",
    "responses": [
      {
        "codes": {
          "verification": {
            "code": 1001,
            "message": "Open Valid"
          },
          "authentication": {
            "code": 5001,
            "message": "Ownership Match"
          }
        },
        "provider": "JPMC_ACH",
        "details": {
          "accountNumber": "XXXXXXXX337",
          "financialInstitutionId": {
            "clearingSystemId": {
              "id": "021000021",
              "idType": "ABA"
            }
          }
        }
      }
    ]
  }
]

Successful response messages

An HTTP status of 200 indicates a successful response. The following fields indicate the result:

  • responseStatus
  • responseCode
  • responseMessage

Authenticate an individual or business's bank account

To validate an individual’s bank account, use the following fields:

  • individual.firstname
  • individual.lastname

To validate a business’s bank account, use the following field:

  • organization.name

Next steps