> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ingopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Verify — ACH

> Tokenize a bank account for Standard ACH or Same-Day ACH disbursements.



## OpenAPI

````yaml specs/ingopay-verify-ach.yaml POST /gateway/verify--ach
openapi: 3.0.3
info:
  title: IngoPay API — Verify Bank Account (ACH / RTP)
  description: >
    Verify support for customer bank account data and tokenize the account for
    use in a subsequent Process call.


    The Verify method validates and tokenizes the customer's bank account
    information. The returned `customer_account_token` is used in place of raw
    account data on all future Process requests for the same account.


    **Mutual exclusivity rules:**

    - Provide either `customer_account_token` **or** raw account fields
      (`account`, `routing_number`, `recipient_first_name`,
      `recipient_last_name`, `recipient_address1`, `recipient_city`,
      `recipient_state`, `recipient_zip`) — never both.

    - When `customer_account_token` is provided, all raw account and recipient
      fields listed above are not required and should be omitted.
  version: '11'
  contact:
    name: Ingo Money Developer Support
    url: https://developers.ingomoney.com
servers:
  - url: https://payapi-sandbox.ingo.money
    description: Sandbox
  - url: https://payapi.ingo.money
    description: Production
security:
  - HmacAuth: []
paths:
  /gateway/verify--ach:
    post:
      tags:
        - Account Tokenization
      summary: Verify and tokenize a bank account (ACH / RTP)
      description: >
        Validates a customer's bank account data and returns a
        `customer_account_token` for use in push (Process) and pull (Debit
        Process) requests. `account_type` must be `AC` for Standard ACH / RTP or
        `SD` for Same-Day ACH.
      operationId: verifyACH
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyACHRequest'
            example:
              participant_id: 12345
              account_type: AC
              version: 11
              timestamp: 1576100326
              participant_unique_id1: 5bf1e2c3-2169-406f-bf1b-f7bc5c2303b3
              account: '22222222'
              routing_number: '011000015'
              recipient_first_name: Alex
              recipient_last_name: Rivera
              recipient_address1: 100 Innovation Way
              recipient_address2: Apt 2
              recipient_city: Anytown
              recipient_state: GA
              recipient_zip: '00000'
              recipient_phone: 1231231234
              amount: 1010.5
              fi_account_type: '1'
              fi_account_classification: '1'
              recipient_business_name: Skywalker Enterprises
              participant_unique_id2: 80525360-dae4-4d0f-9f5c-e09f3fdcf7c8
      responses:
        '200':
          description: Verification successful — token returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyACHResponse'
              example:
                status: 100
                client_message: Success
                data:
                  customer_account_token: 89421718-a62e-4344-8a1d-4baf73fb11f1
                  last_4: '2222'
                  request_timestamp: 1576100403
                  issuers:
                    - payee_id: '550333'
                      payee_name: Test Bank
                      payee_address: null
                      payee_city: null
                      payee_state: null
                      payee_zip: null
                      credit_info:
                        min: '0.10'
                        max: '1000.00'
                        card_type: DDA
                        estimated_posting_time: Payment will post 04/22/2026
                        estimated_posting_date: 04/22/2026
                      issuing_network: NA
                      credit_enabled: 1
                      debit_enabled: 0
                  participant_unique_id1: 5bf1e2c3-2169-406f-bf1b-f7bc5c2303b3
                  participant_unique_id2: 80525360-dae4-4d0f-9f5c-e09f3fdcf7c8
                  count: 1
                time: '1.0263'
        '400':
          description: Validation error — check request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 700
                client_message: Account not currently available for payment
                data:
                  request_timestamp: 1576100403
