Manage company bank accounts
You must associate a verified bank account with each company before running payroll.
Bank accounts are verified through micro deposits, ensuring a secure and reliable connection to the companyβs funding source.
1. Create a bank account
Create and connect a new bank account for a company using the POST /v1/companies/{company_id}/bank_accounts endpoint. If a default bank account exists, the new bank account will replace it as the company's default funding method.
You can also connect a bank account from Plaid using the POST plaid/processor_token
endpoint.
When testing in Demo: Use the sample routing number 102001017
. The API checks that the routing number is a valid US routing number, and therefore will reject false inputs.
Sample request
curl --request POST \
--url https://api.gusto-demo.com/v1/companies/{company_uuid}/bank_accounts \
--header 'accept: application/json' \
--header 'authorization: Bearer {{company_access_token}}' \
--header 'content-type: application/json' \
--data '
{
"routing_number": "102001017",
"account_type": "Checking",
"account_number": "9775014007"
}
'
const fetch = require('node-fetch');
const url = 'https://api.gusto-demo.com/v1/companies/{company_uuid}/bank_accounts';
const options = {
method: 'POST',
headers: {
accept: 'application/json',
'content-type': 'application/json',
authorization: 'Bearer <<COMPANY_API_TOKEN>>'
},
body: JSON.stringify({
routing_number: '115092013',
account_type: 'Checking',
account_number: '9775014007'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error('error:' + err));
Sample response
{
"uuid": "{{uuid}}",
"company_uuid": "{{company_uuid}}",
"account_type": "Checking",
"routing_number": "102001017",
"hidden_account_number": "XXXX014007",
"verification_status": "awaiting_deposits",
"verification_type": "bank_deposits",
"name": "Employer Funding Account"
}
Two verification deposits are automatically sent to the new bank account in 1-2 business days. During this stage, the bank account's verification_status
is awaiting_deposits
.
When the deposits are successfully transferred, the verification_status
changes to ready_for_verification
.
2. Verify a bank account
At this point, call the PUT /v1/companies/{company_id}/bank_accounts/{bank_account_uuid}/verify to verify the bank account. After a successful verification, the bank account's verification_status
is returned as verified
.
Sample request
curl --request PUT \
--url https://api.gusto-demo.com/v1/companies/{company_uuid}/bank_accounts/{bank_account_uuid}/verify \
--header 'accept: application/json' \
--header 'authorization: Bearer {{company_access_token}}' \
--header 'content-type: application/json' \
--data '
{
"deposit_1": 0.02,
"deposit_2": 0.42
}
'
const fetch = require('node-fetch');
const url = 'https://api.gusto-demo.com/v1/companies/{company_uuid}/bank_accounts/{bank_account_uuid}/verify';
const options = {
method: 'PUT',
headers: {
accept: 'application/json',
'content-type': 'application/json',
authorization: 'Bearer <<COMPANY_API_TOKEN>>'
},
body: JSON.stringify({deposit_1: 0.02, deposit_2: 0.42})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error('error:' + err));
Sample response
{
"uuid": "{{uuid}}",
"company_uuid": "{{company_uuid}}",
"account_type": "Checking",
"routing_number": "102001017",
"hidden_account_number": "XXXX014007",
"verification_status": "verified",
"verification_type": "bank_deposits",
"name": "Employer Funding Account"
}
Validation in Demo
For testing in Demo, use the POST companies/{company_id_or_uuid}/bank_accounts/{bank_account_uuid}/send_test_deposits endpoint simulate micro-deposit transfers.
Updated 1 day ago