asyncapi: 3.0.0
info:
  title: Ingo Payments — Embedded iFrame Webhooks
  version: 1.0.0
  description: >-
    Ingo delivers webhook events to your registered HTTPS endpoint via HTTP POST
    for Embedded Account Capture (iFrame) session and tokenization activity.
    Return any 2xx status to acknowledge receipt. Non-2xx responses are retried
    every 60 minutes for up to 24 hours.
  contact:
    name: Ingo Payments Integrations
    url: https://developers.ingopayments.com
defaultContentType: application/json
servers:
  webhook:
    host: your-webhook-endpoint.example.com
    protocol: https
    description: Ingo delivers events via HTTP POST to your registered HTTPS endpoint.
channels:
  PluginTransactionAccountVerificationCardCnsCdFailure:
    address: plugin.transaction.account.verification.card.cns_cd.failure
    title: Card CNS/CD Verification Failure
    tags:
      - name: Webhooks
    description: Fired when card number screening or card data verification fails.
    messages:
      PluginTransactionAccountVerificationCardCnsCdFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationCardCnsCdFailureMessage
  PluginTransactionAccountVerificationCardAvsCvvFailure:
    address: plugin.transaction.account.verification.card.avs_cvv.failure
    title: Card AVS/CVV Verification Failure
    tags:
      - name: Webhooks
    description: Fired when AVS or CVV verification fails for a card account.
    messages:
      PluginTransactionAccountVerificationCardAvsCvvFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationCardAvsCvvFailureMessage
  PluginTransactionAccountVerificationAchRnvFailure:
    address: plugin.transaction.account.verification.ach.rnv.failure
    title: ACH Routing Number Verification Failure
    tags:
      - name: Webhooks
    description: Fired when ACH routing number verification (RNV) fails.
    messages:
      PluginTransactionAccountVerificationAchRnvFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationAchRnvFailureMessage
  PluginTransactionAccountVerificationAchAnvFailure:
    address: plugin.transaction.account.verification.ach.anv.failure
    title: ACH Account Number Verification Failure
    tags:
      - name: Webhooks
    description: Fired when ACH account number verification (ANV) fails.
    messages:
      PluginTransactionAccountVerificationAchAnvFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationAchAnvFailureMessage
  PluginTransactionAccountVerificationAchNavFailure:
    address: plugin.transaction.account.verification.ach.nav.failure
    title: ACH Name/Address Verification Failure
    tags:
      - name: Webhooks
    description: Fired when ACH name and address verification (NAV) fails.
    messages:
      PluginTransactionAccountVerificationAchNavFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationAchNavFailureMessage
  PluginTransactionAccountVerificationPaypalSuccessAv:
    address: plugin.transaction.account.verification.paypal.success.av
    title: PayPal Account Verification Success
    tags:
      - name: Webhooks
    description: Fired when PayPal account verification completes successfully.
    messages:
      PluginTransactionAccountVerificationPaypalSuccessAvMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationPaypalSuccessAvMessage
  PluginTransactionAccountVerificationPaypalFailureAv:
    address: plugin.transaction.account.verification.paypal.failure.av
    title: PayPal Account Verification Failure
    tags:
      - name: Webhooks
    description: Fired when PayPal account verification fails.
    messages:
      PluginTransactionAccountVerificationPaypalFailureAvMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountVerificationPaypalFailureAvMessage
  PluginTransactionRecipientVerificationRvdmSuccess:
    address: plugin.transaction.recipient.verification.rvdm.success
    title: RVDM Verification Success
    tags:
      - name: Webhooks
    description: >-
      Fired when Recipient Verification Data Matching (RVDM) completes
      successfully via the iFrame plugin.
    messages:
      PluginTransactionRecipientVerificationRvdmSuccessMessage:
        $ref: >-
          #/components/messages/PluginTransactionRecipientVerificationRvdmSuccessMessage
  PluginTransactionRecipientVerificationRvdmFailure:
    address: plugin.transaction.recipient.verification.rvdm.failure
    title: RVDM Verification Failure
    tags:
      - name: Webhooks
    description: Fired when RVDM verification fails via the iFrame plugin.
    messages:
      PluginTransactionRecipientVerificationRvdmFailureMessage:
        $ref: >-
          #/components/messages/PluginTransactionRecipientVerificationRvdmFailureMessage
  PluginTransactionAccountTokenizationSuccess:
    address: plugin.transaction.account.tokenization.success
    title: Account Tokenization Success
    tags:
      - name: Webhooks
    description: >-
      Fired when a recipient account is successfully tokenized via the iFrame
      plugin. Documents the latest contract version (v3); earlier versions may
      omit account_id.
    messages:
      PluginTransactionAccountTokenizationSuccessMessage:
        $ref: >-
          #/components/messages/PluginTransactionAccountTokenizationSuccessMessage
  PluginTransactionSessionRequestExpired:
    address: plugin.transaction.session.request.expired
    title: Session Expired
    tags:
      - name: Webhooks
    description: Fired when an iFrame plugin session expires without being completed.
    messages:
      PluginTransactionSessionRequestExpiredMessage:
        $ref: '#/components/messages/PluginTransactionSessionRequestExpiredMessage'
  PluginTransactionSessionRequestTerminated:
    address: plugin.transaction.session.request.terminated
    title: Session Terminated
    tags:
      - name: Webhooks
    description: >-
      Fired when the overall maximum account verification attempt limit is
      exceeded, terminating the session.
    messages:
      PluginTransactionSessionRequestTerminatedMessage:
        $ref: '#/components/messages/PluginTransactionSessionRequestTerminatedMessage'
