Integration Certification

Integration Certification is the process VCI uses to verify that your integration with the Veer API is ready for production. To complete certification, you must execute a defined set of test cases in both SANDBOX and LIVE environments, capture evidence of each result, and submit it to VCI for review. Certification is required before your integration can process live transactions on behalf of merchants.

Process Overview

Follow the steps below in order. Begin by obtaining a PILOT Merchant account in the LIVE environment, then complete all test cases in SANDBOX before moving to LIVE testing. Each phase builds on the previous — do not skip ahead. Once all test cases are complete, submit your evidence to VCI to receive your certificate of completion.

Step

Title

Description

1

Request a LIVE PILOT Merchant

  • Download and complete the Pilot Merchant Application.
  • Fill out the form and follow the instructions provided within the document to request your PILOT Merchant account in the LIVE environment.

2

SANDBOX TESTING
  1. Integrate to VCI's API.

  2. Validate the below test cases.

  3. Screenshot the results.

3

LIVE TESTING
  1. Move real money between live bank accounts using the test cases below.

  2. Screenshot the results.

4

Submit Evidence

  • Submit evidence of completion to VCI of all test cases for both
    SANDBOX TESTING and LIVE TESTING environments.
  • Create 2 separate Word documents -- one for SANDBOX Testing and one for LIVE Testing.
    • Paste the screenshot evidence for each test case into the appropriate document, and clearly indicate which test case each screenshot corresponds to.

5

Certification

VCI will review the evidence and provide a certificate of completion.




🚧

Caution

  • Create the below transactions before 6:00 PM ET, so that the creation day will be Day 0.
  • Saturdays and Sundays are non-processing days
  • Bank holidays are non-processing days.
    • New Year's Day, MLK Day, Presidents' Day, Memorial Day, Juneteenth National Independence Day, Independence Day, Labor Day, Columbus Day, Veterans Day, Thanksgiving Day, Christmas Day
  • For LIVE TESTING, use a test bank account in order to prevent disruption to your critical bank accounts.




Test Case 1: One-Off Payment for CCD

Validates the full lifecycle of a CCD payment. Covers creation, origination, settlement, and refund. Complete this test case first; it confirms your integration can correctly track status transitions across multiple processing days and execute a refund against a settled transaction.

  1. Day 0: Creation
    1. Create a CCD Payment for $0.01 without using a Customer Token.
    2. Verify that the new transaction is in Accepted status.
  2. Day 1: Origination
    1. Verify Originated status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.01 debit.
  3. Day 2: Wait
    1. Do nothing.
  4. Day 3: Wait
    1. Do nothing.
  5. Day 4: Settlement
    1. Verify Settled status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.01 credit.
  6. Day 5: Refund
    1. Refund the $0.01 Payment transaction.
    2. Verify that the new transaction is in Accepted status.
  7. Day 6: Origination and Settlement
    1. Verify Settled status.
    2. LIVE TESTING: Log in to your online banking.
      1. Verify receipt of a $0.01 debit.
      2. Verify receipt of a $0.01 credit.



Test Case 2: One-Off Payments for PPD, WEB

Extends Test Case 1 to cover PPD (Prearranged Payment and Deposit) and WEB (Internet-Initiated Entries) — two Standard Entry Classes commonly used for consumer payments. Each has distinct NACHA requirements. Use the same lifecycle steps as Test Case 1 (Day 0 through Day 4) with the amounts specified below.

Repeat Test Case 1, Steps 1 (Day 0: Creation) through 5 (Day 4: Settlement), using the following Standard Entry Codes and amounts:

  1. PPD and $0.21
  2. WEB and $0.22



Test Case 3: One-Off Payout

Validates the outbound payment (payout) flow, where funds are pushed from the merchant to an external bank account. Payouts follow a distinct processing path from standard payments. This test case confirms your integration can correctly initiate and track a disbursement through origination and settlement.

  1. Day 0: Creation
    1. Create a CCD Payout for $0.30
    2. Verify that the new transaction is in Accepted status.
  2. Day 1: Origination
    1. Verify Originated status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.30 debit.
  3. Day 2: Wait
    1. Do nothing.
  4. Day 3: Wait
    1. Do nothing.
  5. Day 4: Settlement
    1. Verify Settled status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.30 credit.



Test Case 4: Voiding

Validates same-day transaction cancellation. A void can only be issued after a transaction is Accepted and before it is originated into the ACH network — the cutoff is 6:00 PM ET. This test case confirms your integration can correctly issue and confirm a void within that window.

  1. Day 0: Creation & Voiding
    1. Create a Payment for $0.40.
    2. Verify that the new transaction is in Accepted status.
    3. Void it before 6:00 PM ET.
    4. Verify Voided status.



Test Case 5: Payment (with Customer Token)

Validates payment processing using a stored customer token. Tokenization allows bank account credentials to be saved and reused for future transactions without requiring re-entry. This test case confirms that your customer creation flow is correctly integrated with payment processing and that tokenized transactions follow the same lifecycle as standard payments.

  1. Day 0: Customer & Transaction Creation
    1. Create a customer to be tokenized.
    2. Create a Payment for $0.50 using the customer token.
    3. Verify that the new transaction is in Accepted status.
  2. Day 1: Origination
    1. Verify Originated status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.50 debit.
  3. Day 2: Wait
    1. Do nothing.
  4. Day 3: Wait
    1. Do nothing.
  5. Day 4: Settlement
    1. Verify Settled status.
    2. LIVE TESTING: Log in to your online banking, and verify receipt of a $0.50 credit.



Test Case 6: Normal Return

Validates handling of standard ACH Returns. Returns arrive asynchronously after origination. This test case confirms your integration correctly detects and surfaces the Returned status within the expected processing window. SANDBOX only — skip for LIVE TESTING.

❗️

LIVE TESTING: skip this test case.

  1. Day 0: Creation
    1. Create a Payment for $0.60:
      • Set the Payment description as "Day2R01".
        • A simulated Return (R01 - Insufficient Funds) will occur on Day 2.
    2. Verify that the new transaction is in Accepted status.
  2. Day 1: Origination
    1. Verify Originated status.
  3. Day 2: Return
    1. After 10:00 AM ET, Verify Returned status.



Test Case 7: Late Return

Validates handling of Late Returns, which occurs after a transaction has already reached Settled status. This test case confirms your integration correctly handles the Settled → Returned transition. SANDBOX only — skip for LIVE TESTING.

❗️

LIVE TESTING: skip this test case.


  1. Day 0: Creation
    1. Create a Payment for $0.70 with the description as "Day5R10".
      • A simulated Return (R10 - Customer Advises Unauthorized) will occur on Day 5.
    2. Verify that the new transaction is in Accepted status.
  2. Day 1: Origination
    1. Verify Originated status.
  3. Day 2: Return
    1. Do nothing.
  4. Day 3: Wait
    1. Do nothing.
  5. Day 4: Settlement
    1. Verify Settled status.
  6. Day 5: Return
    1. After 10:00 AM ET, verify Returned status.



Test Case 8: Errors

Validates that your integration correctly surfaces API validation errors. The API will reject invalid requests with an Errored status and a descriptive error message. This test case confirms your integration captures and exposes those errors accurately.

  1. Invalid Routing Number - 770000000
    1. Create a Payment for $0.80 using 770000000 as the routing number.
    2. Verify the response is Errored status with description as “Customer Routing Number is not in master”.