Wise · AsyncAPI Specification

Wise Platform Webhooks

Version 2.0.0

AsyncAPI 2.6 description of the Wise Platform webhook surface. Wise pushes HTTP `POST` notifications to subscriber-defined HTTPS endpoints when events occur against profiles, transfers, balances, cards, multi-currency account details, batches, settlements, holds, disputes and partner support cases. Each delivery is signed with an RSA-SHA256 signature over the raw HTTP request body. The signature is Base64-encoded and transmitted in the `X-Signature-SHA256` header. Subscribers verify the signature using Wise's published RSA public keys (separate keys for production and sandbox) and must reject any request whose signature does not validate. Subscribers must respond with a `2xx` HTTP status within 5 seconds. Failed deliveries are retried up to 25 times with increasing back-off over a two-week window. Events may arrive out of order; consumers should use the event-specific ordering fields (typically `data.occurred_at`). Sources: - https://docs.wise.com/guides/developer/webhooks/event-handling - https://docs.wise.com/guides/developer/webhooks/event-types - https://github.com/transferwise/digital-signatures-examples/tree/main/verify-webhook-signature

View Spec View on GitHub PaymentsFXCross-BorderBankingMulti-CurrencyAsyncAPIEventsWebhooks

Channels

transfers#state-change
subscribe onTransferStateChange
Receive transfer state change notifications.
Triggered whenever a transfer's state changes. Available at both profile and application subscription levels.
transfers#active-cases
subscribe onTransferActiveCases
Receive transfer active cases notifications.
Triggered when the list of active cases on a transfer is updated.
transfers#refund
subscribe onTransferRefund
Receive transfer refund notifications.
Triggered when a transfer becomes `funds_refunded`, providing refund amount and currency information.
transfers#payout-failure
subscribe onTransferPayoutFailure
Receive transfer payout failure notifications.
Triggered when a transfer payout fails, including failure reason codes.
balances#update
subscribe onBalanceUpdate
Receive balance credit/debit notifications.
Primary balance event. Triggered for credit or debit transactions on a multi-currency balance. Supersedes `balances#credit`.
balances#credit
subscribe onBalanceCredit
Receive (deprecated) balance credit notifications.
Profile-level event triggered every time a multi-currency balance is credited. Deprecated in favour of `balances#update`.
balances#account-state-change
subscribe onBalanceAccountStateChange
Receive balance account state change notifications.
Application-level event triggered when a balance account is activated or deactivated.
profiles#verification-state-change
subscribe onProfileVerificationStateChange
Receive profile verification state change notifications.
Triggered when the verification state of a connected profile changes between `verified` and `not_verified`.
profiles#state-change
subscribe onProfileStateChange
Receive profile state change notifications.
Triggered every time a profile's state is updated.
profiles#cdd-check-state-change
subscribe onProfileCddCheckStateChange
Receive CDD check state change notifications.
Triggered when a Customer Due Diligence check state changes, including required evidences and review outcome.
profiles#overdraft-limit-threshold
subscribe onProfileOverdraftLimitThreshold
Receive overdraft limit threshold notifications.
Triggered when overdraft usage reaches the 70% threshold (rate-limited to a maximum of once per hour per profile).
users#state-change
subscribe onUserStateChange
Receive user state change notifications.
Application-level event triggered when a user's state changes (ACTIVE, WITHDRAW_ONLY, DEACTIVATED).
cards#card-status-change
subscribe onCardStatusChange
Receive card status change notifications.
Triggered for initial and subsequent card status updates.
cards#card-production-status-change
subscribe onCardProductionStatusChange
Receive card production status notifications.
Triggered for physical cards using `KIOSK_COLLECTION` delivery.
cards#3ds-challenge
subscribe onCard3dsChallenge
Receive 3DS challenge notifications.
Triggered for 3D Secure push notifications during card transactions.
cards#manual-provisioning-verification
subscribe onCardManualProvisioningVerification
Receive manual provisioning verification notifications.
Triggered for manual wallet provisioning verification.
cards#transaction-state-change
subscribe onCardTransactionStateChange
Receive card transaction state change notifications.
Triggered when a card transaction state changes. Includes merchant, fees, debits and credits.
cards#card-order-status-change
subscribe onCardOrderStatusChange
Receive card order status notifications.
Triggered when a card order status changes.
account-details-order#order-state-change
subscribe onAccountDetailsOrderStateChange
Receive account details order state change notifications.
Application-level event triggered when a multi-currency account details order state changes (PENDING_USER, PENDING_TW, REQUIREMENTS_FULFILLED, DONE).
account-details-payment#state-change
subscribe onAccountDetailsPaymentStateChange
Receive account details pay-in state change notifications.
Triggered every time a pay-in is made into the specified account details.
hold-limit-breach#update
subscribe onHoldLimitBreachUpdate
Receive hold limit breach notifications.
Triggered whenever a regulatory hold limit breach is opened or closed.
batch-payment-initiations#state-change
subscribe onBatchPaymentInitiationStateChange
Receive batch payment initiation state change notifications.
Application-level event triggered when a batch payment initiation state changes (NEW, PROCESSING, COMPLETED, FAILED, CHARGED_BACK).
bulk-settlement#payment-received
subscribe onBulkSettlementPaymentReceived
Receive bulk settlement payment notifications.
Application-level event triggered when bulk settlement funds arrive.
transaction-disputes#update
subscribe onTransactionDisputeUpdate
Receive transaction dispute update notifications.
Application-level event triggered when a transaction dispute is submitted or updated.
partner-support#case-changed
subscribe onPartnerSupportCaseChanged
Receive partner support case change notifications.
Application-level beta event triggered when a partner support case updates, including comments or status changes.
swift-in#credit
subscribe onSwiftInCredit
Receive SWIFT inbound credit notifications.
Triggered when a SWIFT inbound credit is received, including UETR, sender, recipient, exchange rate, and fee breakdown.

