Account Validation

clock 4-minute read calender 2.0.4 | updated Sep. 25, 2025

Validate an account and its owner with confidence

What can you doEndpoint
Health checkget /accounts/validations/v2/healthCheck
Verify an accountpost /accounts/validations/v2/verifyAccount

Before you begin

All KeyBank APIs require certificates, user credentials, and certain permissions. Check out our Get Started Guide to learn more.

When you submit a request, in addition to your authentication credentials, you must provide:

  • The account number of the person or business you want to validate. (accountNumber)
  • The routing number for the financial institution of the person or business. (routingNumber)
  • Set the validation type to Owner to request for owner status and validation. (serviceType)
  • An ID provided during KeyBank onboarding that is a secondary authentication method for the call besides the access token. This is not the same as your client or consumer ID. (secondaryId)

Verification rules

Results from the database comparison are evaluated and then returns a response to you in real time, verifying the account owner status quickly. The following response rules apply for all fields:

  • All fields included in the request will be matched against the database.
  • Case, spacing, and punctuation are ignored.
  • The account data matched in the database is determined based on the account number (accountNumber) and routing number (routingNumber) in the request.
  • Account matching will be performed only if a request contains the person's full name (firstName and lastName) OR the name of the business (businessName).

Result codes

Account Validation responses include a variety of codes and classifications to help you assess if the account is legitimate or not. Refer to the Account Validation User Guide to help decipher codes like these:

  • errorCode: Three-digit code about system errors. If there are no errors, you receive three zeros (000).
  • conditionCode: Three-digit code about the state and validity of account ownership.
  • primaryStatusCode: Three-digit code for account status.
  • accountOwnerResponse object: Account owner field matching showing a Y (Yes), N (No), C (Conditional), or U (Unknown).

post /accounts/validations/v2/verifyAccount

Verify that an account owner details and if they are authorized to transact on the account by matching the account information provided to the National Shared Database Resource, the financial industry's leading source of up-to-date, collaborative financial data.

NAMETYPEDESCRIPTION
accountValidationV2RequestrequiredObjectaccountValidationV2Request

Request example

copylink
{
    "accountValidationV2Request": {
        "AOARequest": {
            "Inquiry": {
                "serviceType": "Owner",
                "secondaryId": "KeyCli03",
                "additionalId": "AddCli04",
                "routingNumber": "122199983",
                "accountNumber": "89455",
                "AcctOwner": {
                    "firstName": "Paul",
                    "lastName": "wilson",
                    "middleName": "Dan",
                    "namePrefix": "Mr",
                    "nameSuffix": "Lal",
                    "businessName": "",
                    "addressLine1": "206 GOODWIN ST",
                    "addressLine2": "Land",
                    "city": "MERRIT",
                    "state": "MI",
                    "zipCode": "49667",
                    "homePhone": "3077553623",
                    "workPhone": "3077555330",
                    "ssn": "666082367",
                    "dob": "19730801",
                    "idType": "",
                    "idNo": "590909812",
                    "idState": "AL"
                },
                "Client": {
                    "clientDate": "2022-12-03",
                    "clientTime": "14:00:00",
                    "userDefined": ""
                }
            }
        }
    }
}
NAMETYPEDESCRIPTION
accountValidationV2ResponserequiredObjectaccountValidationV2Response

Response example (200)

