Webhook Update: Retries

Aeropay has added retry functionality to our webhook events. These details can be found here: https://dev.aero.inc/docs/webhooks-1#webhook-retries

If your webhook endpoint temporarily can’t process events, Aeropay will automatically resends the undelivered events to your endpoint, increasing the time for your webhook endpoint, with exponential backoff and jitter, to eventually receive and process all events.

Aeropay will retry webhooks if:

  • Callback URL fails to respond within 3000ms
  • Callback URL fails to respond with 200 status code

Aeropay will attempt up to 5 total retries.

Aeropay v2 APIs

Aeropay has released a new major version of our API documentation: v2. This update is Aeropay's first major version update of all API endpoints. The v2 API endpoints are more efficient, standardized, and secure.

Notable changes from v1 to v2

RESTful API URIs

Aeropay has updated the API URIs to more RESTful.

OLD URLNEW v2 URL
POST /tokenPOST /v2/token
GET /preauthTransactionGET /v2/preauthTransaction/preauthTransactionId

Standardized Error Messages

All error messages follow the same standard format, below.

// example error message 1
{
    "error": {
        "help": "contact [email protected] for help",
        "code": "AP113",
        "message": "User does not exist"
    }
}

// example error message 2
{
    "error": {
        "code": "AP701",
        "message": "Improperly formatted parameter: ['id']"
    }
}

Transaction Identifiers

In the Aeropay v2 API transaction UUID values were merchant identifiers and unique transaction identifiers. In v2 API, transaction UUIDs are still unique, idempotent values for transactions. But the referenceId field, a new parameter, is used as a merchant identifier of a transaction.

curl --location 'baseURL/v2/transaction' \
--header 'Content-Type: application/json' \
--header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoiMSIsInN1YiI6InVzZXJmb3JtZXJjaGFudCIsImp0aSI6IjQ4NDAxNDA1LWM1YWUtNGJjNS04MTI1LTBlYWYwMTkwNGUyNSIsImV4cCI6MTc2MTE3MDcyNiwidXNlcm5hbWUiOiJkNWUxN2NiZi05MmFkLTQ0ZTctYjQ4My0xOWRiYTdhZGFhYTQiLCJtZXRhZGF0YSI6eyJtZXJjaGFudF9pZCI6MTA1N319.5awUg674NNgui81jylKPBMYmUpwOLidGpINPXv5SaQA' \
--data '{                
    "bankAccountId": 1717,
    "merchantId": 1057,
    "amount": {
        "amount": 1200, // amount in pennies
        "currency": "USD"
    },
    "referenceId": "eae2e262-7931-44d9-af42-8531e242b465"
}'

User Identifiers

In the Aeropay v2 API userId values will all follow standard UUID format. In v1 API, userIds were integers.

OLD userId v1New userId v2
1545649681f36-bbe0-4038-b024-a5d86584255a

User MFA Flow

In the Aeropay v2 API, Aeropay added support for SMS 2FA on both new and network users. By default, SMS 2FA will be sent for all new and existing network users when POST /v2/user is called.

mfaType

The new mfaType parameter can have a value of 'sms', 'email', or null, and can be used to determine both if an MFA code as been sent and by what protocol.

When migrating from v1 to v2 endpoints, your current logic to look for 'existingUser' can be replaced with looking for a non-null mfaType.

bankAccounts

The response structure for POST /v2/user has also been updated to remove the bankAccounts array. A user's linked bankAccounts are now fetched from a new endpoint GET /v2/bankAccounts.

When migrating from v1 to v2 endpoints, you will now rely on the new bankAccounts endpoint to fetch and display a user's linked banks.

Idempotency-Key Header Support

V2 introduces support for the Idempotency-Key header on POST /v2/reverseTransaction. When included, Aeropay stores the response for that key and returns the same outcome on any retry, preventing duplicate refunds on network errors or timeouts. The same key cannot be used with a different request body. Idempotency is optional; if no key is sent, duplicate protection is not applied.

Aerosync SDK v2.0+

Aeropay v2 APIs require Aerosync SDK v2.0+. If you are migrating from v1 to v2, you must also migrate to Aerosync SDK v2.0+.

Additional Changes from v1 to v2

  • Authentication header — header key renamed from authorizationToken to authorization
  • Amount format — amount is no longer a string in dollars; v2 expects an object with value in pennies and a currency code
  • /reverseTransaction — changed from a GET to a POST
  • /linkAccountFromAggregator — no longer accepts user_id and user_password; v2 expects connectionId from the Aerosync SDK (v2.0+ only)
