---
description: >-
  Verify and tokenize a US bank account via POST /check-account using a Plaid
  account-check token. Returns a reusable accountTokenId for ACH pulls.
---

# Check Account

The Check Account API verifies a bank account linked through [Plaid](payment/pulling-funds/plaid.md) and returns a reusable **`accountTokenId`** you can use to pull funds via ACH — without ever handling raw account and routing numbers.

It is the finalization step of the Plaid bank-linking flow: after the customer completes Plaid Link, you exchange the Plaid **public token** (`accountCheckToken`) and account id (`accountCheckId`) for a tokenized, verified account.

Use this endpoint to:

- **Tokenize a Plaid-linked account** into an `accountTokenId` for reuse in payments
- **Verify account ownership** before submitting a pull payment
- **Reduce failed transactions** by catching invalid account details early

> **Note:** This API does **not** charge the account or create a payment. It only verifies and tokenizes the account.

## Endpoint

```
POST https://{FQDN}/check-account
```

**Headers:**

| Header | Value |
|---|---|
| `Authorization` | `Bearer {accessToken}` |
| `Content-Type` | `application/json` |

## Request

### Root Object

| Field | Type | Required | Description |
|---|---|---|---|
| `externalPaymentId` | string | Yes | Your unique identifier for this verification request (idempotency key) |
| `sender` | object | Yes | Sender details — wraps the payment method to verify |

### `sender` Object

| Field | Type | Required | Description |
|---|---|---|---|
| `paymentMethod` | object | Yes | The Plaid-linked account to verify and tokenize |

### `sender.paymentMethod`

| Field | Type | Required | Description |
|---|---|---|---|
| `type` | string | Yes | `"BANK_DEPOSIT"` |
| `countryCode` | string | Yes | Country of the bank (ISO Alpha-2, e.g. `"US"`) |
| `accountCheckToken` | string | Yes | The Plaid **public token** returned by Plaid Link on the client (`public-sandbox-...` / `public-production-...`) |
| `accountCheckId` | string | Yes | The Plaid **account id** the customer selected in Plaid Link |

## Example Request

```bash
curl -X POST https://{FQDN}/check-account \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "CHECK_ACCOUNT_0a022f78-14b6-4f6b-8ddd-d1c9be7c4dcc",
    "sender": {
      "paymentMethod": {
        "type": "BANK_DEPOSIT",
        "countryCode": "US",
        "accountCheckToken": "public-sandbox-57f6f60a-e637-4582-8858-b871e59f5f4e",
        "accountCheckId": "X4943dk1W1CbvoJ6r3vPTQrLgWlmyet1vm1on"
      }
    }
  }'
```

## Response — Verified (200)

```json
{
  "paymentId": "cf8600be-ec46-4ed9-a00b-ece348004ca7",
  "parentPaymentId": "cf8600be-ec46-4ed9-a00b-ece348004ca7",
  "externalPaymentId": "CHECK_ACCOUNT_0a022f78-14b6-4f6b-8ddd-d1c9be7c4dcc",
  "accountTokenId": "62d37fd8-89d0-43ca-900f-a75a6e871fe5",
  "created": "2026-05-29 16:39:57",
  "approved": true,
  "accessToken": "access-sandbox-b16d9e78-b2d0-48ca-b2af-dc985571776b",
  "status": "VERIFIED",
  "bankAccountName": "Chase",
  "accountNumberMasked": "************0000",
  "routingNumberMasked": "*****1533"
}
```

### Response Fields

| Field | Type | Description |
|---|---|---|
| `paymentId` | string | Inyo's unique identifier for this verification |
| `parentPaymentId` | string | Root identifier (equals `paymentId` for a standalone check) |
| `externalPaymentId` | string | The identifier you supplied in the request |
| `accountTokenId` | string | **The tokenized account.** Pass this as `sender.paymentMethod.accountTokenId` in a [payment request](payment/pulling-funds/ach-bank-account.md) to pull funds |
| `created` | string | Verification timestamp |
| `approved` | boolean | Whether the account was successfully verified |
| `accessToken` | string | Plaid access token associated with the linked item (store securely if you need to re-query the account) |
| `status` | string | Verification status — `VERIFIED` on success |
| `bankAccountName` | string | Institution name (e.g. `"Chase"`) |
| `accountNumberMasked` | string | Masked account number |
| `routingNumberMasked` | string | Masked routing number |

## Using the `accountTokenId` in a Payment

Once verified, reference the account by its token in a `PULL` payment — no raw account numbers required:

```bash
curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "ach-order-001",
    "ipAddress": "203.0.113.42",
    "paymentType": "PULL",
    "capture": true,
    "amount": { "total": 19.99, "currency": "USD" },
    "sender": {
      "firstName": "John",
      "lastName": "Smith",
      "paymentMethod": {
        "type": "BANK_DEPOSIT",
        "accountTokenId": "62d37fd8-89d0-43ca-900f-a75a6e871fe5"
      }
    }
  }'
```

## What's Next

- [Linking Bank Accounts with Plaid](payment/pulling-funds/plaid.md) — Create the Plaid Link token and obtain the `accountCheckToken`
- [ACH (Bank Account)](payment/pulling-funds/ach-bank-account.md) — Pull funds using the tokenized account
- [Check Card Account (ANI)](check-card-account.md) — Validate cards with AVS, CVC, and Visa ANI
- [Push Transaction](payment/push-transaction.md) — Send payouts to bank accounts, cards, PIX, and wallets
