# Overview

<span lang="en-US">This document provides a description of functionalities offered by Verestro Paytool. Our solution supports various payment methods such as Google Pay™, Apple Pay, Blik and Debit/Credit Card in the form of the payment gateway. In addition, you can decide which payment methods should be enabled. Simply put, you may decide that, for example, you want Verestro Paytool to provide payment via Google Pay but payment via Debit/Credit Card should be disabled. In such a situation, the end user will see the Google Pay as the availabe payment method in the Verestro Paytool payment form, but the Debit/Credit Card payment method will not appear at all.</span>

<span lang="en-US">Transaction process mainly takes place on Verestro's side. This means that you are completely relieved of responsibility for processing the transaction and/or performing 3D Secure authentication. The only action that the you must do is to provide metadata of the transaction, which includes order number, description, amount, currency and some optional parameters.</span>

<p class="callout warning"><span lang="en-US">**Important!** Note that if you require the settlement of the transaction by an Acquirer to which Verestro is not integrated </span><span lang="en-US">there will be required new integration between Verestro and the new Acquirer.</span><span lang="en-US"> You should provide the specification of the new Acquirer which will allow us to perform integration</span><span lang="en-US">.</span></p>

## <span style="font-family: Lato;"><span lang="en-US">Abbreviations</span></span>

<span style="font-family: Lato;">In this chapter there are abbreviations and acronyms used in the document listed in below table.</span>

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-abbreviation-descrip" style="width: 918px;" width="712"><tbody><tr valign="TOP"><td bgcolor="#002060" style="width: 403px;" width="353"><span style="font-family: Lato; color: #ecf0f1;">**Abbreviation**</span>

</td><td bgcolor="#002060" style="width: 403px;" width="353"><span style="font-family: Lato; color: #ecf0f1;">**Description**</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">ACQ</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Acquiring Institution / Acquirer</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">ACS</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Access Control Server</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">SDK</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Software Development Kit</span>

</td></tr><tr><td style="width: 403px;"><span style="font-family: Lato;">PSP</span>

</td><td style="width: 403px;"><span style="font-family: Lato;">Payment Service Provider</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">OS</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Operative System</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">Mid</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Merchant Identifier</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">PCI DSS</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Payment Card Industry Data Security Standard</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">PAN</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Permanent Account Number</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">CVC</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">Card Verification Code</span>

</td></tr><tr valign="TOP"><td style="width: 403px;" width="353"><span style="font-family: Lato;">3DS</span>

</td><td style="width: 403px;" width="353"><span style="font-family: Lato;">3-D Secure</span>

</td></tr><tr><td style="width: 403px;"><span style="font-family: Lato;">DCC</span>

</td><td style="width: 403px;"><span style="font-family: Lato;">Dynamic currency conversion</span>

</td></tr></tbody></table>

## Terminology

<span style="font-family: Lato;">This section explains a meaning of key terms and concepts used in the document.</span>

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-abberations-descript" style="width: 924px; height: 1464.62px;" width="708"><tbody><tr style="height: 35.5px;" valign="TOP"><td bgcolor="#002060" style="width: 229.344px; height: 35.5px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Name**</span>

</td><td bgcolor="#002060" style="width: 580.641px; height: 35.5px;" width="573">**<span style="font-family: Lato; color: #ecf0f1;">Description</span>**

</td></tr><tr style="height: 58.25px;" valign="TOP"><td style="width: 229.344px; height: 58.25px;" width="129"><span style="font-family: Lato;">Customer/Merchant</span>

</td><td style="width: 580.641px; height: 58.25px;" width="573"><span style="font-family: Lato;">Institution which uses Verestro products. This institution decides which payment method should be available in the solution and how transaction should be processed. </span>

</td></tr><tr style="height: 103.797px;" valign="TOP"><td style="width: 229.344px; height: 103.797px;" width="129"><span style="font-family: Lato;">End user/payer</span>

</td><td style="width: 580.641px; height: 103.797px;" width="573"><span style="font-family: Lato;">The entity which uses Paytool solution to pay for ordered good from Customer. It is root of entity tree. End user is an owner of the wallet/card and he decides to pay for the purchase using Paytool solution, selecting it from the list of payment methods available in the Customer application.</span>

</td></tr><tr style="height: 80.1719px;"><td style="width: 229.344px; height: 80.1719px;"><span style="font-family: Lato;">Payment service provider</span>