Messages

✉
TransferStateChangeEvent
Transfer State Change
Transfer status was updated.
✉
TransferActiveCasesEvent
Transfer Active Cases
Active case list on the transfer was updated.
✉
TransferRefundEvent
Transfer Refund
Transfer status became funds_refunded.
✉
TransferPayoutFailureEvent
Transfer Payout Failure
A transfer payout failed.
✉
BalanceUpdateEvent
Balance Update
A credit or debit posted to a multi-currency balance.
✉
BalanceCreditEvent
Balance Credit (deprecated)
Deprecated profile-level balance credit event.
✉
BalanceAccountStateChangeEvent
Balance Account State Change
Balance account was activated or deactivated.
✉
ProfileVerificationStateChangeEvent
Profile Verification State Change
A connected profile's verification state changed.
✉
ProfileStateChangeEvent
Profile State Change
Profile state was updated.
✉
ProfileCddCheckStateChangeEvent
Profile CDD Check State Change
Customer Due Diligence check state changed.
✉
ProfileOverdraftLimitThresholdEvent
Profile Overdraft Limit Threshold
Overdraft usage reached the configured threshold.
✉
UserStateChangeEvent
User State Change
User account state changed.
✉
CardStatusChangeEvent
Card Status Change
Card status was updated.
✉
CardProductionStatusChangeEvent
Card Production Status Change
Physical card production status changed.
✉
Card3dsChallengeEvent
Card 3DS Challenge
A 3D Secure challenge was issued.
✉
CardManualProvisioningVerificationEvent
Card Manual Provisioning Verification
Manual wallet provisioning verification event.
✉
CardTransactionStateChangeEvent
Card Transaction State Change
A card transaction state changed.
✉
CardOrderStatusChangeEvent
Card Order Status Change
Card order status changed.
✉
AccountDetailsOrderStateChangeEvent
Account Details Order State Change
Multi-currency account details order state changed.
✉
AccountDetailsPaymentStateChangeEvent
Account Details Payment State Change
A pay-in to an account-details set was processed.
✉
HoldLimitBreachUpdateEvent
Hold Limit Breach Update
Regulatory hold limit breach opened or closed.
✉
BatchPaymentInitiationStateChangeEvent
Batch Payment Initiation State Change
Batch payment initiation moved through its lifecycle.
✉
BulkSettlementPaymentReceivedEvent
Bulk Settlement Payment Received
Bulk settlement funds arrived.
✉
TransactionDisputeUpdateEvent
Transaction Dispute Update
A transaction dispute was submitted or updated.
✉
PartnerSupportCaseChangedEvent
Partner Support Case Changed
Partner support case updated (beta).
✉
SwiftInCreditEvent
SWIFT Inbound Credit
A SWIFT inbound credit was received.

