# Payments API - sequence diagrams Below are some common flows when using the Payments API. - [Payments API - sequence diagrams](#payments-api---sequence-diagrams) - [Guest card payment](#guest-card-payment) - [FraudSight](#fraudsight) - [3DS](#3ds) - [SCA Exemptions](#sca-exemptions) - [Storing credentials for future CIT / Store a card only](#storing-credentials-for-future-cit--store-a-card-only) - [Subsequent CIT](#subsequent-cit) - [Storing credentials for future MIT](#storing-credentials-for-future-mit) - [Subsequent MIT](#subsequent-mit) For greater control of the payment flow, view the sequence diagrams for our [Modular APIs](/products/modular/). ## Guest card payment Payment A basic card payment with no additional features such as 3DS or FraudSight enabled. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Issuer: Authorization request Issuer->>Payments_API: Authorization response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Payment (auto settlement) A basic card payment with no additional features such as 3DS or FraudSight enabled. [`settlement.auto`](/products/payments/enable-features/auto-settlement) is set to `true` ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Checkout SDK (Web) A basic card payment using the Checkout SDK to collect card details. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Checkout_Sessions as Checkout Sessions participant Issuer Note over Merchant_Frontend: Checkout JS added to page Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Checkout_Sessions: Create session Checkout_Sessions->>Merchant_Frontend: Return session Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using Checkout SDK session Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Checkout SDK (iOS/Android) A basic card payment using the Checkout SDK on native devices to collect card details. ```mermaid sequenceDiagram participant Merchant_App participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Checkout_Sessions as Checkout Sessions participant Issuer Merchant_App->>Checkout_Sessions: Click pay - Create session Checkout_Sessions->>Merchant_App: Return session Merchant_App->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using Checkout SDK session Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_App: Transaction complete Note over Merchant_App: Order receipt page ``` ## FraudSight FraudSight (highRisk) Card payment with [FraudSight enabled](/products/payments/enable-features/fraud-assessment) that results in a highRisk assessment outcome that stops the payment. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: Fraud assessment Note over Payments_API: outcome: highRisk
Payment stopped Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: Transaction failed Note left of Merchant_Frontend: Transaction failed ``` FraudSight (lowRisk/review) Card payment with [FraudSight enabled](/products/payments/enable-features/fraud-assessment) that results in a lowRisk assessment outcome and continues with the payment. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: fraud assessment Note over Payments_API: outcome: lowRisk or review
Proceed with payment Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` ## 3DS 3DS Web (frictionless) Card payment with [3DS authentication enabled](/products/payments/enable-features/3ds-authentication), resulting in a frictionless issuer response. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Issuer: Authorization request Issuer->>Payments_API: Authorization response Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` 3DS Web (challenge) Card payment with [3DS authentication enabled](/products/payments/enable-features/3ds-authentication), resulting in a challenged issuer response. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` 3DS iOS/Android (challenge) Card payment with [3DS authentication enabled](/products/payments/enable-features/3ds-authentication), resulting in a challenged issuer response. ```mermaid sequenceDiagram participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Merchant_App->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_App: DeviceData - JWT Note over Merchant_App: Cardinal SDK: Initialize Merchant_App-->>Issuer: Device App data Issuer-->>Merchant_App: consumerSessionId Merchant_Backend->>Payments_API: 3dsDeviceData request Note left of Payments_API: Includes consumerSessionId Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_App: Challenge - Payload Note over Merchant_App: Cardinal SDK: Display Challenge Merchant_App-->>Issuer: Challenge Data Issuer-->>Merchant_App: Challenge Complete Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_App: Transaction complete Note left of Merchant_App: Order receipt page ``` Example using Checkout SDK An example using the Checkout SDK to provide the card details using a low PCI set of hosted card fields. The rest of the flow is the same as the `3DS Web (challenge)` tab. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Checkout_Sessions as Checkout Sessions participant Issuer Note over Merchant_Frontend: Checkout JS added to page Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Checkout_Sessions: Create session Checkout_Sessions->>Merchant_Frontend: Return session Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using Checkout SDK session Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` ## SCA Exemptions Exemption in Authorization Exemption granted with a placement of `authorization` and is honored by the issuer (payment authorized) ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: Exemption assessment Note over Payments_API: Exemption granted
Placement: authorization
Type: lowRisk or lowValue Payments_API->>Issuer: Authorization request Note over Issuer: Exemption honored
payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Exemption in Authorization - Soft Decline Loop Exemption granted with a placement of `authorization`, but the issuer does not honor the exemption and returns a refused outcome (soft decline - code: 65). Payments API automatically starts the steps for 3DS authentication and upon completion results in a successful 2nd attempt to authorize the payment. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: Exemption Assessment Note over Payments_API: Exemption granted
Placement: authorization
Type: lowRisk or lowValue Payments_API->>Issuer: Authorization Request Note over Issuer: Exemption not honored
payment refused (code: 65) Issuer->>Payments_API: Authorization Response Note over Payments_API: Start 3DS authentication (automatic) Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Note over Payments_API: 3DS authenticated (successful) Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Exemption in Authentication (3DS) Exemption is granted with a placement of `authentication`, 3DS authentication is started and the challenge preference is auto set to `noChallengeRequestedTRAPerformed`. The issuer honors the challenge preference and no challenge is given in 3DS. The successful 3DS authentication details are used in the payment request resulting in an authorized payment. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: Exemption Assessment Note over Payments_API: Exemption granted
Placement: authentication
Type: lowRisk Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Issuer: Authorization Request Note over Issuer: Exemption honored
payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` No Exemption Granted No exemption is granted so 3DS authentication is automatically performed. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Payments_API->>Payments_API: Exemption Assessment Note over Payments_API: Exemption not granted Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Note over Payments_API: 3DS authenticated (successful) Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` ## Storing credentials for future CIT / Store a card only Worldpay Token Setup a customerAgreement to store credentials for future CIT payments. * Set the `customerAgreement.type` to `cardOnFile` and `storedCardUsage` to `first` * Set `tokenCreation.type` to `worldpay` in order to store the credentials. * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/) * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set customerAgreement
type: cardOnFile
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: For `store a card only` (no payment)
Set value.amount: 0 Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Note over Merchant_Backend,Payments_API: Worldpay Token provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Network Token (NPT) - before payment Support for NPT creation directly from the payments API is coming soon. For now you must call the [Tokens API](/products/tokens/) to convert from a Worldpay Token to a Network Token. Setup a customerAgreement to store credentials for future CIT payments. Creating an Network Token `before` the initial payment is made. **First request to Payments API:** * Set `tokenCreation.type` to `worldpay` * Set the `value.amount` to `0` * Do not perform 3DS at this point. **Request to [Tokens API](/products/tokens/)** * Convert the Worldpay Token to a Network Token **Second request to Payments API** * Set the `customerAgreement.type` to `cardOnFile` and `storedCardUsage` to `first` * Use the Network Token * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/). * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Tokens participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: Set amount.value: 0 Payments_API->>Merchant_Backend: Payment response Note over Merchant_Backend,Payments_API: Worldpay Token provided Merchant_Backend->>Tokens: Create network token request Tokens->>Merchant_Backend: Create network token response Note over Merchant_Backend,Payments_API: Network Token (NPT) provided Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using NPT / Cryptogram auto provisioned Note over Merchant_Backend,Payments_API: Set customerAgreement
type: cardOnFile
storedCardUsage: first Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Network Token (NPT) - after payment Support for NPT creation directly from the payments API is coming soon. For now you must call the [Tokens API](/products/tokens/) to convert from a Worldpay Token to a Network Token. Setup a customerAgreement to store credentials for future CIT payments. Creating an Network Token `after` the initial payment is made. **Request to Payments API:** * Set the `customerAgreement.type` to `cardOnFile` and `storedCardUsage` to `first` * Set `tokenCreation.type` to `worldpay` * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/). * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. **Request to [Tokens API](/products/tokens/):** * Convert the Worldpay Token to a Network Token for use in a subsequent CIT ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Tokens participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set customerAgreement
type: cardOnFile
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Note over Merchant_Backend,Payments_API: Worldpay Token provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page Merchant_Backend->>Tokens: Create network token request Tokens->>Merchant_Backend: Create network token response Note over Merchant_Backend,Payments_API: Network Token (NPT) provided
Store and use for next CIT ``` ## Subsequent CIT Subsequent CIT Using a previously stored card to make a payment ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuers Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set customerAgreement
type: cardOnFile
storedCardUsage: subsequent Note over Merchant_Backend,Payments_API: Use Network Token
or Worldpay Token Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` ## Storing credentials for future MIT Worldpay Token Setup a customerAgreement to store credentials for future MIT payments. * Set the `customerAgreement.type` to `subscription` and `storedCardUsage` to `first` * Set `tokenCreation.type` to `worldpay` in order to store the credentials. * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/) and has the `threeDS.challenge.preference` set to `challengeMandated`. * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set customerAgreement
type: subscription
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set threeDS.challenge
preference: challengeMandated Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: For no initial payment
Set value.amount: 0 Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization response Note over Merchant_Backend,Payments_API: Worldpay Token
and schemeReference provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Network Token (NPT) - before payment Support for NPT creation directly from the payments API is coming soon. For now you must call the [Tokens API](/products/tokens/) to convert from a Worldpay Token to a Network Token. Setup a customerAgreement to store credentials for future MIT payments. Creating an Network Token `before` the initial payment is made. **First request to Payments API:** * Set `tokenCreation.type` to `worldpay` * Set the `value.amount` to `0` * Do not perform 3DS at this point. **Request to [Tokens API](/products/tokens/)** * Convert the Worldpay Token to a Network Token **Second request to Payments API** * Set the `customerAgreement.type` to `subscription` and `storedCardUsage` to `first` * Set `paymentInstrument.type` as `networkToken` and apply the token details here. * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/) and has the `threeDS.challenge.preference` set to `challengeMandated`. * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Tokens participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: Set amount.value: 0 Payments_API->>Merchant_Backend: Payment response Note over Merchant_Backend,Payments_API: Worldpay Token provided Merchant_Backend->>Tokens: Create network token request Tokens->>Merchant_Backend: Create network token response Note over Merchant_Backend,Payments_API: Network Token (NPT) provided Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using NPT
Cryptogram auto provisioned Note over Merchant_Backend,Payments_API: Set customerAgreement
type: subscription
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set threeDS.challenge
preference: challengeMandated Note over Merchant_Backend,Payments_API: For no initial payment
Set value.amount: 0 Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Note over Merchant_Backend,Payments_API: schemeReference provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` Network Token (NPT) - after payment Support for NPT creation directly from the payments API is coming soon. For now you must call the [Tokens API](/products/tokens/) to convert from a Worldpay Token to a Network Token. Setup a customerAgreement to store credentials for future MIT payments. Creating an Network Token `after` the initial payment is made. **Request to Payments API:** * Set the `customerAgreement.type` to `subscription` and `storedCardUsage` to `first` * Set `tokenCreation.type` to `worldpay` * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/) and has the `threeDS.challenge.preference` set to `challengeMandated`. * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. **Request to [Tokens API](/products/tokens/):** * Convert the Worldpay Token to a Network Token for use in next CIT ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set customerAgreement
type: subscription
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set threeDS.challenge
preference: challengeMandated Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: For no initial payment
Set value.amount: 0 Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Note over Merchant_Backend,Payments_API: Worldpay Token
and schemeReference provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page Merchant_Backend->>Tokens: Create network token request Tokens->>Merchant_Backend: Create network token response Note over Merchant_Backend,Payments_API: Network Token (NPT) provided
Store and use for next MIT ``` Example using Checkout SDK Setup a customerAgreement to store credentials for future MIT payments. Use the Checkout SDK to provide the card details using a low PCI set of hosted card fields. * Set `paymentInstrument.type` as `checkout` and apply the sessionHref here * Set the `customerAgreement.type` to `subscription` and `storedCardUsage` to `first` * Set `tokenCreation.type` to `worldpay` in order to store the credentials. * The example includes 3DS for [SCA or 3DS mandated countries](/products/3ds-sca-exemptions/) and has the `threeDS.challenge.preference` set to `challengeMandated`. * If no initial payment is to be made (e.g. free trial), set the `value.amount` to `0`. A card verification is performed instead. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuer Note over Merchant_Frontend: Checkout JS added to page Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Checkout_Sessions: Create session Checkout_Sessions->>Merchant_Frontend: Return session Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Using Checkout SDK session Note over Merchant_Backend,Payments_API: Set customerAgreement
type: subscription
storedCardUsage: first Note over Merchant_Backend,Payments_API: Set threeDS.challenge
preference: challengeMandated Note over Merchant_Backend,Payments_API: Set tokenCreation.type: worldpay Note over Merchant_Backend,Payments_API: For no initial payment
Set value.amount: 0 Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Merchant_Frontend: DeviceData - BIN/JWT/URL Merchant_Frontend->>Browser: 3DS Device Data form Browser-->>Issuer: Form post Issuer-->>Browser: PostMessage: dfReferenceId Merchant_Backend->>Payments_API: 3dsDeviceData request Payments_API->>Merchant_Backend: 3dsDeviceData response Merchant_Backend->>Merchant_Frontend: Challenge JWT/URL Merchant_Frontend->>Browser: 3DS challenge form Browser-->>Issuer: Form post Issuer-->>Browser: Return to merchant site Merchant_Backend->>Payments_API: 3dsChallenges request Payments_API->>Issuer: Authorization Request Note over Issuer: payment authorized Issuer->>Payments_API: Authorization Response Note over Merchant_Backend,Payments_API: Worldpay Token provided Payments_API->>Merchant_Backend: 3dsChallenges response alt For payment without auto settlement Merchant_Backend->>Payments_API: Settlements request Payments_API->>Merchant_Backend: Settlements end Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ``` ## Subsequent MIT Subsequent MIT Send a Merchant Initiated Transaction (MIT) request for subsequent recurring transactions. ```mermaid sequenceDiagram participant Browser participant Merchant_Frontend as Merchant Frontend participant Merchant_Backend as Merchant Backend participant Payments_API as Payments API participant Issuers Browser->>Merchant_Frontend: Click Pay Merchant_Frontend->>Merchant_Backend: Pay Merchant_Backend->>Payments_API: Payment request Note over Merchant_Backend,Payments_API: Set `customerAgreement.type = subscription`
`customerAgreement.storedCardUsage = subsequent` Payments_API->>Merchant_Backend: Payment response Merchant_Backend->>Payments_API: Settlement request Payments_API->>Merchant_Backend: Settlement response Merchant_Backend->>Merchant_Frontend: Transaction complete Note left of Merchant_Frontend: Order receipt page ```