openapi: 3.0.0
info:
title: Aeropay v2 API
version: 1.0.0
description: '# Introduction
Welcome to the Aeropay developer API documentation. Aeropay facilitates smart bank transfers that are quick and secure.
Please use the following documentation to learn more about how you can integrate Aeropay into your platform.
**NOTE:** For quickest integration - please review our javascript SDK.
# Onboarding
Before you begin, you must first request a test account in the Aeropay sandbox environment. Please email [support@aeropay.com](https://mailto:support@aeropay.com)
- once approved, we’ll send you sandbox credentials.
# Environments
Aeropay has two environments; staging and production. The staging environment is used for integration and testing. Ready
to go live? Access to the production environment will be granted for processing live transactions.
**NOTE:** Be sure to use the appropriate API key for the environment you wish to use. Tokens have a 30 minute TTL.
**API URLs**
(staging) [https://staging-api.aeropay.com](https://staging-api.aeropay.com)
(production) [https://api.aeropay.com](https://api.aeropay.com)
# Users & Merchants
There are two primary parties utilizing the Aeropay platform - users and merchants. Users initiate transactions with payment
to the merchant while merchants typically receive payments from users.
Please see the User Management section to learn more about how to create and manage users on the AeroPay platform.'
servers:
- url: https://api.sandbox-pay.aero.inc
variables: {}
paths:
/v2/token:
post:
summary: token
description: 'Authenticates API integrators for every Aeropay endpoint.
Returns a transient JSON web token (JWT) to authorize access to the AeroPay API. Tokens last for 30 minutes and are
required in the authorization header formatted as: `Bearer {{token}}`.
**Scopes**
The `scope` parameter determines who is acting on the system and which endpoints are available:
* **`merchant`**: Used for merchant calls. To obtain a merchant scoped token, the `id` parameter is required.
* **`userForMerchant`**: Used to act on behalf of users created by your merchant. To obtain a userForMerchant scoped
token, an additional `userId` is required along with all merchant credentials (`api_key`, `api_secret`, `id`).
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP002` | 401 | Invalid API key or secret key |
| `AP006` | 401 | Client not authorized for this scope |
| `AP101` | 401 | No authenticated user |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Authentication
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- title: Merchant Scope
type: object
properties:
apiKey:
type: string
apiSecret:
type: string
scope:
type: string
description: Type of token requested
enum:
- merchant
id:
type: integer
description: Merchant Id. Required for merchant or userForMerchant token.
required:
- apiKey
- apiSecret
- scope
- id
- title: User For Merchant Scope
type: object
properties:
apiKey:
type: string
apiSecret:
type: string
scope:
type: string
description: Type of token requested
enum:
- userForMerchant
id:
type: integer
description: Merchant Id. Required for merchant or userForMerchant token.
userId:
type: string
description: UUID id of user. Required for userForMerchant token.
required:
- apiKey
- apiSecret
- scope
- id
- userId
examples:
MerchantToken:
summary: Merchant Scope Request
value:
apiKey: '{{api_key}}'
apiSecret: '{{api_secret}}'
scope: merchant
id: '{{mainMerchantId}}'
UserForMerchantToken:
summary: User For Merchant Request
value:
apiKey: '{{api_key}}'
apiSecret: '{{api_secret}}'
scope: userForMerchant
id: '{{mainMerchantId}}'
userId: '{{userId}}'
responses:
'200':
description: Success - Token generated
content:
application/json:
schema:
type: object
properties:
TTL:
type: integer
token:
type: string
example:
TTL: 1800
token: eyJ0eXAiOiJKV1Qi...
'400':
description: Bad Request - Validation Errors. See examples for common vs. scope-specific errors.
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Common_InvalidScope:
summary: 'Common: Invalid scope'
value:
error:
code: AP700
message: Invalid scope
Common_MissingScope:
summary: 'Common: Missing scope'
value:
error:
code: AP700
message: 'Missing required Parameter: ''scope'''
Common_MissingSecret:
summary: 'Common: Missing apiSecret'
value:
error:
code: AP700
message: 'Missing required Parameter: ''apiSecret'''
Common_MissingKey:
summary: 'Common: Missing apiKey'
value:
error:
code: AP700
message: 'Missing required Parameter: ''apiKey'''
Common_InvalidId:
summary: 'Common: Invalid id format'
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''id: invalid UUID format'']'
UserScope_MissingUserId:
summary: 'UserForMerchant ONLY: Missing userId'
value:
error:
code: AP700
message: 'Missing required Parameter: ''userId'''
UserScope_InvalidUsername:
summary: 'UserForMerchant ONLY: Invalid username format'
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''userId: invalid username format'']'
'401':
description: Unauthorized - Authentication Failed
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
example:
error:
code: AP002
message: invalid API key or secret key
/v2/user:
parameters: []
post:
summary: user
description: 'Create a user associated with the authorized merchant.
When creating a user, a `userId` is returned. This `userId` is required for referencing the user within the AeroPay
system.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP006` | 401 | Client not authorized for this scope |
| `AP101` | 401 | No authenticated user |
| `AP102` | 200 | Unable to create user |
| `AP105` | 200 | Phone number missing area code |
| `AP106` | 200 | Improperly formatted phone number |
| `AP115` | 200 | Unsupported phone type |
| `AP118` | 200 | Name cannot contain numbers or special characters |
| `AP119` | 200 | Unsupported country code - US numbers only |
| `AP700` | 400 | Missing or invalid required parameter |
'
tags:
- User Management
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
description: Payload to create a new consumer user.
content:
application/json:
schema:
$ref: '#/components/schemas/userRequest'
example:
firstName: John
lastName: Doe
email: test@test.com
phoneNumber: '13125826818'
required: true
responses:
'200':
description: Success or Validation Failure (Unified 200)
headers:
Date:
schema:
type: string
example: Tue, 24 Jun 2025 20:24:21 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/userObject'
- $ref: '#/components/schemas/200failure'
examples:
Success_User_Response_MFA:
summary: 'Success: User Response with MFA'
value:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
mfaType: null
Error_MissingEmail:
summary: 'Error: Missing Email'
value:
error:
help: Contact support@aeropay.com for help.
code: AP700
message: 'Missing required Parameter: ''email'''
Error_MissingPhone:
summary: 'Error: Missing Phone Number'
value:
error:
help: Contact support@aeropay.com for help.
code: AP700
message: 'Missing required Parameter: ''phoneNumber'''
Error_InvalidPhoneFormat:
summary: 'Error: Invalid Phone Format'
value:
error:
help: Contact support@aeropay.com for help.
code: AP115
message: We're sorry, but the type of phone you entered is not supported or invalid.
Error_InvalidNameFormat:
summary: 'Error: Invalid Name Format'
value:
error:
help: Contact support@aeropay.com for help.
code: AP118
message: User cannot be created with numbers or special characters
Error_ImproperlyFormatted:
summary: 'Error: Improperly Formatted Parameter'
value:
error:
help: Contact support@aeropay.com for help.
code: AP700
message: 'Improperly formatted parameter: [''firstName'']'
'401':
description: Unauthorized - Invalid or missing Merchant Token
content:
application/json:
example:
error:
code: AP002
message: invalid API key or secret key
get:
summary: user
description: 'Fetch a user associated with the merchant.
The user fetched is based on the `userId` provided in the `/token` call.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
'
tags:
- User Management
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
responses:
'200':
description: Success
headers:
Date:
schema:
type: string
example: Tue, 29 Jul 2025 11:07:36 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/userGetResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_UserDetails:
summary: 'Success: Get User Details'
value:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
userStatus: Active
'401':
description: Unauthorized - Invalid or missing User Token
content:
application/json:
example:
error:
code: AP002
message: invalid API key or secret key
/v2/confirmUser:
parameters: []
post:
summary: confirmUser
description: 'Verifies a user account with the MFA code they receive.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP111` | 200 | Invalid verification code |
| `AP112` | 200 | Max verification attempts exceeded |
| `AP113` | 200 | User does not exist |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- User Management
parameters:
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
requestBody:
description: ''
content:
application/json:
schema:
title: confirmUserObject
type: object
required:
- userId
- code
- merchantId
properties:
userId:
type: string
description: Id of the user to be confirmed
code:
type: string
description: Verification code
merchantId:
type: integer
description: Merchant identifier
example:
userId: '14831'
code: '223324'
merchantId: '1234'
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Tue, 29 Jul 2025 18:21:59 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success - User Confirmed
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/confirmUserObject'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2:
summary: Success V2 - User Confirmed
value:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
userStatus: Active
Error_UserNotExist:
summary: Fail - User does not exist
value:
error:
help: contact support@aeropay.com for help
code: AP113
message: User does not exist
'400':
description: Bad Request - Validation Errors
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_ImproperUserId:
summary: Fail - Improper userId
value:
error:
help: contact support@aeropay.com for help
code: AP701
message: 'Improperly formatted parameter: [''userId'']'
/v2/aggregatorCredentials:
parameters: []
get:
summary: aggregatorCredentials
description: 'Request a new aggregator URL to launch an aggregator widget with a unique token.
This will allow users to link their bank account.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP407` | 200 | Bank linking disabled on account |
| `AP408` | 200 | Unknown aggregator |
| `AP409` | 200 | Invalid redirectURI |
'
tags:
- Bank Connection
parameters:
- name: aggregator
in: query
required: true
description: The aggregator you are using to launch a bank linking widget. Only accepted value is aerosync
example: aerosync
schema:
type: string
enum:
- aerosync
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Tue, 29 Jul 2025 18:05:13 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/aggregatorCredentialsResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_CorrectToken:
summary: Success - Correct Token
value:
fastlinkURL: https://sandbox.aerosync.com/
token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
username: 16d96afbeaf0........
Error_InvalidAggregator:
summary: Fail - Invalid Aggregator
value:
error:
code: AP408
message: Unknown Aggregator aerosyncj
'400':
description: Bad Request - Validation Errors
content:
application/json:
schema:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_InvalidURI:
summary: Fail - Invalid URI format
value:
code: INVALID_FORMAT
message: The redirectURI is not a valid URL structure.
Error_MissingAggregator:
summary: Fail - Missing aggregator
value:
code: MISSING_PARAMETER
message: The aggregator parameter is required.
/v2/linkAccountFromAggregator:
parameters: []
post:
summary: linkAccountFromAggregator
description: 'Associates a user bank account with their AeroPay account.
This call is to be made after a user goes through an aggregator bank connection flow leveraging the URL from `/v2/aggregatorCredentials`
endpoint. You will receive the `connectionId` as response attributes from the aggregator widget.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP300` | 200 | Unable to connect to bank |
| `AP403` | 200 | Bank not supported |
| `AP404` | 200 | Invalid routing number |
| `AP408` | 200 | Unknown aggregator |
| `AP409` | 200 | Invalid redirectURI |
| `AP410` | 200 | Error linking bank account |
| `AP411` | 200 | Invalid account type - connect a checking account |
| `AP414` | 200 | Maximum linked accounts reached |
| `AP415` | 200 | Bank account already linked |
| `AP700` | 400 | Missing or invalid required parameter |
'
tags:
- Bank Connection
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
requestBody:
description: ''
content:
application/json:
schema:
title: linkAccountFromAggregatorRequest
description: Body of linkAccountFromAggregator call
type: object
required:
- connectionId
- aggregator
properties:
connectionId:
type: string
description: ConnectionId returned from Aerosync SDK
aggregator:
type: string
description: aerosync
enum:
- aerosync
example:
connectionId: '{{connectionId}}'
aggregator: aerosync
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 12:19:17 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Connection Failure
content:
application/json:
schema:
oneOf:
- title: Post aggregatorCredentials Response
type: object
properties:
userBankInfo:
type: object
properties:
bankAccountId:
type: integer
bankName:
type: string
accountLast4:
type: string
name:
type: string
externalBankAccountId:
type: string
isSelected:
type: boolean
accountType:
type: string
status:
type: string
createdDate:
type: string
accountHolderInfo:
type: array
items:
type: object
canFetchBalance:
type: boolean
balance:
type: integer
- title: Failure Response
type: object
properties:
success:
type: boolean
code:
type: string
error:
type: string
examples:
Success:
summary: Success
value:
userBankInfo:
bankAccountId: 0
bankName: Aerosync Bank (oAuth)
accountLast4: '1329'
name: Aerosync Checking
externalBankAccountId: None
isSelected: true
accountType: checking
status: verified
createdDate: '2025-12-11T21:50:22+00:00'
accountHolderInfo:
- name:
fullName: Dwight Schrute
canFetchBalance: true
balance: 312425
Fail_IncorrectBody:
summary: Fail - Incorrect body
value:
success: false
code: AP300
error: We are having issues connecting to your bank. Try reconnecting your bank or reach out to support@aeropay.com
to resolve the issue.
/v2/userBankAccount/{bankAccountId}:
parameters:
- name: bankAccountId
in: path
required: true
description: The unique identifier of the bank account to update.
example: '{{bankAccountId}}'
schema:
type: string
patch:
summary: userBankAccount
description: 'Selects a user''s bank account. This sets the default bank account for transactions. If no bankAccountId
is provided in the /transaction call, the selected account will be used.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP400` | 200 | No bank account linked |
| `AP401` | 400 | Cannot validate bank account |
| `AP412` | 200 | Bank account already removed |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Bank Connection
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Thu, 07 Aug 2025 14:09:05 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success - Bank Account Updated
content:
application/json:
schema:
oneOf:
- title: Patch use response
type: object
properties:
bankAccount:
type: object
properties:
bankAccountId:
type: integer
bankName:
type: string
accountLast4:
type: string
name:
type: string
isSelected:
type: boolean
accountType:
type: string
status:
type: string
createdDate:
type: string
- $ref: '#/components/schemas/200failure'
examples:
Success_Activated:
summary: Success - activated bank account
value:
bankAccount:
bankAccountId: 0
bankName: Aerosync Bank (MFA)
accountLast4: '0000'
name: Aerosync Checking
isSelected: true
accountType: checking
status: verified
createdDate: '2025-12-01T18:52:37+00:00'
'400':
description: Bad Request - Validation Errors
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Fail_InvalidAccount:
summary: Fail - invalid bank account
value:
error:
code: AP401
message: We cannot validate the account you're attempting to connect. Please connect a valid account.
/v2/bankAccounts:
get:
summary: bankAccounts
description: 'Retrieve a list of bank accounts associated with the authenticated user.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
'
tags:
- Bank Connection
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
responses:
'200':
description: Success
headers:
Date:
schema:
type: string
example: Tue, 02 Dec 2025 20:26:27 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
type: object
properties:
bankAccounts:
type: array
items:
type: object
properties:
bankAccountId:
type: integer
bankName:
type: string
accountLast4:
type: string
name:
type: string
isSelected:
type: boolean
accountType:
type: string
status:
type: string
createdDate:
type: string
connectionId:
type: string
format: uuid
description: Optional connection identifier for this bank account. Present only when the Bank Aggregator
is AeroSync.
examples:
Success:
summary: Success - Multiple Accounts
value:
bankAccounts:
- bankAccountId: 1139036
bankName: Aerosync Bank (MFA)
accountLast4: '3535'
name: Aerosync Checking
isSelected: true
accountType: checking
status: verified
createdDate: '2025-12-01T18:52:37+00:00'
connectionId: bd9d48bd-8b51-4e6e-9f4b-5f5e8f4b0a10
- bankAccountId: 1139682
bankName: Aerosync Bank (oAuth)
accountLast4: '1329'
name: Aerosync Checking
isSelected: false
accountType: checking
status: verified
createdDate: '2025-12-11T21:50:22+00:00'
connectionId: 2e6f7a9b-0df6-4d6c-9b4e-3c9f1c4c7e21
Success_One:
summary: Success - One Account
value:
bankAccounts:
- bankAccountId: 957022
bankName: undefined
accountLast4: '5432'
name: Test EA Account
isSelected: true
accountType: checking
status: None
createdDate: '2025-08-13T16:47:00+00:00'
Success_Empty:
summary: Success - No Accounts
value:
bankAccounts: []
'401':
description: Unauthorized - Invalid or missing Token
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
example:
error:
code: AP002
message: invalid API key or secret key
/v2/transaction:
parameters: []
post:
summary: transaction
description: 'Create an Aeropay Transaction Object where funds will move from a user to a merchant.
The `userForMerchant` token specifies the paying user. The merchant being paid is specified by the `merchantId` in
the request body. The user''s default bank account will be selected if no `bankAccountId` is specified.
**Attributes** are AeroPay formatted data that you may wish to include with your transaction. For example, an invoice
number or the tracking of a tip amount.
**NOTE:** Tip amounts will be added to the ''amount'' value.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP103` | 200 | Unable to set user reputation level |
| `AP109` | 200 | Delinquent activity on account |
| `AP110` | 200 | User profile incomplete |
| `AP114` | 200 | Account restricted by merchant |
| `AP201` | 200 | No merchant found for merchant id |
| `AP203` | 200 | Unable to get location for merchant |
| `AP205` | 200 | Unable to get rewards and fees for merchant |
| `AP206` | 200 | Unable to get merchant account |
| `AP300` | 200 | Unable to connect to bank |
| `AP302` | 200 | Insufficient funds |
| `AP303` | 200 | Transaction missing location |
| `AP304` | 200 | Transaction amount exceeds limit |
| `AP306` | 200 | Insufficient balance |
| `AP307` | 200 | Payment declined - try a lower amount |
| `AP308` | 200 | Invalid amount |
| `AP314` | 200 | Transaction already exists |
| `AP315` | 200 | Payment rejected - threshold or suspended bank |
| `AP400` | 200 | No bank account linked |
| `AP401` | 400 | Cannot validate bank account |
| `AP402` | 200 | No bank account for merchant |
| `AP403` | 200 | Bank not supported |
| `AP404` | 200 | Invalid routing number |
| `AP411` | 200 | Invalid account type - connect a checking account |
| `AP412` | 200 | Bank account already removed |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP1400` | 400 | Idempotency key reused with different payload |
| `AP1401` | 400 | Request with same idempotency key still processing |
| `AP1402` | 400 | Invalid idempotency key structure |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: Optional UUID value to ensure idempotent transaction.
example: 123e4567-e89b-12d3-a456-426614174000
schema:
type: string
format: uuid
requestBody:
description: Body of transaction call
content:
application/json:
schema:
title: transactionRequest
type: object
required:
- merchantId
- amount
properties:
bankAccountId:
type: integer
description: default bank account for the user will be used if not specified
merchantId:
type: integer
description: MerchantId
amount:
type: object
description: Dictionary with currency and amount in pennies. Only USD supported at this time
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
referenceId:
type: string
description: Merchant reference id of transaction
attributes:
type: object
description: Dictionary with attributes. Tip and invoice are standard formats. Custom attributes must follow
value/description dictionary formatting.
properties:
CUSTOM ATTRIBUTE:
type: object
properties:
value:
type: string
description: Value identifier of custom attribute
description:
type: string
description: Description of custom attribute
invoice:
type: object
properties:
value:
type: string
description: Value identifier of invoice
example: Value
description:
type: string
description: Description of invoice
example: Description
tip:
type: object
properties:
tipAmount:
type: string
description: Required. Amount of tip, in format XX.XX
label:
type: string
description: Required. String representation of tip, including $
totalAmount:
type: string
description: Required. Amount + tip, in format XX.XX. This can be used for reconciliation and to
guarantee accurate amount value
example:
tipAmount: '1.00'
label: $1.00
totalAmount: '2.00'
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 13:07:17 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/transactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_With_Reference:
summary: Success - with referenceId
value:
transaction:
id: f79c19d4-11fd-408e-940f-c341667563b9
amount:
amount: 400
currency: USD
status: pending
paymentType: payment
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
referenceId: merchant-ref-id
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '4.00'
isRtp: false
merchantId: 582
title: Online Transaction
locationId: 541
userAccountId: 1139036
Success_Minimal:
summary: Success - no referenceId or tip
value:
transaction:
id: f79c19d4-11fd-408e-940f-c341667563b9
amount:
amount: 400
currency: USD
status: pending
paymentType: payment
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
isRtp: false
merchantId: 582
title: Online Transaction
locationId: 541
userAccountId: 1139036
Success_ValidTip_NoReferenceID:
summary: Success - valid tip
value:
transaction:
id: f79c19d4-11fd-408e-940f-c341667563b9
amount:
amount: 400
currency: USD
status: pending
paymentType: payment
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '4.00'
isRtp: false
merchantId: 582
title: Online Transaction
locationId: 541
userAccountId: 1139036
Error_InvalidTipCalculation:
summary: Fail - Invalid total tip amount
value:
error:
code: ApError
message: 'Invalid total amount calculation: 13.34 not 1.03'
'400':
description: Bad Request - Validation Errors
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_InvalidAmountFormat:
summary: Fail - Invalid amount format
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''amount: money amount must be a dictionary'']'
Error_InvalidReference:
summary: Fail - invalid referenceId (>64)
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''referenceId: exceeded maximum length of 64'']'
Error_MissingCurrency:
summary: Fail - Missing amount/currency
value:
error:
code: VALIDATION_ERROR
message: Currency is required
/v2/transaction/{transactionUUID}/refunds:
parameters:
- name: transactionUUID
in: path
required: true
description: Transaction UUID (id returned from POST /v2/transaction)
schema:
type: string
format: uuid
get:
summary: transactionRefunds
description: 'Retrieve the current refund state for a specific transaction.
Returns two arrays:
- **`refunds`** — processed or pending reversal transactions. Shape matches a standard transaction object. Always
present; empty when no refunds have been processed.
- **`queuedRefunds`** — individually tracked refunds that have been requested but not yet processed (e.g. the original
transaction has not yet cleared). Each item has `id`, `referenceId`, `amount` (with `amount` and `currency`), and
`status` (`queued` or `abandoned`). Always present; empty when nothing is queued.
The `id` on a queued refund item is the uuid assigned at the time POST /v2/reverseTransaction was called (either supplied
by the client or system-generated). That same uuid becomes the `id` of the resulting reversal transaction once processed.
**Multiple reversals:** A transaction can have more than one independent reversal. Each POST /v2/reverseTransaction
call produces its own record. Both `refunds` and `queuedRefunds` may contain multiple entries.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|---------|
| `AP011` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: false
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Mon, 22 Jan 2026 10:30:00 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success - Transaction refunds retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/transactionRefundsResponse'
examples:
hasRefunds:
summary: Transaction has processed/pending refunds
value:
refunds:
- id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
amount:
amount: 5000
currency: USD
status: processed
paymentType: reversal
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
title: Refund for Online Transaction
referenceId: 0123456789
attributes: []
createdDate: '2026-01-22T10:30:00+00:00'
modifiedDate: '2026-01-22T10:30:00+00:00'
apFee: '0.00'
isRtp: false
merchantId: 582
locationId: 541
userAccountId: 1139036
- id: b2c3c3d4-e5f6-7890-abcd-ef1234567890
amount:
amount: 1000
currency: USD
status: pending
paymentType: reversal
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
title: Refund for Online Transaction
referenceId: 0123456789
attributes: []
createdDate: '2026-01-24T10:30:00+00:00'
modifiedDate: '2026-01-24T10:30:00+00:00'
apFee: '0.00'
isRtp: false
merchantId: 582
locationId: 541
userAccountId: 1139036
queuedRefunds: []
hasQueuedRefunds:
summary: Transaction has queued refunds pending processing
value:
refunds: []
queuedRefunds:
- id: a3f1c2d4-e5b6-7890-abcd-ef1234567890
referenceId: b4e2d3f5-f6c7-8901-bcde-fa2345678901
amount:
amount: 1500
currency: USD
status: queued
- id: c5d3e4f6-a7b8-9012-cdef-ab3456789012
referenceId: null
amount:
amount: 500
currency: USD
status: queued
noRefunds:
summary: Transaction has no refunds
value:
refunds: []
queuedRefunds: []
/v2/transaction/idempotency/{idempotencyKey}:
parameters:
- name: idempotencyKey
in: path
required: true
description: Idempotency key UUID sent as the Idempotency-Key header on the original POST /v2/transaction request
schema:
type: string
format: uuid
get:
summary: getTransactionByIdempotencyKey
description: 'Fetches the original transaction response by the idempotency key used during the POST /v2/transaction
request.
**Security Behavior**
To prevent information leakage, this endpoint returns an empty object `{}` in all negative cases — including when
the idempotency key does not exist and when the key exists but belongs to a different merchant. Callers cannot distinguish
between the two scenarios.
**Loss of Reference Behavior**
The idempotency key can reference the transaction only until the TTL expires. The current TTL is 1 day. After that,
the transaction may exist but cannot be retrieved by the idempotency key.'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: false
example: application/json
schema:
type: string
- name: authorization
in: header
required: false
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Tue, 24 Jun 2025 20:24:21 GMT
Content-Type:
schema:
type: string
example: application/json
description: Returns the transaction response originally stored for this idempotency key, or an empty object if
no record is found or the key belongs to a different merchant.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/transactionGetResponse'
- $ref: '#/components/schemas/emptyResponse'
examples:
found:
summary: Idempotency key found — returns original transaction response
value:
transaction:
id: f79c19d4-11fd-408e-940f-c341667563b9
amount:
amount: 400
currency: USD
status: pending
paymentType: payment+
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
title: Online Transaction
referenceId: 0123456789
attributes:
- value: '1'
name: tip
description: flat
- value: ATTRIBUTE VALUE
name: ATTRIBUTE NAME
description: ATTRIBUTE DESCRIPTION
createdDate: '2026-01-21T02:14:45+00:00'
modifiedDate: '2026-01-21T02:14:45+00:00'
apFee: '0.03'
isRtp: false
merchantId: 582
locationId: 541
userAccountId: 1139036
notFound:
summary: Idempotency key not found or belongs to a different merchant
value: {}
'400':
description: Missing or invalid idempotency key
content:
application/json:
schema:
$ref: '#/components/schemas/200failure'
example:
error:
help: contact support@aeropay.com for help
code: AP700
message: 'Missing required Parameter: ''idempotencyKey'''
/v2/transaction/{transactionId}:
parameters:
- name: transactionId
in: path
required: true
description: Transaction Id of transaction. In UUID format.
example: 47e1eab8-5b71-42e7-a0fd-bf30f73af6fb
schema:
type: string
get:
summary: transaction
description: 'Fetch a transaction for the specified transaction id.
To search for multiple transactions or by other transaction attributes, use `POST /v2/transactionSearch`.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP011` | 401 | Unauthorized for this transaction |
| `AP101` | 401 | No authenticated user |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Thu, 07 Aug 2025 14:22:24 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Transaction Not Found
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/transactionGetResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2_Reference:
summary: Success - V2 referenceId
value:
transaction:
id: f79c19d4-11fd-408e-940f-c341667563b9
amount:
amount: 400
currency: USD
status: pending
paymentType: payment
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
referenceId: merchant-ref-id
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '4.00'
isRtp: false
createdDate: '2026-01-02T11:45:32+00:00'
modifiedDate: '2026-01-02T11:45:32+00:00'
apFee: '0.03'
merchantId: 582
title: Online Transaction
locationId: 541
userAccountId: 1139036
Success_V2_NoReference:
summary: Success - V2 no referenceId
value:
transaction:
id: 5c10f370-387a-4aa0-8f94-56fecc4b0d84
amount:
amount: 3
currency: USD
status: pending
paymentType: payment
userId: '2181'
title: Online Transaction
attributes:
- value: ATTRIBUTE VALUE
name: ATTRIBUTE NAME
description: ATTRIBUTE DESCRIPTION
createdDate: '2025-12-24T01:52:42+00:00'
modifiedDate: '2025-12-24T01:52:42+00:00'
apFee: '0.00'
isRtp: false
merchantId: 1057
locationId: 1147
userAccountId: 4542
Error_NotFound:
summary: Fail - Invalid transaction UUID
value:
error:
code: ApError
message: Transaction 47e1eab8-5b71-42e7-a0fd-bf30f73af6fa not found
/v2/preauthTransaction:
parameters: []
post:
summary: preauthTransaction
description: 'Create a preauthorized transaction for the user specified by the authorization token.
The response contains a transaction object. The `id` within this transaction object is used to identify this preauthorized
transaction.
Preauthorized transactions do not have a default expiration, but can be configurable by merchant.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP103` | 200 | Unable to set user reputation level |
| `AP109` | 200 | Delinquent activity on account |
| `AP110` | 200 | User profile incomplete |
| `AP201` | 200 | No merchant found for merchant id |
| `AP203` | 200 | Unable to get location for merchant |
| `AP205` | 200 | Unable to get rewards and fees for merchant |
| `AP300` | 200 | Unable to connect to bank |
| `AP302` | 200 | Insufficient funds |
| `AP303` | 200 | Transaction missing location |
| `AP304` | 200 | Transaction amount exceeds limit |
| `AP306` | 200 | Insufficient balance |
| `AP307` | 200 | Payment declined - try a lower amount |
| `AP308` | 200 | Invalid amount |
| `AP310` | 200 | Credit transaction declined |
| `AP314` | 200 | Transaction already exists |
| `AP315` | 200 | Payment rejected - threshold or suspended bank |
| `AP400` | 200 | No bank account linked |
| `AP401` | 400 | Cannot validate bank account |
| `AP402` | 200 | No bank account for merchant |
| `AP403` | 200 | Bank not supported |
| `AP411` | 200 | Invalid account type - connect a checking account |
| `AP412` | 200 | Bank account already removed |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP1000` | 200 | Invalid API |
| `AP1400` | 400 | Idempotency key reused with different payload |
| `AP1401` | 400 | Request with same idempotency key still processing |
| `AP1402` | 400 | Invalid idempotency key structure |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A userForMerchant scoped token.
example: Bearer {{userForMerchantScopedToken}}
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: Optional UUID value to ensure idempotent transaction.
example: 123e4567-e89b-12d3-a456-426614174000
schema:
type: string
format: uuid
requestBody:
description: ''
content:
application/json:
schema:
title: preauthtransactionRequest
description: Body of preauthtransaction call
type: object
required:
- bankAccountId
- merchantId
- amount
properties:
bankAccountId:
type: integer
description: bankAccountId of selected bank
merchantId:
type: integer
description: MerchantId
amount:
type: object
description: Dictionary with currency and amount in pennies. Only USD supported at this time
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
attributes:
type: object
description: Dictionary with attributes. Tip and invoice are standard formats. Custom attributes must follow
value/description dictionary formatting.
properties:
CUSTOM ATTRIBUTE:
type: object
properties:
value:
type: string
description: Value identifier of custom attribute
description:
type: string
description: Description of custom attribute
invoice:
type: object
properties:
value:
type: string
description: Value identifier of invoice
example: Value
description:
type: string
description: Description of invoice
example: Description
tip:
type: object
properties:
tipAmount:
type: string
description: Required. Amount of tip, in format XX.XX
label:
type: string
description: Required. String representation of tip, including $
totalAmount:
type: string
description: Required. Amount + tip, in format XX.XX. This can be used for reconciliation and to
guarantee accurate amount value
example:
tipAmount: '1.00'
label: $1.00
totalAmount: '2.00'
referenceId:
type: string
description: Merchant reference id of transaction
example:
bankAccountId: '0'
merchantId: '1748'
amount:
amount: 1234
currency: USD
referenceId: 123-123-1234
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 16:28:20 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/preauthTransactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2_NoReference:
summary: Success - V2 no referenceId
value:
transaction:
id: bec5a7b7-edd8-4580-aff5-b1ee52e73686
amount:
currency: USD
amount: 222
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-02T11:59:44+00:00'
expiryDate: '2026-01-04T11:59:44+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
Success_V2_ValidReference:
summary: Success - V2 valid referenceId
value:
transaction:
id: 53024f75-f7d1-45b7-8e4d-4449fed355ab
amount:
currency: USD
amount: 222
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
referenceId: check-new-ref-id
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-02T12:00:56+00:00'
expiryDate: '2026-01-04T12:00:56+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_RefTooLong:
summary: Fail - V2 invalid referenceId (>64)
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''referenceId: exceeded maximum length of 64'']'
Error_InvalidAmount:
summary: Fail - Invalid amount format
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''amount: money amount must be a dictionary'']'
/v2/preauthTransaction/{preauthTransactionId}:
parameters:
- name: preauthTransactionId
description: Id of preauthorized transaction to query by
in: path
required: true
example: 4da64b86-eb2c-44e7-803b-fe0446505fd9
schema:
type: string
get:
summary: preauthTransaction
description: 'Retrieve the preauthorized transaction with the id provided by the path parameter ({{preAuthTransactionId}}).
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP313` | 200 | Preauth ineligible for capture |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 16:33:02 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/preauthTransactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2_NoReference:
summary: Success - V2 no referenceId
value:
transaction:
id: bec5a7b7-edd8-4580-aff5-b1ee52e73686
amount:
currency: USD
amount: 222
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-02T11:59:44+00:00'
expiryDate: '2026-01-04T11:59:44+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
Success_V2_Reference:
summary: Success - V2 referenceId
value:
transaction:
id: 53024f75-f7d1-45b7-8e4d-4449fed355ab
amount:
currency: USD
amount: 222
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
referenceId: check-new-ref-id
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-02T12:00:56+00:00'
expiryDate: '2026-01-04T12:00:56+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
Error_Ineligible:
summary: Fail - V2 invalid preauth uuid
value:
error:
code: AP313
message: Preauth ineligible for capture
Error_InvalidPreauthUuid:
summary: Fail - V2 invalid format preauth uuid
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''id: invalid UUID format'']'
patch:
summary: preauthTransaction
description: 'Update the specified preauthorized transaction. Preauthorized transaction amounts can be increased or
decreased. Attributes can also be added for tipping purposes.
**Note:** The updated transaction amount may not exceed the original amount that was preauthorized.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP300` | 200 | Unable to connect to bank |
| `AP302` | 200 | Insufficient funds |
| `AP310` | 200 | Credit transaction declined |
| `AP312` | 200 | Preauth already captured |
| `AP313` | 200 | Preauth ineligible for capture |
| `AP315` | 200 | Payment rejected - threshold or suspended bank |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP1000` | 200 | Invalid API |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
content:
application/json:
schema:
title: preathtransactionPatchRequest
description: Body of preauthtransaction patch call
type: object
properties:
amount:
type: object
description: Dictionary with currency and amount in pennies. Only USD supported at this time
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
attributes:
type: object
description: Dictionary with attributes. Tip and invoice are standard formats. Custom attributes must follow
value/description dictionary formatting.
properties:
CUSTOM ATTRIBUTE:
type: object
properties:
value:
type: string
description: Value identifier of custom attribute
description:
type: string
description: Description of custom attribute
invoice:
type: object
properties:
value:
type: string
description: Value identifier of invoice
example: Value
description:
type: string
description: Description of invoice
example: Description
tip:
type: object
properties:
tipAmount:
type: string
description: Required. Amount of tip, in format XX.XX
label:
type: string
description: Required. String representation of tip, including $
totalAmount:
type: string
description: Required. Amount + tip, in format XX.XX. This can be used for reconciliation and to
guarantee accurate amount value
example:
tipAmount: '1.00'
label: $1.00
totalAmount: '2.00'
example:
amount:
amount: 101
currency: USD
attributes:
invoice:
value: '12345'
description: BUSINESS NAME
responses:
'200':
headers:
Date:
schema:
type: string
example: Thu, 07 Aug 2025 14:27:56 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/preauthTransactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_Update:
summary: Success - Update Amount
value:
transaction:
id: 53024f75-f7d1-45b7-8e4d-4449fed355ab
amount:
currency: USD
amount: 101
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
description: Online Transaction
attributes:
invoice:
value: '12345'
description: BUSINESS NAME
createdDate: '2026-01-02T12:00:56+00:00'
expiryDate: '2026-01-04T12:00:56+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
Error_AlreadyCaptured:
summary: Fail - preauth already captured
value:
error:
code: AP312
message: 'Preauth has already been captured by Transaction #0b6c0d66-2752-4800-bbf4-aa1118b8a646.'
'400':
description: Bad Request
content:
application/json:
examples:
Error_InvalidFormat:
summary: Fail - Invalid ID Format
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''id: invalid UUID format'']'
Error_MissingId:
summary: Fail - missing transaction id
value:
error:
code: AP700
message: 'Missing required Parameter: ''transactionId'''
delete:
summary: preauthTransaction
description: 'Delete the specified preauthorized transaction.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP312` | 200 | Preauth already captured |
| `AP313` | 200 | Preauth ineligible for capture |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Thu, 07 Aug 2025 15:05:36 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
type: object
properties:
preauthTransactionGetResponse:
title: Get preauthTransaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier for the transaction (UUID).
amount:
type: object
properties:
currency:
type: string
example: USD
description: Three-letter ISO currency code.
amount:
type: integer
example: 101
description: Amount in pennies or smallest currency unit.
status:
type: string
enum:
- pending
- live
- canceled
- completed
description: Current status of the transaction.
userId:
type: string
format: uuid
description: Internal identifier of the user.
userName:
type: string
description: Full name of the user.
userEmail:
type: string
format: email
description: Email address of the user associated with the transaction.
createdDate:
type: string
format: date-time
description: The date and time when the transaction was created.
expiryDate:
type: string
format: date-time
description: The date and time when the transaction expires.
merchantId:
type: integer
description: Identifier of the merchant.
userAccountId:
type: integer
description: Identifier of the user's bank account.
locationId:
type: integer
description: Identifier of the specific business location.
example:
transaction:
id: 53024f75-f7d1-45b7-8e4d-4449fed355ab
amount:
currency: USD
amount: 101
status: canceled
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
createdDate: '2026-01-02T12:00:56+00:00'
expiryDate: '2026-01-04T12:00:56+00:00'
merchantId: 1057
userAccountId: 1717
locationId: 1147
examples:
Success_Cancel:
summary: Success - preauth canceled
value:
transaction:
id: 53024f75-f7d1-45b7-8e4d-4449fed355ab
amount:
currency: USD
amount: 101
status: canceled
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
createdDate: '2026-01-02T12:00:56+00:00'
expiryDate: '2026-01-04T12:00:56+00:00'
merchantId: 1057
userAccountId: 1717
locationId: 1147
Error_AlreadyDeleted:
summary: Fail - Already deleted preauth transaction
value:
error:
code: AP313
message: Preauthorized Transaction with status of canceled is not eligible for capture
Error_NotExist:
summary: Fail - preauth does not exists
value:
error:
code: AP313
message: Preauth ineligible for capture
'400':
description: Bad Request
content:
application/json:
example:
error:
code: AP701
message: 'Improperly formatted parameter: [''id: invalid UUID format'']'
/v2/preauthTransactions:
parameters: []
get:
summary: preauthTransactions
description: 'Fetch array of the preauthorized transactions for the authorized merchant.
If the optional `id` query parameter is specified, fetches only that preauthorized transaction. If the optional `level`
query parameter is specified, fetches the preauthorized transactions for that level.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP313` | 200 | Preauth ineligible for capture |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: uuid
in: query
required: false
description: UUID of preauthorized transaction to query by
example: 7626c8c6-d6df-4c21-bcf4-09569294eaec
schema:
type: string
- name: level
in: query
required: false
description: Status of preauthorized transaction to query by
example: live
schema:
type: string
- name: dateStart
in: query
required: false
description: Start date to filter preauthorized transactions on (MM-DD-YYYY HH:mm:ss)
example: 11-12-2025 00:00:00
schema:
type: string
- name: dateEnd
in: query
required: false
description: End date to filter preauthorized transactions on (MM-DD-YYYY HH:mm:ss)
example: 11-13-2025 00:00:00
schema:
type: string
- name: timezone
in: query
required: false
description: Timezone of dates
example: ECT
schema:
type: string
- name: page
in: query
required: false
description: Page number
example: 1
schema:
type: integer
- name: perPage
in: query
required: false
description: Number of transactions per page
example: 10
schema:
type: integer
- name: sortBy
in: query
required: false
description: Field to sort by
example: id
schema:
type: string
- name: orderBy
in: query
required: false
description: Order by
example: desc
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 16:33:02 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
title: Get preauthTransaction response
properties:
paging:
type: object
properties:
totalPages:
type: integer
totalItems:
type: integer
currentPage:
type: integer
itemsPerPage:
type: integer
transactions:
type: array
items:
$ref: '#/components/schemas/preauthTransactionResponse'
examples:
Success_V2_Params:
summary: Success - V2 params
value:
paging:
totalPages: 1
totalItems: 1
currentPage: 1
itemsPerPage: 1
transactions:
- id: 962af059-bf7b-4fd5-8d1f-83e9deb0a02a
amount:
currency: USD
amount: 222
status: live
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
referenceId: merchant-ref-id
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-21T02:56:27+00:00'
expiryDate: '2026-01-24T02:56:27+00:00'
userName: Cristiano Lopes
userEmail: cristiano.lopes@ext.blaze.me
merchantId: 582
userAccountId: 1139036
locationId: 541
Success_NoQueryParams:
summary: Success - No Query Parameters
value:
paging:
totalPages: 1
totalItems: 2
currentPage: 1
itemsPerPage: 50
transactions:
- id: 962af059-bf7b-4fd5-8d1f-83e9de77acb
amount:
currency: USD
amount: 333
status: live
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
referenceId: merchant-ref-id
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-21T02:56:27+00:00'
expiryDate: '2026-01-24T02:56:27+00:00'
userName: Cristiano Lopes
userEmail: cristiano.lopes@ext.blaze.me
merchantId: 582
userAccountId: 1139036
locationId: 541
- id: 962af059-bf7b-4fd5-8d1f-83e9deb0a02a
amount:
currency: USD
amount: 222
status: live
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
referenceId: merchant-ref-id
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-21T02:56:27+00:00'
expiryDate: '2026-01-24T02:56:27+00:00'
userName: Cristiano Lopes
userEmail: cristiano.lopes@ext.blaze.me
merchantId: 582
userAccountId: 1139036
locationId: 541
'401':
description: Unauthorized
content:
application/json:
example:
error:
code: AP008
message: Invalid token.
/v2/capturePreauthTransaction:
parameters: []
post:
summary: capturePreauthTransaction
description: 'Execute the preauthorized transaction which is specified by provided ''id''.
The AeroPay transaction is returned.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP300` | 200 | Unable to connect to bank |
| `AP310` | 200 | Credit transaction declined |
| `AP312` | 200 | Preauth already captured |
| `AP313` | 200 | Preauth ineligible for capture |
| `AP400` | 200 | No bank account linked |
| `AP401` | 400 | Cannot validate bank account |
| `AP412` | 200 | Bank account already removed |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP1000` | 200 | Invalid API |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
description: Body of preauthtransaction capture call
content:
application/json:
schema:
title: preathtransactionCaptureRequest
type: object
required:
- id
properties:
id:
type: string
description: preauthtransactionId of transaction to capture. In UUID format.
example:
id: 7626c8c6-d6df-4c21-bcf4-09569294eaec
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Wed, 30 Jul 2025 16:50:39 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/capturePreauthTransactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_Valid_Id:
summary: Success - valid preauth id
value:
transaction:
id: bec5a7b7-edd8-4580-aff5-b1ee52e73686
amount:
currency: USD
amount: 222
status: live
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
description: Online Transaction
attributes:
key:
value: KEY VALUE
description: KEY DESCRIPTION
createdDate: '2026-01-02T11:59:44+00:00'
expiryDate: '2026-01-04T11:59:44+00:00'
userName: Begos Andres
userEmail: begona.andresm@aeropay.com
merchantId: 1057
userAccountId: 1717
locationId: 1147
Error_AlreadyCancelled:
summary: Fail - Transaction already cancelled
value:
error:
code: AP313
message: Preauthorized Transaction with status of canceled is not eligible for capture
'400':
description: Bad Request
content:
application/json:
examples:
Error_Invalid_Format:
summary: Fail - invalid id format
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''id'']'
help: Contact support@aeropay.com for help.
/v2/reverseTransaction:
parameters: []
post:
summary: reverseTransaction
description: 'Void or refund an Aeropay Transaction.
If a transaction needs to be reversed (return money to the customer) this method will void the payment, or create
a payment to the customer from the merchant.
Transactions that are within the same business day can be voided on the spot, where no money is moved in either direction.
If that window has closed and the transaction has begun to process, a transaction in the reverse direction will be
created.
An amount can be included to handle partial refunds if there was a change in the amount, otherwise the full amount
will be refunded.
Refunds will take 2-3 business days to process as usual.
**Safe Retry for Refunds (Idempotency-Key):** When a merchant retries a refund request (e.g. after a timeout or network
error), Aeropay returns the same outcome as the first attempt instead of creating a second refund. Send an idempotency
key with the request (e.g. a UUID in the `Idempotency-Key` header). The first request with that key is processed and
its response is stored; later requests with the same key receive the stored response and do not trigger a new refund.
The same key cannot be used with a different request body; if it is, the API rejects the request so one key always
maps to one logical refund. Idempotency is optional; if no idempotency key is sent, the API does not apply this behavior
and does not guarantee protection against duplicate refunds on retries.
**NOTE:** The `id` used is a `Aeropay Transaction.id` and is only for AeroTransactions. Use `/v2/preauthTransaction`
DELETE to cancel a preauthorized transaction.
**Multiple Independent Reversals:** Each call to this endpoint produces its own separate reversal record with its
own uuid. Previously, concurrent partial refunds were silently merged into a single reversal record; that behavior
has changed. A transaction can have multiple independent reversals, as long as their amounts do not collectively exceed
the original transaction amount.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP011` | 401 | Unauthorized for this transaction |
| `AP101` | 401 | No authenticated user |
| `AP310` | 200 | Credit transaction declined |
| `AP314` | 200 | Reversal uuid already exists — the supplied `uuid` collides with an existing reversal''s uuid |
| `AP400` | 200 | No bank account linked |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter — also raised when the optional `uuid` field is supplied but is not
a valid UUID v4 |
| `AP1001` | 200 | Error committing to database |
| `AP1200` | 200 | Could not create merchant bill transaction |
| `AP1300` | 200 | Total refunded amount across all queued and processed reversals on this transaction fully covers
the original amount |
| `AP1302` | 200 | Refund amount exceeds original transaction amount |
| `AP1303` | 200 | Refund amount must be positive |
| `AP1304` | 200 | Transaction type cannot be refunded |
| `AP1305` | 200 | RTP transaction cannot be voided - schedule a refund |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: Optional idempotency key (e.g. a UUID) to ensure that reverseTransaction is idempotent.
schema:
type: string
format: uuid
requestBody:
description: Payload to reverse (void or refund) a transaction.
content:
application/json:
schema:
title: reverseTransactionRequest
type: object
required:
- id
properties:
id:
type: string
description: id of transaction to refund or void. In UUID format.
amount:
description: Dictionary with currency and amount in pennies. Only USD supported at this time
type: object
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
uuid:
type: string
format: uuid
description: Optional client-supplied UUID v4 identifier for the resulting reversal. If omitted, the system
generates one.
referenceId:
type: string
description: Optional merchant-provided reference for correlating this reversal with external records.
example:
id: 9b5781ff-5674-4ce0-9a38-597903bbee2d
amount:
currency: USD
amount: 1111
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Fri, 01 Aug 2025 23:04:11 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error
content:
application/json:
schema:
oneOf:
- type: object
title: POST reverseTransaction Response
properties:
refundTransaction:
type: object
properties:
id:
type: string
amount:
type: object
status:
type: string
paymentType:
type: string
userId:
type: string
title:
type: string
createdDate:
type: string
modifiedDate:
type: string
apFee:
type: string
isRtp:
type: boolean
merchantId:
type: integer
locationId:
type: integer
userAccountId:
type: integer
message:
type: string
- $ref: '#/components/schemas/200failure'
examples:
Success_TransactionVoided:
summary: Success - Original transaction has been voided
value:
refundTransaction:
id: f73d1fb8-f668-47a2-84b6-2ccc17ec4353
amount:
amount: 400
currency: USD
status: void
paymentType: payment+
userId: dcecf824-e81f-49a1-a2ea-ca6fa5b2fb30
title: Online Transaction
attributes:
- value: '1'
name: tip
description: flat
- value: ATTRIBUTE VALUE
name: ATTRIBUTE NAME
description: ATTRIBUTE DESCRIPTION
- value: 0123456789
name: referenceId
description: External Reference Id
createdDate: '2026-03-16T15:33:56+00:00'
modifiedDate: '2026-03-16T15:35:46+00:00'
apFee: '0.33'
isRtp: false
merchantId: 1522
locationId: 2887
userAccountId: 1338559
message: Transaction has been voided
Success_QueuedForAmount:
summary: Success - Refund for specified amount has been queued
value:
refundTransaction:
userId: dcecf824-e81f-49a1-a2ea-ca6fa5b2fb30
merchantId: 1522
userAccountId: 1338559
amount:
currency: USD
amount: 300
message: Transaction queued for refund. Refund will process after transaction clears
Success_RefundCreatedForAmount:
summary: Success - Refund transaction created with specified refund amount
value:
refundTransaction:
id: d7311d89-9c2f-46b0-a4d9-a77f9ea904ce
amount:
currency: USD
amount: 300
status: pending
paymentType: reversal
userId: dcecf824-e81f-49a1-a2ea-ca6fa5b2fb30
title: '2744390'
createdDate: '2026-03-16T15:38:10+00:00'
modifiedDate: '2026-03-16T15:38:10+00:00'
apFee: '0.25'
isRtp: false
merchantId: 1522
locationId: 2887
userAccountId: 1338559
message: Refund transaction d7311d89-9c2f-46b0-a4d9-a77f9ea904ce created for transaction 9b5781ff-5674-4ce0-9a38-597903bbee2d
Error_AmountExceeded:
summary: Fail - Amount greater than original
value:
error:
code: AP1302
message: Refund amount must be equal to or less than the original transaction amount
Error_UUIDCollision:
summary: Fail - Supplied uuid collides with an existing reversal's uuid (AP314)
value:
error:
code: AP314
message: Transaction with uuid of d7311d89-9c2f-46b0-a4d9-a77f9ea904ce already exists
Error_CannotReverseVoidTransaction:
summary: Fail - Cannot reverse voided transaction
value:
error:
code: AP1306
message: Cannot reverse transaction with status of void
Error_TransactionNotFound:
summary: Fail - Transaction not found
value:
error:
code: AP316
message: Transaction ea89bec0-0edb-4f86-9a92-66ce29a488f3 not found
'400':
description: Bad Request - Validation Error
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_MissingId:
summary: Fail - Missing ID
value:
error:
code: AP700
message: 'Missing required Parameter: ''id'''
Error_InvalidUUIDField:
summary: Fail - Optional uuid field is not a valid UUID v4
value:
error:
code: AP314
message: 'Improperly formatted parameters: uuid'
/v2/payoutTransaction:
parameters: []
post:
summary: payoutTransaction
description: 'Create a transaction that pays an amount from the logged in merchant to the specified user.
The details of the transaction are returned upon success.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP101` | 401 | No authenticated user |
| `AP103` | 200 | Unable to set user reputation level |
| `AP109` | 200 | Delinquent activity on account |
| `AP110` | 200 | User profile incomplete |
| `AP201` | 200 | No merchant found for merchant id |
| `AP203` | 200 | Unable to get location for merchant |
| `AP205` | 200 | Unable to get rewards and fees for merchant |
| `AP206` | 200 | Unable to get merchant account |
| `AP300` | 200 | Unable to connect to bank |
| `AP302` | 200 | Insufficient funds |
| `AP303` | 200 | Transaction missing location |
| `AP304` | 200 | Transaction amount exceeds limit |
| `AP305` | 200 | Account blocked - delinquent activity |
| `AP308` | 200 | Invalid amount |
| `AP314` | 200 | Transaction already exists |
| `AP315` | 200 | Payment rejected - threshold or suspended bank |
| `AP400` | 200 | No bank account linked |
| `AP401` | 400 | Cannot validate bank account |
| `AP402` | 200 | No bank account for merchant |
| `AP403` | 200 | Bank not supported |
| `AP404` | 200 | Invalid routing number |
| `AP411` | 200 | Invalid account type - connect a checking account |
| `AP412` | 200 | Bank account already removed |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP900` | 200 | External API error |
| `AP1400` | 400 | Idempotency key reused with different payload |
| `AP1401` | 400 | Request with same idempotency key still processing |
| `AP1402` | 400 | Invalid idempotency key structure |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Idempotency-Key
in: header
required: false
description: Optional UUID value to ensure idempotent transaction.
example: 123e4567-e89b-12d3-a456-426614174000
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
title: payoutTransactionRequest
type: object
required:
- userId
- amount
- merchantId
properties:
userId:
type: string
description: UserId of Aeropay user to pay to. In UUID format.
amount:
type: object
description: Dictionary with currency and amount in pennies. Only USD supported at this time
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
attributes:
type: object
description: Dictionary with attributes. Tip and invoice are standard formats. Custom attributes must follow
value/description dictionary formatting.
properties:
tip:
type: object
properties:
tipAmount:
type: string
description: Required. Amount of tip, in format XX.XX
label:
type: string
description: Required. String representation of tip, including $
totalAmount:
type: string
description: Required. Amount + tip, in format XX.XX. This can be used for reconciliation and to
guarantee accurate amount value
merchantId:
type: integer
description: merchantId
bankAccountId:
type: integer
description: bankAccountId of selected bank
referenceId:
type: string
description: Merchant reference id of transaction
rtp:
type: boolean
description: If RTP is not specified, it will default to an ACH transaction.
example:
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
bankAccountId: 0
amount:
amount: 10
currency: USD
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '1.10'
merchantId: 1057
referenceId: newReferenceID-TestingEA
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Fri, 01 Aug 2025 23:26:04 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success or Business Logic Error (AP411)
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/payoutTransactionResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_With_Reference:
summary: Success - V2 with reference id
value:
transaction:
id: a8f0f917-0087-45ca-acdf-1b34ad33f1ea
amount:
currency: USD
amount: 10
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '1.10'
status: pending
paymentType: payout
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
referenceId: newReferenceID-TestingEA
isRtp: false
merchantId: 1057
title: Online Transaction
locationId: 1147
userAccountId: 1717
Success_Without_Reference:
summary: Success - V2 without reference id
value:
transaction:
id: aefc50a7-000b-41de-a937-78aeecd50298
amount:
currency: USD
amount: 10
attributes:
ATTRIBUTE NAME:
value: ATTRIBUTE VALUE
description: ATTRIBUTE DESCRIPTION
tip:
selection:
tipAmount: 1
label: $0.01
totalAmount: '1.10'
status: pending
paymentType: payout
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
isRtp: false
merchantId: 1057
title: Online Transaction
locationId: 1147
userAccountId: 1717
Error_Invalid_Account_Type:
summary: Fail - Invalid Account for processing payments
value:
error:
code: AP411
message: Invalid account connected for processing payments. Please connect a checking account.
Error_Missing_User_ID:
summary: Fail - Missing User ID
value:
error:
code: AP700
message: 'Missing required Parameter: ''userId'''
Error_Invalid_Amount:
summary: Fail - Invalid Amount
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''amount: money amount must be a dictionary'']'
'400':
description: Bad Request
content:
application/json:
examples:
Error_Cannot_Validate:
summary: Fail - Invalid Account
value:
error:
code: AP401
message: We cannot validate the account you're attempting to connect. Please connect a valid account.
/v2/transactionSearch:
parameters: []
post:
summary: transactionSearch
description: 'Search and retrieve a paginated list of transactions for the authorized merchant.
Supports advanced filtering (e.g., `paymentType`), sorting (`sortBy`, `orderBy`), and pagination (`page`, `perPage`).
The response includes a `paging` object with total counts and a `transactions` array containing the results.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP006` | 401 | Client not authorized for this scope |
| `AP101` | 401 | No authenticated user |
| `AP605` | 200 | Merchant is required |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
| `AP1000` | 200 | Invalid API |
'
tags:
- Create & Manage Transactions
parameters:
- name: authorization
in: header
required: true
description: Merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
requestBody:
description: Payload to search for transactions using filters like timezone, page, dates, and search types.
content:
application/json:
schema:
title: transactionSearchRequest
type: object
properties:
timezone:
description: Timezone of dates transactions are filtered on
type: string
example: America/Chicago
page:
type: string
example: '1'
perPage:
type: string
example: '50'
sortBy:
type: string
example: id
orderBy:
type: string
example: asc
startDate:
type: string
description: 'Format: MM-DD-YYYY HH:mm:ss'
endDate:
type: string
description: 'Format: MM-DD-YYYY HH:mm:ss'
searchType:
type: string
description: Type of transaction attribute searched for (transactionId, userId, etc...)
enum:
- transactionId
- uuid
- userId
- name
- phone
- email
- locationId
- merchantId
- default
filters:
type: object
properties:
paymentType:
type: string
example: payment
referenceId:
type: string
description: Merchant reference id of transaction
example:
timezone: America/Chicago
page: '1'
perPage: '50'
sortBy: id
orderBy: asc
filters:
paymentType: payment
required: false
responses:
'200':
description: Success - List of matching transactions
headers:
Date:
schema:
type: string
example: Wed, 27 Aug 2025 12:56:50 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
type: object
properties:
transactions:
type: array
items:
type: object
properties:
id:
type: string
amount:
type: object
status:
type: string
paymentType:
type: string
attributes:
type: array
userId:
type: string
title:
type: string
createdDate:
type: string
modifiedDate:
type: string
apFee:
type: string
isRtp:
type: boolean
merchantId:
type: integer
locationId:
type: integer
userAccountId:
type: integer
customerName:
type: string
locationName:
type: string
merchantName:
type: string
paging:
type: object
properties:
totalPages:
type: integer
totalItems:
type: integer
currentPage:
type: integer
itemsPerPage:
type: integer
examples:
Success_V2:
summary: Success - V2 format response
value:
paging:
totalPages: 1
totalItems: 1
currentPage: 1
itemsPerPage: 50
transactions:
- id: 019bec33-7f67-7b71-a499-60d75.........
amount:
amount: 717
currency: USD
status: processed
paymentType: payment
userId: us-east-1:359b6261-2067-4b33-aa5f-97a8d92551e4
title: AP Test Transaction
createdDate: '2017-10-15T00:43:19+00:00'
modifiedDate: '2026-01-23T00:43:19+00:00'
apFee: '0.00'
isRtp: false
merchantId: 300
locationId: 300
userAccountId: 3
customerName: Carlos Campbell
locationName: Walgreens
merchantName: Walgreens
'400':
description: Bad Request - Validation Errors
content:
application/json:
schema:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
examples:
Error_Missing_UUID:
summary: Fail - V2 Missing required Parameter
value:
error:
code: AP700
message: 'Missing required Parameter: ''uuid'''
/v2/paymentLink:
parameters: []
post:
summary: paymentLink
description: 'Send a payment link via SMS or email for the given merchant.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP201` | 200 | No merchant found for merchant id |
| `AP203` | 200 | Unable to get location for merchant |
| `AP204` | 200 | Location does not belong to merchant |
| `AP208` | 200 | Failed to fetch location for uuid |
| `AP700` | 400 | Missing or invalid required parameter |
| `AP701` | 400 | Improperly formatted parameter |
'
tags:
- Create & Manage Transactions
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: Accept
in: header
required: false
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- merchantId
properties:
merchantId:
type: string
description: The unique identifier for the merchant.
phone:
type: string
description: The user's phone number to send the payment link to. One of phone or email is required; if
both are supplied, phone delivery is used.
email:
type: string
description: The user's email address to send the payment link to. One of phone or email is required; if
both are supplied, phone delivery is used.
merchantLocationId:
oneOf:
- type: integer
- type: string
format: uuid
description: The merchant location id or uuid to associate with the payment link. Must belong to the merchant
in merchantId. Defaults to the merchant's default location if omitted.
referenceId:
type: string
description: Merchant reference id of the payment link. Max length 64.
amount:
type: object
description: Dictionary with currency and amount in pennies. Only USD supported at this time
properties:
amount:
type: integer
description: Payment amount in pennies
currency:
type: string
description: Currency. Currently only supports USD
userId:
type: string
description: The unique identifier for the user the link is for.
paymentType:
type: string
description: Type of payment link to generate, e.g. preauth/preauthorized. subscription is not supported.
example:
merchantId: '{{mainMerchantId}}'
phone: '{{userPhoneNumber}}'
merchantLocationId: 65400d5b-d0aa-4e3a-9c9a-3f9e2f1a1234
referenceId: merchant-reference-123
amount:
amount: 1000
currency: USD
userId: '{{userId}}'
required: true
responses:
'200':
headers:
Date:
schema:
type: string
example: Fri, 02 Jan 2026 15:02:42 GMT
Content-Type:
schema:
type: string
example: application/json
description: Success - Payment Link Sent
content:
application/json:
schema:
type: object
properties:
message:
type: string
referenceId:
type: string
examples:
Success:
summary: Success
value:
message: Payment Link send request successful
Success_WithReferenceId:
summary: Success - with referenceId echoed back
value:
message: Payment Link send request successful
referenceId: merchant-reference-123
Fail_LocationIdNotFoundOrOwned:
summary: Fail - AP203 - merchantLocationId (int) not found or not owned by merchant
value:
error:
code: AP203
message: Unable to get location for merchant id.
Fail_LocationNotForMerchant:
summary: Fail - AP204 - resolved location does not belong to merchantId
value:
error:
code: AP204
message: Location 42 not for merchant.
Fail_NoMerchantFound:
summary: Fail - AP201 - no merchant found
value:
error:
code: AP201
message: No merchant exists for merchant id.
Fail_LocationUuidNotFound:
summary: Fail - AP208 - merchantLocationId (uuid) not found
value:
error:
code: AP208
message: Failed to fetch location for uuid
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
message:
type: string
examples:
Fail_MissingDeliveryDestination:
summary: Fail - AP700 - phone and email both missing
value:
error:
code: AP700
message: 'Missing required Parameter: ''phone/email'''
Fail_RejectedField:
summary: Fail - AP701 - legacy field not supported (uuid, transaction_uuid, locationId, subscriptionId)
value:
error:
code: AP701
message: 'Field(s) not supported: ''uuid'''
Fail_InvalidFormat:
summary: Fail - AP701 - improperly formatted parameter (e.g. referenceId too long, malformed amount, unsupported
paymentType)
value:
error:
code: AP701
message: 'Improperly formatted parameter: [''referenceId: exceeded maximum length of 64'']'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
examples:
Fail_Unauthorized:
summary: Fail - AP009 - Unauthorized
value:
error:
code: AP009
message: Unauthorized
Fail_NoAuthenticatedUser:
summary: Fail - AP101 - No authenticated user
value:
error:
code: AP101
message: No Authenticated User
/v2/createWebhookSigningKey:
parameters: []
post:
summary: createWebhookSigningKey
description: 'Create a webhook.
Specify a topic and a url. Use this call to either create or update a webhook for a topic.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP1000` | 200 | Invalid API |
| `AP1107` | 400 | Merchant is required |
'
tags:
- Webhooks
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
description: Payload to create a signing key for webhook validation. Optionally includes the topic and URL for the
webhook subscription.
content:
application/json:
schema:
type: object
properties:
topic:
type: string
description: The event topic to subscribe to.
example: transaction_completed
url:
type: string
description: The destination URL where webhooks will be sent.
example: https://webhook.site/9374cfe2-8535-44ec-86d6-20e949fd7919
example:
topic: transaction_completed
url: https://webhook.site/9374cfe2-8535-44ec-86d6-20e949fd7919
required: false
responses:
'200':
description: Successful Response - Signing Key Created
headers:
Date:
schema:
type: string
example: Wed, 27 Aug 2025 13:10:45 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
type: object
properties:
message:
type: string
signingKey:
type: string
examples:
Success_V2:
summary: Success - V2 Response
value:
message: This is your signingKey used to validate any Webhooks you are subscribed to. Please store this
key for future use, as it will not be displayed at any point afterwards.
signingKey: cb5e9c4c4d7bd733a16a41da9f34a9ebdc47bee4dc1ab19e....
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
message:
type: string
examples:
Fail_Unauthorized:
summary: Fail - Unauthorized
value:
error:
code: AP008
message: Invalid token.
/v2/webhook:
parameters: []
post:
summary: webhook
description: 'Create a webhook.
Specify a topic and a url. Use this call to either create or update a webhook for a topic.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP1000` | 200 | Invalid API |
| `AP1102` | 400 | Topic required to create webhook |
| `AP1103` | 400 | URL is invalid or missing |
| `AP1104` | 400 | Unrecognized topic |
| `AP1105` | 200 | Error creating webhook |
| `AP1107` | 400 | Merchant is required |
'
tags:
- Webhooks
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- topic
- url
properties:
topic:
type: string
description: Webhook topic to subscribe to
enum:
- transaction_completed
- transaction_refunded
- transaction_voided
- preauthorized_transaction_created
- transaction_declined
- transaction_resolved
- user_active
- user_suspended
- merchant_reputation_updated
url:
type: string
description: Callback URL where webhook payloads will be sent.
example:
topic: transaction_completed
url: https://www.test.com/webhook/test_for_v2
required: true
responses:
'200':
description: Success - Webhook Subscribed
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/webhookPostResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2:
summary: Success - V2 Response
value:
webhooks:
id: 12975
payloadVersion: '2.0'
topic: transaction_completed
url: https://www.test.com/webhook/test_for_v2
'400':
description: Bad Request - Validation Errors
content:
application/json:
examples:
Error_Missing_Url:
summary: Fail - Missing url
value:
error:
code: AP1103
message: Url is invalid or missing
Error_Invalid_Topic:
summary: Fail - Unrecognized topic
value:
error:
code: AP1104
message: Unrecognized topic
get:
summary: webhook
description: 'Fetch webhook for the specified topic.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP1000` | 200 | Invalid API |
| `AP1101` | 200 | Error fetching webhook |
| `AP1107` | 400 | Merchant is required |
'
tags:
- Webhooks
parameters:
- name: topic
in: query
required: false
description: Filter webhooks by topic.
example: transaction_completed
schema:
type: string
- name: authorization
in: header
required: true
description: A merchant scoped token.
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
responses:
'200':
description: Success - List of webhooks
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/webhookGetResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2_List:
summary: Success - V2 Response
value:
webhooks:
- id: 2318
payloadVersion: '2.0'
topic: transaction_completed
url: https://example.com/webhook
'401':
description: Unauthorized
content:
application/json:
example:
error:
code: AP008
message: Invalid token.
delete:
summary: webhook
description: 'Delete the webhook(s) matching the specified topic and/or webhook ID.
Returns the details of every webhook that was successfully deleted.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|-------------|
| `AP009` | 401 | Unauthorized |
| `AP101` | 401 | No authenticated user |
| `AP1000` | 200 | Invalid API |
| `AP1100` | 400 | Topic or webhook ID required to delete webhook |
| `AP1101` | 200 | Error fetching webhook |
| `AP1106` | 200 | Error deleting webhook |
| `AP1107` | 400 | Merchant is required |
'
tags:
- Webhooks
parameters:
- name: topic
in: query
required: false
description: The name of the topic being deleted.
example: transaction_completed
schema:
type: string
- name: webhookId
in: query
required: false
description: ID of the specific webhook to be deleted.
example: '247'
schema:
type: string
- name: authorization
in: header
required: true
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
responses:
'200':
description: Success - Webhook Deleted
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/webhookDeleteResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_Delete:
summary: Success - V2 Response
value:
webhooks:
- id: '247'
payloadVersion: '2.0'
topic: transaction_completed
url: https://webhook.site/...
'400':
description: Bad Request
content:
application/json:
example:
error:
code: AP1100
message: Topic or webhook Id required to delete webhook
/v2/reports/transactions/CSV:
parameters: []
get:
summary: Transactions CSV
description: Fetch and return the transactions for a specified merchant, delivered in a CSV file.
tags:
- Reports
parameters:
- name: merchantId
in: query
required: false
description: Unique identifier for the merchant.
example: '{{mainMerchantId}}'
schema:
type: string
- name: timezone
in: query
required: false
description: Timezone for the report data.
example: America/Chicago
schema:
type: string
- name: gmtOffset
in: query
required: false
description: GMT Offset for the report data.
example: -5
schema:
type: integer
- name: page
in: query
required: false
description: Page number for pagination.
example: '1'
schema:
type: integer
- name: size
in: query
required: false
description: Number of records per page.
example: '100'
schema:
type: integer
- name: refunds
in: query
required: false
description: Include refunded transactions in the report.
example: 'true'
schema:
type: boolean
- name: voids
in: query
required: false
description: Include voided transactions in the report.
example: 'true'
schema:
type: boolean
- name: version
in: query
required: false
description: Report version.
example: '1.0'
schema:
type: string
- name: email
in: query
required: false
description: Email address to receive the CSV file.
example: test.test@gmail.com
schema:
type: string
- name: dateBegin
in: query
required: false
description: Start date for the report filter (MM-DD-YYYY).
example: 6-25-2020
schema:
type: string
- name: dateEnd
in: query
required: false
description: End date for the report filter (MM-DD-YYYY).
example: 12-14-2019
schema:
type: string
- name: authorization
in: header
required: true
description: Merchant scoped token (V2).
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: Accept
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
description: Success - CSV Request Queued
headers:
Date:
schema:
type: string
example: Fri, 02 Jan 2026 15:10:45 GMT
Content-Type:
schema:
type: string
example: application/json
content:
application/json:
schema:
title: Transaction Total CSV Response
type: object
properties:
success:
type: boolean
message:
type: string
description: CSV creation process started successfully.
examples:
Success_V2:
summary: Success Call - V2
value:
success: true
message: CSV creation request successful
/v2/reports/transactions/totals:
parameters: []
get:
summary: Transactions Totals
description: Fetch and return a summary of the transaction totals for the specified merchant.
tags:
- Reports
parameters:
- name: merchantId
in: query
required: false
description: Unique identifier for the merchant.
example: '{{mainMerchantId}}'
schema:
type: string
- name: dateBegin
in: query
required: false
description: Start date for filtering totals (MM-DD-YYYY).
example: 02-02-2021
schema:
type: string
- name: dateEnd
in: query
required: false
description: End date for filtering totals (MM-DD-YYYY).
example: 11-23-2026
schema:
type: string
- name: timezone
in: query
required: false
description: Timezone for the date filters.
example: America/Chicago
schema:
type: string
- name: authorization
in: header
required: true
description: Merchant scoped token (V2).
example: Bearer {{merchantScopedToken}}
schema:
type: string
- name: Accept
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
description: Success - Totals Generated or Business Error
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/transactionTotals'
- $ref: '#/components/schemas/200failure'
examples:
Success_V2:
summary: Success Call - V2
value:
chargeTotal: 2,924,567.05
tipTotal: 1,735.70
feeTotal: 29,559.03
rewardsTotal: '617.35'
payoutsTotal: 47,315.92
refundsTotal: 532,444.82
netTotal: 2,314,629.93
returns:
payoutReturnsTotal: '189.00'
Success_Zero:
summary: Success - Zero transactions
value:
chargeTotal: '0.00'
tipTotal: '0.00'
feeTotal: '0'
rewardsTotal: '0.00'
payoutsTotal: '0.00'
refundsTotal: '0.00'
netTotal: '0.00'
returns:
payoutReturnsTotal: '0.00'
Fail_Internal:
summary: Fail - Error generating totals
value:
error: Error generating totals
/v2/reports/transactions/batches:
parameters: []
get:
summary: Merchant Batch Balance
description: Fetch the ACH batches and their associated transactions for the specified time range.
tags:
- Reports
parameters:
- name: merchantId
in: query
required: false
description: Unique merchant ID to filter batches.
example: '{{mainMerchantId}}'
schema:
type: string
- name: dateBegin
in: query
required: false
description: Start date for the report filter (MM-DD-YYYY).
example: 02-02-2021
schema:
type: string
- name: dateEnd
in: query
required: false
description: End date for the report filter (MM-DD-YYYY).
example: 11-23-2026
schema:
type: string
- name: timezone
in: query
required: false
description: Time zone for date filters.
example: America/Chicago
schema:
type: string
- name: page
in: query
required: false
description: Page number for paginated results.
example: 1
schema:
type: integer
- name: size
in: query
required: false
description: Page size.
example: 100
schema:
type: integer
- name: Accept
in: header
required: false
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: Merchant token with Bearer prefix.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
description: Successful response - Batch list retrieved
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
batchId:
type: integer
batchDate:
type: string
format: date-time
transactions:
type: array
items:
type: object
paging:
type: object
properties:
totalItems:
type: integer
totalPages:
type: integer
currentPage:
type: integer
itemsPerPage:
type: integer
examples:
Success_V2:
summary: Success Call - V2
value:
data:
- batchId: 13374
batchDate: '2025-12-11T02:00:49-06:00'
transactions:
- uuid: 836bbf98-9fa8-11f0-80bc-12d4b68c7db9
amount:
amount: 3446598
currency: USD
direction: credit
- uuid: 8370be5d-9fa8-11f0-80bc-12d4b68c7db9
amount:
amount: 9032
currency: USD
direction: debit
- batchId: 13319
batchDate: '2025-12-09T02:00:49-06:00'
transactions: []
paging:
totalItems: 452
totalPages: 23
currentPage: 1
itemsPerPage: 2
'401':
description: Unauthorized
content:
application/json:
example:
error:
code: AP008
message: Invalid token.
/v2/merchantReputation:
parameters: []
get:
summary: merchantReputation
description: 'Retrieve the current reputation status for a specific user associated with the merchant.
The response includes the `userReputation` score and the `dateModified` timestamp indicating when the status was last
updated.'
tags:
- Merchant Management
parameters:
- name: userId
in: query
required: false
description: User ID to query their reputation.
example: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
schema:
type: string
- name: authorization
in: header
required: true
description: Merchant token with Bearer prefix.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
description: Success - Reputation retrieved
content:
application/json:
schema:
oneOf:
- title: Get merchantReputation Response
type: object
properties:
merchantId:
type: string
description: MerchantId
dateModified:
type: string
description: Last date reputation was modified.
paging:
type: object
nullable: true
description: Pagination
userId:
type: string
description: User Id. No longer primary user identifier.
userReputation:
type: integer
description: Reputation status, as integer. 0, 1, or 2
- $ref: '#/components/schemas/200failure'
examples:
Success_V2:
summary: Success Call - V2
value:
merchantId: '1057'
dateModified: '2025-12-26 16:49:51'
paging: null
userId: d5e17cbf-92ad-44e7-b483-19dba7adaaa4
userReputation: 0
'400':
description: Validation error
content:
application/json:
example:
error:
code: AP700
message: 'Missing required Parameter: ''user_id'''
'401':
description: Unauthorized
content:
application/json:
example:
error:
code: AP101
message: No Authenticated User
post:
summary: merchantReputation
description: 'Create or update the reputation status for one or more users associated with the merchant.
Accepts a list of `userReputations`, allowing for bulk updates by providing a `reputation` score for each `userId`.'
tags:
- Merchant Management
parameters:
- name: Content-Type
in: header
required: true
example: application/json
schema:
type: string
- name: authorization
in: header
required: true
description: Merchant token with Bearer prefix.
example: Bearer {{merchantScopedToken}}
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- merchantId
- userReputations
properties:
merchantId:
type: integer
userReputations:
type: array
items:
type: object
properties:
userId:
type: string
reputation:
type: integer
example:
merchantId: 1057
userReputations:
- userId: 42f73292-9a78-433b-9d60-09561536a033
reputation: 2
required: true
responses:
'200':
description: Success - Reputation updated
content:
application/json:
schema:
oneOf:
- title: Post merchantReputationStatus Response
type: object
properties:
userReputations:
type: array
items:
type: object
properties:
userId:
type: string
description: UserId of the user whose reputation was updated.
reputation:
type: integer
description: New reputation of the user
- $ref: '#/components/schemas/200failure'
examples:
Success_Update:
summary: Success V2 update
value:
userReputations:
- userId: 42f73292-9a78-433b-9d60-09561536a033
reputation: 2
'400':
description: Reputation validation error
content:
application/json:
example:
error:
code: AP700
message: 'Missing required Parameter: ''Invalid userReputations value: reputation value 5 does not exist'''
/v2/merchant/tipConfiguration:
get:
summary: tipConfiguration
description: 'Retrieve the Aeropay tipping configuration for the authenticated merchant.
Use this endpoint to render tip options in your own checkout flow instead of maintaining a duplicate copy of the merchant''s
tip settings. Tip settings are managed in the Aeropay Merchant Portal, and this response always reflects their current
state.
The merchant is derived from the merchant-scoped token, so this endpoint takes no request parameters. Tipping is configured
at the merchant level and cannot be configured per merchant location.
### Check `enabled` first
The response has two shapes. When tipping is off, `tipConfiguration` contains `enabled` and nothing else:
```json
{"tipConfiguration": {"enabled": false}}
```
`options`, `defaultValue`, and `customTipEnabled` are omitted entirely rather than returned empty, because they describe
how to render a tip prompt that will never be shown. A merchant that configured tip options and later turned tipping
off returns this same response - leftover options are not surfaced. Read `enabled` before reading any other field.
A merchant with no tipping configuration at all returns this same shape with `200`. It is not an error condition.
### Reading `options`
When `enabled` is `true`, each entry in `options` is discriminated by `type`, and the shape of `value` changes accordingly:
- `type: "percentage"` — `value` is the tip percentage as a number, for example `15` or `12.5`. It is a percentage
of the transaction amount, not a decimal multiplier.
- `type: "flat"` — `value` is a money object, `{"amount": , "currency": "USD"}`, matching the amount
convention used elsewhere in the v2 API. An `amount` of `500` is $5.00.
A custom (user-entered) tip is reported by the `customTipEnabled` boolean and is never returned as an entry in `options`.
A merchant whose only configured tip is a custom one returns `enabled: true` with an empty `options` array and `customTipEnabled:
true`.
This endpoint is read-only and does not apply a tip. Once a tip is selected, send it as a tip attribute on `POST /v2/transaction`
or `PATCH /v2/preauthTransaction/{preauthTransactionId}`.
Error Glossary (click to expand)
| Code | HTTP Status | Message |
|------|-------------|---------|
| `AP101` | 401 | A merchant-scoped token is required |
'
tags:
- Merchant Management
parameters:
- name: authorization
in: header
required: true
description: Merchant token with Bearer prefix.
example: Bearer {{merchantScopedToken}}
schema:
type: string
responses:
'200':
description: Success - Tip configuration retrieved
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/tipConfigurationResponse'
- $ref: '#/components/schemas/200failure'
examples:
Success_Percentages:
summary: Success - percentage options with custom tip
value:
tipConfiguration:
enabled: true
options:
- type: percentage
value: 15
- type: percentage
value: 20
- type: percentage
value: 25
defaultValue: null
customTipEnabled: true
Success_MixedOptions:
summary: Success - flat and percentage options
value:
tipConfiguration:
enabled: true
options:
- type: flat
value:
amount: 500
currency: USD
- type: percentage
value: 12.5
defaultValue: null
customTipEnabled: false
Success_TippingDisabled:
summary: Success - tipping disabled or not configured
value:
tipConfiguration:
enabled: false
'401':
description: Unauthorized
content:
application/json:
example:
error:
code: AP101
message: A merchant-scoped token is required.
components:
schemas:
200failure:
title: Failure Response
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
help:
type: string
description: Support contact information
example:
error:
help: Contact support@aeropay.com for help.
code: AP700
message: 'Missing required Parameter: ''email'''
emptyResponse:
title: Empty Response
type: object
properties: {}
example: {}
userRequest:
title: Post user Request
required:
- firstName
- lastName
- phoneNumber
- email
type: object
properties:
firstName:
type: string
description: First name of user being created
lastName:
type: string
description: Last name of user being created
phoneNumber:
type: string
description: Phone number of user in international format (+11234567890). Landlines, VOIPs, or prepaid numbers are
invalid.
email:
type: string
description: Email of user being created
example:
firstName: Stephanie
lastName: Jones
phoneNumber: '+11234567890'
email: stephjones@aeropay.com
confirmUserObject:
title: Confirm user - MFA Validation
type: object
properties:
user:
type: object
properties:
id:
type: string
description: The id of the user, in uuid format
firstName:
type: string
description: The user's first name
lastName:
type: string
description: The user's last name
type:
type: string
description: Type of user. (consumer, business)
email:
type: string
format: email
description: The user's email
phoneNumber:
type: string
description: The user's phone number
createdDate:
type: string
format: date-time
description: Date user was created
userStatus:
type: string
format: date-time
description: Date user was created
example:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
userStatus: Active
userObject:
title: Post user - New User and Network User Response
type: object
properties:
user:
type: object
properties:
id:
type: string
description: The id of the user, in uuid format
firstName:
type: string
description: The user's first name
lastName:
type: string
description: The user's last name
type:
type: string
description: Type of user. (consumer, business)
email:
type: string
format: email
description: The user's email
phoneNumber:
type: string
description: The user's phone number
createdDate:
type: string
format: date-time
description: Date user was created
mfaType:
type: string
description: The Multi-Factor Authentication type determined by the merchant's configuration.
enum:
- sms
- email
example: sms
example:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
userStatus: Active
mfaType: sms
userGetResponse:
title: Get user Response
type: object
properties:
user:
type: object
properties:
id:
type: string
description: The id of the user, in uuid format
firstName:
type: string
description: The user's first name
lastName:
type: string
description: The user's last name
type:
type: string
description: Type of user. (consumer, business)
email:
type: string
format: email
description: The user's email
phoneNumber:
type: string
description: The user's phone number
createdDate:
type: string
format: date-time
description: Date user was created
userStatus:
type: string
description: The user's status
example:
user:
id: 2ac82269-9315-4bb6-8a19-f37e20d50238
firstName: JohnNew
lastName: DoeNew
type: consumer
email: test-1754932665@aeropay.com
phoneNumber: '+11754932665'
createdDate: '2025-02-27T12:59:32+00:00'
userStatus: Active
aggregatorCredentialsResponse:
title: Post aggregatorCredentials Response
type: object
properties:
fastlinkURL:
type: string
token:
type: string
username:
type: string
linkAccountFromAggregatorResponse:
title: Post linkAccountFromAggregator Response
type: object
properties:
userBankInfo:
type: object
properties:
bankAccountId:
type: integer
bankName:
type: string
accountLast4:
type: string
name:
type: string
externalBankAccountId:
type: string
isSelected:
type: boolean
accountType:
type: string
status:
type: string
createdDate:
type: string
accountHolderInfo:
type: array
items:
type: object
properties:
name:
type: object
properties:
fullName:
type: string
canFetchBalance:
type: boolean
balance:
type: integer
transactionResponse:
title: Post transaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
amount:
type: integer
currency:
type: string
status:
type: string
paymentType:
type: string
userId:
type: string
title:
type: string
referenceId:
type: string
attributes:
type: array
items:
type: object
isRtp:
type: boolean
merchantId:
type: integer
locationId:
type: integer
userAccountId:
type: integer
transactionGetResponse:
title: Get transaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
amount:
type: integer
currency:
type: string
status:
type: string
paymentType:
type: string
userId:
type: string
title:
type: string
referenceId:
type: string
attributes:
type: array
items:
type: object
createdDate:
type: string
format: date-time
modifiedDate:
type: string
format: date-time
apFee:
type: string
isRtp:
type: boolean
merchantId:
type: integer
locationId:
type: integer
userAccountId:
type: integer
transactionRefundsResponse:
title: Get transaction refunds Response
type: object
properties:
refunds:
type: array
description: List of processed or pending refunds for the transaction. Empty array when only queued refunds exist.
items:
$ref: '#/components/schemas/transactionGetResponse'
nullable: false
queuedRefunds:
type: array
description: List of individually tracked refunds that have been requested but not yet processed. Each item carries
its own id, referenceId, amount, and status. Empty array when no queued refunds exist.
items:
$ref: '#/components/schemas/queuedRefundItem'
nullable: false
example:
refunds:
- id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
amount:
amount: 5000
currency: USD
status: processed
paymentType: reversal
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
title: Refund for Online Transaction
referenceId: 0123456789
attributes: []
createdDate: '2026-01-22T10:30:00+00:00'
modifiedDate: '2026-01-22T10:30:00+00:00'
apFee: '0.00'
isRtp: false
merchantId: 582
locationId: 541
userAccountId: 1139036
queuedRefunds: []
refundItem:
title: Refund item
allOf:
- $ref: '#/components/schemas/transactionGetResponse'
example:
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
amount:
amount: 5000
currency: USD
status: processed
paymentType: reversal
userId: 2ac82269-9315-4bb6-8a19-f37e20d50238
title: Refund for Online Transaction
referenceId: 0123456789
attributes: []
createdDate: '2026-01-22T10:30:00+00:00'
modifiedDate: '2026-01-22T10:30:00+00:00'
apFee: '0.00'
isRtp: false
merchantId: 582
locationId: 541
userAccountId: 1139036
queuedRefundItem:
title: Queued refund item
type: object
properties:
id:
type: string
format: uuid
description: UUID4 assigned to this queued refund at creation. Will become the aeroTransaction.id when the queued
refund is processed.
referenceId:
type: string
nullable: true
description: Merchant-provided reference supplied at the time POST /v2/reverseTransaction was called. null if none
was provided. Stored as a transaction attribute when processed.
amount:
type: object
properties:
amount:
type: integer
description: Queued refund amount in cents
currency:
type: string
description: Currency code (e.g., USD)
status:
type: string
description: Current state of this queued refund entry. 'queued' means it is pending processing. 'abandoned' means
it was superseded or cancelled before processing.
enum:
- queued
- abandoned
example:
id: a3f1c2d4-e5b6-7890-abcd-ef1234567890
referenceId: b4e2d3f5-f6c7-8901-bcde-fa2345678901
amount:
amount: 1500
currency: USD
status: queued
preauthTransactionResponse:
title: Post preauthTransaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
currency:
type: string
amount:
type: integer
status:
type: string
userId:
type: string
description:
type: string
attributes:
type: object
createdDate:
type: string
format: date-time
expiryDate:
type: string
format: date-time
userName:
type: string
userEmail:
type: string
format: email
merchantId:
type: integer
userAccountId:
type: integer
locationId:
type: integer
referenceId:
type: string
preauthTransactionGetResponse:
title: Get preauthTransaction Response
type: object
properties:
paging:
type: object
properties:
totalPages:
type: integer
totalItems:
type: integer
currentPage:
type: integer
itemsPerPage:
type: integer
transactions:
type: array
items:
type: object
properties:
id:
type: string
transactionId:
type: string
nullable: true
merchantId:
type: integer
merchantAccountId:
type: integer
merchantLocationId:
type: integer
locationId:
type: integer
userId:
type: string
userAccountId:
type: integer
userName:
type: string
userEmail:
type: string
format: email
amount:
type: object
properties:
currency:
type: string
amount:
type: integer
description:
type: string
attributes:
type: object
createdDate:
type: string
format: date-time
expiryDate:
type: string
format: date-time
status:
type: string
referenceId:
type: string
capturePreauthTransactionResponse:
title: POST capturePreauthTransaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
currency:
type: string
amount:
type: integer
status:
type: string
userId:
type: string
description:
type: string
attributes:
type: object
createdDate:
type: string
format: date-time
expiryDate:
type: string
format: date-time
userName:
type: string
userEmail:
type: string
format: email
merchantId:
type: integer
userAccountId:
type: integer
locationId:
type: integer
reverseTransactionResponse:
title: POST reverseTransaction Response
type: object
properties:
refundTransaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
currency:
type: string
amount:
type: integer
status:
type: string
paymentType:
type: string
userId:
type: string
title:
type: string
createdDate:
type: string
modifiedDate:
type: string
apFee:
type: string
isRtp:
type: boolean
merchantId:
type: integer
locationId:
type: integer
userAccountId:
type: integer
message:
type: string
payoutTransactionResponse:
title: Post payoutTransaction Response
type: object
properties:
transaction:
type: object
properties:
id:
type: string
amount:
type: object
properties:
amount:
type: integer
currency:
type: string
status:
type: string
paymentType:
type: string
userId:
type: string
referenceId:
type: string
isRtp:
type: boolean
merchantId:
type: integer
title:
type: string
locationId:
type: integer
userAccountId:
type: integer
transactionSearchResponse:
title: POST transactionSearch Response
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: string
status:
type: string
userId:
type: string
merchantId:
type: integer
locationId:
type: integer
title:
type: string
userAccountId:
type: integer
amount:
type: object
properties:
amount:
type: integer
currency:
type: string
apFee:
type: string
paymentType:
type: string
createdDate:
type: string
modifiedDate:
type: string
isRtp:
type: boolean
customerName:
type: string
locationName:
type: string
merchantName:
type: string
paging:
type: object
properties:
totalPages:
type: integer
totalItems:
type: integer
currentPage:
type: integer
itemsPerPage:
type: integer
webhookPostResponse:
title: Post webhook Response
type: object
properties:
webhooks:
type: object
description: Object of webhook subscribed to
properties:
id:
type: integer
description: Id of webhook subscription.
topic:
type: string
url:
type: string
format: uri
payloadVersion:
type: string
description: Payload format version for this subscription (e.g.2.0). Determines the shape of delivered webhook
payloads.
example: '2.0'
webhookGetResponse:
title: Get webhook Response
type: object
properties:
webhooks:
type: array
description: Array of subscribed webhook objects
items:
type: object
properties:
id:
type: integer
description: Id of webhook subscription.
topic:
type: string
url:
type: string
format: uri
payloadVersion:
type: string
description: Payload format version for this subscription (e.g.2.0). Determines the shape of delivered webhook
payloads.
example: '2.0'
webhookDeleteResponse:
title: Delete webhook Response
type: object
properties:
webhooks:
type: array
description: Array of deleted webhook objects
items:
type: object
properties:
id:
type: string
description: Id of webhook subscription.
topic:
type: string
url:
type: string
format: uri
payloadVersion:
type: string
description: Payload format version for this subscription (e.g.2.0). Determines the shape of delivered webhook
payloads.
example: '2.0'
transactionTotals:
title: transactionTotals Response
type: object
properties:
chargeTotal:
type: string
description: Payment total
tipTotal:
type: string
description: Tips total
feeTotal:
type: string
description: Fee total
rewardsTotal:
type: string
description: Rewards total
payoutsTotal:
type: string
description: Payout payment total
refundsTotal:
type: string
description: Refund total
netTotal:
type: string
description: Net total of above fields
returns:
type: object
description: ACH returns object
properties:
payoutReturnsTotal:
type: string
description: Payout returns total
merchantReputationStatusPostResponse:
title: Post merchantReputationStatus Response
type: object
properties:
userReputations:
type: array
description: Array of users reputations updated.
items:
type: object
properties:
userId:
type: string
description: UserId of the user whose reputation was updated.
reputation:
type: integer
description: New reputation of the user
tipConfigurationResponse:
title: Get tipConfiguration Response
type: object
properties:
tipConfiguration:
description: The merchant's current tipping configuration. Returned in one of two shapes depending on `enabled`.
oneOf:
- title: Tipping enabled
type: object
description: Returned when the merchant has tipping switched on.
required:
- enabled
- options
- defaultValue
- customTipEnabled
properties:
enabled:
type: boolean
enum:
- true
description: Always `true` in this variant. The remaining fields are present only in this shape.
options:
type: array
description: The tip options configured by the merchant, in configured order. A custom tip is never included
here - see `customTipEnabled`. May be empty when the merchant's only configured tip is a custom one.
items:
type: object
properties:
type:
type: string
enum:
- percentage
- flat
description: Determines how `value` is interpreted. `percentage` is a percentage of the transaction
amount; `flat` is a fixed currency amount.
value:
description: The tip value. A number when `type` is `percentage`, a money object when `type` is `flat`.
oneOf:
- title: Percentage value
type: number
description: Returned when `type` is `percentage`. The tip percentage of the transaction amount, for
example `15` or `12.5` - not a decimal multiplier.
example: 15
- title: Flat value
type: object
description: Returned when `type` is `flat`.
properties:
amount:
type: integer
description: The flat tip amount in cents. `500` is $5.00.
example: 500
currency:
type: string
description: ISO 4217 currency code. Always `USD`.
example: USD
defaultValue:
description: Reserved for a pre-selected default tip option. Always `null` today - a default selection is
not yet configurable in the Aeropay Merchant Portal. The key is always present in this variant so the shape
remains stable, and will begin returning a value once default selection is supported. Treat `null` as no
option pre-selected. No type is declared because the eventual shape will follow the selected option.
example: null
customTipEnabled:
type: boolean
description: Whether the merchant has configured a custom, user-entered tip. When `true`, present a custom
tip input alongside `options`. A custom tip is reported here rather than as an entry in `options`.
- title: Tipping disabled
type: object
description: Returned when the merchant has tipping switched off, or has no tipping configuration at all. `enabled`
is the only key present - `options`, `defaultValue`, and `customTipEnabled` are omitted rather than returned
empty.
required:
- enabled
additionalProperties: false
properties:
enabled:
type: boolean
enum:
- false
description: Always `false` in this variant. Do not present tipping at checkout.