operations:
  receivePluginTransactionAccountVerificationCardCnsCdFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationCardCnsCdFailure'
    summary: Card CNS/CD Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationCardAvsCvvFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationCardAvsCvvFailure'
    summary: Card AVS/CVV Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationAchRnvFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationAchRnvFailure'
    summary: ACH Routing Number Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationAchAnvFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationAchAnvFailure'
    summary: ACH Account Number Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationAchNavFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationAchNavFailure'
    summary: ACH Name/Address Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationPaypalSuccessAv:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationPaypalSuccessAv'
    summary: PayPal Account Verification Success
    tags:
      - name: Account Verification Events
  receivePluginTransactionAccountVerificationPaypalFailureAv:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountVerificationPaypalFailureAv'
    summary: PayPal Account Verification Failure
    tags:
      - name: Account Verification Events
  receivePluginTransactionRecipientVerificationRvdmSuccess:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionRecipientVerificationRvdmSuccess'
    summary: RVDM Verification Success
    tags:
      - name: Recipient Verification Events
  receivePluginTransactionRecipientVerificationRvdmFailure:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionRecipientVerificationRvdmFailure'
    summary: RVDM Verification Failure
    tags:
      - name: Recipient Verification Events
  receivePluginTransactionAccountTokenizationSuccess:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionAccountTokenizationSuccess'
    summary: Account Tokenization Success
    tags:
      - name: Account Tokenization Events
  receivePluginTransactionSessionRequestExpired:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionSessionRequestExpired'
    summary: Session Expired
    tags:
      - name: Session Events
  receivePluginTransactionSessionRequestTerminated:
    action: receive
    channel:
      $ref: '#/channels/PluginTransactionSessionRequestTerminated'
    summary: Session Terminated
    tags:
      - name: Session Events
