Initiate bank account verification
Instant micro-deposit verification offers a quick and efficient way to verify bank account ownership.
Send a $0.01 credit with a unique verification code via RTP, FedNow, or same-day ACH, depending on the receiving bank's capabilities. This feature provides a faster alternative to traditional methods, allowing verification in a single session.
It is recommended to use the X-Wait-For: rail-response header to synchronously receive the outcome of the instant credit in the
response payload.
Possible verification methods:
instant: Real-time verification credit sent via RTP or FedNowach: Verification credit sent via same-day ACH
Possible statuses:
new: Verification initiated, credit pendingsent-credit: Credit sent, available for verification in the external bank accountfailed: Verification failed due to credit rejection/return, details inexceptionDetails
To access this endpoint using an access token
you'll need to specify the /accounts/{accountID}/bank-accounts.write scope.
curl -X POST "https://api.moov.io/accounts/{accountID}/bank-accounts/{bankAccountID}/verify" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2024.01.00" \
mc, _ := moov.NewClient()
var accountID string
var bankAccountID string
mc.InstantVerificationInitiate(ctx, accountID, bankAccountID)
using Moov.Sdk;
var sdk = new MoovClient(xMoovVersion: "<value>");
var res = await sdk.BankAccounts.InitiateVerificationAsync(
accountID: "9d6d433b-c13a-48d7-849a-1897fa71375b",
bankAccountID: "bd092468-393d-4ee0-85a8-48238fee70d2"
);
// handle responsepackage hello.world;
import io.moov.sdk.Moov;
import io.moov.sdk.models.components.Security;
import io.moov.sdk.models.errors.GenericError;
import io.moov.sdk.models.operations.InitiateBankAccountVerificationResponse;
import java.lang.Exception;
public class Application {
public static void main(String[] args) throws GenericError, Exception {
Moov sdk = Moov.builder()
.xMoovVersion("v2024.01.00")
.security(Security.builder()
.username("")
.password("")
.build())
.build();
InitiateBankAccountVerificationResponse res = sdk.bankAccounts().initiateVerification()
.accountID("9d6d433b-c13a-48d7-849a-1897fa71375b")
.bankAccountID("bd092468-393d-4ee0-85a8-48238fee70d2")
.call();
if (res.bankAccountVerificationCreated().isPresent()) {
// handle response
}
}
}require 'moov_ruby'
Models = ::Moov::Models
s = ::Moov::Client.new(
x_moov_version: 'v2024.01.00',
)
res = s.bank_accounts.initiate_verification(account_id: '9d6d433b-c13a-48d7-849a-1897fa71375b', bank_account_id: 'bd092468-393d-4ee0-85a8-48238fee70d2')
unless res.bank_account_verification_created.nil?
# handle response
endimport { Moov } from "@moovio/sdk";
const moov = new Moov({
xMoovVersion: "v2024.01.00",
security: {
username: "",
password: "",
},
});
async function run() {
const result = await moov.bankAccounts.initiateVerification({
accountID: "9d6d433b-c13a-48d7-849a-1897fa71375b",
bankAccountID: "bd092468-393d-4ee0-85a8-48238fee70d2",
});
console.log(result);
}
run();declare(strict_types=1);
require 'vendor/autoload.php';
use Moov\MoovPhp;
use Moov\MoovPhp\Models\Components;
$sdk = MoovPhp\Moov::builder()
->setXMoovVersion('v2024.01.00')
->setSecurity(
new Components\Security(
username: '',
password: '',
)
)
->build();
$response = $sdk->bankAccounts->initiateVerification(
accountID: '9d6d433b-c13a-48d7-849a-1897fa71375b',
bankAccountID: 'bd092468-393d-4ee0-85a8-48238fee70d2'
);
if ($response->bankAccountVerificationCreated !== null) {
// handle response
}from moovio_sdk import Moov
from moovio_sdk.models import components
with Moov(
x_moov_version="v2024.01.00",
security=components.Security(
username="",
password="",
),
) as moov:
res = moov.bank_accounts.initiate_verification(account_id="9d6d433b-c13a-48d7-849a-1897fa71375b", bank_account_id="bd092468-393d-4ee0-85a8-48238fee70d2")
# Handle response
print(res){
"verificationMethod": "instant",
"status": "new"
}Response headers
x-request-id
string
required
{
"error": "string"
}Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
{
"error": "string"
}Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
Response headers
x-request-id
string
required
Headers
X-Moov-Version
string
Specify an API version.
API versioning follows the format vYYYY.QQ.BB, where
YYYYis the yearQQis the two-digit month for the first month of the quarter (e.g., 01, 04, 07, 10)BBis the build number, starting at.01, for subsequent builds in the same quarter.- For example,
v2024.01.00is the initial release of the first quarter of 2024.
- For example,
The latest version represents the most recent development state. It may include breaking changes and should be treated as a beta release.
When no version is specified, the API defaults to v2024.01.00.
x-wait-for
string
Optional header to wait for certain events, such as the rail response, to occur before returning a response.
When this header is set to rail-response, the endpoint will wait for a sent-credit or failed status from the payment rail.
payment-method,
rail-response
Path parameters
accountID
string
required
bankAccountID
string
required
Response
status
string<enum>
required
new,
sent-credit,
max-attempts-exceeded,
failed,
expired,
successful
verificationMethod
string<enum>
required
instant,
ach