Inyo

Check Account

The Check Account API verifies a bank account linked through Plaid 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:

HeaderValue
AuthorizationBearer {accessToken}
Content-Typeapplication/json

Request

Root Object

FieldTypeRequiredDescription
externalPaymentIdstringYour unique identifier for this verification request (idempotency key)
senderobjectSender details — wraps the payment method to verify

sender Object

FieldTypeRequiredDescription
paymentMethodobjectThe Plaid-linked account to verify and tokenize

sender.paymentMethod

FieldTypeRequiredDescription
typestring"BANK_DEPOSIT"
countryCodestringCountry of the bank (ISO Alpha-2, e.g. "US")
accountCheckTokenstringThe Plaid public token returned by Plaid Link on the client (public-sandbox-... / public-production-...)
accountCheckIdstringThe Plaid account id the customer selected in Plaid Link

Example Request

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)

{
  "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

FieldTypeDescription
paymentIdstringInyo's unique identifier for this verification
parentPaymentIdstringRoot identifier (equals paymentId for a standalone check)
externalPaymentIdstringThe identifier you supplied in the request
accountTokenIdstringThe tokenized account. Pass this as sender.paymentMethod.accountTokenId in a payment request to pull funds
createdstringVerification timestamp
approvedbooleanWhether the account was successfully verified
accessTokenstringPlaid access token associated with the linked item (store securely if you need to re-query the account)
statusstringVerification status — VERIFIED on success
bankAccountNamestringInstitution name (e.g. "Chase")
accountNumberMaskedstringMasked account number
routingNumberMaskedstringMasked 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:

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