components:
  messages:
    PluginTransactionAccountVerificationCardCnsCdFailureMessage:
      name: PluginTransactionAccountVerificationCardCnsCdFailureMessage
      title: Card CNS/CD Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: Card CNS/CD Verification Failure
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                attempt_count: 1
                status: '700'
                max_attempts: 2
                client_message: Account not currently available for payment
            metadata:
              version: '1'
              topic_description: >-
                This event reports Card Not Supported (CNS) or CheckDigit (CD)
                validation failure on a Card payment request.
              timestamp: 1752002582
              topic: plugin.transaction.account.verification.card.cns_cd.failure
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionAccountVerificationCardAvsCvvFailureMessage:
      name: PluginTransactionAccountVerificationCardAvsCvvFailureMessage
      title: Card AVS/CVV Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: Card AVS/CVV Verification Failure
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                attempt_count: 1
                status: '758'
                max_attempts: 2
                client_message: AVS  Declined - No Match
            metadata:
              version: '1'
              topic_description: >-
                This event reports Address Verification Service (AVS) or Card
                Verification Value (CVV) validation failure on a Card payment
                request.
              timestamp: 1752003040
              topic: plugin.transaction.account.verification.card.avs_cvv.failure
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionAccountVerificationAchRnvFailureMessage:
      name: PluginTransactionAccountVerificationAchRnvFailureMessage
      title: ACH Routing Number Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: ACH Routing Number Verification Failure
          payload:
            metadata:
              version: '1'
              topic_description: >-
                This event reports Routing Number Validation (RNV) validation
                failure on an ACH payment request.
              timestamp: 1744321176
              topic: plugin.transaction.account.verification.ach.rnv.failure
              id: prod1-123456-abcd-1234-ab12-c123d456e789
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                attempt_count: 2
                status: '743'
                max_attempts: 3
                client_message: Invalid routing_number
    PluginTransactionAccountVerificationAchAnvFailureMessage:
      name: PluginTransactionAccountVerificationAchAnvFailureMessage
      title: ACH Account Number Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: ACH Account Number Verification Failure
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                attempt_count: 1
                status: '769'
                max_attempts: 3
                client_message: Invalid Account Number
            metadata:
              version: '1'
              topic_description: >-
                This event reports Account Number Validation (ANV) validation
                failure on an ACH payment request.
              timestamp: 1751659136
              topic: plugin.transaction.account.verification.ach.anv.failure
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionAccountVerificationAchNavFailureMessage:
      name: PluginTransactionAccountVerificationAchNavFailureMessage
      title: ACH Name/Address Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: ACH Name/Address Verification Failure
          payload:
            metadata:
              topic: plugin.transaction.account.verification.ach.nav.failure
              id: prod1-123456-abcd-1234-ab12-c123d456e789
              timestamp: 1720655064
              version: '1'
              topic_description: >-
                This event reports Name on Account Validation (NAV) validation
                failure on an ACH payment request.
            data:
              event:
                status: '777'
                client_message: Address did not match
                max_attempts: 3
                attempt_count: 1
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
    PluginTransactionAccountVerificationPaypalSuccessAvMessage:
      name: PluginTransactionAccountVerificationPaypalSuccessAvMessage
      title: PayPal Account Verification Success
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                allOf:
                  - $ref: '#/components/schemas/WebhookEventBase'
                  - $ref: '#/components/schemas/EventPaypalVerification'
      examples:
        - name: PayPal Account Verification Success
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                session_id: 00000000-0000-0000-0000-000000000001
                notification_id: '1000001'
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                has_passed: true
                status: '1149'
                attempt_count: 0
                max_attempts: 1
                field_results:
                  - was_evaluated: true
                    client_provided_value: 'True'
                    is_matching: true
                    field_name: IsVerifiedAccount
                    paypal_provided_value: 'True'
                    hard_fail_on_mismatch: true
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Alex
                    is_matching: true
                    field_name: FirstName
                    paypal_provided_value: Alex
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Rivera
                    is_matching: true
                    field_name: LastName
                    paypal_provided_value: Rivera
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: 100 Innovation Way
                    is_matching: false
                    field_name: AddressLine1
                    paypal_provided_value: 100 Innovation Way
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Anytown
                    is_matching: false
                    field_name: City
                    paypal_provided_value: Anytown
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: GA
                    is_matching: false
                    field_name: State
                    paypal_provided_value: OK
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: '30092'
                    is_matching: false
                    field_name: ZipCode
                    paypal_provided_value: '73134'
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: US
                    is_matching: true
                    field_name: Country
                    paypal_provided_value: US
                    hard_fail_on_mismatch: true
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: recipient@example.com
                    is_matching: true
                    field_name: HasAssociatedEmail
                    paypal_provided_value: recipient@example.com
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: recipient@example.com
                    is_matching: true
                    field_name: PrimaryEmail
                    paypal_provided_value: recipient@example.com
                    hard_fail_on_mismatch: false
                    is_enabled: true
                was_skipped: false
                client_message: PayPal Account Verification Success(Soft Failure)
            metadata:
              version: '1'
              topic_description: >-
                This event indicates that the PayPal account verification was
                successful
              timestamp: 1750885109
              topic: plugin.transaction.account.verification.paypal.success.av
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionAccountVerificationPaypalFailureAvMessage:
      name: PluginTransactionAccountVerificationPaypalFailureAvMessage
      title: PayPal Account Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                allOf:
                  - $ref: '#/components/schemas/WebhookEventBase'
                  - $ref: '#/components/schemas/EventPaypalVerification'
      examples:
        - name: PayPal Account Verification Failure
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                has_passed: false
                status: '1150'
                attempt_count: 1
                max_attempts: 1
                field_results:
                  - was_evaluated: true
                    client_provided_value: 'True'
                    is_matching: true
                    field_name: IsVerifiedAccount
                    paypal_provided_value: 'True'
                    hard_fail_on_mismatch: true
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Alex
                    is_matching: false
                    field_name: FirstName
                    paypal_provided_value: Jamie
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Rivera
                    is_matching: false
                    field_name: LastName
                    paypal_provided_value: Chen
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: 100 Innovation Way
                    is_matching: false
                    field_name: AddressLine1
                    paypal_provided_value: 200 Different Blvd
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: Anytown
                    is_matching: false
                    field_name: City
                    paypal_provided_value: Othertown
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: GA
                    is_matching: false
                    field_name: State
                    paypal_provided_value: CA
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: '30092'
                    is_matching: false
                    field_name: ZipCode
                    paypal_provided_value: '95127'
                    hard_fail_on_mismatch: false
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: US
                    is_matching: true
                    field_name: Country
                    paypal_provided_value: US
                    hard_fail_on_mismatch: true
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: recipient@example.com
                    is_matching: false
                    field_name: HasAssociatedEmail
                    paypal_provided_value: other@example.com
                    hard_fail_on_mismatch: true
                    is_enabled: true
                  - was_evaluated: true
                    client_provided_value: recipient@example.com
                    is_matching: false
                    field_name: PrimaryEmail
                    paypal_provided_value: other@example.com
                    hard_fail_on_mismatch: true
                    is_enabled: true
                was_skipped: false
                client_message: PayPal Account Verification Error
            metadata:
              version: '1'
              topic_description: >-
                This event indicates that the PayPal account verification has
                failed
              timestamp: 1751947442
              topic: plugin.transaction.account.verification.paypal.failure.av
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionRecipientVerificationRvdmSuccessMessage:
      name: PluginTransactionRecipientVerificationRvdmSuccessMessage
      title: RVDM Verification Success
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                allOf:
                  - $ref: '#/components/schemas/WebhookEventBase'
                  - $ref: '#/components/schemas/EventRvdmResult'
      examples:
        - name: RVDM Verification Success
          payload:
            data:
              ancillary:
                participant_unique_id2: ''
                tracer_token: 10001_1234567890_1234567489-1234-121345-abcdefg
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: '12345678987654321'
              event:
                has_passed: true
                status: '1103'
                attempt_count: 0
                max_attempts: 2
                field_results:
                  - was_evaluated: true
                    client_provided_value: Alex
                    is_matching: true
                    field_name: FirstName
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: Alex
                  - was_evaluated: true
                    client_provided_value: Rivera
                    is_matching: true
                    field_name: LastName
                    hard_fail_on_mismatch: true
                    is_enabled: true
                    customer_provided_value: Rivera
                  - was_evaluated: true
                    client_provided_value: 100 Innovation Way
                    is_matching: true
                    field_name: AddressLine1
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: 100 Innovation Way
                  - was_evaluated: true
                    client_provided_value: Anytown
                    is_matching: true
                    field_name: City
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: Anytown
                  - was_evaluated: true
                    client_provided_value: GA
                    is_matching: true
                    field_name: State
                    hard_fail_on_mismatch: true
                    is_enabled: true
                    customer_provided_value: GA
                  - was_evaluated: true
                    client_provided_value: '30022'
                    is_matching: true
                    field_name: ZipCode
                    hard_fail_on_mismatch: true
                    is_enabled: true
                    customer_provided_value: '30022'
                  - was_evaluated: false
                    client_provided_value: ''
                    is_matching: false
                    field_name: BusinessName
                    hard_fail_on_mismatch: false
                    is_enabled: false
                    customer_provided_value: ''
                was_skipped: false
                client_message: Recipient Verification Data Matching Success
            metadata:
              version: '1'
              topic_description: >-
                This event reports a successful (Success or soft
                failure)recipient verification data matching in the Payment
                Claim Center
              timestamp: 1751558045
              topic: plugin.transaction.recipient.verification.rvdm.success
              id: abcd123245-1234-abcd-123456-abc1234
    PluginTransactionRecipientVerificationRvdmFailureMessage:
      name: PluginTransactionRecipientVerificationRvdmFailureMessage
      title: RVDM Verification Failure
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                allOf:
                  - $ref: '#/components/schemas/WebhookEventBase'
                  - $ref: '#/components/schemas/EventRvdmResult'
      examples:
        - name: RVDM Verification Failure
          payload:
            data:
              ancillary:
                participant_unique_id2: ''
                tracer_token: 10001_1234567890_1234567489-1234-121345-abcdefg
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: '12345678987654321'
              event:
                has_passed: false
                status: '1105'
                attempt_count: 2
                max_attempts: 2
                field_results:
                  - was_evaluated: true
                    client_provided_value: Alex
                    is_matching: true
                    field_name: FirstName
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: Jordan
                  - was_evaluated: true
                    client_provided_value: Rivera
                    is_matching: false
                    field_name: LastName
                    hard_fail_on_mismatch: true
                    is_enabled: true
                    customer_provided_value: Martinez
                  - was_evaluated: true
                    client_provided_value: 100 Innovation Way
                    is_matching: true
                    field_name: AddressLine1
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: 200 Different Blvd
                  - was_evaluated: true
                    client_provided_value: Anytown
                    is_matching: true
                    field_name: City
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: Othertown
                  - was_evaluated: true
                    client_provided_value: GA
                    is_matching: true
                    field_name: State
                    hard_fail_on_mismatch: false
                    is_enabled: true
                    customer_provided_value: GA
                  - was_evaluated: true
                    client_provided_value: '30092'
                    is_matching: true
                    field_name: ZipCode
                    hard_fail_on_mismatch: true
                    is_enabled: true
                    customer_provided_value: '30092'
                  - was_evaluated: false
                    client_provided_value: ''
                    is_matching: false
                    field_name: BusinessName
                    hard_fail_on_mismatch: false
                    is_enabled: false
                    customer_provided_value: ''
                was_skipped: false
                client_message: Recipient Verification Data Matching failure
            metadata:
              version: '1'
              topic_description: >-
                This event reports a failure in recipient verification data
                matching in the Payment Claim Center.
              timestamp: 1752000116
              topic: plugin.transaction.recipient.verification.rvdm.failure
              id: 0c75e679-fdf2-5af5-96ce-fre2af3239e9
    PluginTransactionAccountTokenizationSuccessMessage:
      name: PluginTransactionAccountTokenizationSuccessMessage
      title: Account Tokenization Success
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                allOf:
                  - $ref: '#/components/schemas/WebhookEventBase'
                  - $ref: '#/components/schemas/EventTokenizationSuccess'
      examples:
        - name: Account Tokenization Success
          payload:
            metadata:
              topic_description: >-
                This event reports successful tokenization of a recipient
                disbursement account. Includes the token and other account
                information.
              version: '3'
              timestamp: 1776970179
              topic: plugin.transaction.account.tokenization.success
              id: 438c568d-e2d1-4644-98d7-a8b9e32ce2ad
            data:
              ancillary:
                tracer_token: 90018_1776970034_1556c27a-863b-4a62-8385-98076c844947
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: PARTNER-REF-001
                participant_unique_id2: ''
              event:
                last_4: '3456'
                issuers:
                  - payee_city: Chicago
                    issuing_network: NA
                    payee_address: PO Box 66407
                    payee_id: '551475'
                    payee_state: IL
                    payee_name: American Property Management of IL, Inc.
                    debit_enabled: 1
                    payee_zip: 60666-6407
                    credit_enabled: 1
                    credit_info:
                      estimated_posting_date: 04/24/2026
                      max: '500.00'
                      estimated_posting_time: |
                        Payment will post 04/24/2026
                      min: '0.01'
                      card_type: NA
                status: '100'
                customer_account_token: 5cbd8f48-95dc-4b00-9dd8-89bd337ddd63
                account_type: BP
                attempt_count: 0
                max_attempts: 3
                client_message: Success
                account_id: '516803'
    PluginTransactionSessionRequestExpiredMessage:
      name: PluginTransactionSessionRequestExpiredMessage
      title: Session Expired
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: Session Expired
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                client_message: Session Request Expired
                status: '1128'
            metadata:
              version: '1'
              topic_description: This event reports that the requested plugin session has expired
              timestamp: 1752005906
              topic: plugin.transaction.session.request.expired
              id: prod1-123456-abcd-1234-ab12-c123d456e789
    PluginTransactionSessionRequestTerminatedMessage:
      name: PluginTransactionSessionRequestTerminatedMessage
      title: Session Terminated
      contentType: application/json
      payload:
        type: object
        required:
          - metadata
          - data
        properties:
          metadata:
            $ref: '#/components/schemas/WebhookMetadata'
          data:
            type: object
            required:
              - ancillary
              - event
            properties:
              ancillary:
                $ref: '#/components/schemas/IngoPayCorrelation'
              event:
                $ref: '#/components/schemas/WebhookEventBase'
      examples:
        - name: Session Terminated
          payload:
            data:
              ancillary:
                participant_unique_id2: 111111111-2222-3333333-4444444444
                tracer_token: 9999999abc-9abc-acb9-cab9999999999
                session_id: 00000000-0000-0000-0000-000000000001
                participant_unique_id1: 22222222-5555-3333333-4444444444
              event:
                client_message: Overall max account verification attempts limit exceeded
                status: '1127'
            metadata:
              version: '1'
              topic_description: Overall max account verification attempts limit exceeded
              timestamp: 1752005355
              topic: plugin.transaction.session.request.terminated
              id: prod1-123456-abcd-1234-ab12-c123d456e789
  schemas:
    WebhookMetadata:
      type: object
      required:
        - id
        - topic
        - topic_description
        - timestamp
        - version
      description: Delivery metadata present on every webhook event.
      properties:
        id:
          type: string
          maxLength: 50
          description: >-
            Ingo-assigned unique ID for this delivery. Use as your idempotency
            key to deduplicate retries.
          example: prod01-6aaa3079-c1ff-4cae-b77a-4b76026fc846
        topic:
          type: string
          maxLength: 150
          description: Topic name identifying the event type.
        topic_description:
          type: string
          maxLength: 250
          description: Human-readable description of the event.
        timestamp:
          type: integer
          description: Unix timestamp of the webhook delivery.
          example: 1777509495
        version:
          type: string
          maxLength: 5
          description: Payload contract version.
          example: '1'
    WebhookEventBase:
      type: object
      required:
        - status
        - client_message
      description: >-
        Core event outcome fields present on every webhook event. Additional
        event-specific properties may be present — see the individual event
        documentation for the complete schema.
      properties:
        status:
          type: string
          maxLength: 10
          description: Numeric status code for the event outcome.
        client_message:
          type: string
          maxLength: 250
          description: Human-readable description of the event outcome.
        attempt_count:
          type: integer
          description: >-
            Current delivery attempt number. Present when the event type has a
            configurable attempt counter.
          example: 1
        max_attempts:
          type: integer
          description: >-
            Maximum allowed attempts. Present when the event type has a
            configurable attempt counter.
          example: 3
    NotifyCorrelation:
      type: object
      required:
        - notification_id
        - participant_unique_id1
      description: >-
        Transaction correlation identifiers for Notify webhook events. Use these
        fields to match the event to a transaction in your system.
      properties:
        notification_id:
          type: string
          maxLength: 15
          description: Ingo-assigned unique identifier for the staged notification.
          example: '10042781'
        session_id:
          type: string
          maxLength: 50
          nullable: true
          description: Ingo-assigned session identifier, when applicable.
        participant_unique_id1:
          type: string
          maxLength: 100
          description: Your primary correlation ID from the original Notify request.
        participant_unique_id2:
          type: string
          maxLength: 100
          nullable: true
          description: Your optional secondary correlation ID.
        party_id:
          type: string
          maxLength: 36
          nullable: true
          description: >-
            Ingo-assigned ID for the specific party this event relates to.
            Present on multi-party (Notify v4) events.
    IngoPayCorrelation:
      type: object
      required:
        - participant_unique_id1
      description: >-
        Transaction correlation identifiers for IngoPay and Embedded iFrame
        webhook events. Use these fields to match the event to a transaction in
        your system.
      properties:
        tracer_token:
          type: string
          maxLength: 250
          nullable: true
          description: Ingo-assigned tracer identifier for the original request.
        session_id:
          type: string
          maxLength: 50
          nullable: true
          description: Ingo-assigned session identifier for the iFrame interaction.
        participant_unique_id1:
          type: string
          maxLength: 100
          description: Your primary correlation ID from the original request.
        participant_unique_id2:
          type: string
          maxLength: 100
          nullable: true
          description: Your optional secondary correlation ID.
    EventTokenizationSuccess:
      type: object
      required:
        - customer_account_token
        - account_type
        - last_4
        - account_id
        - issuers
      description: >-
        Account tokenization result. The latest contract version (v4) is
        documented here; earlier versions may omit account_id.
      properties:
        customer_account_token:
          type: string
          maxLength: 50
          description: >-
            Opaque token representing the tokenized account. Use in subsequent
            Process or Debit requests.
        account_type:
          type: string
          maxLength: 2
          description: Account type code (CA, AC, SD, RT, PD, PU, VE, BP, CK).
        last_4:
          type: string
          maxLength: 4
          description: Last four characters of the account number for identification.
        expiration_date:
          type: string
          maxLength: 4
          description: >-
            Expiration date in MMYY format. Present for card-based accounts
            only.
        account_id:
          type: string
          maxLength: 36
          description: Ingo-assigned unique identifier for this account.
        issuers:
          type: array
          description: >-
            Details about the account issuer(s). Typically one object per
            account.
          items:
            type: object
            properties:
              payee_id:
                type: string
                maxLength: 20
                description: Ingo-assigned ID for the payee/account issuer.
              payee_name:
                type: string
                maxLength: 100
                description: Name of the payee/account issuer.
              payee_address:
                type: string
                maxLength: 150
                description: Address of the payee/account issuer. May be empty.
              payee_city:
                type: string
                maxLength: 150
                description: City of the payee/account issuer. May be empty.
              payee_state:
                type: string
                maxLength: 2
                description: State of the payee/account issuer. May be empty.
              payee_zip:
                type: string
                maxLength: 10
                description: ZIP code of the payee/account issuer. May be empty.
              issuing_network:
                type: string
                maxLength: 10
                description: >-
                  Network the account was issued under (Visa, MasterCard, ACH,
                  etc.). "NA" if not applicable.
              credit_enabled:
                type: integer
                description: >-
                  1 if account can receive credits for this participant, 0
                  otherwise.
              debit_enabled:
                type: integer
                description: 1 if account can be debited for this participant, 0 otherwise.
              credit_info:
                type: object
                description: Credit disbursement details. Present when credit_enabled is 1.
                properties:
                  min:
                    type: string
                    description: Minimum amount the issuer will accept.
                  max:
                    type: string
                    description: Maximum amount the issuer will accept.
                  card_type:
                    type: string
                    description: >-
                      Type of card (credit, debit, prepaid, DDA, etc.). "NA" if
                      not applicable.
                  estimated_posting_time:
                    type: string
                    description: Human-readable estimated posting time.
                  estimated_posting_date:
                    type: string
                    description: Estimated posting date in MM/DD/YYYY format.
              debit_info:
                type: object
                description: Debit pull details. Present when debit_enabled is 1.
                properties:
                  min:
                    type: string
                    description: Minimum amount the issuer will accept.
                  max:
                    type: string
                    description: Maximum amount the issuer will accept.
                  card_type:
                    type: string
                    description: Type of card. "NA" if not applicable.
        bin:
          type: string
          maxLength: 8
          description: Bank Identification Number. Present for card-based accounts only.
        network_validation:
          type: object
          description: >-
            Reference data from network card validation. Present when network
            validation was performed.
          properties:
            validation_provider_id:
              type: string
              maxLength: 3
              description: 'Card validation provider: 1 = Visa, 3 = MasterCard.'
            name_validation:
              type: object
              description: Name match results.
              properties:
                name_match_status:
                  type: string
                  description: 1 = Name match performed, 2 = Not performed.
                name_match_decision:
                  type: string
                  description: 1 = Match, 2 = Partial, 3 = No match.
                first_name_match_decision:
                  type: string
                  description: 1 = Match, 2 = Partial, 3 = No match.
                last_name_match_decision:
                  type: string
                  description: 1 = Match, 2 = Partial, 3 = No match.
                middle_name_match_decision:
                  type: string
                  description: 1 = Match, 2 = Partial, 3 = No match.
        open_banking_finicity:
          type: object
          description: >-
            Open banking account identification for Finicity. Present when
            client is configured for Finicity.
          properties:
            customer_id:
              type: string
              maxLength: 50
              description: Finicity customer ID.
            account_id:
              type: string
              maxLength: 50
              description: Finicity account ID.
    EventRvdmResult:
      type: object
      required:
        - has_passed
        - was_skipped
        - field_results
      description: Recipient Verification Data Matching (RVDM) outcome.
      properties:
        has_passed:
          type: boolean
          description: Overall result of the RVDM attempt.
        was_skipped:
          type: boolean
          description: Whether RVDM was bypassed per client configuration.
        field_results:
          type: array
          description: Per-field match detail for each data element evaluated.
          items:
            type: object
            required:
              - field_name
              - is_matching
              - is_enabled
              - was_evaluated
              - client_provided_value
              - customer_provided_value
              - hard_fail_on_mismatch
            properties:
              field_name:
                type: string
                maxLength: 150
                description: Name of the field assessed.
              is_matching:
                type: boolean
                description: Whether the field values matched.
              is_enabled:
                type: boolean
                description: Whether this field was enabled for matching.
              was_evaluated:
                type: boolean
                description: Whether this field was evaluated during this attempt.
              client_provided_value:
                type: string
                maxLength: 150
                description: Value you submitted for this field.
              customer_provided_value:
                type: string
                maxLength: 150
                description: Value the customer entered during the iFrame interaction.
              hard_fail_on_mismatch:
                type: boolean
                description: Whether a mismatch on this field constitutes a hard failure.
    EventAuthenticationResult:
      type: object
      required:
        - has_passed
        - was_skipped
        - field_results
      description: >-
        Recipient authentication outcome. Covers RVDM-style data matching
        (field_label identifies each field assessed).
      properties:
        has_passed:
          type: boolean
          description: Overall result of the authentication attempt.
        was_skipped:
          type: boolean
          description: Whether authentication was bypassed per configuration.
        field_results:
          type: array
          description: Per-field match results.
          items:
            type: object
            required:
              - field_label
              - is_matching
              - hard_fail_on_mismatch
            properties:
              field_label:
                type: string
                maxLength: 50
                description: Display label of the field assessed.
              is_matching:
                type: boolean
                description: Whether the field values matched.
              hard_fail_on_mismatch:
                type: boolean
                description: Whether a mismatch constitutes a hard failure.
    EventPaypalVerification:
      type: object
      required:
        - has_passed
        - was_skipped
        - field_results
      description: PayPal account verification outcome.
      properties:
        has_passed:
          type: boolean
          description: Overall result of the PayPal account verification attempt.
        was_skipped:
          type: boolean
          description: Whether verification was bypassed per configuration.
        field_results:
          type: array
          description: Per-field verification results.
          items:
            type: object
            required:
              - field_name
              - is_matching
              - is_enabled
              - was_evaluated
              - client_provided_value
              - paypal_provided_value
              - hard_fail_on_mismatch
            properties:
              field_name:
                type: string
                maxLength: 150
                description: >-
                  Name of the field assessed (e.g. FirstName,
                  IsVerifiedAccount).
              is_matching:
                type: boolean
                description: Whether the field values matched.
              is_enabled:
                type: boolean
                description: Whether this field was enabled for matching.
              was_evaluated:
                type: boolean
                description: Whether this field was evaluated.
              client_provided_value:
                type: string
                maxLength: 150
                description: Value you submitted for this field.
              paypal_provided_value:
                type: string
                maxLength: 150
                description: Value returned by PayPal for this field.
              hard_fail_on_mismatch:
                type: boolean
                description: Whether a mismatch constitutes a hard failure.
    EventCheckStatus:
      type: object
      required:
        - check_number
        - check_amount
      description: Check transaction status detail.
      properties:
        check_number:
          type: string
          maxLength: 10
          description: Check serial number.
        check_amount:
          type: string
          maxLength: 10
          description: Check amount.
    EventCheckWithReason:
      type: object
      required:
        - check_number
        - check_amount
        - reason_code
      description: Check transaction status with reason.
      properties:
        check_number:
          type: string
          maxLength: 10
          description: Check serial number.
        check_amount:
          type: string
          maxLength: 10
          description: Check amount.
        reason_code:
          type: string
          maxLength: 10
          description: Reason code for the check action.
        reason_description:
          type: string
          maxLength: 250
          description: Description of the reason code.
    EventPaymentSuccess:
      type: object
      required:
        - account_id
      description: Successful payment disbursement detail.
      properties:
        account_id:
          type: string
          maxLength: 36
          description: Ingo-assigned unique identifier for the disbursed-to account.
    EventPaymentReturned:
      type: object
      required:
        - return_transaction_id
        - reason_code
        - reason_description
      description: Payment return detail.
      properties:
        return_transaction_id:
          type: string
          maxLength: 15
          description: >-
            Ingo-assigned unique transaction identifier for the return
            transaction.
        reason_code:
          type: string
          maxLength: 10
          description: Reason code for the return.
        reason_description:
          type: string
          maxLength: 250
          description: Description of the return reason.
    EventWithReason:
      type: object
      required:
        - reason_code
        - reason_description
      description: Event detail including a reason code and description.
      properties:
        reason_code:
          type:
            - string
            - integer
          description: Reason code.
        reason_description:
          type: string
          maxLength: 250
          description: Description associated with the reason code.
    EventSettlementAdjustment:
      type: object
      required:
        - reason_code
        - reason_description
        - adjustment_type
        - amount
        - transaction_id
      description: Settlement adjustment detail.
      properties:
        reason_code:
          type: string
          maxLength: 10
          description: Adjustment reason code.
        reason_description:
          type: string
          maxLength: 250
          description: Description associated with the reason code.
        adjustment_type:
          type: string
          maxLength: 20
          description: >-
            "credit" — credits your settlement account. "debit" — debits your
            settlement account.
          enum:
            - credit
            - debit
        amount:
          type: string
          maxLength: 10
          description: Transaction amount.
        transaction_id:
          type: string
          maxLength: 15
          description: >-
            Ingo-assigned unique transaction identifier for the original
            transaction.
    EventRolesChange:
      type: object
      required:
        - role_change
      description: Party role change detail.
      properties:
        role_change:
          type: array
          description: Array of role change objects, one per party whose role is changing.
          items:
            type: object
            required:
              - party_id
              - old_role
              - new_role
            properties:
              party_id:
                type: string
                maxLength: 36
                description: Ingo-assigned ID for the party whose role is changing.
              old_role:
                type: integer
                maxLength: 10
                description: Role ID of the previous role.
              new_role:
                type: integer
                maxLength: 10
                description: Role ID of the new role.