</td><td style="width: 580.641px; height: 80.1719px;"><span style="font-family: Lato;">The entity which provides a payment services for external Customers who do not have direct integration with acquirers or are not PSI DSS compilent. From the perspective of he Paytool application, Verestro is the PSP.</span>

</td></tr><tr style="height: 103.797px;" valign="TOP"><td style="width: 229.344px; height: 103.797px;" width="129"><span style="font-family: Lato;">Card</span>

</td><td style="width: 580.641px; height: 103.797px;" width="573"><span style="font-family: Lato;"><span lang="en-US">Card belongs to the user. If user intends to pay with the Paytool solution using plain card payment method, then has to insert required card's data to the appropriate fields shared by the Paytool solution payment form. Card data will not be stored in the Verestro system. </span>They will be provided to Acquirer.</span>

</td></tr><tr style="height: 102.562px;"><td style="width: 229.344px; height: 102.562px;"><span style="font-family: Lato;">Card payment token</span>

</td><td style="width: 580.641px; height: 102.562px;"><span style="font-family: Lato;"><span lang="en-US">It is a numerical value in the form of a PAN number. It shows a given card from Google Pay or Apple Pay wallet. The card payment token replaces the card number and is delivered by Google Pay/Apple Pay to Verestro if the end user selects one of the two above mentioned payment options. Verestro passes this value to Acquirer for the payment to be made.</span></span>

</td></tr><tr style="height: 102.562px;"><td style="width: 229.344px; height: 102.562px;"><span style="font-family: Lato;">Authorization Method</span>

</td><td style="width: 580.641px; height: 102.562px;"><span style="font-family: Lato; color: #34495e;">The way of the authentication of the Google Pay<span lang="en-US"><span style="font-family: Lato;">™</span></span> card transaction. Verestro supports followed authorization methods: <span lang="en-US">`PAN_ONLY`</span> and <span lang="en-US">`CRYPTOGRAM_3DS` if Customer's country belongs to the European Union. Authorization method is always provided in the Google Pay<span style="font-family: Lato;">™ encrypted payload as `authMethod` parameter.</span></span></span>

</td></tr><tr style="height: 41.953px;"><td style="width: 229.344px; height: 41.953px;"><span style="font-family: Lato;">Gateway Id</span>

</td><td style="width: 580.641px; height: 41.953px;"><span style="font-family: Lato; color: #34495e;">Phrase/value that identifies a given Payment Service Provider in the Google Pay<span style="font-family: Lato;"><span lang="en-US">™</span></span> system. The Merchant provides gateway Id to Google Pay<span lang="en-US"><span style="font-family: Lato;">™ to</span></span> obtain a card payment token. By provided gateway Id, Google Pay<span lang="en-US"><span style="font-family: Lato;">™</span></span> encrypts the card payment token with the appropriate public key. Verestro is defined by a gateway Id with the value <span lang="en-US">`verestro` in Google Pay™ server.</span></span>

</td></tr><tr style="height: 124.953px;" valign="TOP"><td style="width: 229.344px; height: 124.953px;"><span style="font-family: Lato;">Gateway Merchant Id</span>

