Airtm · AsyncAPI Specification

Airtm Webhooks

Version

View Spec View on GitHub paymentspayoutscross-border-paymentsfintechdigital-walletstablecoinusdcstellarmass-payoutsremittanceslatin-americaemerging-marketsmoney-services-businessoauth2openid-connectAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-06'
method: searched
source: >-
  https://api.enterprise.airtm.com/openapi.json (the `webhooks` object of the V2 OpenAPI, plus the
  "Webhooks & Notifications" and Wallet Resource API "Webhooks" guides in info.description)
docs: https://docs.airtm.com/
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
  Airtm publishes NO AsyncAPI document — /asyncapi.json and /asyncapi.yaml return 404 on the API
  host. The event surface is real and machine-readable only insofar as the V2 OpenAPI declares a
  top-level `webhooks` object with eight events carrying full request-body schemas. That is captured
  verbatim in openapi/airtm-enterprise-v2-openapi.json; this file is the catalog view.
delivery:
  provider: Svix
  migrated: '2025-07'
  configuration_url: https://enterprise.airtm.com/settings/webhooks
  portal_operation: GetPortalUrl (GET /v2/embedded/webhooks/portal-url)
  signature_verification: true
  retries: automatic retries for failed deliveries
  transport: HTTPS POST
  acknowledgement: return a 2xx status
  source_ips_published: true
  source_ips_docs_section: 'Connecting → IP Addresses'
events:
- name: payout.created
  summary: Payout Created
  description: Triggered when a payout has been created.
  payload_schema: PayoutResponse
  envelope: {type: string, data: PayoutResponse}
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payout.created
- name: payout.completed
  summary: Payout completed
  description: A payout has completed.
  payload_schema: PayoutResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payout.completed
- name: payout.failed
  summary: Payout failed
  payload_schema: PayoutResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payout.failed
- name: payout.canceled
  summary: Payout canceled
  payload_schema: PayoutResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payout.canceled
- name: payin.created
  summary: Payin created
  payload_schema: PayinResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payin.created
- name: payin.confirmed
  summary: Payin confirmed
  payload_schema: PayinResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payin.confirmed
- name: payin.failed
  summary: Payin failed
  payload_schema: PayinResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payin.failed
- name: payin.canceled
  summary: Payin canceled
  payload_schema: PayinResponse
  declared_in: openapi/airtm-enterprise-v2-openapi.json#/webhooks/payin.canceled
wallet_resource_events:
  note: >-
    The OAuth-gated Wallet Resource (Connect) API emits four further events over the same Svix
    delivery. These are documented in prose only — they are NOT declared in the OpenAPI `webhooks`
    object, so no machine-readable payload schema is published for them.
  events:
  - {name: oidc.transaction.created, fired_when: 'A transaction is registered (status created or pending_user_confirmation).'}
  - {name: oidc.transaction.pendingSettlement, fired_when: 'The Stellar transaction is broadcast and observed (status pending_settlement).'}
  - {name: oidc.transaction.completed, fired_when: 'The transaction settles successfully (status completed).'}
  - {name: oidc.transaction.failed, fired_when: 'The transaction fails terminally (status failed).'}
  payload_note: >-
    Every event wraps the same transaction object returned by the REST endpoints. On a terminal event
    where the underlying quote can no longer be loaded, amountToSend / amountToReceive / fees are
    delivered as null so the status change is never dropped; the REST read endpoints never return
    those as null.
consumer_guidance:
- Return a 2xx HTTP status to acknowledge receipt.
- Implement signature verification (Svix).
- Use HTTPS for all webhook URLs.
- Handle idempotency to prevent duplicate processing.
- Implement retry logic for temporary failures.
- Allowlist the published Airtm egress IPs.