components:
  schemas:
    VerifyACHRequest:
      type: object
      required:
        - participant_id
        - account_type
        - version
        - timestamp
        - participant_unique_id1
      description: >
        Provide either `customer_account_token` or the raw account fields
        (`account`, `routing_number`, `recipient_first_name`,
        `recipient_last_name`, `recipient_address1`, `recipient_city`,
        `recipient_state`, `recipient_zip`) — never both.
      properties:
        participant_id:
          type: integer
          description: Unique participant identifier assigned by Ingo.
          example: 12345
        account_type:
          type: string
          enum:
            - AC
            - SD
          minLength: 1
          description: >
            Value should be set to `AC` for Standard ACH / RTP or `SD` for
            Same-Day ACH.
          example: AC
        version:
          type: integer
          description: API version of the request. Current version is 11.
          example: 11
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp of the request.
          example: 1576100326
        participant_unique_id1:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Participant assigned ID to be associated with
            `customer_account_token` creation. Should correlate to participant
            assigned values affiliated with future process requests for tracking
            purposes (e.g. CustomerID or AccountID). Must not contain NPI data.
          example: 5bf1e2c3-2169-406f-bf1b-f7bc5c2303b3
        account:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Bank account number. Required unless a valid
            `customer_account_token` is provided.
          example: '22222222'
        routing_number:
          type: string
          description: >
            Bank routing number associated with the account number. Required
            unless a valid `customer_account_token` is provided.
          example: '011000015'
        customer_account_token:
          type: string
          minLength: 1
          maxLength: 255
          nullable: false
          description: >
            Alternative to raw account data when the account was previously
            tokenized. If provided, the following fields are not required and
            should be omitted: `recipient_first_name`, `recipient_last_name`,
            `account`, `routing_number`, `recipient_address1`, `recipient_city`,
            `recipient_state`, `recipient_zip`.
          example: 89421718-a62e-4344-8a1d-4baf73fb11f1
        recipient_zip:
          type: string
          maxLength: 10
          pattern: ^[0-9]{5}(?:-[0-9]{4})?$
          description: >
            Recipient zip code. 5-digit zip or zip+4 in xxxxx-xxxx format.
            Required unless a valid `customer_account_token` is provided.
          example: '30313'
        recipient_first_name:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Recipient first name. Required unless a valid
            `customer_account_token` is provided.
          example: Luke
        recipient_last_name:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Recipient last name. Required unless a valid
            `customer_account_token` is provided.
          example: Skywalker
        recipient_state:
          type: string
          minLength: 2
          maxLength: 2
          pattern: >-
            ^(?:A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$
          description: >
            Recipient state (standard US postal abbreviation). Required unless a
            valid `customer_account_token` is provided.
          example: GA
        recipient_city:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Recipient city. Required unless a valid `customer_account_token` is
            provided.
          example: Atlanta
        recipient_address1:
          type: string
          minLength: 1
          maxLength: 255
          description: >
            Recipient address line 1. Required unless a valid
            `customer_account_token` is provided.
          example: 123 Main St.
        fi_account_type:
          type: string
          maxLength: 3
          pattern: ^(1|2)?$
          description: >
            Financial institution account type. Default = 1 (DDA/Checking). 1 =
            DDA/Checking, 2 = Savings.
          example: '1'
        fi_account_classification:
          type: string
          maxLength: 3
          pattern: ^(1|2)?$
          description: >
            Financial institution account classification. Default = 1
            (Personal). 1 = Personal, 2 = Business.
          example: '1'
        amount:
          type: number
          format: float
          minimum: 0.01
          nullable: true
          description: >
            Dollar amount of disbursement. Max value determined by participant
            velocity limits.
          example: 1010.5
        recipient_phone:
          type: integer
          nullable: true
          description: 10-digit recipient phone number.
          example: 1231231234
        recipient_address2:
          type: string
          maxLength: 255
          nullable: true
          description: Recipient address line 2.
          example: Apt 2
        recipient_business_name:
          type: string
          maxLength: 150
          nullable: true
          description: Optional recipient business name.
          example: Skywalker Enterprises
        participant_unique_id2:
          type: string
          maxLength: 255
          description: >
            Optional second participant assigned ID to be associated with
            `customer_account_token` creation. Should be carried forward to
            future process requests for tracking purposes. Must not contain NPI
            data.
          example: 80525360-dae4-4d0f-9f5c-e09f3fdcf7c8
        store_id:
          type: string
          maxLength: 255
          description: |
            Client assigned store ID. Required for Retail client participants.
          example: STORE-001
        clerk_id:
          type: string
          maxLength: 255
          description: |
            Client assigned clerk ID. Required for Retail client participants.
          example: CLK-007
        terminal_id:
          type: string
          maxLength: 255
          description: >
            Client assigned terminal ID. Required for Retail client
            participants.
          example: TERM-042
    VerifyACHResponse:
      type: object
      properties:
        status:
          type: integer
          description: >
            Numeric code describing the status of the API request. 100 =
            Success.
          example: 100
        client_message:
          type: string
          description: Text description associated with the status code.
          example: Success
        data:
          type: object
          properties:
            customer_account_token:
              type: string
              description: >
                GUID — unique value generated based upon account and recipient
                data. Use this token in all subsequent Process requests for this
                account.
              example: 89421718-a62e-4344-8a1d-4baf73fb11f1
            last_4:
              type: string
              description: The last 4 digits of the account number.
              example: '2222'
            request_timestamp:
              type: integer
              format: int64
              description: Unix timestamp of the request.
              example: 1576100403
            issuers:
              type: array
              description: Information about the issuer of the account.
              items:
                type: object
                properties:
                  payee_id:
                    type: string
                    description: The Ingo assigned ID for the payee.
                    example: '550333'
                  payee_name:
                    type: string
                    description: Name of the payee (issuer).
                    example: Test Bank
                  payee_address:
                    type: string
                    nullable: true
                    description: Payee address.
                    example: null
                  payee_city:
                    type: string
                    nullable: true
                    description: Payee city.
                    example: null
                  payee_state:
                    type: string
                    nullable: true
                    description: Payee state.
                    example: null
                  payee_zip:
                    type: string
                    nullable: true
                    description: Payee zip code.
                    example: null
                  credit_info:
                    type: object
                    nullable: true
                    description: >
                      Information regarding limits for push (credit)
                      transactions. Returned if participant is enabled for push
                      and account is enabled for push processing.
                    properties:
                      min:
                        type: string
                        description: Minimum amount accepted for a push transaction.
                        example: '0.10'
                      max:
                        type: string
                        description: Maximum amount accepted for a push transaction.
                        example: '1000.00'
                      card_type:
                        type: string
                        description: >
                          Account type identifier. Always returns `DDA` for bank
                          account transactions.
                        example: DDA
                      estimated_posting_time:
                        type: string
                        description: Estimated posting time narrative.
                        example: Payment will post 04/22/2026
                      estimated_posting_date:
                        type: string
                        description: Estimated posting date.
                        example: 04/22/2026
                  debit_info:
                    type: object
                    nullable: true
                    description: >
                      Information regarding limits for pull (debit)
                      transactions. Returned if participant is enabled for pull
                      and account is enabled for pull processing.
                    properties:
                      min:
                        type: string
                        description: Minimum amount accepted for a pull transaction.
                        example: '0.10'
                      max:
                        type: string
                        description: Maximum amount accepted for a pull transaction.
                        example: '1000.00'
                      card_type:
                        type: string
                        description: Account type identifier.
                        example: DDA
                  issuing_network:
                    type: string
                    description: >-
                      Issuing network identifier. Returns `NA` for bank
                      accounts.
                    example: NA
                  credit_enabled:
                    type: integer
                    enum:
                      - 0
                      - 1
                    description: >
                      Whether the account is enabled for push (credit)
                      transactions. 1 = Enabled, 0 = Not enabled.
                    example: 1
                  debit_enabled:
                    type: integer
                    enum:
                      - 0
                      - 1
                    description: >
                      Whether the account is enabled for pull (debit)
                      transactions. 1 = Enabled, 0 = Not enabled.
                    example: 0
            participant_unique_id1:
              type: string
              description: Echo of participant assigned ID for the verify request.
              example: 5bf1e2c3-2169-406f-bf1b-f7bc5c2303b3
            participant_unique_id2:
              type: string
              nullable: true
              description: >
                Echo of optional second participant assigned ID for the verify
                request.
              example: 80525360-dae4-4d0f-9f5c-e09f3fdcf7c8
            count:
              type: integer
              description: Always returns 1.
              example: 1
        time:
          type: string
          description: Time in seconds to complete the request.
          example: '1.0263'
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          example: 700
        client_message:
          type: string
          example: Account not currently available for payment
        data:
          type: object
          properties:
            request_timestamp:
              type: integer
              format: int64
              example: 1576100403
  securitySchemes:
    HmacAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        HMAC-SHA512 signed Authorization header. See the Authentication page for
        the complete signing guide.

````