Itemv1 (OLD)v2 (NEW)
Base URL - sandboxhttps://api.sandbox-pay.aero.inchttps://api.sandbox-pay.aero.inc/v2
Base URL - productionhttps://api.aeropay.comhttps://api.aeropay.com/v2
Auth headerauthorizationTokenauthorization
Amount format"amount": "10.00" (string, dollars)"amount": {"amount": 1000, "currency": "USD"} (object, pennies)
reverseTransactionGET /reverseTransactionPOST /reverseTransaction
linkAccountFromAggregatoruser_id + user_passwordconnectionId

SFTP Report Update

As part of recent reporting enhancements, Aeropay has added an explicit RTP identifier. As of October 1st 2025, a new column will be added to the daily SFTP reports called ACH/RTP Identifier. Accepted values in this column are either RTP or ACH depending on which rails the payment was processed through.

Ensure your reporting systems are setup to properly handle this change and accept this new column.

Sample Updated Report (.csv)

transactionid,Batch Date,Batch ID,status,User ID,First Name,Last Name,Email,merchantid,merchantlocationid,title,amount ($),apfee ($),Created Date,Modified Date,externaltransactionid,handshaketype,deviceid,paymenttype,attributes,useraccountid,merchantaccountid,internalamount,uuid,Merchant Reputation Status,ACH/RTP Identifier
"1,759,497",2025-09-05 17:01:00,182747,processed,"1,103,173",Pat,Jones,[email protected],930,900,Online Transaction,250,1,"September 4, 2025, 7:28 PM","September 4, 2025, 7:28 PM",fiservpx:634296,po,,payout,,"750,183",651,1,4281f386-d487-4115-8d32-9c94da9c7161,Standard,RTP
"1,759,121",2025-09-05 17:01:00,183691,processed,"1,803",George,Clooney,[email protected],930,900,Online Transaction,20,1,"September 4, 2025, 7:28 PM","September 4, 2025, 7:28 PM",,po,,payout,,"2,452",651,1,2ab9dcec-d3de-4a3b-8114-dbdb2bd28aa4,Standard,ACH


New Merchant Portal URL

As part of recent architecture updates, Aeropay released a new URL for the Aeropay Merchant Portal in both sandbox and production. Beginning Monday, July 14th 2025, Aeropay will begin forwarding all old portal URLs to the new URL format.

While the old URL format will continue to be active as it forwards to the new site, we recommend updating any bookmarks or saved links to our new portal URL. Please see the URL changes below:

New Sandbox Environment

Aeropay released a new sandbox environment for testing purposes which will replace Aeropay's existing staging environment. This new environment is more stable and efficient, providing more reliable testing and faster integrations.

What will happen to my test data in staging?

During this transition period, Aeropay will share data between the sandbox environment and staging environment to ensure a smooth transition between environments if this change is occurring during your integration.

When will staging be deprecated?

The staging environment will be available until May 22nd, 2025, at which point all Aeropay testing must use the sandbox environment. This means updating any testing API URLs to sandbox and using the new sandbox merchant portal.

🚀 Aerosync Web SDK v1.1.1 - Release Date: 4/22/2025

✨ New Feature

Embedded Bank View (Optional)
You can now embed a list of Aerosync-supported banks directly into your webpage using the new embedded view feature. This offers a smoother and more integrated user experience.
Learn more here: https://dev.aero.inc/docs/embedded-view


🐛 Bug Fixes

Fixed flashing issue when launching the widget in dark mode.
Resolved unintended onClose event trigger during successful bank linking.
General code cleanup and several minor bug fixes for better performance and stability.


⚠️ Breaking Changes (for v1.1.0 and earlier)

If you're upgrading from v1.1.0 or below, take note of the following breaking changes:

openWidget() ➡️ renamed to initAeroSyncWidget()
– Use the new function name to initiate the widget.
Widget Config: id ➡️ renamed to elementId
– Update your HTML reference in the widget configuration.
Event Handling Change:
– Now, only onSuccess() is triggered after a successful bank link and widget close.
– Previously, both onSuccess and onClose were fired together.
– Make sure to listen to onSuccess() to handle success actions like updating your UI or navigating to the next step.


ℹ️ Note for v2.x.x Users
If you're already using v2.x.x, no changes are needed.
This update is specifically targeted at 1.x.x clients who haven’t migrated yet.

Enhancements

Aeropay SDK

  • Updated end user experience across all Aeropay SDK integrations and payment links. These changes include a new landing page UI with more scalable customization capabilities.

Bugs Fixed

Merchant Portal

  • Fixed bugs affecting search for preauthorized transactions by user name or transaction id

Enhancements

Aeropay

  • New aeropassUUID parameter added to response to POST /user and GET /user. AeropassUUIDs are unique identifiers for users across Aeropay's suite of products.

Features

Merchant Portal

  • Updates to merchant portal user experience and layout

Bugs Fixed

Merchant Portal

  • Fixed bug blocking merchant users from searching preauth transactions by uuid

Enhancements

Aerosync

  • Bolstered user security and blocks against bots