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

# POST /v1/bank-accounts/{bankAccountId}/verify-micro-deposits

> POST .../verify-micro-deposits completes bank account verification. Submit the two micro-deposit dollar amounts to confirm account ownership.

Complete verification for a bank account by submitting the two micro-deposit amounts that were sent to it. When the amounts match what Cleo Pay deposited, the account status transitions to `verified` and becomes eligible for payments. This step confirms that your business has access to the bank account.

## HTTP Request

```
POST https://api.cleo-pay.com/v1/bank-accounts/{bankAccountId}/verify-micro-deposits
```

## Authentication

Include your bearer token on every request:

```
Authorization: Bearer <token>
```

***

## Path Parameters

<ParamField path="bankAccountId" type="string" required>
  The unique identifier of the bank account to verify. This is the `id` returned when the account was created.
</ParamField>

***

## Request Body

<ParamField body="amount1" type="string" required>
  The first micro-deposit amount in **dollars** (not cents). For example, `"0.05"` represents five cents. Check the account holder's bank statement for the exact value.
</ParamField>

<ParamField body="amount2" type="string" required>
  The second micro-deposit amount in **dollars** (not cents). For example, `"0.07"` represents seven cents. Check the account holder's bank statement for the exact value.
</ParamField>

***

## Response Fields

On success, the API returns the updated bank account object with `status` set to `verified`.

<ResponseField name="id" type="string" required>
  Unique identifier for the bank account.
</ResponseField>

<ResponseField name="status" type="string" required>
  The updated verification status. Set to `verified` on a successful call, or `unverified` if the maximum number of attempts has been exceeded.
</ResponseField>

<ResponseField name="type" type="string" required>
  The bank account type: `checking` or `savings`.
</ResponseField>

<ResponseField name="connectionType" type="string" required>
  How the account was connected. Always `manual` for accounts created via the API.
</ResponseField>

<ResponseField name="name" type="string | null">
  The display name assigned to this account.
</ResponseField>

<ResponseField name="institutionName" type="string | null">
  The name of the financial institution.
</ResponseField>

<ResponseField name="accountNumberLast4" type="string | null">
  The last four digits of the account number.
</ResponseField>

<ResponseField name="routingNumberLast4" type="string | null">
  The last four digits of the routing number.
</ResponseField>

<ResponseField name="isDefault" type="boolean" required>
  Whether this account is the default account for your business.
</ResponseField>

<ResponseField name="microDepositsInitiatedAt" type="datetime | null">
  The timestamp at which micro-deposits were initiated.
</ResponseField>

<ResponseField name="microDepositsCompletedAt" type="datetime | null">
  The timestamp at which micro-deposits landed in the account.
</ResponseField>

<ResponseField name="verificationAttempts" type="number" required>
  The cumulative number of **failed** verification attempts. On a successful verification this value is not incremented. The maximum is 3.
</ResponseField>

***

## Example Request

```bash theme={null}
curl --request POST \
  --url https://api.cleo-pay.com/v1/bank-accounts/ba_01j9kxm2p4fghe3t7q8wnvd5rc/verify-micro-deposits \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "amount1": "0.05",
    "amount2": "0.07"
  }'
```

***

## Example Response

```json theme={null}
{
  "id": "ba_01j9kxm2p4fghe3t7q8wnvd5rc",
  "status": "verified",
  "type": "checking",
  "connectionType": "manual",
  "name": "Primary Operating Account",
  "institutionName": "Chase",
  "accountNumberLast4": "4321",
  "routingNumberLast4": "0021",
  "isDefault": false,
  "microDepositsInitiatedAt": "2024-10-01T10:00:00Z",
  "microDepositsCompletedAt": "2024-10-03T08:30:00Z",
  "verificationAttempts": 0
}
```

<Warning>
  You have a **maximum of 3 attempts** to submit the correct amounts. Each incorrect submission increments `verificationAttempts`. If all 3 attempts are exhausted, the account status permanently transitions to `unverified` and can no longer be verified. You will need to delete it and link a new account.
</Warning>

<Warning>
  Submit amounts in **dollars**, not cents. For example, use `"0.05"` — not `"5"`. Submitting amounts in cents is a common mistake that will count as a failed attempt.
</Warning>

<Tip>
  You can only call this endpoint after `microDepositsCompletedAt` is non-null on the account, which indicates that the deposits have arrived. Check the account status using [GET /v1/bank-accounts/{bankAccountId}](/api-reference/bank-accounts/get) before attempting verification.
</Tip>