Servers

https
production https://{subscriberHost}
The subscriber's HTTPS endpoint that receives Wise webhook notifications in production. Signatures are verified using the production RSA public key.
https
sandbox https://{subscriberHost}
Sandbox subscriber endpoint. Notifications originate from api.sandbox.transferwise.tech and are signed with the sandbox RSA public key.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Wise Platform Webhooks
  version: '2.0.0'
  description: |
    AsyncAPI 2.6 description of the Wise Platform webhook surface. Wise pushes
    HTTP `POST` notifications to subscriber-defined HTTPS endpoints when events
    occur against profiles, transfers, balances, cards, multi-currency account
    details, batches, settlements, holds, disputes and partner support cases.

    Each delivery is signed with an RSA-SHA256 signature over the raw HTTP
    request body. The signature is Base64-encoded and transmitted in the
    `X-Signature-SHA256` header. Subscribers verify the signature using Wise's
    published RSA public keys (separate keys for production and sandbox) and
    must reject any request whose signature does not validate.

    Subscribers must respond with a `2xx` HTTP status within 5 seconds.
    Failed deliveries are retried up to 25 times with increasing back-off
    over a two-week window. Events may arrive out of order; consumers should
    use the event-specific ordering fields (typically `data.occurred_at`).

    Sources:
      - https://docs.wise.com/guides/developer/webhooks/event-handling
      - https://docs.wise.com/guides/developer/webhooks/event-types
      - https://github.com/transferwise/digital-signatures-examples/tree/main/verify-webhook-signature
  contact:
    name: Wise Platform Developer Support
    url: https://docs.wise.com/
  license:
    name: Wise Platform API Terms
    url: https://wise.com/legal/

defaultContentType: application/json

servers:
  production:
    url: https://{subscriberHost}
    protocol: https
    description: |
      The subscriber's HTTPS endpoint that receives Wise webhook notifications
      in production. Signatures are verified using the production RSA public key.
    variables:
      subscriberHost:
        description: Host name of the subscriber's webhook endpoint.
        default: example.com
  sandbox:
    url: https://{subscriberHost}
    protocol: https
    description: |
      Sandbox subscriber endpoint. Notifications originate from
      api.sandbox.transferwise.tech and are signed with the sandbox RSA public key.
    variables:
      subscriberHost:
        description: Host name of the subscriber's sandbox webhook endpoint.
        default: example.com

