openapi: 3.0.1

info:
#---------------------------------------------------
# Information to contact the Service provider
#-------------------------------------------------
  title: Account Validation API
  description: Use the Account Validation API to verify an account and its owner with confidence. This API evaluates account owner data through an inquiry request and response process.
  contact:
    name: "KeyBank Developer Support"
    email: 'developers@keybank.com'
  version: 1.0.1
  
servers:
#---------------------------------------------------
# List of environments for the API
#---------------------------------------------------
 - url: https://partner-api-qv.keybank.com
 - url: https://partner-api.keybank.com
 
paths:
#---------------------------------------------------
# List of Environments for the API 
#---------------------------------------------------
  /accounts/validations/v1/healthCheck:
    get:
        tags: # Apigee Product: Logical group based on functionality
          - HealthCheck 
        summary: Health check
        description: Verify you can connect to the API service. A bearer token is required.
        operationId: healthCheck
        security:
          - bearerAuth: []
        parameters:
          - name: X-CorrelationId
            in: header
            schema:
              type: string
            required: false
            description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
        responses:
          '200':
            description: Successful response
            headers:
              X-CorrelationId:
                schema:
                  type: string
                description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/healthResponse'
                example:
                 Status: Ok
                 Source: Roundtrip
                 Timestamp: '2022-09-15T04:49:03'
                 ClientIp: 156.77.111.28
                 X-Forwarded-For: '[156.77.111.28]'
  /accounts/validations/v1/verifyAccount:
    post:
      summary: Verify an account
      description: Verify that an account owner's name, address, and other identifying elements match the account information in the National Shared Database Resource and that they are authorized to transact on the account. The National Shared Database Resource is the financial industry's leading source of up-to-date, collaborative financial data.
      operationId: verifyAccount
      security:
        - bearerAuth: []
      parameters:
      - name: X-CorrelationId
        in: header
        schema:
          type: string
        required: false
        description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/aoaVerifyAccountRequest'
            example:
              accountValidationRequest:
                AOARequest:
                  Inquiry:
                    serviceType: Owner
                    secondaryId: KeyCli01
                    additionalId: ''
                    routingNumber: '122199983'
                    accountNumber: '89455'
                    amount: ''
                    serialNumber: ''
                    AcctOwner:
                      firstName: Paul
                      lastName: Wilson
                      middleName: ''
                      namePrefix: ''
                      nameSuffix: ''
                      businessName: ''
                      addressLine1: 206 GOODWIN ST
                      addressLine2: ''
                      city: MERRIT
                      state: MI
                      zipCode: '49667'
                      homePhone: ''
                      workPhone: ''
                      ssn: '666082367'
                      dob: '19730801'
                      idType: '2'
                      idNo: '590909812'
                      idState: AL
                    Client:
                      clientDate: '2022-04-08'
                      clientTime: '11:45:05'
                      userDefined: '1234567890'
        required: true
      responses:
        '200':
          description: Successful response
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/aoaVerifyAccountResponse'
              example: 
                accountValidationResponse:
                  AOAResponse:
                    Result:
                      errorCode: '000'
                      systemRecordId: '5934871120174384'
                      primaryId: TROM122101
                      secondaryId: KeyCli01
                      routingNumber: '122199983'
                      accountNumber: '89455'
                      feeAttrib: HH
                      AcctOwner:
                        conditionCode: '000'
                        nameMatch: Y
                        firstNameMatch: Y
                        lastNameMatch: Y
                        addressMatch: Y
                        cityMatch: Y
                        stateMatch: Y
                        zipCodeMatch: Y
                        ssnMatch: Y
                        dobMatch: Y
                        idTypeMatch: Y
                        idNoMatch: Y
                        idStateMatch: Y
                        overallMatchScore: '100'
                      AcctStatus:
                        primaryStatusCode: '099'
                        primMessage: Open Valid
                      Client:
                        clientDate: '2022-04-08'
                        clientTime: '11:45:05'
                        userDefined: '1234567890'
        '400':
          description: Missing data
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Please make sure your request is correct and try again."
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               X-CorrelationId: "abcgd133"
               TransactionTime: "2021-06-11T16:31:34.041Z"
               ServiceError: 
                AOAResponse: 
                  Result: 
                    errorCode: "104"
        '401':
          description: Unauthorized request
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Please make sure you're using the correct credentials. Then log in again."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '403':
          description: Access denied
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "You don't have access to this resource. Contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '404':
          description: Not found
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "We can't seem to find what you're looking for. Please verify the resource and try again."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '415':
          description: Media type not supported
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "We currently don't support that format. Please check the format type defined in your request and try again. If you experience more issues, contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '429':
          description: Too many requests
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Looks like you've sent too many requests. Please wait a moment and try again later."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '500':
          description: Internal server error
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Looks like something went wrong. Please try again when you're ready. If you experience more issues, contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "abcgd133"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
        '502':
          description: Bad gateway
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Looks like something went wrong. Please try again when you're ready. If you experience more issues, contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z" 
               ServiceError: 
                 ConnectError: "A connectivity error occurred with the downstream service (unexpected end of file at the target). Please check with your KeyBank Client Success Manager or email developers@keybank.com before trying the request again."
        '503':
          description: Service unavailable
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Looks like something went wrong. Please try again later. If you experience more issues, contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
               ServiceError: 
                 ConnectError: "This service is currently unavailable (there are no active targets). Please check with your KeyBank Client Success Manager or email developers@keybank.com before trying the request again."
        '504':
          description: Gateway timeout
          headers:
            X-CorrelationId:
              schema:
                type: string
              description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/exception'
              example:
               ErrorMessage: "Your request took too long to process. Please try again. If you experience more issues, contact your KeyBank Client Success Manager or email developers@keybank.com for help with a resolution."
               X-CorrelationId: "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab"
               TransactionId: "rrt-7709400285867417207-b-gce-27587-2383364-1"
               TransactionTime: "2021-06-11T16:31:34.041Z"
               ServiceError: 
                 ConnectError: "The request could not be processed on time (gateway timeout). Please wait a moment and try again later."
