Adyen Authentication Webhooks API

Adyen sends webhooks to inform your system about events related to cardholder authentication.

OpenAPI Specification

authentication-webhooks-openapi-original.yml Raw ↑
openapi: 3.1.0
info:
  version: '1'
  x-publicVersion: true
  title: Adyen Authentication Webhooks
  description: >-
    Adyen sends webhooks to inform your system about events related to
    cardholder authentication.
  termsOfService: https://www.adyen.com/legal/terms-and-conditions
  contact:
    name: Adyen Developer Experience team
    url: https://github.com/Adyen/adyen-openapi
tags:
  - name: General
webhooks:
  balancePlatform.authentication.created:
    post:
      tags:
        - General
      summary: Cardholder authenticated
      description: >-
        Adyen sends this webhook when the process of cardholder authentication
        is finalized, whether it is completed successfully, fails, or expires.
      x-addedInVersion: '1'
      operationId: post-balancePlatform.authentication.created
      x-sortIndex: 1
      x-methodName: cardholderAuthenticated
      security:
        - BasicAuth: []
      requestBody:
        content:
          application/json:
            examples:
              balancePlatform-authentication-created-authenticated-challenge:
                $ref: >-
                  #/components/examples/post-balancePlatform.authentication.created-balancePlatform-authentication-created-authenticated-challenge
              balancePlatform-authentication-created-authenticated-frictionless:
                $ref: >-
                  #/components/examples/post-balancePlatform.authentication.created-balancePlatform-authentication-created-authenticated-frictionless
              balancePlatform-authentication-created-rejected:
                $ref: >-
                  #/components/examples/post-balancePlatform.authentication.created-balancePlatform-authentication-created-rejected
            schema:
              $ref: '#/components/schemas/AuthenticationNotificationRequest'
      responses:
        '200':
          content:
            application/json:
              examples:
                balancePlatform-authentication-created-authenticated-challenge:
                  $ref: '#/components/examples/WebhookAck'
                balancePlatform-authentication-created-authenticated-frictionless:
                  $ref: '#/components/examples/WebhookAck'
                balancePlatform-authentication-created-rejected:
                  $ref: '#/components/examples/WebhookAck'
              schema:
                $ref: '#/components/schemas/BalancePlatformNotificationResponse'
          description: OK - the request has succeeded.