channels:
  'transfers#state-change':
    description: |
      Triggered whenever a transfer's state changes. Available at both profile
      and application subscription levels.
    subscribe:
      operationId: onTransferStateChange
      summary: Receive transfer state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/TransferStateChangeEvent'

  'transfers#active-cases':
    description: |
      Triggered when the list of active cases on a transfer is updated.
    subscribe:
      operationId: onTransferActiveCases
      summary: Receive transfer active cases notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/TransferActiveCasesEvent'

  'transfers#refund':
    description: |
      Triggered when a transfer becomes `funds_refunded`, providing refund
      amount and currency information.
    subscribe:
      operationId: onTransferRefund
      summary: Receive transfer refund notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/TransferRefundEvent'

  'transfers#payout-failure':
    description: |
      Triggered when a transfer payout fails, including failure reason codes.
    subscribe:
      operationId: onTransferPayoutFailure
      summary: Receive transfer payout failure notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/TransferPayoutFailureEvent'

  'balances#update':
    description: |
      Primary balance event. Triggered for credit or debit transactions on
      a multi-currency balance. Supersedes `balances#credit`.
    subscribe:
      operationId: onBalanceUpdate
      summary: Receive balance credit/debit notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/BalanceUpdateEvent'

  'balances#credit':
    description: |
      Profile-level event triggered every time a multi-currency balance is
      credited. Deprecated in favour of `balances#update`.
    subscribe:
      operationId: onBalanceCredit
      summary: Receive (deprecated) balance credit notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/BalanceCreditEvent'

  'balances#account-state-change':
    description: |
      Application-level event triggered when a balance account is activated
      or deactivated.
    subscribe:
      operationId: onBalanceAccountStateChange
      summary: Receive balance account state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/BalanceAccountStateChangeEvent'

  'profiles#verification-state-change':
    description: |
      Triggered when the verification state of a connected profile changes
      between `verified` and `not_verified`.
    subscribe:
      operationId: onProfileVerificationStateChange
      summary: Receive profile verification state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/ProfileVerificationStateChangeEvent'

  'profiles#state-change':
    description: |
      Triggered every time a profile's state is updated.
    subscribe:
      operationId: onProfileStateChange
      summary: Receive profile state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/ProfileStateChangeEvent'

  'profiles#cdd-check-state-change':
    description: |
      Triggered when a Customer Due Diligence check state changes, including
      required evidences and review outcome.
    subscribe:
      operationId: onProfileCddCheckStateChange
      summary: Receive CDD check state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/ProfileCddCheckStateChangeEvent'

  'profiles#overdraft-limit-threshold':
    description: |
      Triggered when overdraft usage reaches the 70% threshold (rate-limited
      to a maximum of once per hour per profile).
    subscribe:
      operationId: onProfileOverdraftLimitThreshold
      summary: Receive overdraft limit threshold notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/ProfileOverdraftLimitThresholdEvent'

  'users#state-change':
    description: |
      Application-level event triggered when a user's state changes
      (ACTIVE, WITHDRAW_ONLY, DEACTIVATED).
    subscribe:
      operationId: onUserStateChange
      summary: Receive user state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/UserStateChangeEvent'

  'cards#card-status-change':
    description: |
      Triggered for initial and subsequent card status updates.
    subscribe:
      operationId: onCardStatusChange
      summary: Receive card status change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/CardStatusChangeEvent'

  'cards#card-production-status-change':
    description: |
      Triggered for physical cards using `KIOSK_COLLECTION` delivery.
    subscribe:
      operationId: onCardProductionStatusChange
      summary: Receive card production status notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/CardProductionStatusChangeEvent'

  'cards#3ds-challenge':
    description: |
      Triggered for 3D Secure push notifications during card transactions.
    subscribe:
      operationId: onCard3dsChallenge
      summary: Receive 3DS challenge notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/Card3dsChallengeEvent'

  'cards#manual-provisioning-verification':
    description: |
      Triggered for manual wallet provisioning verification.
    subscribe:
      operationId: onCardManualProvisioningVerification
      summary: Receive manual provisioning verification notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/CardManualProvisioningVerificationEvent'

  'cards#transaction-state-change':
    description: |
      Triggered when a card transaction state changes. Includes merchant,
      fees, debits and credits.
    subscribe:
      operationId: onCardTransactionStateChange
      summary: Receive card transaction state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/CardTransactionStateChangeEvent'

  'cards#card-order-status-change':
    description: |
      Triggered when a card order status changes.
    subscribe:
      operationId: onCardOrderStatusChange
      summary: Receive card order status notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/CardOrderStatusChangeEvent'

  'account-details-order#order-state-change':
    description: |
      Application-level event triggered when a multi-currency account details
      order state changes (PENDING_USER, PENDING_TW, REQUIREMENTS_FULFILLED, DONE).
    subscribe:
      operationId: onAccountDetailsOrderStateChange
      summary: Receive account details order state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/AccountDetailsOrderStateChangeEvent'

  'account-details-payment#state-change':
    description: |
      Triggered every time a pay-in is made into the specified account details.
    subscribe:
      operationId: onAccountDetailsPaymentStateChange
      summary: Receive account details pay-in state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/AccountDetailsPaymentStateChangeEvent'

  'hold-limit-breach#update':
    description: |
      Triggered whenever a regulatory hold limit breach is opened or closed.
    subscribe:
      operationId: onHoldLimitBreachUpdate
      summary: Receive hold limit breach notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/HoldLimitBreachUpdateEvent'

  'batch-payment-initiations#state-change':
    description: |
      Application-level event triggered when a batch payment initiation state
      changes (NEW, PROCESSING, COMPLETED, FAILED, CHARGED_BACK).
    subscribe:
      operationId: onBatchPaymentInitiationStateChange
      summary: Receive batch payment initiation state change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/BatchPaymentInitiationStateChangeEvent'

  'bulk-settlement#payment-received':
    description: |
      Application-level event triggered when bulk settlement funds arrive.
    subscribe:
      operationId: onBulkSettlementPaymentReceived
      summary: Receive bulk settlement payment notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/BulkSettlementPaymentReceivedEvent'

  'transaction-disputes#update':
    description: |
      Application-level event triggered when a transaction dispute is submitted
      or updated.
    subscribe:
      operationId: onTransactionDisputeUpdate
      summary: Receive transaction dispute update notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/TransactionDisputeUpdateEvent'

  'partner-support#case-changed':
    description: |
      Application-level beta event triggered when a partner support case
      updates, including comments or status changes.
    subscribe:
      operationId: onPartnerSupportCaseChanged
      summary: Receive partner support case change notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/PartnerSupportCaseChangedEvent'

  'swift-in#credit':
    description: |
      Triggered when a SWIFT inbound credit is received, including UETR,
      sender, recipient, exchange rate, and fee breakdown.
    subscribe:
      operationId: onSwiftInCredit
      summary: Receive SWIFT inbound credit notifications.
      bindings:
        http:
          type: request
          method: POST
          bindingVersion: '0.3.0'
      message:
        $ref: '#/components/messages/SwiftInCreditEvent'

