Skip to main content

Aeropay

This page provides an overview of the payments methods provided by the Aeropay adapter in the IXOPAY platform. It also includes a full list of all configuration options available to you when integrating Aeropay within your payments landscape, as well as an overview of the parameters required when submitting a transaction via IXOPAY's API.

Payment Methods

Payment MethodTransaction FlowsTransaction Types
ACH Direct DebitFull-Page Redirect, payment.jsRegister, Debit, Preauthorize, Capture, Payout, Refund, Void

Integration Guide

Aeropay uses the AeroSync widget to let users link their bank account. The flow has four steps: register the user once, prepare the widget for each checkout, let the user link their bank, then submit the transaction.

Step 1: Register the user

Call the register transaction once per customer. The following customer fields are required:

FieldDescription
customer.firstNameCustomer's first name
customer.lastNameCustomer's last name
customer.billingPhoneCustomer's phone number
customer.emailCustomer's email address

After the register call, Aeropay sends the customer a one-time SMS code to verify their phone number. The gateway will return a redirectUrl pointing to an MFA page (multi-factor authentication) where the customer enters this code to complete the verification.

On success, the register transaction UUID is the customer's Aeropay user identifier. Pass it as referenceUuid on all subsequent transactions for that customer.

Step 2: Prepare the transaction

Call prepareDebit (or preparePreauthorize) to obtain the widget token.

{
"merchantTransactionId": "order-12345",
"amount": "9.99",
"currency": "USD",
"referenceUuid": "a1b2c3d4e5f6a1b2c3d4"
}

The response includes:

FieldDescription
widgetTokenJWT used to initialize the AeroSync widget
extraData.userIdAeropay user identifier
extraData.bankAccountsArray of previously linked bank accounts (present only when at least one exists). Each entry contains bankAccountId, bank name, and masked account details. Example:
{
"bankAccounts": [
{
"bankAccountId": 1234567,
"bankName": "Example Bank",
"accountLast4": "1234",
"name": "Checking Account",
"isSelected": true,
"accountType": "checking",
"status": "verified",
"createdDate": "2026-01-01T00:00:00+00:00",
"connectionId": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
}
]
}

If bankAccounts is non-empty, present the existing accounts to the user. If the user selects one, skip the widget entirely and pass the chosen bankAccountId directly in the debit call via extraData.bankAccountId. If the user wants to link a new account instead, proceed to Step 3 as normal.

Step 3: Load the widget

​1. Embed payment.js in your page:

<script data-main="payment-js" src="https://gateway.ixopay.com/js/integrated/payment.1.3.min.js"></script>
note

The data-main="payment-js" attribute is required.

​2. Add a container element for the widget:

<div id="aeropayWidget"></div>

​3. Initialize with the widgetToken from the prepare response:

<script>
var payment = new PaymentJs('1.3');

var completeHandler = function (connectionId, event) {
// connectionId identifies the linked bank account
// Send it to the Transaction API via extraData.connectionId
};

var errorHandler = function (error) {
// Handle widget or SDK errors
};

var closeHandler = function () {
// Called when the user closes the widget without completing
};

payment.initAeropay(
'public-integration-key', // connector token
'aeropayWidget', // container element ID
widgetToken, // from prepareDebit/preparePreauthorize response
completeHandler,
errorHandler,
closeHandler
);
</script>

Step 4: Submit the transaction

Pass the connectionId from completeHandler to the Transaction API:

{
"extraData": {
"connectionId": "<connectionId>"
}
}

If the user has already linked a bank account (from extraData.bankAccounts), you can skip the widget and pass the bankAccountId directly instead:

{
"extraData": {
"bankAccountId": "<bankAccountId>"
}
}

Options

The optional parameters that initAeropay accepts:

KeyTypeDescription
iframeTitlestringAccessible title for the widget iframe. Defaults to Connect Bank
configurationIdstringAeroSync configuration ID for widget customization
widthstringWidget iframe width in pixels (e.g. 375px)
heightstringWidget iframe height in pixels (e.g. 688px)
deeplinkstringMobile deep link URL to resume the flow after OAuth authentication. Required for native mobile apps
zIndexstringCSS z-index override for the widget iframe. Defaults to 1
manualLinkOnlybooleanRestrict the widget to manual bank linking only
handleOAuthManuallybooleanPrevent the widget from automatically launching the OAuth window. Use with onEvent to handle the OAuth URL manually (e.g. in native mobile browsers)
styleobjectStyle overrides passed to the AeroSync widget (bgColor, opacity, width, height)
onLoadfunctionCalled when the widget is fully loaded
onEventfunctionCalled on widget lifecycle events. Receives { type, payload: { pageTitle, onLoadApi } }. Useful for intercepting OAuth redirects on mobile
<script>
var aeropayOptions = {
iframeTitle: 'Connect your bank',
configurationId: 'your-config-id',
width: '375px',
height: '688px',
onLoad: function () {
console.log('Widget ready');
},
onEvent: function (event) {
// Intercept OAuth redirect in native mobile apps
if (event.payload.pageTitle === 'launchExternalWindow') {
openInAppBrowser(event.payload.onLoadApi);
}
},
};

payment.initAeropay(
'public-integration-key',
'aeropayWidget',
widgetToken,
completeHandler,
errorHandler,
closeHandler,
aeropayOptions
);
</script>

Transaction API Additional Parameters

When calling debit or preauthorize, the following extraData keys are supported:

KeyDescription
connectionIdThe connection ID returned by the widget completeHandler. Pass this when the user linked a new bank account via the widget
bankAccountIdID of a previously linked bank account from prepareDebit / preparePreauthorize response extraData.bankAccounts. Pass this to skip the widget for returning users
note

Exactly one of connectionId or bankAccountId must be provided. If connectionId is passed, Aeropay will link the bank account and return a bankAccountId that can be reused on subsequent transactions.

Payout

Payouts are supported as a standard payout transaction. The following extraData keys are supported:

KeyTypeDescription
bankAccountIdstringID of the destination bank account to pay out to
rtpbooleanWhen true, sends the payout via Real-Time Payments (RTP) for near-instant settlement instead of standard ACH
{
"extraData": {
"bankAccountId": "<bankAccountId>",
"rtp": true
}
}
note

A successful payout response does not guarantee final settlement. Aeropay may reverse an approved payout after the fact (e.g. due to a compliance hold), which will update the transaction status to error via a webhook notification. Monitor for asynchronous status changes on payout transactions.