---
title: "Validate a Payment Method"
method: POST
path: "/v1/companies/{company_id}/payment-methods/validate"
tags: ["Payment Methods"]
---

# Validate a Payment Method

`POST /v1/companies/{company_id}/payment-methods/validate`

Validate a new `PaymentMethod` before attaching it to a `Company`. Please note that only `bank` `PaymentMethods` can be validated at this time.

When testing in [the Routable Sandbox](https://developers.routable.com/docs/our-sandbox), you can deterministically control the results you wish to receive for
each `check` based on the values of the last two digits of the `account_number`:

![The last digit is the desired `verification` result, second to last is the desired `ownership` result.](https://files.readme.io/d1c74fa053fd75781cc151341bb6cef734235c6b117ebd1d420956956c8eba48-bank_account_validation_test_data.png "Test Account Numbers")

Pass the following number in a check's digit to get the result you want:
1: `match`
2: `mismatch`
3: `no_data`
4: `unable_to_verify`
5-9 and 0: result undefined

## Path parameters

- `company_id` string, uuid, required

## Request body

- PaymentMethodsBankNewPaymentMethodBank
  - `type` 'bank', required — The type of payment method.
  - `type_details` object, required
    - `account_number` string, required — The bank account number. In responses, all but the last four digits will be masked for security.
    - `account_type` 'checking' | 'savings', required — The type of bank account.
    - `routing_number` string, required — The bank's routing number.
  - `is_primary` boolean — Whether this company account is marked as the primary account for a Company.

## Response `200`

OK

- PaymentMethodsCommonValidationResponse
  - `id` string, uuid — The `PaymentMethod` Validation Inquiry ID.
  - `checks` PaymentMethodsCommonValidationCheck[]
    - `id` string, uuid, required — The `PaymentMethod` Validation Check ID.
    - `type` 'ownership' | 'verification', required — The `PaymentMethod` Validation Check type. * `ownership` checks that a bank account's owner name matches the name provided in the request. * `verification` checks that a bank account exists and is valid/open.
    - `result` 'match' | 'mismatch' | 'no_data' | 'unable_to_verify', required — The `PaymentMethod` Validation Check result. * `match`: Routable was able to confirm a successful result on the validation check. * `mismatch`: Routable was able to confirm an unsuccessful result on the validation check. * `no_data`: No data was found to assess validity or ownership. * `unable_to_verify`: The system was unable to verify due to timeout, upstream failure, etc.
    - `created_at` string, date-time, required — The date the check was run.
    - `updated_at` string, date-time, required — The date the check was updated last.

## Other responses

- `402` — Payment Required (This feature is not enabled in your Workspace.)

---

[API](https://skmtc.net/routable/apis/routable-api.md) · [All operations](https://skmtc.net/routable/apis/routable-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/routable/routable-api/revisions/9f17a8bc982a/schema)
