Step 3 - Link a bank to the User
Link a bank with Aerosync
Aerosync is a bank aggregator that allows a user to connect with both the largest FIs and local credit unions across the U.S. It supports bank OAuth flows for fast connections and quick balance refresh.

Step 3A - Retrieve an Aerosync widget URL & token
HTTP request
Sandbox - GET https://api.sandbox-pay.aero.inc/v2/aggregatorCredentials?aggregator=aerosync
Production - GET https://api.aeropay.com/v2/aggregatorCredentials?aggregator=aerosync
Note the aggregator query parameter setting Aerosync as the aggregator your user will link their bank with.
Code Example - Request
Make a request to Aeropay's GET /v2/aggregatorCredentials endpoint. You'll need to input aerosync as the value for the aggregator query parameter.
curl --request GET
--url '<https://api.sandbox-pay.aero.inc/v2/aggregatorCredentials?aggregator=aerosync'>
--header 'Content-Type: application/json'
--header 'accept: application/json'
--header 'authorization: Bearer {{userForMerchant token}}'Code Example - Response
{
"fastlinkURL": "dev.aerosync.com",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIwMzU1OWEyZi05NDdhLTQzNDQtOTY3Zi0xYjhlMzRkMjBlZTYiLCJleHAiOjE3NTM4MTQxMTMsInVzZXJJZCI6IjM2ZGU4ZGM5MTIxODQ2ZjNiNWE4MDU5ODU5NWEwMTc0IiwiY29ubmVjdGlvbklkIjoiMzZkZThkYzkxMjE4NDZmM2I1YTgwNTk4NTk1YTAxNzQiLCJ1c2VyUGFzc3dvcmQiOiIyMTM0MTViYTZiZmU0ZGQ4OTllOTgyZmFiNjE4NDBhNCIsIkNsaWVudElkIjoiMjRjZDdmMTktYmNjOS00NjVkLTllNTMtODg1NzRhMWFkNzBmIiwiQ2xpZW50TmFtZSI6IlFBX3Rlc3QgMDUtMjAtMjUiLCJzZXNzaW9uSWQiOiJhMzc0NDY5NjZmZTE0NWIyOGUzMTc5MDQ1NDRhMzJkZSJ9.YlPmaJA0KmJWrzz9GxftCtVehtWuh-KZTjoqVsobC4A",
"username": "36de8dc9121846f3b5a80598595a0174"
}Step 3B - Load the Aerosync widget
Follow one of the guides to initialize and launch the Aerosync widget within your application. These guides also explain how to interact the widget and it's postMessage events:
Sandbox: Aerosync OTP bypassIn sandbox, the OTP challenge behavior during bank linking depends on the
configurationIdused to initialize the Aerosync widget:
- Without your designated
configurationId: a real OTP will be sent and must be entered to proceed.- With your designated
configurationId: no real OTP is sent. Enter0000to proceed through the challenge.If the
0000bypass is not working with yourconfigurationId, reach out to your Solutions Engineer to confirm your bypass configuration.This behavior is sandbox-only and has no effect in production.
Keep note of the connectionId returned from the widget's onSuccess() event. You'll use them for the next step.
Code Example - Widget Response
{
"connectionId": "a2c7f64f-3df9-4090-b3bd-ad6fc3003c90",
"clientName": "Patrice's Pizza"
"aeroPassUserUuid": "735e33b9-78ec-4887-99d7-a3056997ceb9"
}
Step 3C - Connect bank account to Aeropay
Now that a user has connected their bank account with Aerosync - the next step is to link that bank account to Aeropay. You'll need to make a request to Aeropay's POST /v2/linkAccountFromAggregator endpoint.
HTTP request
Sandbox - POST https://api.sandbox-pay.aero.inc/v2/linkAccountFromAggregator Production - POST https://api.aeropay.com/v2/linkAccountFromAggregator
Request parameters
| Parameter | Required? | Type | Description |
|---|---|---|---|
| connectionId | Yes | String | This value is returned from the Aerosync widget. |
| aggregator | Yes | String | aerosync |
Code Example - Request
curl --request POST
--url <https://api.sandbox-pay.aero.inc/v2/linkAccountFromAggregator>
--header 'Content-Type: application/json'
--header 'accept: application/json'
--header 'authorization: Bearer {{token}}'
--data '
{
"connectionId": "a2c7f83f-4df9-4090-b3bd-ad6fc3003c90",
"aggregator": "aerosync"
}Code Example - Response
{
"userBankInfo": {
"bankAccountId": 4351,
"bankName": "Aerosync Bank (oAuth)",
"accountLast4": "0191",
"name": "Aerosync Savings",
"externalBankAccountId": "None",
"isSelected": true,
"accountType": "savings",
"status": "verified",
"createdDate": "2025-08-04T21:26:53+00:00",
"accountHolderInfo": [
{
"name": {
"fullName": "Dwight Schrute"
}
}
],
"canFetchBalance": true,
"balance": 312425
}
}Updated 1 day ago