components:
  messages:
    TransferStateChangeEvent:
      name: TransferStateChangeEvent
      title: Transfer State Change
      summary: Transfer status was updated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'transfers#state-change'
              data:
                $ref: '#/components/schemas/TransferStateChangeData'

    TransferActiveCasesEvent:
      name: TransferActiveCasesEvent
      title: Transfer Active Cases
      summary: Active case list on the transfer was updated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'transfers#active-cases'
              data:
                $ref: '#/components/schemas/TransferActiveCasesData'

    TransferRefundEvent:
      name: TransferRefundEvent
      title: Transfer Refund
      summary: Transfer status became funds_refunded.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'transfers#refund'
              data:
                $ref: '#/components/schemas/TransferRefundData'

    TransferPayoutFailureEvent:
      name: TransferPayoutFailureEvent
      title: Transfer Payout Failure
      summary: A transfer payout failed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'transfers#payout-failure'
              data:
                $ref: '#/components/schemas/TransferPayoutFailureData'

    BalanceUpdateEvent:
      name: BalanceUpdateEvent
      title: Balance Update
      summary: A credit or debit posted to a multi-currency balance.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'balances#update'
              data:
                $ref: '#/components/schemas/BalanceUpdateData'

    BalanceCreditEvent:
      name: BalanceCreditEvent
      title: Balance Credit (deprecated)
      summary: Deprecated profile-level balance credit event.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'balances#credit'
              data:
                $ref: '#/components/schemas/BalanceCreditData'

    BalanceAccountStateChangeEvent:
      name: BalanceAccountStateChangeEvent
      title: Balance Account State Change
      summary: Balance account was activated or deactivated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'balances#account-state-change'
              data:
                $ref: '#/components/schemas/BalanceAccountStateChangeData'

    ProfileVerificationStateChangeEvent:
      name: ProfileVerificationStateChangeEvent
      title: Profile Verification State Change
      summary: A connected profile's verification state changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'profiles#verification-state-change'
              data:
                $ref: '#/components/schemas/ProfileVerificationStateChangeData'

    ProfileStateChangeEvent:
      name: ProfileStateChangeEvent
      title: Profile State Change
      summary: Profile state was updated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'profiles#state-change'
              data:
                $ref: '#/components/schemas/ProfileStateChangeData'

    ProfileCddCheckStateChangeEvent:
      name: ProfileCddCheckStateChangeEvent
      title: Profile CDD Check State Change
      summary: Customer Due Diligence check state changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'profiles#cdd-check-state-change'
              data:
                $ref: '#/components/schemas/ProfileCddCheckStateChangeData'

    ProfileOverdraftLimitThresholdEvent:
      name: ProfileOverdraftLimitThresholdEvent
      title: Profile Overdraft Limit Threshold
      summary: Overdraft usage reached the configured threshold.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'profiles#overdraft-limit-threshold'

    UserStateChangeEvent:
      name: UserStateChangeEvent
      title: User State Change
      summary: User account state changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'users#state-change'

    CardStatusChangeEvent:
      name: CardStatusChangeEvent
      title: Card Status Change
      summary: Card status was updated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#card-status-change'

    CardProductionStatusChangeEvent:
      name: CardProductionStatusChangeEvent
      title: Card Production Status Change
      summary: Physical card production status changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#card-production-status-change'

    Card3dsChallengeEvent:
      name: Card3dsChallengeEvent
      title: Card 3DS Challenge
      summary: A 3D Secure challenge was issued.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#3ds-challenge'

    CardManualProvisioningVerificationEvent:
      name: CardManualProvisioningVerificationEvent
      title: Card Manual Provisioning Verification
      summary: Manual wallet provisioning verification event.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#manual-provisioning-verification'

    CardTransactionStateChangeEvent:
      name: CardTransactionStateChangeEvent
      title: Card Transaction State Change
      summary: A card transaction state changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#transaction-state-change'
              data:
                $ref: '#/components/schemas/CardTransactionStateChangeData'

    CardOrderStatusChangeEvent:
      name: CardOrderStatusChangeEvent
      title: Card Order Status Change
      summary: Card order status changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'cards#card-order-status-change'
              data:
                $ref: '#/components/schemas/CardOrderStatusChangeData'

    AccountDetailsOrderStateChangeEvent:
      name: AccountDetailsOrderStateChangeEvent
      title: Account Details Order State Change
      summary: Multi-currency account details order state changed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'account-details-order#order-state-change'

    AccountDetailsPaymentStateChangeEvent:
      name: AccountDetailsPaymentStateChangeEvent
      title: Account Details Payment State Change
      summary: A pay-in to an account-details set was processed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'account-details-payment#state-change'

    HoldLimitBreachUpdateEvent:
      name: HoldLimitBreachUpdateEvent
      title: Hold Limit Breach Update
      summary: Regulatory hold limit breach opened or closed.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'hold-limit-breach#update'
              data:
                $ref: '#/components/schemas/HoldLimitBreachData'

    BatchPaymentInitiationStateChangeEvent:
      name: BatchPaymentInitiationStateChangeEvent
      title: Batch Payment Initiation State Change
      summary: Batch payment initiation moved through its lifecycle.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'batch-payment-initiations#state-change'

    BulkSettlementPaymentReceivedEvent:
      name: BulkSettlementPaymentReceivedEvent
      title: Bulk Settlement Payment Received
      summary: Bulk settlement funds arrived.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'bulk-settlement#payment-received'
              data:
                $ref: '#/components/schemas/BulkSettlementData'

    TransactionDisputeUpdateEvent:
      name: TransactionDisputeUpdateEvent
      title: Transaction Dispute Update
      summary: A transaction dispute was submitted or updated.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'transaction-disputes#update'

    PartnerSupportCaseChangedEvent:
      name: PartnerSupportCaseChangedEvent
      title: Partner Support Case Changed
      summary: Partner support case updated (beta).
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'partner-support#case-changed'

    SwiftInCreditEvent:
      name: SwiftInCreditEvent
      title: SWIFT Inbound Credit
      summary: A SWIFT inbound credit was received.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        allOf:
          - $ref: '#/components/schemas/EventEnvelope'
          - type: object
            properties:
              event_type:
                type: string
                const: 'swift-in#credit'
              data:
                $ref: '#/components/schemas/SwiftInCreditData'

  schemas:
    EventEnvelope:
      type: object
      description: |
        Standard envelope for all Wise webhook notifications.
      required:
        - subscription_id
        - event_type
        - schema_version
        - sent_at
        - data
      properties:
        subscription_id:
          type: string
          format: uuid
          description: Identifier of the webhook subscription that delivered this event.
          example: '01234567-89ab-cdef-0123-456789abcdef'
        event_type:
          type: string
          description: Event identifier (e.g. `transfers#state-change`).
        schema_version:
          type: string
          description: Notification schema version.
          example: '2.0.0'
        sent_at:
          type: string
          format: date-time
          description: Timestamp at which Wise dispatched the notification.
          example: '2020-01-01T12:34:56Z'
        data:
          type: object
          description: Event-specific payload. Shape depends on `event_type`.

    WebhookHeaders:
      type: object
      description: |
        HTTP request headers Wise sends with every webhook delivery.
      required:
        - X-Signature-SHA256
        - X-Delivery-Id
      properties:
        X-Signature-SHA256:
          type: string
          description: |
            Base64-encoded RSA-SHA256 signature of the raw HTTP request body.
            Verify using the relevant (production or sandbox) Wise public key.
          example: 'M3o3z6sV...base64...=='
        X-Delivery-Id:
          type: string
          format: uuid
          description: Unique delivery UUID assigned to each notification attempt.
          example: 'abcd1234-5678-90ab-cdef-1234567890ab'
        X-Test-Notification:
          type: string
          enum: ['true']
          description: Present and equal to `true` for test notifications sent during subscription setup.

    Resource:
      type: object
      description: Generic Wise resource reference embedded in event data.
      properties:
        type:
          type: string
          description: Resource type (e.g. `transfer`, `balance`, `profile`).
        id:
          oneOf:
            - type: integer
            - type: string
          description: Resource identifier.
        profile_id:
          type: integer
          description: Owning profile identifier.
        account_id:
          type: integer
          description: Owning account identifier where applicable.

    TransferStateChangeData:
      type: object
      description: Payload for `transfers#state-change`.
      required:
        - resource
        - current_state
        - occurred_at
      properties:
        resource:
          $ref: '#/components/schemas/Resource'
        current_state:
          type: string
          description: Current transfer state (e.g. `incoming_payment_waiting`, `processing`, `funds_converted`, `outgoing_payment_sent`, `cancelled`, `funds_refunded`, `bounced_back`, `charged_back`).
        previous_state:
          type: string
          description: Previous transfer state.
        occurred_at:
          type: string
          format: date-time
          description: When the state change occurred (use for ordering).

    TransferActiveCasesData:
      type: object
      description: Payload for `transfers#active-cases`.
      required:
        - resource
        - active_cases
        - occurred_at
      properties:
        resource:
          $ref: '#/components/schemas/R

# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wise/refs/heads/main/asyncapi/wise-webhooks-asyncapi.yml

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/wise-webhooks-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.