</td><td style="width: 580.641px; height: 124.953px;"><span style="font-family: Lato;">Unique Customer identifier assigned by Verestro during the onboarding process. This identifier is in the form of a <span lang="en-US">`UUID`</span>. Verestro understands and uses this to verify that the message was for the Customer that made the request. Customer passes it to Google Pay<span lang="en-US">™.</span> More information about the Gateway Merchant Id can be found in [Google Pay<span lang="en-US">™</span> documentation.](https://developers.google.com/pay/api/processors/guides/implementation/understand-our-payload)</span>

</td></tr><tr><td style="width: 229.344px;"><span style="font-family: Lato;">Acquirer</span>

</td><td style="width: 580.641px;"><span style="font-family: Lato;">Institution that settles payments. Paytool communicates with the Acquirer to order the transaction and authenticate the card holder using the 3D Secure protocol.</span>

</td></tr><tr style="height: 81.0156px;" valign="TOP"><td style="width: 229.344px; height: 81.0156px;" width="129"><span style="font-family: Lato;">MID</span>

</td><td style="width: 580.641px; height: 81.0156px;" width="573"><span style="font-family: Lato;"><span lang="en-US">Merchant identifier. This entity is represending Customer in the Acquirer's system. Customer has to provide the mid information to enable mid configuration in the Verestro system. </span>Required to process transactions and 3DS process via Verestro system.</span>

</td></tr><tr style="height: 102.562px;"><td style="width: 229.344px; height: 102.562px;"><span style="font-family: Lato;">Bank/Issuer</span>

</td><td style="width: 580.641px; height: 102.562px;"><span style="font-family: Lato;"><span lang="en-US">Card issuing institution. In the case of an e-commerce transaction, this entity is responsible for checking whether the cardholder's balance has the appropriate amount of funds to perform a given transaction, determining whether 3D secure authentication is necessary or simply checking whether the card is active.</span></span>

</td></tr><tr style="height: 57.7812px;"><td style="width: 229.344px; height: 57.7812px;"><span style="font-family: Lato;">Cardholder</span>

</td><td style="width: 580.641px; height: 57.7812px;"><span style="font-family: Lato;"><span lang="en-US">This is the end user who pays for his purchases using one of the available payment options in Verestro Paytool.</span></span>

</td></tr><tr style="height: 102.562px;" valign="TOP"><td style="width: 229.344px; height: 102.562px;" width="129"><span style="font-family: Lato;">PAN</span>

</td><td style="width: 580.641px; height: 102.562px;" width="573"><span style="font-family: Lato;">It is 7-16 digits of the credit/debit card number. These digits contain the Permanent Account Number assigned by the bank to uniquely identify the account holder. It is necessary to provide it when end user wants to pay with a card for purchases via Verestro Paytool solution.</span>

</td></tr><tr style="height: 81.0156px;" valign="TOP"><td style="width: 229.344px; height: 81.0156px;" width="129"><span style="font-family: Lato;">CVC</span>

</td><td style="width: 580.641px; height: 81.0156px;" width="573"><span style="font-family: Lato;">Card Verification Code. It is a type of security code protecting against fraud in remote payments. CVC is necessary to provide it when end user wants to pay with a card for purchases via Paytool solution.</span>

</td></tr><tr style="height: 102.562px;" valign="TOP"><td style="width: 229.344px; height: 102.562px;" width="129"><span style="font-family: Lato;">Expiration date</span>

</td><td style="width: 580.641px; height: 102.562px;" width="573"><span style="font-family: Lato;">It is a date of the card validity ending and contains two values – month/year - for example 01/28. Card will be valid to the last day of the month of the year showed on it. It is necessary to provide it when end user wants to pay with a card for purchases via Verestro Paytool solution.</span>

</td></tr><tr style="height: 102.562px;" valign="TOP"><td style="width: 229.344px; height: 102.562px;" width="129"><span style="font-family: Lato;">3DS</span>

</td><td style="width: 580.641px; height: 102.562px;" width="573"><span style="font-family: Lato;">3-D Secure is a method of authorization of transaction made without the physical use of a card, used by payment organization. The 3DS process in the Verestro Paytool solution is performed internally in the Verestro system which means the Customer is not responsible for end user authentication.</span>

</td></tr><tr style="height: 81.0156px;" valign="TOP"><td style="width: 229.344px; height: 81.0156px;" width="129"><span style="font-family: Lato;">PCI DSS</span>

</td><td style="width: 580.641px; height: 81.0156px;" width="573"><span style="font-family: Lato;">It is a security standard used in environments where the data of payment cardholders is processed. The standard covers meticulous data processing control and protection of users against violations.</span>

</td></tr><tr><td style="width: 229.344px;"><span style="font-family: Lato;">Dynamic currency conversion</span>

</td><td style="width: 580.641px;"><span style="font-family: Lato;">Dynamic currency conversion is a process whereby the amount of a credit card transaction is converted to the currency of the card's country of issue.</span>

</td></tr><tr><td style="width: 229.344px;"><span style="font-family: Lato;">Tokenization</span>

</td><td style="width: 580.641px;"><span style="font-family: Lato;">A security measure where sensitive payment data, like credit card numbers, is replaced with a unique string of characters called a "token".</span>

</td></tr><tr><td style="width: 229.344px;"><span style="font-family: Lato;">Card on file</span>

</td><td style="width: 580.641px;"><span style="font-family: Lato;">Verestro PCI DSS cards storage. It allows for storing the card data of a given payer and using it in subsequent transactions without having to re-enter this data.</span>

</td></tr></tbody></table>

## <span style="font-family: Lato;">Implementation models</span>

Integration with Paytool should be performed by API call. To initiate a payment, you must request an `<a href="https://developer.verestro.com/books/paytool/page/paytool-external-api">transaction initialization</a>` method, which in response opens a payment session with a unique identifier. Once you have an active payment session and its identifier, you can choose one of three available payment processing methods described in [Redirect your payer](https://developer.verestro.com/books/paytool/page/overview#bkmrk-redirect-your-payer) (Web integration), [Payment process via API](https://developer.verestro.com/books/paytool/page/overview#bkmrk-payment-process-via-) (API integration) and [Embed - Payment in iframe](https://developer.verestro.com/books/paytool/page/overview#bkmrk-embedded---payment-i) chapters.

<p class="callout info">**Note:** The <span style="font-family: Lato; color: #000000;">`X-509 certificate` </span>data will be signed during the <span style="font-family: Lato; color: #000000;">[onboarding process](https://developer.verestro.com/books/merchant-paytool/page/onboarding)</span>.</p>

### Redirect your payer

The first integration path is to redirect your payer to the payment web view. This implementation model is more comprehensive because when redirecting the payer, you only need to provide us with transaction metadata and the payment session identifier. We are responsible for the rest of the payment process. Do not forget to initialize the payment session for the transaction before redirecting the payer to the Paytool web view. To initialize payment session use the `<a href="https://developer.verestro.com/books/paytool/page/paytool-external-api">transaction initialization</a>` method.

<p class="callout success">**Tip:** We highly recommend using <span style="font-family: Lato; color: #000000;">[Redirect your payer](https://developer.verestro.com/books/paytool/page/overview#bkmrk-redirect-your-payer)</span> integration model because most of the processes and responsibilities are handled on our side and the integration process is very smooth.</p>

<details id="bkmrk-example-request-body"><summary>Example request body of the transaction metadata provided by Customer</summary>

```JSON
{
  "transactionId": "42be3d06-4577-4a9f-b525-2cfaba244557",
  "currencyCode": "PLN",
  "amount": 100,
  "description": "Test transaction",
  "formLanguage": "en",
  "redirectUrl": {
    "successUrl": "https://paytool.verestro.com/demo/?success=1",
    "failureUrl": "https://paytool.verestro.com/demo/?success=0"
  },
  "sender": {
    "firstName": "Yoshimoto",
    "lastName": "Imagawa",
    "address": {
      "countryCode": "PL",
      "city": "Kyoto",
      "postalCode": "12-345",
      "street": "Ichijo",
      "houseNumber": "1"
    }
  },
  "merchantUrl": "https://paytool.verestro.com/demo/",
  "orderNumber": "1"
}
```

</details><details id="bkmrk-integration-method-c"><summary>Sequence diagram of the payer redirection process</summary>

@startuml  
skinparam ParticipantPadding 30  
skinparam BoxPadding 30  
skinparam noteFontColor #FFFFFF  
skinparam noteBackgroundColor #1C1E3F  
skinparam noteBorderColor #1C1E3F  
skinparam noteBorderThickness 1  
skinparam sequence {  
ArrowColor #1C1E3F  
ArrowFontColor #1C1E3F  
ActorBorderColor #1C1E3F  
ActorBackgroundColor #FFFFFF  
ActorFontStyle bold  
ParticipantBorderColor #1C1E3F  
ParticipantBackgroundColor #1C1E3F  
ParticipantFontColor #FFFFFF  
ParticipantFontStyle bold  
LifeLineBackgroundColor #1C1E3F  
LifeLineBorderColor #1C1E3F  
}  
actor payer  
participant "Customer front" as cfront  
participant "Customer backend" as cback  
participant "Paytool front" as pfront  
participant "Paytool backend" as pback  
payer-&gt;cfront: Pay with Paytool  
cfront-&gt;cback: Payer choosed Paytool  
cback-&gt;pback: Customer authorization + transaction metadata  
note left of pback: Store transaction metadata + open payment session  
cback&lt;-pback: OK + transaction id + redirect url  
cfront&lt;-cback: OK + transaction id + redirect url  
cfront-&gt;pfront: Redirect + transaction id  
pfront-&gt;pback: Get transaction data + merchant payment methods  
pfront&lt;-pback: OK response  
payer&lt;-pfront: Display transaction + payment methods  
@enduml

</details>### <span style="font-family: Lato; color: #000000;">Payment process via API</span>

<span style="font-family: Lato; color: #34495e;">The second integration path allowing to continue the payment process is to integrate your application directly to Paytool API. As the first step of this approach you should request `<a href="https://developer.verestro.com/books/paytool/page/paytool-external-api">transaction initialization</a>` method to</span><span style="color: rgb(52, 73, 94); font-family: Lato;"> create a payment session in our system. In return you will receive a </span>`transactionId`<span style="color: rgb(52, 73, 94); font-family: Lato;"> parameter which can be used in the `pay` method and the rest of the Paytool </span>[API methods](https://developer.verestro.com/books/paytool/page/paytool-external-api)<span style="color: rgb(52, 73, 94); font-family: Lato;"> in the context of the current transaction. In the `pay` method you determine which of the available payment methods you want to use</span><span style="color: rgb(52, 73, 94); font-family: Lato;">. The payment methods available for this integration path are listed in the [Payment methods](https://developer.verestro.com/books/paytool/page/use-cases#bkmrk-payment-methods) section.</span>

<p class="callout info"><span style="font-family: Lato; color: #34495e;">**Info:** In this model we do not provide a frontend view.</span></p>

<details id="bkmrk-example-request-body-0"><summary>Example request body of the transaction metadata provided by Customer</summary>

```JSON
{
  "transactionId": "42be3d06-4577-4a9f-b525-2cfaba244557",
  "currencyCode": "PLN",
  "amount": 100,
  "description": "Test transaction",
  "formLanguage": "en",
  "redirectUrl": {
    "successUrl": "https://paytool.verestro.com/demo/?success=1",
    "failureUrl": "https://paytool.verestro.com/demo/?success=0"
  },
  "sender": {
    "firstName": "Yoshimoto",
    "lastName": "Imagawa",
    "address": {
      "countryCode": "PL",
      "city": "Kyoto",
      "postalCode": "12-345",
      "street": "Ichijo",
      "houseNumber": "1"
    }
  },
  "merchantUrl": "https://paytool.verestro.com/demo/",
  "orderNumber": "1"
}
```

</details><details id="bkmrk-integration-method-c-0"><summary>Sequence diagram of the payment via API process</summary>

@startuml  
skinparam ParticipantPadding 30  
skinparam BoxPadding 30  
skinparam noteFontColor #FFFFFF  
skinparam noteBackgroundColor #1C1E3F  
skinparam noteBorderColor #1C1E3F  
skinparam noteBorderThickness 1  
skinparam sequence {  
ArrowColor #1C1E3F  
ArrowFontColor #1C1E3F  
ActorBorderColor #1C1E3F  
ActorBackgroundColor #FFFFFF  
ActorFontStyle bold  
ParticipantBorderColor #1C1E3F  
ParticipantBackgroundColor #1C1E3F  
ParticipantFontColor #FFFFFF  
ParticipantFontStyle bold  
LifeLineBackgroundColor #1C1E3F  
LifeLineBorderColor #1C1E3F  
}  
actor payer  
participant "Customer front" as cfront  
participant "Customer backend" as cback  
participant "Paytool backend" as pback  
payer-&gt;cfront: Payer wants to pay  
cfront-&gt;cback: Order payment  
cback-&gt;pback: Customer authorization + transaction metadata  
note left of pback: Store transaction metadata + open payment session  
cback&lt;-pback: OK + transaction id  
cback--&gt;cfront  
note right of cfront: At this point, the Customer decides how to present the transaction to the payer  
cfront--&gt;cback  
cback-&gt;pback: Request proper payment method / executing 3D Secure  
cback&lt;-pback: Transaction result  
note right of cfront: At this point, the Customer decides how to present the transaction result to the payer  
cfront&lt;--cback  
@enduml

</details>### Embed - Payment in iframe

<p class="callout info">**Note:** Unlike the other integration models, the `<a href="https://developer.verestro.com/books/paytool/page/paytool-external-api">transaction initialization</a>` method in this flow is executed **only after** the payer's data and payment instrument details have been successfully collected.</p>

The last of the supported integration paths involves embedding Paytool directly into your application, which requires the use of a dedicated [SDK](https://paytool.verestro.com/docs/category/getting-started). The process begins with the backend requesting a list of the user's saved cards via the [`paymentMethods`](https://developer.verestro.com/books/paytool/page/paytool-external-api) endpoint. Depending on the response and the availability of the "Card on File" service, the initialized [SDK](https://paytool.verestro.com/docs/category/getting-started) displays either a list of available cards or a form for new card entry within a secure iframe. Once the user confirms their selection by clicking the "Pay" button, the application retrieves the data from the iframe using the `<a href="https://paytool.verestro.com/docs/classes/CardFormEmbed#getformstate">getFormState</a>` method. Based on this information, the backend creates a payment session via the `<a href="https://developer.verestro.com/books/paytool/page/paytool-external-api">transactionInitialization</a>` endpoint to obtain a transaction identifier (`transactionId`). Finally, this identifier is passed to the SDK's `pay` method to authorize and finalize the payment process. The payment methods available for this integration path are listed in the [Payment methods](https://developer.verestro.com/books/paytool/page/use-cases#bkmrk-payment-methods) section.

\[Simplified sequence diagram from tech docs\]\\

<p class="callout info">**Note:** If you intend to use Paytool iframe, ensure that strict domain whitelisting (e.g., Content Security Policy) is disabled in your application. This is necessary because the cardholder authentication process often requires loading HTML templates directly from the card-issuing bank. Since each bank operates on a unique domain, restrictive whitelisting may block these resources, preventing the user from completing the transaction.</p>

<p class="callout warning">**Important!** It is crucial to understand that in this integration model, the "**Pay**" button **must be a component of your application's UI**. The Paytool iframe does not render its own submission button. Your application is fully responsible for controlling the payment flow by listening for user events (like the "**Pay**" button click) and invoking the corresponding Paytool SDK methods at each step.</p>

<details id="bkmrk-example-request-body-1"><summary>Example request body of the transaction metadata provided by Customer</summary>

```
```

</details><details id="bkmrk-sequence-diagram-of-"><summary>Sequence diagram of the payment via API process</summary>

@startuml  
skinparam ParticipantPadding 30  
skinparam BoxPadding 30  
skinparam noteFontColor #FFFFFF  
skinparam noteBackgroundColor #1C1E3F  
skinparam noteBorderColor #1C1E3F  
skinparam noteBorderThickness 1  
skinparam sequence {  
ArrowColor #1C1E3F  
ArrowFontColor #1C1E3F  
ActorBorderColor #1C1E3F  
ActorBackgroundColor #FFFFFF  
ActorFontStyle bold  
ParticipantBorderColor #1C1E3F  
ParticipantBackgroundColor #1C1E3F  
ParticipantFontColor #FFFFFF  
ParticipantFontStyle bold  
LifeLineBackgroundColor #1C1E3F  
LifeLineBorderColor #1C1E3F  
}  
actor payer  
participant "Customer front" as cfront  
participant "Customer backend" as cback  
participant "Paytool backend" as pback  
@enduml

</details>## Application components

Application components are all Verestro's internal services which are taking part in the Paytool processes. This chapter describes every component of the Verestro Paytool solution along with it's responsibility.

[![6.png](https://developer.verestro.com/uploads/images/gallery/2025-07/scaled-1680-/K3K6.png)](https://developer.verestro.com/uploads/images/gallery/2025-07/K3K6.png)

### Verestro Paytool Server

Verestro Paytool Server is the backend component which consists of few internal services responsible for managing cards, card payment tokens and user data, processing transactions and 3D Secure, send notification to the Customer and enduser and storing transaction history. This component is also responsible for connection with Acquirers. Services included in the Verestro Paytool backend can be divided into two groups:

<table border="1" id="bkmrk-services-that-are-th" style="border-collapse: collapse; width: 100%; height: 65.1875px;"><tbody><tr style="height: 35.3906px;"><td style="width: 100%; height: 35.3906px;">Services that are the part of the Verestro Paytool Solution.

</td></tr><tr style="height: 29.7969px;"><td style="width: 100%; height: 29.7969px;">Services supporting the functionalities offered by Verestro Paytool Solution.

</td></tr></tbody></table>

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-component-descriptio" style="width: 832px; height: 240.625px;" width="708"><tbody><tr><td bgcolor="#002060" colspan="2" style="height: 35.5px; width: 820px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Services that are the part of the Verestro Paytool Solution**</span>

</td></tr><tr style="height: 35.5px;" valign="TOP"><td bgcolor="#002060" style="width: 410px; height: 35.5px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Component**</span>

</td><td bgcolor="#002060" style="width: 410px; height: 35.5px;" width="573"><span style="font-family: Lato; color: #ecf0f1;">**Description**</span>

</td></tr><tr style="height: 124.953px;"><td style="width: 410px; height: 124.953px;"><span style="color: #34495e;">Paytool API</span>

</td><td style="width: 410px; height: 124.953px;"><span style="color: #34495e;">A service with all methods required to complete the entire transaction process. The methods are called by Paytool Frontend App or by your API in the right order to make the entire payment and 3D Secure process. This service also communicates with the Verestro Acquirer Connector, which orders the execution of the transaction. The last and probably the most important element for which the Paytool API is responsible is opening a payment session and saving the transaction entities in the Verestro system.</span>

<span style="color: #34495e;">Another role of this component is to communicate between the Verestro system and the Acquirer's system. This service transfers transaction requests to the Acquirers and also informs if the 3D Secure authentication process is required.</span>

<span style="color: #34495e;">This component stores cards in our PCI DSS database in the case of Card on File payment method usage.</span>

</td></tr></tbody></table>

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-component-descriptio-0" style="width: 836px; height: 469.64px;" width="708"><tbody><tr style="height: 35.5px;"><td bgcolor="#002060" colspan="2" style="height: 35.5px; width: 822px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Services supporting the functionalities offered by the Verestro Paytool Solution**</span>

</td></tr><tr style="height: 35.5px;" valign="TOP"><td bgcolor="#002060" style="width: 411px; height: 35.5px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Component**</span>

</td><td bgcolor="#002060" style="width: 411px; height: 35.5px;" width="573"><span style="font-family: Lato; color: #ecf0f1;">**Description**</span>

</td></tr><tr style="height: 102.344px;"><td style="width: 411px; height: 102.344px;">Notification Service API

</td><td style="width: 411px; height: 102.344px;">A service responsible for sending notifications to end users and Customers. Notifications to end user can be sent via e-mail. The Customer can receive [transaction postback](https://developer.verestro.com/books/paytool/page/paytool-external-api) via a specific URL he provided.

</td></tr></tbody></table>

### Verestro Paytool Frontend

Verestro Paytool Frontend is the frontend component consists of two internal services which are responsible for displaying all necessary data comming from Paytool API. Verestro Paytool Frontend can be divided into two services:

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-component-descriptio-1" style="width: 824px; height: 187.672px;" width="708"><tbody><tr style="height: 35.5px;" valign="TOP"><td bgcolor="#002060" style="width: 247.844px; height: 35.5px;" width="129"><span style="font-family: Lato; color: #ecf0f1;">**Component**</span>

</td><td bgcolor="#002060" style="width: 575.141px; height: 35.5px;" width="573"><span style="font-family: Lato; color: #ecf0f1;">**Description**</span>

</td></tr><tr style="height: 116.781px;"><td style="width: 247.844px;"><span style="font-family: Lato; color: #34495e;">Paytool Frontend App</span>

</td><td style="width: 575.141px;"><span style="font-family: Lato; color: #34495e;">This is a frontend application hosted by Verestro. This is where you redirect the user when you are using the [Redirect your payer](https://developer.verestro.com/books/paytool/page/overview#bkmrk-redirect-your-payer) integration path. This service is intended to display transaction data to the end user, enable him to select a payment method and confirm payment. To perform the above actions, the Paytool Frontend App communicates directly with the Paytool API. This service does not participate in the payment process at all if you use the [Payment process via API](https://developer.verestro.com/books/paytool/page/overview#bkmrk-payment-process-via-) integration path. Alternatively you can open Paytool in iframe.</span>

</td></tr><tr><td style="width: 247.844px;"><span style="font-family: Lato; color: #34495e;">Paytool SDK</span>

</td><td style="width: 575.141px;"><span style="font-family: Lato; color: #34495e;">  
</span>

</td></tr></tbody></table>

### Allowed card networks

Listed below are the types of cards supported in transactions using Paytool application<span style="font-family: Lato;"><span style="color: #000000;"><span lang="en-US">:</span></span></span>

<table border="1" cellpadding="1" cellspacing="0" id="bkmrk-card-type-mastercard" style="width: 215px; height: 141.562px;" width="712"><tbody><tr style="height: 35.3906px;" valign="TOP"><td bgcolor="#002060" style="height: 35.3906px; width: 214px;" width="214"><span style="color: #ffffff;"><span style="font-family: Lato;">**Card type**</span></span>

</td></tr><tr style="height: 35.3906px;"><td style="width: 214px; height: 35.3906px;"><span style="font-family: Lato;"><span style="font-family: Lato; color: #000000;"><span lang="en-US">`MASTERCARD`</span></span></span>

</td></tr><tr style="height: 35.3906px;"><td style="width: 214px; height: 35.3906px;"><span style="font-family: Lato;"><span style="font-family: Lato; color: #000000;"><span lang="en-US"> `VISA` </span></span></span>

</td></tr><tr style="height: 35.3906px;"><td style="width: 214px; height: 35.3906px;"><span style="font-family: Lato;"><span style="font-family: Lato; color: #000000;"><span lang="en-US">`MAESTRO`</span></span></span>

</td></tr></tbody></table>

## Security

Due to the need to process card data and perform money operations, we had to create security measures that would not allow violations of the transaction process and prevent unauthorized entities from using the solution. In this chapter, we described the main security elements for customers and their transactions.

<details id="bkmrk-the-sequence-diagram"><summary>The sequence diagram below illustrates the application workflow</summary>

@startuml  
skinparam ParticipantPadding 30  
skinparam BoxPadding 30  
skinparam noteFontColor #FFFFFF  
skinparam noteBackgroundColor #1C1E3F  
skinparam noteBorderColor #1C1E3F  
skinparam noteBorderThickness 1  
skinparam sequence {  
ArrowColor #1C1E3F  
ArrowFontColor #1C1E3F  
ActorBorderColor #1C1E3F  
ActorBackgroundColor #FFFFFF  
ActorFontStyle bold  
ParticipantBorderColor #1C1E3F  
ParticipantBackgroundColor #1C1E3F  
ParticipantFontColor #FFFFFF  
ParticipantFontStyle bold  
LifeLineBackgroundColor #1C1E3F  
LifeLineBorderColor #1C1E3F  
}  
participant "Customer Frontend" as browser  
participant "Customer Backend" as psdk  
participant "Paytool Frontend" as pfront  
participant "Paytool Backend" as pback  
participant "Acquirer" as acq  
note right of browser: User chooses "Pay with Verestro Paytool"  
browser-&gt;psdk: Transaction initialization + metadata  
psdk--&gt;pback: Transaction initialization + metadata  
pback-&gt;pback: Validate transaction metadata  
pback-&gt;pback: Store transaction session data  
pback-&gt;psdk: OK + transactionId  
psdk-&gt;pfront: Redirect end user to Paytool Frontend + transactionId  
pfront--&gt;pback: Get transaction metadata + list of the supported payment options  
pback--&gt;pfront: Return transaction metadata + list of the supported payment options  
pfront-&gt;pfront: Display transaction metadata + list of the supported payment options  
pfront-&gt;pback: Process transaction by chosen payment option  
pback-&gt;pback: Consisteny validation between current transaction data and provided when opening the session  
pback-&gt;acq: Order transaction  
@enduml

</details>### Payment session

In order to start a payment in Paytool, a payment session must first be opened. Opening a payment session involves authorizing your merchant account and sending transaction metadata to Paytool API. Transaction metadata should be encrypted using JWE encryption standard. Based on the obtained transaction data, validation of each data is performed and then a transaction object is created and saved in the internal Verestro database. Thanks to authorization, the context of your merchant account is assigned to the created transaction. Once you have created a payment session, you will receive an identifier for this transaction. Using this identifier you will be able to continue the payment process and we will be able to check whether there has been any interference in the transaction data you provided and interrupt the process if necessary.

<p class="callout info">**Note:** We does not store any sensitive data such as PAN or CVC in our system. The obtained data are only required to be transferred to the Acquirer to perform transaction.</p>

### Authorization

Authorization of the Customer in the Paytool system is performed using mTLS. Information on how to generate a certificate and the details of the signing process are available in the [How to integrate](https://developer.verestro.com/books/paytool/page/paytool-external-api) section. Such authorization in Paytool application is intended to check whether the entity trying to execute the request is authorized to do so. If you have a merchant account in the Paytool system, each of your requests should be signed with the certificate x509. This allow us to check whether the action you have taken can be proceeded. We will also check whether your merchant account is associated with a given transaction, and therefore whether it can perform any actions in the context of this transaction