components:
  schemas:
    Amount:
      properties:
        currency:
          description: >-
            The three-character [ISO currency
            code](https://docs.adyen.com/development-resources/currency-codes).
          maxLength: 3
          minLength: 3
          type: string
        value:
          description: >-
            The amount of the transaction, in [minor
            units](https://docs.adyen.com/development-resources/currency-codes).
          format: int64
          type: integer
      required:
        - value
        - currency
      type: object
    AuthenticationInfo:
      properties:
        acsTransId:
          description: >-
            Universally unique transaction identifier assigned by the Access
            Control Server (ACS) to identify a single transaction.
          type: string
        challenge:
          description: >-
            Information about Strong Customer Authentication (SCA). Returned
            when `type` is **challenge**.
          $ref: '#/components/schemas/ChallengeInfo'
        challengeIndicator:
          description: >
            Specifies a preference for receiving a challenge. Possible values:


            * **01**: No preference

            * **02**: No challenge requested

            * **03**: Challenge requested (preference)

            * **04**: Challenge requested (mandate)

            * **05**: No challenge requested (transactional risk analysis is
            already performed)

            * **07**: No challenge requested (SCA is already performed)

            * **08**: No challenge requested (trusted beneficiaries exemption of
            no challenge required)

            * **09**: Challenge requested (trusted beneficiaries prompt
            requested if challenge required)

            * **80**: No challenge requested (secure corporate payment with
            Mastercard)

            * **82**: No challenge requested (secure corporate payment with
            Visa)
          enum:
            - '01'
            - '02'
            - '03'
            - '04'
            - '05'
            - '07'
            - 8
            - 9
            - '80'
            - '82'
          type: string
        createdAt:
          description: >-
            Date and time in UTC of the cardholder authentication. 


            [ISO 8601](https://www.w3.org/TR/NOTE-datetime) format:
            YYYY-MM-DDThh:mm:ss+TZD, for example, **2020-12-18T10:15:30+01:00**.
          format: date-time
          type: string
        deviceChannel:
          description: >-
            Indicates the type of channel interface being used to initiate the
            transaction. Possible values:


            * **app**

            * **browser**

            * **3DSRequestorInitiated** (initiated by a merchant when the
            cardholder is not available)
          enum:
            - app
            - browser
            - ThreeDSRequestorInitiated
          type: string
        dsTransID:
          description: >-
            Universally unique transaction identifier assigned by the DS (card
            scheme) to identify a single transaction.
          type: string
        exemptionIndicator:
          description: >
            Indicates the exemption type that was applied to the authentication
            by the issuer, if exemption applied. Possible values:


            * **lowValue**

            * **secureCorporate**

            * **trustedBeneficiary**

            * **transactionRiskAnalysis**

            * **acquirerExemption**

            * **noExemptionApplied**

            * **visaDAFExemption**
          enum:
            - lowValue
            - secureCorporate
            - trustedBeneficiary
            - transactionRiskAnalysis
            - acquirerExemption
            - noExemptionApplied
            - visaDAFExemption
          type: string
        inPSD2Scope:
          description: Indicates if the purchase was in the PSD2 scope.
          type: boolean
        messageCategory:
          description: >-
            Identifies the category of the message for a specific use case.
            Possible values:


            * **payment**

            * **nonPayment**
          enum:
            - payment
            - nonPayment
          type: string
        messageVersion:
          description: >-
            The `messageVersion` value as defined in the 3D Secure 2
            specification.
          type: string
        riskScore:
          description: Risk score calculated from the transaction rules.
          format: int32
          type: integer
        threeDSServerTransID:
          description: >-
            The `threeDSServerTransID` value as defined in the 3D Secure 2
            specification.
          type: string
        transStatus:
          description: >
            The `transStatus` value as defined in the 3D Secure 2 specification.
            Possible values:


            * **Y**: Authentication / Account verification successful.

            * **N**: Not Authenticated / Account not verified. Transaction
            denied.

            * **U**: Authentication / Account verification could not be
            performed.

            * **I**: Informational Only / 3D Secure Requestor challenge
            preference acknowledged.

            * **R**: Authentication / Account verification rejected by the
            Issuer.
          enum:
            - 'Y'
            - 'N'
            - R
            - I
            - U
          type: string
        transStatusReason:
          description: >-
            Provides information on why the `transStatus` field has the
            specified value. For possible values, refer to [our
            docs](https://docs.adyen.com/online-payments/3d-secure/api-reference#possible-transstatusreason-values).
          enum:
            - '01'
            - '02'
            - '03'
            - '04'
            - '05'
            - '06'
            - '07'
            - 8
            - 9
            - '10'
            - '11'
            - '12'
            - '13'
            - '14'
            - '15'
            - '16'
            - '17'
            - '18'
            - '19'
            - '20'
            - '21'
            - '22'
            - '23'
            - '24'
            - '25'
            - '26'
            - '80'
            - '81'
            - '82'
            - '83'
            - '84'
            - '85'
            - '86'
            - '87'
            - '88'
          type: string
        type:
          description: |-
            The type of authentication performed. Possible values:

            * **frictionless**
            * **challenge**
          enum:
            - frictionless
            - challenge
          type: string
      required:
        - challengeIndicator
        - dsTransID
        - messageVersion
        - threeDSServerTransID
        - transStatus
        - createdAt
        - type
        - inPSD2Scope
        - deviceChannel
        - messageCategory
        - acsTransId
      type: object
    AuthenticationNotificationData:
      properties:
        authentication:
          description: Information about the authentication.
          $ref: '#/components/schemas/AuthenticationInfo'
        balancePlatform:
          description: The unique identifier of the balance platform.
          type: string
        id:
          description: Unique identifier of the authentication.
          type: string
        paymentInstrumentId:
          description: >-
            Unique identifier of the payment instrument that was used for the
            authentication.
          type: string
        purchase:
          description: Information about the purchase.
          $ref: '#/components/schemas/PurchaseInfo'
        status:
          description: |-
            Outcome of the authentication.
            Allowed values:
            * authenticated
            * rejected
            * error
          enum:
            - authenticated
            - rejected
            - error
          type: string
      required:
        - id
        - paymentInstrumentId
        - status
        - authentication
        - purchase
      type: object
    AuthenticationNotificationRequest:
      properties:
        data:
          description: Contains event details.
          $ref: '#/components/schemas/AuthenticationNotificationData'
        environment:
          description: |-
            The environment from which the webhook originated.

            Possible values: **test**, **live**.
          type: string
        type:
          description: Type of notification.
          enum:
            - balancePlatform.authentication.created
          type: string
      required:
        - environment
        - type
        - data
      type: object
    BalancePlatformNotificationResponse:
      properties:
        notificationResponse:
          description: >-
            Respond with **HTTP 200 OK** and `[accepted]` in the response body
            to [accept the
            webhook](https://docs.adyen.com/development-resources/webhooks#accept-notifications).
          type: string
      type: object
    ChallengeInfo:
      properties:
        challengeCancel:
          description: >-
            Indicator informing the Access Control Server (ACS) and the
            Directory Server (DS) that the authentication has been cancelled.
            For possible values, refer to [3D Secure API
            reference](https://docs.adyen.com/online-payments/3d-secure/api-reference#mpidata).
          enum:
            - '01'
            - '02'
            - '03'
            - '04'
            - '05'
            - '06'
            - '07'
          type: string
        flow:
          description: |-
            The flow used in the challenge. Possible values:

            * **OTP_SMS**: one-time password (OTP) flow
            * **OOB**: out-of-band (OOB) flow
          enum:
            - OTP_SMS
            - OOB
          type: string
        lastInteraction:
          description: The last time of interaction with the challenge.
          format: date-time
          type: string
        phoneNumber:
          description: The last four digits of the phone number used in the challenge.
          type: string
        resends:
          description: >-
            The number of times the one-time password (OTP) was resent during
            the challenge.
          format: int32
          type: integer
        retries:
          description: The number of retries used in the challenge.
          format: int32
          type: integer
      required:
        - flow
        - lastInteraction
      type: object
    PurchaseInfo:
      properties:
        date:
          description: Date of the purchase.
          type: string
        merchantName:
          description: Name of the merchant.
          type: string
        originalAmount:
          description: Amount of the purchase.
          $ref: '#/components/schemas/Amount'
      required:
        - merchantName
        - date
        - originalAmount
      type: object
    Resource:
      properties:
        balancePlatform:
          description: The unique identifier of the balance platform.
          type: string
        creationDate:
          description: >-
            The date and time when the event was triggered, in ISO 8601 extended
            format. For example, **2020-12-18T10:15:30+01:00**.
          format: date-time
          type: string
        id:
          description: The ID of the resource.
          type: string
      type: object
  securitySchemes:
    BasicAuth:
      scheme: basic
      type: http
  examples:
    WebhookAck:
      summary: Acknowledge Webhook
      value:
        notificationResponse: '[accepted]'
    post-balancePlatform.authentication.created-balancePlatform-authentication-created-authenticated-challenge:
      summary: Authentication successful (challenge flow)
      description: Example webhook for a successful authentication (challenge flow)
      value:
        data:
          authentication:
            acsTransId: 6a4c1709-a42e-4c7f-96c7-1043adacfc97
            challenge:
              flow: OOB
              lastInteraction: '2022-12-22T15:49:03+01:00'
            challengeIndicator: '01'
            createdAt: '2022-12-22T15:45:03+01:00'
            deviceChannel: app
            dsTransID: a3b86754-444d-46ca-95a2-ada351d3f42c
            exemptionIndicator: lowValue
            inPSD2Scope: true
            messageCategory: payment
            messageVersion: 2.2.0
            riskScore: 0
            threeDSServerTransID: 6edcc246-23ee-4e94-ac5d-8ae620bea7d9
            transStatus: 'Y'
            type: challenge
          balancePlatform: YOUR_BALANCE_PLATFORM
          id: 497f6eca-6276-4993-bfeb-53cbbbba6f08
          paymentInstrumentId: PI3227C223222B5BPCMFXD2XG
          purchase:
            date: '2022-12-22T15:49:03+01:00'
            merchantName: TeaShop_NL
            originalAmount:
              currency: EUR
              value: 1000
          status: authenticated
        environment: test
        type: balancePlatform.authentication.created
    post-balancePlatform.authentication.created-balancePlatform-authentication-created-authenticated-frictionless:
      summary: Authentication successful (frictionless flow)
      description: Example webhook for a successful authentication (frictionless flow)
      value:
        data:
          authentication:
            acsTransId: 6a4c1709-a42e-4c7f-96c7-1043adacfc97
            challengeIndicator: '01'
            createdAt: '2022-12-22T15:45:03+01:00'
            deviceChannel: app
            dsTransID: a3b86754-444d-46ca-95a2-ada351d3f42c
            exemptionIndicator: lowValue
            inPSD2Scope: true
            messageCategory: payment
            messageVersion: 2.2.0
            riskScore: 0
            threeDSServerTransID: 6edcc246-23ee-4e94-ac5d-8ae620bea7d9
            transStatus: 'Y'
            type: frictionless
          balancePlatform: YOUR_BALANCE_PLATFORM
          id: 497f6eca-6276-4993-bfeb-53cbbbba6f08
          paymentInstrumentId: PI3227C223222B5BPCMFXD2XG
          purchase:
            date: '2022-12-22T15:49:03+01:00'
            merchantName: TeaShop_NL
            originalAmount:
              currency: EUR
              value: 1000
          status: authenticated
        environment: test
        type: balancePlatform.authentication.created
    post-balancePlatform.authentication.created-balancePlatform-authentication-created-rejected:
      summary: Authentication rejected
      description: >-
        Example webhook for a rejected authentication due to exceeded number of
        retries
      value:
        data:
          balancePlatform: YOUR_BALANCE_PLATFORM
          creationDate: '2023-01-19T17:07:59+01:00'
          id: a8fc7a40-6e48-498a-bdc2-494daf0f490a
          authentication:
            acsTransId: a8fc7a40-6e48-498a-bdc2-494daf0f490a
            challenge:
              flow: OTP_SMS
              lastInteraction: '2023-01-19T17:37:13+01:00'
              phoneNumber: '******6789'
              resends: 0
              retries: 2
            challengeIndicator: '01'
            createdAt: '2023-01-19T17:07:17+01:00'
            deviceChannel: app
            dsTransID: 59de4e30-7f84-4a77-aaf8-1ca493092ef9
            exemptionIndicator: noExemptionApplied
            inPSD2Scope: false
            messageCategory: payment
            messageVersion: 2.2.0
            threeDSServerTransID: 8bc0fdbd-5c8a-4bed-a171-9d10347e7798
            transStatus: 'N'
            transStatusReason: '19'
            type: challenge
          paymentInstrumentId: PI3227C223222B5BPCMFXD2XG
          purchase:
            date: '2022-12-22T15:49:03+01:00'
            merchantName: TeaShop_NL
            originalAmount:
              currency: EUR
              value: 1000
          status: rejected
        environment: test
        type: balancePlatform.authentication.created