components:
#---------------------------------------------------
# Data Definitions
#---------------------------------------------------
  securitySchemes:
    bearerAuth:   # security scheme for authentication based on F5 APM token
      type: http
      scheme: bearer
  schemas:
    healthResponse:
      type: object
      title: healthResponse
      properties:
        Status:
          type: string
          description: Status of the health check response.
        Source:
          type: string
          description: Origin of the system response can be 'Gateway' or 'Roundtrip'. Roundtrip returns a response from the farthest system involved.
        Timestamp:
          type: string
          description: Date (YYYY-MM-DD) and time (HH:MM:SS) of response from the API service.
        ClientIp:
          type: string
          description: Client IP address the gateway receives from the request.
        X-Forwarded-For:
          type: string
          description: Sequence of IP addresses for systems between the client and the gateway.
    exception:
      type: object
      title: exceptionSchema
      properties:
        ErrorMessage: 
          type: string
          description: A human-readable message that describes the type or source of the error.
          example: "Requested resource is not found, please verify the resource then resubmit the request."
        TransactionId:
          type: string
          description: A unique transaction ID returned with the response, useful for traceability.
          example: "rrt-7354978519411102852-c-gce-30597-7590748-1"
        X-CorrelationId:
          type: string
          description: A universal ID to trace the transaction across all the systems involved, useful for system logging and identification. 
          example: "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab"
        TransactionTime: 
          type: string
          description: Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred.
        ServiceError:
          type: object
          title: ServiceError
          description: Detailed service-level error details, if available.
          oneOf:
          - $ref: '#/components/schemas/serviceErrorData'
          - $ref: '#/components/schemas/connectError'
    connectError:
      type: object
      properties:
        ConnectError:
          type: string
          description: API connectivity error information, if available.
    serviceErrorData:
      type: object
      properties:
        AOAResponse:
          type: object
          properties:
            Result:
              type: object
              properties:
                errorCode:
                  type: string
                  maxLength: 3
                  description: Three-digit error code. Returns a "000" when no errors are present.
    aoaVerifyAccountRequest:
      type: object
      properties:
        accountValidationRequest:
          $ref: '#/components/schemas/accountValidationRequest'
    accountValidationRequest:
      type: object
      description: Contains the request payload for the account validation endpoint.
      properties:
        AOARequest:
          type: object
          properties:
            Inquiry:
              $ref: '#/components/schemas/inquiry'
    inquiry:
      required:
        - accountNumber
        - routingNumber
        - serviceType
        - secondaryId
      type: object
      description: Contains the inquiry request fields
      properties:
        serviceType:
          type: string
          enum: [
            "Owner"
            ]
          description: Represents the type of request made to the API. This value is case-sensitive and must be set to "Owner".
        secondaryId:
          type: string
          minLength: 1
          maxLength: 10
          description: Secondary client ID provided by KeyBank.
        additionalId:
          type: string
          maxLength: 10
          description: Additional client ID provided by KeyBank. This is only required if provided during onboarding.
        routingNumber:
          type: string
          maxLength: 9
          description: Nine-digit routing number for the account, including leading zeroes.
        accountNumber:
          type: string
          minLength: 1
          maxLength: 17
          description: Full bank account number, without separators or leading zeroes. The length and format depends on the bank. This field cannot exceed 17 characters.
        amount:
          type: string
          maxLength: 12
          description: Dollar amount of the transaction. The amount can be formatted as a whole dollar amount or with cents. This field cannot exceed 12 characters.
        serialNumber:
          type: string
          maxLength: 15
          description: Serial number of the check. Serial number does not apply to ACH inquiries.
        AcctOwner:
          type: object
          title: AcctOwner
          anyOf:
            - $ref: '#/components/schemas/accountOwnerFirstLastName'
            - $ref: '#/components/schemas/accountOwnerBusinessFirstName'
            - $ref: '#/components/schemas/accountOwnerBusinessName'
            - $ref: '#/components/schemas/accountOwnerBusinessLastName'
            - $ref: '#/components/schemas/accountOwnerBusinessFirstLastName'
        Client:
          $ref: '#/components/schemas/client'
    accountOwnerFirstLastName:
      type: object
      description: Contains the account owner details.
      properties:
        firstName:
          type: string
          minLength: 1
          maxLength: 40
          description: First name of the account owner. Required with lastName if businessName is null. 
        lastName:
          type: string
          minLength: 1
          maxLength: 40
          description: Last name of the account owner. Required with firstName if businessName is null.
        middleName:
          type: string
          maxLength: 40
          description: Middle name of the account owner.
        namePrefix:
          type: string
          maxLength: 4
          description: 'Optional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.' 
        nameSuffix:
          type: string
          maxLength: 4
          description: 'Optional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD'
        businessName:
          type: string
          minLength: 0
          maxLength: 87
          description: Business name that owns the account. Required if lastName is null.
        addressLine1:
          type: string
          maxLength: 40
          description: First line of the address on the account. This field cannot exceed 40 characters.
        addressLine2:
          type: string
          maxLength: 40
          description: Second line of the address on the account. This field cannot exceed 40 characters.
        city:
          type: string
          maxLength: 25
          description: City on the account.
        state:
          type: string
          maxLength: 2
          description: Two-character state abbreviation on the account.
        zipCode:
          type: string
          maxLength: 10
          description: ZIP code on the account. 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.
        homePhone:
          type: string
          maxLength: 10
          description: 10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        workPhone:
          type: string
          maxLength: 10
          description: 10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        ssn:
          type: string
          description: Full social security/tax ID number or the last four digits of the social security number of the account owner.
        dob:
          type: string
          maxLength: 8
          description: 'Date of birth for the individual on the account. Format: YYYYMMDD'
        idType:
          type: string
          enum: [
            "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",""]
          maxLength: 1
          description: One-character code that represents the type of identification used to verify the account owner.
        idNo:
          type: string
          maxLength: 28
          description: ID number for the account owner's form of identification. This field cannot exceed 28 characters. 
        idState:
          type: string
          maxLength: 6
          description: Two-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field cannot exceed 6 characters. 
    accountOwnerBusinessFirstName:
      type: object
      description: Contains the account owner details.
      properties:
        firstName:
          type: string
          minLength: 1
          maxLength: 40
          description: First name of the account owner. Required with lastName if businessName is null. 
        lastName:
          type: string
          minLength: 0
          maxLength: 40
          description: Last name of the account owner. Required with firstName if businessName is null.
        middleName:
          type: string
          maxLength: 40
          description: Middle name of the account owner.
        namePrefix:
          type: string
          maxLength: 4
          description: 'Optional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.' 
        nameSuffix:
          type: string
          maxLength: 4
          description: 'Optional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD'
        businessName:
          type: string
          minLength: 1
          maxLength: 87
          description: Business name that owns the account. Required if lastName is null.
        addressLine1:
          type: string
          maxLength: 40
          description: First line of the address on the account. This field cannot exceed 40 characters.
        addressLine2:
          type: string
          maxLength: 40
          description: Second line of the address on the account.
        city:
          type: string
          maxLength: 25
          description: City on the account.
        state:
          type: string
          maxLength: 2
          description: Two-character state abbreviation on the account.
        zipCode:
          type: string
          maxLength: 10
          description: ZIP code on the account. 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.
        homePhone:
          type: string
          maxLength: 10
          description: 10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        workPhone:
          type: string
          maxLength: 10
          description: 10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        ssn:
          type: string
          description: Full social security/tax ID number or the last four digits of the social security number of the account owner.
        dob:
          type: string
          maxLength: 8
          description: 'Date of birth for the individual on the account. Format: YYYYMMDD'
        idType:
          type: string
          enum: [
            "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",""]
          maxLength: 1
          description: One-character code that represents the type of identification used to verify the account owner.
        idNo:
          type: string
          maxLength: 28
          description: ID number for the account owner's form of identification. This field cannot exceed 28 characters.
        idState:
          type: string
          maxLength: 6
          description: Two-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field cannot exceed 6 characters.
    accountOwnerBusinessName:
      type: object
      description: Contains the account owner details.
      properties:
        firstName:
          type: string
          minLength: 0
          maxLength: 40
          description: First name of the account owner. Required with lastName if businessName is null. 
        lastName:
          type: string
          minLength: 0
          maxLength: 40
          description: Last name of the account owner. Required with firstName if businessName is null.
        middleName:
          type: string
          maxLength: 40
          description: Middle name of the account owner.
        namePrefix:
          type: string
          maxLength: 4
          description: 'Optional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.' 
        nameSuffix:
          type: string
          maxLength: 4
          description: 'Optional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD'
        businessName:
          type: string
          minLength: 1
          maxLength: 87
          description: Business name that owns the account. Required if lastName is null.
        addressLine1:
          type: string
          maxLength: 40
          description: First line of the address on the account. This field cannot exceed 40 characters.
        addressLine2:
          type: string
          maxLength: 40
          description: Second line of the address on the account.
        city:
          type: string
          maxLength: 25
          description: City on the account.
        state:
          type: string
          maxLength: 2
          description: Two-character state abbreviation on the account.
        zipCode:
          type: string
          maxLength: 10
          description: ZIP code on the account. 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.
        homePhone:
          type: string
          maxLength: 10
          description: 10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        workPhone:
          type: string
          maxLength: 10
          description: 10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        ssn:
          type: string
          description: Full social security/tax ID number or the last four digits of the social security number of the account owner.
        dob:
          type: string
          maxLength: 8
          description: 'Date of birth for the individual on the account. Format: YYYYMMDD'
        idType:
          type: string
          enum: [
            "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",""]
          maxLength: 1
          description: One-character code that represents the type of identification used to verify the account owner.
        idNo:
          type: string
          maxLength: 28
          description: ID number for the account owner's form of identification. This field cannot exceed 28 characters. 
        idState:
          type: string
          maxLength: 6
          description: Two-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field cannot exceed 6 characters. 
    accountOwnerBusinessLastName:
      required:
        - lastName
        - businessName
      type: object
      description: Contains the account owner details.
      properties:
        firstName:
          type: string
          minLength: 0
          maxLength: 40
          description: First name of the account owner. Required with lastName if businessName is null. 
        lastName:
          type: string
          minLength: 1
          maxLength: 40
          description: Last name of the account owner. Required with firstName if businessName is null.
        middleName:
          type: string
          maxLength: 40
          description: Middle name of the account owner.
        namePrefix:
          type: string
          maxLength: 4
          description: 'Optional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.' 
        nameSuffix:
          type: string
          maxLength: 4
          description: 'Optional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD'
        businessName:
          type: string
          minLength: 1
          maxLength: 87
          description: Business name that owns the account. Required if lastName is null.
        addressLine1:
          type: string
          maxLength: 40
          description: First line of the address on the account. This field cannot exceed 40 characters.
        addressLine2:
          type: string
          maxLength: 40
          description: Second line of the address on the account.
        city:
          type: string
          maxLength: 25
          description: City on the account.
        state:
          type: string
          maxLength: 2
          description: Two-character state abbreviation on the account.
        zipCode:
          type: string
          maxLength: 10
          description: ZIP code on the account. 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.
        homePhone:
          type: string
          maxLength: 10
          description: 10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        workPhone:
          type: string
          maxLength: 10
          description: 10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        ssn:
          type: string
          description: Full social security/tax ID number or the last four digits of the social security number of the account owner.
        dob:
          type: string
          maxLength: 8
          description: 'Date of birth for the individual on the account. Format: YYYYMMDD'
        idType:
          type: string
          enum: [
            "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",""]
          maxLength: 1
          description: One-character code that represents the type of identification used to verify the account owner.
        idNo:
          type: string
          maxLength: 28
          description: ID number for the account owner's form of identification. This field cannot exceed 28 characters. 
        idState:
          type: string
          maxLength: 6
          description: Two-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field cannot exceed 6 characters.
    accountOwnerBusinessFirstLastName:
      required:
        - firstName
        - lastName
        - businessName
      type: object
      description: Contains the account owner details.
      properties:
        firstName:
          type: string
          minLength: 1
          maxLength: 40
          description: First name of the account owner. Required with lastName if businessName is null. 
        lastName:
          type: string
          minLength: 1
          maxLength: 40
          description: Last name of the account owner. Required with firstName if businessName is null.
        middleName:
          type: string
          maxLength: 40
          description: Middle name of the account owner.
        namePrefix:
          type: string
          maxLength: 4
          description: 'Optional name prefix of the account owner. This field cannot exceed four characters. Example: Dr., Mr., Mrs.' 
        nameSuffix:
          type: string
          maxLength: 4
          description: 'Optional name suffix of the account owner. This field cannot exceed four characters. Example: Jr., PhD'
        businessName:
          type: string
          minLength: 1
          maxLength: 87
          description: Business name that owns the account. Required if lastName is null.
        addressLine1:
          type: string
          maxLength: 40
          description: First line of the address on the account. This field cannot exceed 40 characters.
        addressLine2:
          type: string
          maxLength: 40
          description: Second line of the address on the account.
        city:
          type: string
          maxLength: 25
          description: City on the account.
        state:
          type: string
          maxLength: 2
          description: Two-character state abbreviation on the account.
        zipCode:
          type: string
          maxLength: 10
          description: ZIP code on the account. 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.
        homePhone:
          type: string
          maxLength: 10
          description: 10-digit home phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        workPhone:
          type: string
          maxLength: 10
          description: 10-digit work phone number on the account. Do not add dashes, parenthesis, or any other non-numeric value.
        ssn:
          type: string
          description: Full social security/tax ID number or the last four digits of the social security number of the account owner.
        dob:
          type: string
          maxLength: 8
          description: 'Date of birth for the individual on the account. Format: YYYYMMDD'
        idType:
          type: string
          enum: [
            "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",""]
          maxLength: 1
          description: One-character code that represents the type of identification used to verify the account owner.
        idNo:
          type: string
          maxLength: 28
          description: ID number for the account owner's form of identification. This field cannot exceed 28 characters.
        idState:
          type: string
          maxLength: 6
          description: Two-character state of issuance for the account owner's form of identification. If not a US state, enter the place of issuance. This field cannot exceed 6 characters.
    client:
      type: object
      description: Contains the client-provided date, time, and description of the inquiry request.
      properties:
        clientDate:
          type: string
          maxLength: 10
          format: date
          description: 'Client-provided date the inquiry request was made. Format: YYYY-MM-DD'
        clientTime:
          type: string
          maxLength: 8
          format: time
          description: 'Client-provided time the inquiry request was made. Format: HH:MM:SS'
        userDefined:
          type: string
          maxLength: 255
          description: Client-provided descriptive text about the inquiry request. This field cannot exceed 255 characters.
    accountValidationResponse:
      type: object
      description: Contains the response payload for the account validation endpoint.
      properties:
        AOAResponse:
          type: object
          properties:
            Result:
              type: object
              properties:
                errorCode:
                  type: string
                  maxLength: 3
                  description: Three-digit error code. Returns a "000" when no errors are present.
                systemRecordId : 
                  type: string
                  minLength: 1
                  maxLength: 16 
                  description: Unique, system-generated transaction ID.
                primaryId:
                  type: string
                  minLength: 1
                  maxLength: 10
                  description: Primary client ID returned via a KeyBank lookup.
                secondaryId:
                  type: string
                  minLength: 1
                  maxLength: 10
                  description: Secondary client ID provided in the original request.
                additionalId:
                  type: string
                  minLength: 1
                  maxLength: 10
                  description: Additional client ID, if provided in the original request.
                routingNumber:
                  type: string
                  maxLength: 9
                  description: Nine-digit routing number for the account provided in the original request.
                accountNumber:
                  type: string
                  minLength: 1
                  maxLength: 17
                  description: Full bank account number provided in the original request.
                feeAttrib:
                  type: string
                  maxLength: 2
                  description: Two-character code that represents how a transaction took place. Currently, the only value reported is "HH", which represents an ACH transaction.
                amount:
                  type: string
                  minLength: 1
                  maxLength: 12
                  description: Amount of the transaction, if provided in the original request.
                serialNumber:
                  type: string
                  minLength: 1
                  maxLength: 15
                  description: Serial number of the check, if provided in the original request.
                AcctOwner:
                  $ref: '#/components/schemas/accountOwnerResponse'
                AcctStatus:
                  $ref: '#/components/schemas/accountStatus'
                Client:
                  $ref: '#/components/schemas/client'
    aoaVerifyAccountResponse:
      type: object
      properties:
        accountValidationResponse:
          $ref: '#/components/schemas/accountValidationResponse'
    accountStatus:
      type: object
      description: Contains the account status details.
      properties:
        primaryStatusCode:
          type: string
          description: Primary three-digit account status code. This is an informational response code that represents the status of an account.
        primMessage:
          type: string
          description: Message associated with the primary status code.
    accountOwnerResponse:
      type: object
      description: Contains the account owner field matching results.
      properties:
        conditionCode:
          type: string
          maxLength: 3
          description: Three-digit system response code that reflects the state of the account owner provided.
        nameMatch:
          type: string
          maxLength: 1
          description: 'First name, middle name, and last name match status. Valid values: Y, N, C, U'
        firstNameMatch:
          type: string
          maxLength: 1
          description: 'First name match status. Valid values: Y, N, U'
        lastNameMatch:
          type: string
          maxLength: 1
          description: 'Last name match status. Valid values: Y, N, U'
        middleNameMatch:
          type: string
          maxLength: 1
          description: 'Middle name or initial match status. Valid values: Y, N, U'
        namePrefixMatch:
          type: string
          maxLength: 1
          description: Name prefix match status. U will always be returned for a name prefix if included in the request.
        nameSuffixMatch:
          type: string
          maxLength: 1
          description: Name suffix match status. U will always be returned for a name suffix if included in the request.
        businessNameMatch:
          type: string
          maxLength: 1
          description: 'Business name match status. Valid values: Y, N, C, U'
        addressMatch:
          type: string
          maxLength: 1
          description: 'Combined address line one and two match status. Valid values: Y, N, C, U'
        cityMatch:
          type: string
          maxLength: 1
          description: 'City match status. Valid values: Y, N, C, U'
        stateMatch:
          type: string
          maxLength: 1
          description: 'State match status. Valid values: Y, N, U'
        zipCodeMatch:
          type: string
          maxLength: 1
          description: 'ZIP code match status. Valid values: Y, N, C, U'
        homePhoneMatch:
          type: string
          maxLength: 1
          description: 'Home phone number match status. Valid values: Y, N, C, U'
        workPhoneMatch:
          type: string
          maxLength: 1
          description: 'Work phone number match status. Valid values: Y, N, C, U'
        ssnMatch:
          type: string
          maxLength: 1
          description: 'SSN/TIN or last four digits of SSN match status. Valid values: Y, N, C, U'
        dobMatch:
          type: string
          maxLength: 1
          description: 'Date of birth match status. Valid values: Y, N, C, U'
        idTypeMatch:
          type: string
          maxLength: 1
          description: 'ID type match status. Valid values: Y, N, U'
        idNoMatch:
          type: string
          maxLength: 1
          description: 'ID number match status. Valid values: Y, N, C, U'
        idStateMatch:
          type: string
          maxLength: 1
          description: 'State or place of issuance match status. Valid values: Y, N, U'
        overallMatchScore:
          type: string
          minLength: 1
          maxLength: 3
          description: 'The 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'