Aeropay · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Aeropay v2 API

11 actions 11 updates servers extends openapi/aeropay-v2-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Aeropay's API. It is a proposal applied on top of the contract, not a document Aeropay publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-agentic-consequencex-reversalx-idempotencyx-side-effectx-apievangelist-profilex-apievangelist-harvested-fromx-apievangelist-harvested-oncontact

Targets 10

$.info
$
$.components.securitySchemes
$.paths['/v2/transaction'].post
$.paths['/v2/payoutTransaction'].post
$.paths['/v2/capturePreauthTransaction'].post
$.paths['/v2/paymentLink'].post
$.paths['/v2/preauthTransaction'].delete
$.paths['/v2/user'].post
$.paths['/v2/transactionSearch'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Aeropay v2 API
  version: 1.0.0
extends: openapi/aeropay-v2-openapi.yml
x-apievangelist:
  generated: '2026-09-10'
  method: generated
  source: 'Enhancements derived from the Aeropay documentation on dev.aero.inc and from the artifacts in
    this repository. Applies our findings WITHOUT mutating the harvested contract in
    openapi/_original/aeropay-v2-openapi.json.'
  note: 'Every action below records something Aeropay states in its own documentation but does not express
    in the machine-readable contract. Nothing here invents behaviour.'
actions:
- target: $.info
  description: Record the profile, its provenance, and the production server the contract omits.
  update:
    x-apievangelist-profile: https://apis.io/provider/aeropay
    x-apievangelist-harvested-from: https://dash.readme.com/api/v1/api-registry/dsdmfqmtkajkc6
    x-apievangelist-harvested-on: '2026-09-10'
    contact:
      name: Aeropay Support
      email: support@aeropay.com
      url: https://dev.aero.inc/docs/getting-started
- target: $
  description: 'The published contract lists only the SANDBOX host in servers[]. Aeropay documents the
    production base as https://api.aeropay.com/v2 in its getting-started guide and in the curl examples on
    the webhooks page. Adding it, rather than replacing the sandbox entry.'
  update:
    servers:
    - url: https://api.sandbox-pay.aero.inc
      description: Sandbox. Credentials issued by Aeropay on request.
      variables: {}
    - url: https://api.aeropay.com
      description: Production. Access granted after Aeropay reviews the integration.
      variables: {}
- target: $.components.securitySchemes
  description: 'The contract declares components.securitySchemes as an EMPTY object while 31 of 32
    operations require an `authorization: Bearer {{token}}` header. Declaring the scheme Aeropay documents
    at https://dev.aero.inc/docs/token-scopes.'
  update:
    AeropayBearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'A transient JWT from POST /v2/token, valid for 30 minutes. The token''s `scope`
        (merchant or userForMerchant) determines which operations it may call.'
- target: $.paths['/v2/transaction'].post
  description: Record the reversal path and window for the primary money-movement create.
  update:
    x-agentic-consequence: irreversible-after-window
    x-reversal:
      operation: POST /v2/reverseTransaction
      window: 'Same business day — voided outright before batching; after batching a reverse-direction
        refund transaction is created and takes 2-3 business days.'
      partial: true
    x-idempotency:
      header: Idempotency-Key
      optional: true
      retention: 1 day
      lookup: GET /v2/transaction/idempotency/{idempotencyKey}
- target: $.paths['/v2/payoutTransaction'].post
  description: Payout has no documented reversal.
  update:
    x-agentic-consequence: irreversible
    x-reversal:
      operation: null
      note: 'No reversal is documented for a payout. POST /v2/reverseTransaction states its id "is only for
        AeroTransactions".'
- target: $.paths['/v2/capturePreauthTransaction'].post
  description: Capture moves money and carries no idempotency key.
  update:
    x-agentic-consequence: irreversible-after-window
    x-idempotency:
      supported: false
      note: 'Unlike the other three money-movement creates, capture declares no Idempotency-Key header. A
        retried capture has no replay protection.'
- target: $.paths['/v2/paymentLink'].post
  description: Sends an SMS or email immediately with no recall.
  update:
    x-agentic-consequence: irreversible
    x-side-effect: Sends an SMS or email to the named recipient on success.
- target: $.paths['/v2/preauthTransaction'].delete
  description: The cancel path for an authorization.
  update:
    x-reversal-of: POST /v2/preauthTransaction
    x-window: 'Before capture. AP312/AP313 once the window has closed.'
- target: $.paths['/v2/user'].post
  description: Record that user creation cannot be undone through the API.
  update:
    x-agentic-consequence: irreversible
    x-side-effect: Sends an SMS OTP to the supplied phone number.
    x-no-delete-operation: true
- target: $.paths['/v2/transactionSearch'].post
  description: A read operation expressed as a POST.
  update:
    x-read-only: true
    x-pagination:
      style: page-number
      request: [page, perPage, sortBy, orderBy]
      response: paging
- target: $
  description: Point at the artifacts that carry what the contract does not express.
  update:
    x-apievangelist-artifacts:
      error_codes: errors/aeropay-error-codes.yml
      decline_codes: errors/aeropay-decline-codes.yml
      conventions: conventions/aeropay-conventions.yml
      authentication: authentication/aeropay-authentication.yml
      sandbox: sandbox/aeropay-sandbox.yml
      webhooks: asyncapi/aeropay-webhooks-asyncapi.yml
      data_model: data-model/aeropay-data-model.yml
      mcp: mcp/aeropay-mcp.yml
    x-apievangelist-contract-gaps:
    - No operationId on any of the 32 operations.
    - components.securitySchemes is an empty object.
    - servers[] names only the sandbox host.
    - No tags[] and no operation-level tags.
    - No 5xx response declared anywhere.
    - No 429 response and no rate-limit headers.
    - Errors are predominantly returned inside an HTTP 200 body.