copylink
{
    "accountValidationV2Response": {
        "AOAResponse": {
            "Result": {
                "errorCode": "000",
                "systemRecordId": "2360130828140884",
                "primaryId": "TROM122101",
                "secondaryId": "KeyCli03",
                "routingNumber": "122199983",
                "accountNumber": "89455",
                "feeAttrib": "HH",
                "AcctOwner": {
                    "conditionCode": "000",
                    "nameMatch": "Y",
                    "firstNameMatch": "Y",
                    "lastNameMatch": "Y",
                    "middleNameMatch": "N",
                    "namePrefixMatch": "U",
                    "nameSuffixMatch": "U",
                    "addressMatch": "Y",
                    "cityMatch": "Y",
                    "stateMatch": "Y",
                    "zipCodeMatch": "Y",
                    "ssnMatch": "Y",
                    "dobMatch": "Y",
                    "idNoMatch": "Y",
                    "idStateMatch": "Y",
                    "overallMatchScore": "85"
                },
                "AcctStatus": {
                    "primaryStatusCode": "099",
                    "primMessage": "Open Valid"
                },
                "Client": {
                    "clientDate": "2022-12-31",
                    "clientTime": "14:00:80",
                    "userDefined": ""
                }
            }
        },
        "errorResponse": {
            "businessFault": {
                "errorDescription": "Description if an error is found."
            }
        }
    }
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (400)

copylink
{
    "ErrorMessage": "Error received from backend service",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "X-CorrelationId": "abcgd133",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount",
    "ServiceError": {
        "AOAResponse": {
            "Result": {
                "errorCode": "104"
            }
        }
    }
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (401)

copylink
{
    "ErrorMessage": "Received request is unauthorized, please provide valid credentials",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (403)

copylink
{
    "ErrorMessage": "Access Denied for client ip",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (404)

copylink
{
    "ErrorMessage": "Requested resource is not found, please verify the resource then resubmit the request",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (415)

copylink
{
    "ErrorMessage": "Requested media type is not allowed, please verify the media type and resubmit the request",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (429)

copylink
{
    "ErrorMessage": "Number requests threshold reached, please resubmit the request after sometime",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (500)

copylink
{
    "ErrorMessage": "Runtime error occurred in the service, please check with application support team before resubmitting the request",
    "X-CorrelationId": "abcgd133",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount"
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (502)

copylink
{
    "ErrorMessage": "Error received from backend service",
    "X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount",
    "ServiceError": {
        "ConnectError": "Connectivity error occurred with the downstream service (Unexpected EOF at target), please check with application support team before resubmitting the request"
    }
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (503)

copylink
{
    "ErrorMessage": "Error received from backend service",
    "X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount",
    "ServiceError": {
        "ConnectError": "Service is currently unavailable (NoActiveTargets), please check with application support before resubmitting the request."
    }
}
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError

Response example (504)

copylink
{
    "ErrorMessage": "Error received from backend service",
    "X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
    "TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
    "TransactionTime": "2021-06-11T16:31:34.041Z",
    "Api-Url": "/accounts/validations/v2/verifyAccount",
    "ServiceError": {
        "ConnectError": "Request could not be processed on time (GatewayTimeout), please wait a moment and resubmit the request"
    }
}
NAMETYPEDESCRIPTION
StatusstringStatus of the health check response.
SourcestringOrigin of the system response can be 'Gateway' or 'Roundtrip'. Roundtrip returns a response from the farthest system involved.
TimestampstringDate (YYYY-MM-DD) and time (HH:MM:SS) of response from the API service.
ClientIpstringClient IP address the gateway receives from the request.
X-Forwarded-ForstringSequence of IP addresses for systems between the client and the gateway.
NAMETYPEDESCRIPTION
ErrorMessagestringA human-readable message that describes the type or source of the error.
TransactionIdstringA unique transaction ID returned with the response, useful for traceability.
X-CorrelationIdstringA unique identifier generated for each transaction that remains with the transaction through the chain of API operations.
TransactionTimestringDate (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
Api-UrlstringThe API URL path of the call that generated the response.
ServiceErroroneOfserviceErrorData connectError
NAMETYPEDESCRIPTION
ConnectErrorstringAPI connectivity error information, if available.
NAMETYPEDESCRIPTION
errorCodestringThree-digit error code. Returns a "000" when no errors are present.
NAMETYPEDESCRIPTION
AOARequestObjectAOARequest
NAMETYPEDESCRIPTION
serviceTyperequiredstringRepresents the type of request made to the API. This value is case-sensitive and must be set to "Owner".
secondaryIdrequiredstringSecondary client ID provided by KeyBank. No special characters are allowed. This value is different from your client credentials.
additionalIdstringThis ID is rarely used. If it is required, the value is provided during onboarding.
routingNumberrequiredstringNine-digit routing number for the account, including leading zeroes.
accountNumberrequiredstringFull bank account number, without separators or leading zeroes. The length and format depends on the bank. This field cannot exceed 17 characters.
AcctOwnerObjectAcctOwner
ClientObjectClient
NAMETYPEDESCRIPTION
InquiryObjectInquiry
NAMETYPEDESCRIPTION
ResultObjectResult
NAMETYPEDESCRIPTION
businessFaultObjectbusinessFault
systemFaultObjectsystemFault
NAMETYPEDESCRIPTION
conditionCodestringThree-digit system response code that reflects the state of the account owner provided.
nameMatchstringFirst name, middle name, and last name match status. Valid values: Y, N, U
firstNameMatchstringFirst name match status. Valid values: Y, N, U
lastNameMatchstringLast name match status. Valid values: Y, N, U
middleNameMatchstringMiddle name or initial match status. Valid values: Y, N, U
namePrefixMatchstringName prefix match status. U will always be returned for a name prefix if included in the request.
nameSuffixMatchstringName suffix match status. U will always be returned for a name suffix if included in the request.
businessNameMatchstringBusiness name match status. Valid values: Y, N, U
addressMatchstringCombined address line one and two match status. Valid values: Y, N, U
cityMatchstringCity match status. Valid values: Y, N, U
stateMatchstringState match status. Valid values: Y, N, U
zipCodeMatchstringZIP code match status. Valid values: Y, N, U
homePhoneMatchstringHome phone number match status. Valid values: Y, N, U
workPhoneMatchstringWork phone number match status. Valid values: Y, N, U
ssnMatchstringSSN/TIN or last four digits of SSN match status. If you are a merchant provider, the value returned will always be 'U'. Valid values: Y, N, U
dobMatchstringDate of birth match status. Valid values: Y, N, U
idTypeMatchstringID type match status. Valid values: Y, N, U
idNoMatchstringID number match status. Valid values: Y, N, U
idStateMatchstringState or place of issuance match status. Valid values: Y, N, U
overallMatchScorestringThe measure of how closely the inquiry request attributes match the actual account ownership data. This number is calculated based on the analysis of all information sent. Valid values: 0-100
NAMETYPEDESCRIPTION
errorCodestringThree-digit error code. Returns a "000" when no errors are present.
systemRecordIdstringUnique, system-generated transaction ID.
primaryIdstringPrimary client ID returned via a KeyBank lookup. This is a KeyBank ID.
secondaryIdstringSecondary client ID provided in the original request.
additionalIdstringAdditional client ID, if provided in the original request. This is rarely used.
routingNumberstringNine-digit routing number for the account provided in the original request.
accountNumberstringFull bank account number provided in the original request.
feeAttribstringTwo-character code that represents how a transaction took place. Currently, the only value reported is "HH", which represents an ACH transaction.
AcctOwnerObjectAcctOwner_1
AcctStatusObjectAcctStatus
ClientObjectClient_1
NAMETYPEDESCRIPTION
errorDescriptionstringDescriptive error message that identifies if it is a system issue or business fault.
NAMETYPEDESCRIPTION
primaryStatusCodestringPrimary three-digit account status code. This is an informational response code that represents the status of an account.
primMessagestringMessage associated with the primary status code.

accountValidation_POST_bodyParameters

NAMETYPEDESCRIPTION
accountValidationV2RequestrequiredObjectaccountValidationV2Request
NAMETYPEDESCRIPTION
errorDescriptionstringContains business system messages generated if there is an issue.
NAMETYPEDESCRIPTION
clientDatestringClient-provided date the inquiry request was made. Format: YYYY-MM-DD
clientTimestringClient-provided time the inquiry request was made. Format: HH:MM:SS
userDefinedstringClient-provided descriptive text about the inquiry request. This field cannot exceed 255 characters.

accountValidation_POST_response

NAMETYPEDESCRIPTION
accountValidationV2ResponserequiredObjectaccountValidationV2Response
NAMETYPEDESCRIPTION
AOAResponseObjectAOAResponse
errorResponserequiredObjecterrorResponse
NAMETYPEDESCRIPTION
clientDatestringClient-provided date the inquiry request was made. Format: YYYY-MM-DD
clientTimestringClient-provided time the inquiry request was made. Format: HH:MM:SS
userDefinedstringClient-provided descriptive text about the inquiry request. This field cannot exceed 255 characters.
NAMETYPEDESCRIPTION
firstNamestringFirst name of the account owner. Required with lastName for a personal inquiry.
lastNamestringLast name of the account owner. Required with firstName for a personal inquiry.
middleNamestringMiddle initial or name of the account owner. If the middle initial is provided do not include a period.
namePrefixstringOptional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.
nameSuffixstringOptional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD
businessNamestringBusiness name or the individual's full name (first and last name) that owns the account. This is a required field for a business inquiry.
addressLine1stringFirst line of the address on the account. This field cannot exceed 40 characters.
addressLine2stringSecond line of the address on the account. For international addresses, combine province, country, and postal code in this second address line.
citystringThe city of the account owner if in the US. Keep this field blank for international addresses.
statestringThe two-character state abbreviation if in the US. Keep this field blank for international addresses.
zipCodestringZIP code of the account if in the US. This can either be five digits or nine digits. If a nine-digit ZIP code is provided, a dash between the groups of digits is acceptable. Do not use a space. Possible examples: 52255, 522551313, or 52255-1313. Keep this field blank for international addresses.
homePhonestring10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
workPhonestring10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
ssnstringFull social security/tax ID number or the last four digits of the social security number of the account owner.
dobstringDate of birth for the individual on the account. Format: YYYYMMDD
idTypestringOne-character code that represents the type of identification used to verify the account owner. Valid values: 0-9, A-Z
idNostringID number for the account owner's form of identification. This field cannot exceed 28 characters.
idStatestringTwo-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field must be between 2-6 characters in length.

The Account Validation API returns information about the requested item in one to two sections of the response.

  1. AOARequest:  A three-digit code in the response payload, errorCode , indicates if there was problem during data retrieval or not.
    • If no errors are present, this field returns three zeroes.
    • If there is a problem capturing account information from a draftable account item or an issue evaluating one of the request message fields, the API returns a 3-digit error code that tells you what needs to be corrected before the request is re-sent. Go to the Account Validation User Guide to error code details.
  2. The errorResponse object is part of the response if an issue occurs from the application (businessFault) or backend system (systemFault). If there is an issue with the API connection, the connectError field is included in this response. 

For help with common issues and errors, check out our Developer support pages. 

  • View our Error handling information to understand how KeyBank reports errors.
  • Go to our Troubleshooting to get help diagnosing and resolving common HTTP errors.
ReleaseAPI versionChange descriptionImpact
September 20252.0.4
  • Added Api-Url parameter to all instances of the exception schema. This parameter is now a standard part of all error messages to help you identify which call triggered an unsuccessful response.
LOW
April 20252.0.3
  • Modified adrLine2, city, state, and zipCode for international addresses in the AcctOwner object . With international addresses, leave the city, state, and zip code fields blank. Combine the province, country, and postal code in the adrLine2 field.
LOW
December 20242.0.2
  • The amount and serialNumber parameters have deprecated. These parameters are no longer in from the Inquiry and Result objects.
LOW
October 20242.0.1
  • For the amount field, the whole dollar amount is an acceptable value (no cents). Note, this field will be deprecating in the future.
  • Updated the businessName field and any supporting content to specify that you can use an individual's full name for a business account inquiry.
  • Added format and field description details to help define the meaning, use, and limitations of the field.
MID
August 20242.0.0MID
May 20241.0.3
  • X-CorrelationId has been removed as a request header field for all endpoints. The parameter is no longer in the request body, but still remains in the code. The system assigns a unique ID when you submit a request and returns the value in the response.
LOW
May 20231.0.2
  • Released on the Developer Portal.
 

Impact levels

  • LOW: This is a minor change or enhancement that does not alter the operations of the API. Upgrading to the latest specifications is preferable but not required.
  • MID: The previous API version is valid and operates, but does not contain latest enhancements. You need to update your specifications to get these enhancements.
  • HIGH: The previous API version is no longer operable. You must upgrade to the latest specifications to access and use this API product.

YAML file download