For any question, we are one click away

Contact us

Overview

You can use our Merchant API to create a payment flow you need. For example, you can design your own fully customized payment page and connect it to our Payment Gateway.

You can download Postman collection of some basic API methods below. Make sure to send requests as POST with attributes in the body.

Download Postman collection

Mandatory parameters

The mandatory presence of a parameter in a request/response may have the following values:

The mandatory transmission of a parameter in the request/response description is indicated in the "Required" column.

If you don’t have access to the Dashboard, create your account.

Authentication

For merchant authentication in the payment gateway two methods can be used.

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
RequiredNameTypeDescription
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.

API URLs

TEST: https://uat.dskbank.bg/payment/rest/
PROD: https://epg.dskbank.bg/payment/rest/

Errors

HTTP status codes:

If the request, associated with an order payment, is processed successfully, it does not directly mean that the payment itself was successful.

To determine whether the payment was successful or not, you may refer to the description of the request used, where the intepretation of the payment success is thoroughly described, or you may follow the rule of thumb here:

  1. Call getOrderStatusExtended.do;
  2. Check the orderStatus field in the response: the order is considered to be payed only if the orderStatus value is 1 or 2.

API request signature

Facing insecure integration, you may be requested to implement an asymmetric request signature. Usually, this requirement is applied only if you carry out P2P/AFT/OCT requests.

To have a possibility to sign requests, you need to perform the following steps:

  1. Generate and upload a certificate.
  2. Calculate a hash and a signature using your private key and pass the generated hash (X-Hash) and the signature value (X-Signature) in the request header.

These steps are described below in details.

Generating and uploading a certificate

  1. Generate 2048-bit RSA private key. The way of generation depends on privacy policy in your company. For example, you can do it using OpenSSL:

    openssl genrsa -des3 -out private.key 2048

  2. Generate public CSR (Certificate Signing Request) using the generated private key:

    openssl req -key private.key -new -out public.csr

  3. Generate a certificate using the generated private key and CSR. The example of generating a certificate for 5 years:

    openssl x509 -signkey private.key -in public.csr -req -days 1825 -out public.cer

  4. Upload the generated certificate in the Personal Area. To do this, go to Wallet certificates > Merchant API, click Add a certificate and upload the generated public certificate.


    Wallet certificates

Calculating a hash and a signature

  1. Calculate SHA256 hash of the request body as follows:

    1. Use request body as a string (in our example it is amount=10000&password=gcjgcW1&returnUrl=http&userName=signature-api).
    2. Calculate SHA256 hash from this string, in raw bytes.
    3. Convert the raw bytes into base64 encoding.
  2. Generate a signature for the calculated SHA256 hash with RSA algorythm using the private key.

    In our example we use the following private key with the password 12345:

    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,C502560EDE8F82B7
    O4+bY1Q1ZcXFLDGVE8s9G2iVISHR/c/IMZKZEjkBED/TbuOCUGVjcav2ZaZO2dO0 lm771N6JNB01uhJbTHScVQ6R0UnGezHFTcsJlAlBa9RQyOwujs4Pk6riOGnLliIs urnTXD0oskBR1wLRA2kp8+V0UPOAMXQaoLxFGE/o8taDGSrkyIcYTBoh9o7ZBxvO SqUWAt2vPbGVyc6XspyuVtgHgEctaJO+E26QTweqdpN5JITF+fDFPNwUrFHoho4N pxpKRWbiCJSpbvbsvhdizkmfgvRw+qYJvTirF3JTfGr14DttudFwjm7sNrr0JILR XPKDUhRyWjkthZM+oDjF2HwISAGkbxcpn4PU7Tywq0uax+5KCQQn2uz4jLM2P6+9 000cvVLwhMnoUdOxuISRXeOcOWVyTO1mPfKiWnHaoO4yS3Y36OCIOe9RHGP8TTmq acb3LUIF30eQyk3KxH/tUB0ScPDKEKMiww13/Kcfr0JkdIe/BWCvV+hSQm38TLQe bTFy+wnD9kHACCwTSVVSOO+rHgJGVIyLgnpClZKWQyyJ4clH7/cORA7mTmp85Ckx IjV5Egu0bPPUMudOB5BnQ4u85RnqXavasgrLRA3JZM4+Jzl8MNy/fsFXnVBQLJJC Wlz/B7S7W8sabRogFuiqkkPmXE/QcpdKQoY3yh748QqMSl8vkA6WgndyYv1EnDDl jA5j7vSf0wKI8BHgdHBEWuEjn3X/s0S/BiPPI6puboYY90tYVJTWSQCR83QrMF3N BIcMu4+RIYu6GWnPx9npZpt0858c670ZII56np24iMse3qgHCOZxsGOenK2x7ta6 163gvaD8bu8xoeQcGVfd6IMbXWVb0+z1hvWR5HWHSalof4lMzZrDsQDKc2UA0ygh hA1+VAl1MAEHVLNCCmyG1SwRwg1PI7FfftW7YARngCZRWkJ1haj1fgy7rtYolrdv lEz/vjFD6diABx67omGgfiJhWdiKIlzsYlX1SW7yaik/Uxf1j8gTFwY34y8ekVd9 6pQTzV2V/4a48ELZl4LvelLWyt1AB3AR+/fM7YG6LYIqlo+qnLtro7Bqu8RNTNRP wcWCd04r/20ulFWMIH8pVa60C98pSdOXriWEI1KDLc0E/fCdhjW2kL+FTPLC7ORe cuzmfI27+06P/BvLZq/FAVBrDAmkioKwe6XYzTjpK1p5jZ3IrNwjAiasY1MNxCRy 5ufhQwkW//d+VUdU5m8Sm30/kXe9UkxMaetXgzPxbB7+5QFFr0bi7D1MjIrJNtTx 5g5E+UfOhqrp8ztBht9csQeFYSYabyyGX4Lh7ymVWrKCVdHlJib3M36nvOjpV/lA zf35sxFz9kaQqNK7xJdQ9Bx6TBUzLjpYhNry37vKk+SIB6Weo+LJ99mALMeX79CB osRqZqX5yrZhaQ8bbpo981nvLy5xFnpRqCuSWVZrVMBq3LQLaOvaCeyGC0V+ZN0C CU6lHlR6XQqd/IjoEN8+8aiVp6Ubw8FuD28TDaEvCltrX3ARL0xFpABsa42LgV1F 09Vi+ju7SSNDvbezN8q0EILq9xp/zNCVhMpyRCIXBq9fzHkyCZ5qMw==
    -----END RSA PRIVATE KEY-----

    and get the signature: pJ/gM4PR1/mKGuIxMvTl5pYDDjJslb0BcXFnIxijFn5qKdPd7W+2ueoctziU7omnkYp01/BlracukH1GOPWMSO+9zKuTDdFueFm1utsS0zaPFU+dmc1niGDRWE0CbCXcti/rGSTDPsnR58mwqgVkbCWxKyCDtuo5LxiKPK9mzgWTUuJ8LX6f6u42MURi5tRG6a9dc8l/+J94g0YOk911R6Lqv2jcluEvZ9ZeMMt8hyxowb0eDaCHlussu2CAyqpE9V+EUAc81Jkwv96MMSsA6UnFwEaCV/k+kwYd0jHCx94m2yWX734p9cWsBW7Fr5F0zox9Yck4GOjqe9nJMMB9jQ==

  3. Now you should pass the generated hash (X-Hash) and the signature value (X-Signature) in the request header. The request will look like this:

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/register.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --header 'X-Hash: eYkMUF+xaYJhsETTIGsctl6DBNZha1ITN8muCcWQtZk=' \
  --header 'X-Signature: pJ/gM4PR1/mKGuIxMvTl5pYDDjJslb0BcXFnIxijFn5qKdPd7W+2ueoctziU7omnkYp01/BlracukH1GOPWMSO+9zKuTDdFueFm1utsS0zaPFU+dmc1niGDRWE0CbCXcti/rGSTDPsnR58mwqgVkbCWxKyCDtuo5LxiKPK9mzgWTUuJ8LX6f6u42MURi5tRG6a9dc8l/+J94g0YOk911R6Lqv2jcluEvZ9ZeMMt8hyxowb0eDaCHlussu2CAyqpE9V+EUAc81Jkwv96MMSsA6UnFwEaCV/k+kwYd0jHCx94m2yWX734p9cWsBW7Fr5F0zox9Yck4GOjqe9nJMMB9jQ==' \
  --data 'amount=10000&password=gcjgcW1&returnUrl=http&userName=signature-api'

The request should meet the following requirements:

Java code example

Below is the Java code example that loads a private key, calculates SHA256 hash, signs it using the private key with the password 12345, and then sends a correct register.do request:

import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Base64;

import static java.net.HttpURLConnection.HTTP_OK;

public class SimpleSignatureExample {

    // This example is not production ready. It just shows how to use signatures in API.
    public static void main(String[] args) throws Exception {
        // load private key from jks
        KeyStore ks = KeyStore.getInstance("JKS");
        char[] pwd = "123456".toCharArray();
        ks.load(Files.newInputStream(Paths.get("/path/to/certificates.jks")), pwd);
        PrivateKey privateKey = (PrivateKey) ks.getKey("111111", pwd);

        // Sign
        String httpBody = "amount=10000&password=gcjgcW1&returnUrl=http&userName=signature-api";

        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);

        byte[] sha256 = digest.digest(httpBody.getBytes());
        signature.update(sha256);
        byte[] sign = signature.sign();

        // Send
        Base64.Encoder encoder = Base64.getEncoder();
        HttpsURLConnection connection = (HttpsURLConnection) new URL("https://<YOUR_DOMAIN>/payment/rest/register.do").openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        connection.addRequestProperty("content-type", "application/x-www-form-urlencoded");
        connection.addRequestProperty("X-Hash", encoder.encodeToString(sha256));
        connection.addRequestProperty("X-Signature", encoder.encodeToString(sign));
        connection.addRequestProperty("Content-Length", String.valueOf(httpBody.getBytes().length));
        try (final DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
            outputStream.write(httpBody.getBytes());
            outputStream.flush();
        }
        connection.connect();

        InputStream inputStream = connection.getResponseCode() == HTTP_OK ? connection.getInputStream() : connection.getErrorStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
}

Python code example

Below is the Python code example that generates the signature:

import OpenSSL
from OpenSSL import crypto
import base64
from hashlib import sha256
key_file = open("./priv.pem", "r")
key = key_file.read()
key_file.close()
 
if key.startswith('-----BEGIN '):
    pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key)
else:
    pkey = crypto.load_pkcs12(key, password).get_privatekey()
 
data = “amount=2000&currency=978&userName=test_user&password=test_user_password&returnUrl=https%3A%2F%2Fmybestmerchantreturnurl.com&description=my_first_order&language=en”
 
sha256_hash = sha256(data.encode()).digest()
base64_hash = base64.b64encode(sha256_hash)
print(base64_hash)
 
sign = OpenSSL.crypto.sign(pkey, sha256_hash, "sha256")
 
signed_base64 = base64.b64encode(sign)
print(signed_base64)

The private key file for the Python example should have the format:

-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdpOwhY/p9x0WmBd3HaDfCD+KYung3M8Cxrw0ozF+h//GltRdnkJD7ejsBDB6/YeIVXZeU3AyqWvsi/IfeHwnokGxVg2IMw8OPacY6o1x7W0EQtfRoZa2Cn2PMCpZhEHlIVraXZDDeg4HY26YP0FZxRbpNnpXhGbiop+Bq0wHeE3JIk53cRmwYhxdxMmvFpgNd6C3dYhmnQqLv6WSpVNDFbQxBVU+JDNyR9FQwB1dU2MadgYwFJnEssbhUkM+sXAC4Wv3qhcZek6MWeWsbFIIlyTPa1T3yrWSXIb4qFJEro4pRMmwQ72qG02p8EPx1tlveQo22TojV9WbTPtaVwQtxAgMBAAECggEBANheTGkYOYsZwgMdzPAB7BSU/0bLGdoBuoV6dqUyRdVWjqaOTwe519625uzR0R5RRqxGzlfyLKcM5Aa2cUhEEp8mhatA87G0Va8lue66VOjTH4RZq/tR7v0J7hlc6Ipe05brl5nYo+BEjriNS+I6Jnizcfid7IBvZJW4NFr0G+mWTxl2BhUK/Mk895n8hg9QtgSRoMNO4jK2f0vJrH4hBHehTYpjHx+QhbUyIvsp60bEnNOXzl054TuWBVCYAQHcHTTZowWMY0s1Z0kGNxwsqQm4amW/v+1EqCF4fjRDrU6v/kjDKxGFx9GJUktKZAe2T8e2LySjgGpJO5g4AdxIVpUCgYEA8x9te+i2ijxoS3kIUSwXaPq5EdKGWGl5mW8KZHzmt9LB/CqTKvSOiDkMGoAx/76t5QmKOYojP+Vsc2XdfQfhT6d00MGTdiPBd+8//MmQQ07/D1/PV58Jd1O8bQFU4fZCMpQl/8Azp9ix/NEx0sHDv2KigLfFMBVGeJxwSoU2JzMCgYEA6WJC0BDTA9vx+i+p9i/41f7ozpQuYey5sxdZa2emOSYen6ptxUFLAYXMxVDaBJ89PMUa8GzWoXHhgXzbuRJk74IzUhWgPpneS4HTr5KDStJh2TqWWVLwEIgLwxvtuw0i9uSEU64D/Czzm801lrOhVgmZsWwNpFtP8ujz0v84MssCgYEA1P4YhbB3kx2e5VfwgGSXUcIttr5wMi6deF0+hpCh9DNw/QEzkzNTV2ZbAzCCHSKo5/n2nbg2b3kIDQUWCL6JlqYHAghErwBeMztoHIddmoovjAGM/Z93xJGYhwremWOL1RHTRH7XAlomfG2tL43PdvDrmsbkut44sdujyLVxnt8CgYBirK3tBMADKLJVgmOM+FlwORe7iAFYW9tj8iJXe/pWvVxDS66fsOyCl0ytvHKBc8ZTdE7gilPw7JJYyi6oQDO25EjIkuYusaXALQMQf5TNRMgkLVY2LA/eHXdDpgJMjNBUrOeZ7cA3ldXl8MyQjCBRnTuDPVlDPWw/GulEM65SIwKBgQDIEv8XK2YBkZrr+0fZSFTQAeK4R7Ve3z4hbpHhJi41YanCNaEWoeYAuQd6/b/QLwABllvfJBDYCNnF8heUxqISpyWd+FZ8nhZtxBoKj5l80czTcutIz/M+ETcvl8FqnMBsoCdp1wodqaLkOx6DIldgKLze6AqKXl5lHUsU4mvVqg==
-----END PRIVATE KEY-----

Order registration

Order registration

Start working with the API Sandbox by creating an account or logging in.

 

To register an order, use https://uat.dskbank.bg/payment/rest/register.do request.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
MandatorycurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
MandatoryreturnUrlString [1..512]The address to which the user will be redirected if the payment is successful. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionalfailUrlString [1..512]The address to which the user is to be redirected in case of a failed payment. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionaldynamicCallbackUrlString [1..512]This parameter allows you to use the functionality of sending callback notifications dynamically. Here you can pass the address to which all "payment" callback notifications activated for the merchant will be sent. "Payment" notifications are callback notifications related to the following events: successful hold, payment declined by timeout, cardpresent payment is declined, successful debit, refund, cancellation. At the same time, callback notifications activated for the merchant that are not related to payments (enabling/disabling a stored credential, storing a credential) will be sent to a static address for callbacks. Whether the parameter is mandatory or not depends on the merchant configuration on Payment Gateway side.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionalmerchantLoginString [1..255]To register an order on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
OptionalcardholderNameString [1..150]Cardholder's name in Latin characters. If it's passed, it will be displayed on the payment page.
OptionaljsonParamsObjectA set of additional free-form attributes, structure:
jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}
Can be passed to the Processing Center for further processing (additional configuration required - contact support).
Some predefined jsonParams attributes:
  • backToShopUrl - adds a button to the payment page that will return the cardholder to the URL passed in this parameter
  • backToShopName - configures the text label of the Return to Shop button by default, if used together with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).
  • recurringExpiry - date after which authorizations are not allowed, in YYYYMMDD format. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).
OptionalsessionTimeoutSecsInteger [1..9]Order lifetime in seconds. If the parameter is not specified, the value specified in the merchant settings or the default value (1200 seconds = 20 minutes) will be used. If the request contains expirationDate, the value of sessionTimeoutSecs is not taken into account.
OptionalexpirationDateString [19]Date and time of the order expiry. Format used: yyyy-MM-ddTHH:mm:ss.
If this parameter is not passed in the request, sessionTimeoutSecs is used to define the expiry of the order.
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionalfeaturesStringFeatures of the order. To specify multiple features, use this parameter several times in one request. As an example, below are the possible values.
  • VERIFY - If you specify this value in the order registration request, cardholder will be verified however they will not be charged any amount, so in this case amount parameter can be 0. Verification allows to make sure that a payment card is used by its legitimate owner, and further you can charge them without authentication (CVC, 3D-Secure). Even if some amount is passed in the request, the customer will not be charged if VERIFY feature is used. This value can be also used for storing the credential – in this case, the clientId parameter must be passed as well. Read more here.
  • FORCE_TDS - Force 3-D Secure payment. If a payment card does not support 3-D Secure, the transaction will fail.
  • FORCE_SSL - Force SSL payment (without 3-D Secure).
  • FORCE_FULL_TDS - After 3-D Secure authentication, PaRes status must be Y, which guarantees successful user authentication. Otherwise, the transaction will fail.
  • FORCE_CREATE_BINDING - passing this feature in the order registration request forcefully stores the credential. This functionality must be enabled by Merchant level permission in the Gateway. This value cannot be passed in a request with an existing bindingId or bindingNotNeeded = true (will cause validation error). When this feature is passed, the clientId parameter must be passed as well. If you pass both FORCE_CREATE_BINDING and VERIFY features, the order will be created for storing the credential ONLY (without payment).
OptionalpostAddressString [1..255]Delivery address.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalorderBundleObjectObject containing cart of items. The description of the nested elements is given below.
OptionalfeeInputInteger [0..8]Fee amount in minimum currency units. Must be enabled by respective Merchant-level permission in the Gateway.
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
The email will not be validated on registration. It will be later validated on payment.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Description of parameters in orderBundle object:

RequiredNameTypeDescription
OptionalorderCreationDateString [19]Order creation date in the following format: YYYY-MM-DDTHH:MM:SS.
OptionalcustomerDetailsObjectBlock containing customer attributes. The description of the tag attributes is given below.
MandatorycartItemsObjectObject containing cart items attributes. The description of nested elements is given below.

Description of parameters in customerDetails object:

RequiredNameTypeDescription
OptionalcontactString [0..40]Customer's preferred way of communication.
OptionalfullNameString [1..100]Payer's full name.
OptionalpassportString [1..100]Customer's passport serial number in the following format: 2222888888.
OptionaldeliveryInfoObjectObject containing delivery address attributes. The description of the nested elements is given below.

Description of parameters in deliveryInfo object.

RequiredNameTypeDescription
OptionaldeliveryTypeString [1..20]Delivery method.
MandatorycountryString [2]Two letter code of the country of delivery.
MandatorycityString [0..40]City of destination.
MandatorypostAddressString [1..255]Delivery address.

Description of parameters in cartItems object.

RequiredNameTypeDescription
MandatoryitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Description of parameters in itemDetailsParams object.

RequiredNameTypeDescription
MandatoryvalueString [1..2000]Additional item info.
MandatorynameString [1..255]Name of the parameter describing the details of an item

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalformUrlString [1..512]URL of the payment form, to which a customer will be redirected The URL is not returned if the registration of the order fails due to an error specified in errorCode.
OptionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/register.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data amount=123456 \
  --data userName=test_user \
  --data password=test_user_password \
  --data orderNumber=1234567890ABCDEF \
  --data returnUrl=https://mybestmerchantreturnurl.com \
  --data failUrl=https://mybestmerchantfailurl.com \
  --data email=test@test.com \
  --data clientId=259753456 \
  --data features=FORCE_SSL \
  --data language=en \
  --data 'jsonParams={"param_1_name":"param_1_value","param_2_name":"param_2_value"}'

Response example - success

{
  "orderId": "01491d0b-c848-7dd6-a20d-e96900a7d8c0",
  "formUrl": "https://uat.dskbank.bg/payment/payment/merchants/ecom/payment_en.html?mdOrder=01491d0b-c848-7dd6-a20d-e96900a7d8c0"
}

Response example - fail

{
  "errorCode": "1",
  "errorMessage": "Order number is duplicated, order with given order number is processed already"
}

Order pre-authorization

The method used for registration of an order with preauthorization is https://uat.dskbank.bg/payment/rest/registerPreAuth.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
MandatorycurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
MandatoryreturnUrlString [1..512]The address to which the user will be redirected if the payment is successful. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionalfailUrlString [1..512]The address to which the user is to be redirected in case of a failed payment. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionaldynamicCallbackUrlString [1..512]This parameter allows you to use the functionality of sending callback notifications dynamically. Here you can pass the address to which all "payment" callback notifications activated for the merchant will be sent. "Payment" notifications are callback notifications related to the following events: successful hold, payment declined by timeout, cardpresent payment is declined, successful debit, refund, cancellation. At the same time, callback notifications activated for the merchant that are not related to payments (enabling/disabling a stored credential, storing a credential) will be sent to a static address for callbacks. Whether the parameter is mandatory or not depends on the merchant configuration on Payment Gateway side.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionalmerchantLoginString [1..255]To register an order on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
OptionalcardholderNameString [1..150]Cardholder's name in Latin characters. If it's passed, it will be displayed on the payment page.
OptionaljsonParamsObjectA set of additional free-form attributes, structure:
jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}
Can be passed to the Processing Center for further processing (additional configuration required - contact support).
Some predefined jsonParams attributes:
  • backToShopUrl - adds a button to the payment page that will return the cardholder to the URL passed in this parameter
  • backToShopName - configures the text label of the Return to Shop button by default, if used together with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).
  • recurringExpiry - date after which authorizations are not allowed, in YYYYMMDD format. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).
OptionalsessionTimeoutSecsInteger [1..9]Order lifetime in seconds. If the parameter is not specified, the value specified in the merchant settings or the default value (1200 seconds = 20 minutes) will be used. If the request contains expirationDate, the value of sessionTimeoutSecs is not taken into account.
OptionalexpirationDateString [19]Date and time of the order expiry. Format used: yyyy-MM-ddTHH:mm:ss.
If this parameter is not passed in the request, sessionTimeoutSecs is used to define the expiry of the order.
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionalfeaturesStringFeatures of the order. To specify multiple features, use this parameter several times in one request. As an example, below are the possible values.
  • VERIFY - If you specify this value in the order registration request, cardholder will be verified however they will not be charged any amount, so in this case amount parameter can be 0. Verification allows to make sure that a payment card is used by its legitimate owner, and further you can charge them without authentication (CVC, 3D-Secure). Even if some amount is passed in the request, the customer will not be charged if VERIFY feature is used. This value can be also used for storing the credential – in this case, the clientId parameter must be passed as well. Read more here.
  • FORCE_TDS - Force 3-D Secure payment. If a payment card does not support 3-D Secure, the transaction will fail.
  • FORCE_SSL - Force SSL payment (without 3-D Secure).
  • FORCE_FULL_TDS - After 3-D Secure authentication, PaRes status must be Y, which guarantees successful user authentication. Otherwise, the transaction will fail.
  • FORCE_CREATE_BINDING - passing this feature in the order registration request forcefully stores the credential. This functionality must be enabled by Merchant level permission in the Gateway. This value cannot be passed in a request with an existing bindingId or bindingNotNeeded = true (will cause validation error). When this feature is passed, the clientId parameter must be passed as well. If you pass both FORCE_CREATE_BINDING and VERIFY features, the order will be created for storing the credential ONLY (without payment).
OptionalautocompletionDateString [19]The date and time when the two-phase payment must be completed automatically in the following format: 2025-12-29T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalautoReverseDateString [19]The date and time when the two-phase payment must be reversed automatically in the following format: 2025-06-23T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalpostAddressString [1..255]Delivery address.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalorderBundleObjectObject containing cart of items. The description of the nested elements is given below.
OptionalfeeInputInteger [0..8]Fee amount in minimum currency units. Must be enabled by respective Merchant-level permission in the Gateway.
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
The email will not be validated on registration. It will be later validated on payment.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Description of parameters in orderBundle object:

RequiredNameTypeDescription
OptionalorderCreationDateString [19]Order creation date in the following format: YYYY-MM-DDTHH:MM:SS.
OptionalcustomerDetailsObjectBlock containing customer attributes. The description of the tag attributes is given below.
MandatorycartItemsObjectObject containing cart items attributes. The description of nested elements is given below.

Description of parameters in customerDetails object:

RequiredNameTypeDescription
OptionalcontactString [0..40]Customer's preferred way of communication.
OptionalfullNameString [1..100]Payer's full name.
OptionalpassportString [1..100]Customer's passport serial number in the following format: 2222888888.
OptionaldeliveryInfoObjectObject containing delivery address attributes. The description of the nested elements is given below.

Description of parameters in deliveryInfo object.

RequiredNameTypeDescription
OptionaldeliveryTypeString [1..20]Delivery method.
MandatorycountryString [2]Two letter code of the country of delivery.
MandatorycityString [0..40]City of destination.
MandatorypostAddressString [1..255]Delivery address.

Description of parameters in cartItems object.

RequiredNameTypeDescription
MandatoryitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Description of parameters in itemDetailsParams object.

RequiredNameTypeDescription
MandatoryvalueString [1..2000]Additional item info.
MandatorynameString [1..255]Name of the parameter describing the details of an item

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
OptionalformUrlString [1..512]URL of the payment form, to which a customer will be redirected The URL is not returned if the registration of the order fails due to an error specified in errorCode.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/registerPreAuth.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data amount=2000 \
  --data userName=test_user \
  --data password=test_user_password \
  --data returnUrl=https://mybestmerchantreturnurl.com \
  --data orderNumber=1255555555555 \
  --data clientId=259753456 \
  --data language=en

Response example

{
  "orderId": "01492437-d2fb-77fa-8db7-9e2900a7d8c0",
  "formUrl": "https://uat.dskbank.bg/payment/merchants/pay/payment_en.html?mdOrder=01492437-d2fb-77fa-8db7-9e2900a7d8c0"
}

Direct payments

Payment for order

To initiate payment on earlier registered order https://uat.dskbank.bg/payment/rest/paymentorder.do request is used.
Request is used in Internal 3DS Server mode, you don't need any additional permissions and/or certifications.
Request is used in External 3DS Server mode if you have agreement with Payment System or special Certificate, which alows you to perform 3DS authentacation on your own. It means, that you can use your own 3DS Server to authenticate your client using 3D Secure technology. Read more about payment with your own 3DS Server here.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Payment for order (internal 3DS Server)

Payment is initiated using payment card data and using 3DS authentication (authentication is regulated by permissions, managed by Support).

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
MandatoryMDORDERString [1..36]Order number in the payment gateway.
Mandatory$PANInteger [1..19]Payment card number. Mandatory, if seToken is not passed.
Mandatory$CVCString [3]CVC/CVV2 code on the back of a payment card. Mandatory, if seToken is not passed.
Only digits are allowed.
MandatoryYYYYInteger [4]Payment card expiry year. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
MandatoryMMInteger [2]Payment card expiry month. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
Conditional$EXPIRYInteger [6]Card expiration in the following format: YYYYMM. Overrides YYYY and MM parameters. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
ConditionalseTokenStringEncrypted card data that replaces $PAN, $CVC, and $EXPIRY (or YYYY,MM) parameters. Must be passed if used instead of the card data.
The mandatory parameters for seToken string are timestamp, UUID, PAN, EXPDATE, MDORDER. Click here for more information about seToken generation.
If seToken contains encrypted data about a stored credential (bindingId), the paymentOrderBinding.do request should be used for payment instead of paymentorder.do.
MandatoryTEXTString [1..512]Cardholder name.
MandatorylanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionalbindingNotNeededBooleanAllowed values:
  • true – storing the credential after the payment is disabled (a stored credential is a customer identifier passed in order registration request — after payment it will be deleted from order details);
  • false – if payment is successful the credential can be stored (if the necessary conditions are met). This is the default value.
OptionaljsonParamsObjectA set of additional free-form attributes, structure: jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}.
These fields can be passed to the Processing Center for further processing (additional setup is needed, please contact Support).
If you use your own 3DS Server the payment gateway expects that every paymentOrder request will include the following additional parameters such as eci, cavv, xid etc. Please refer here for more information.
To initiate 3RI authentication in case when there is no stored credentials, you may need to pass a number of additional parameters (see 3RI authentication for details).
Some pre-defined jsonParams attributes:
  • backToShopUrl - adds checkout page button that will take a cardholder back to the assigned merchant web-site URL
  • backToShopName - customizes default "Back to shop" button text label if used along with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Is required for creating a recurrent or installment stored credential.
  • recurringExpiry - the date after which authorizations are not allowed, in YYYYMMDD format. Recommended for creating a recurrent or installment stored credential (mandatory for 3DS2)
OptionalthreeDSSDKBooleanPossible values: true or false. Flag showing that payment comes from 3DS SDK.
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
ConditionaloriginalSchemeTransactionIdString [1..22]The identifier of the original successful Mastercard transaction.
Is mandatory when using merchant's stored credentials in stored credential transfers.
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values
OptionalexternalScaExemptionIndicatorStringThe type of SCA (Strong Customer Authentication) excemption. If this parameter is specified, the transaction will be processed depending on your settings in the payment gateway: either forced SSL operation will be done, or the issuer bank will get the information about SCA excemption and decide to perform operation with or without 3DS authentication (for details, contact our support team). Allowed values:
  • LVP – Low Value Payments transaction. You can consider a transaction as low risk based on the transaction amount, the client's transactions per day or the client's total daily amount.
  • TRA – Transaction Risk Analysis transaction, i.e., the transaction that has passed successful anti-fraud check.

To pass this parameter, you must have sufficient permissions in the payment gateway.
OptionalclientBrowserInfoObjectA block with the data about the client's browser that is sent to ACS during the 3DS authentication. To pass this block, you should have a special setting (contact the support team). See nested parameters.
ConditionaloriginalPaymentNetRefNumString [1..36]The identifier of the original or previous successful transaction in the payment system in relation to the performed stored-credential transaction - TRN ID. Is passed when tii = R,U, or F.
Is mandatory when using merchant's stored credentials in stored credential transfers.
ConditionaloriginalPaymentDateStringDate of initiating transaction. The format is Unix timestamp, in milliseconds. Is passed when tii = R,U, or F.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
FUnscheduled CITSubsequentCustomerCustomer selects card instead of manual entryNoAn e-commerce transaction that uses a stored credential.
UUnscheduled MITSubsequentMerchantNo manual entry, Merchant passes the dataNoAn e-commerce transaction that uses a stored credential. Used for one-phase payments only.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
RRecurrent MITSubsequentMerchantNo manual entry, Merchant passes the dataNoA recurrent transaction that uses a stored credential. Used for one-phase payments only.

Below are the parameters of the clientBrowserInfo block (data about the client's browser).

RequiredNameTypeDescription
OptionaluserAgentString [1..2048]Browser agent.
OptionalOSStringOperation system.
OptionalOSVersionStringOperation system version.
OptionalbrowserAcceptHeaderString [1..2048]The Accept header that tells the server what file formats (or MIME-types) the browser accepts.
OptionalbrowserIpAddressString [1..45]Browser IP address.
OptionalbrowserLanguageString [1..8]Browser language.
OptionalbrowserTimeZoneStringBrowser time zone.
OptionalbrowserTimeZoneOffsetString [1..5]The time zone offset in minutes between the user's local time and UTC.
OptionalcolorDepthString [1..2]Screen color depth, in bits.
OptionalfingerprintStringBrowser fingerprint - a unique digital identifier of the browser.
OptionalisMobileBooleanPossible values: true or false. Flag showing that a mobile device is used.
OptionaljavaEnabledBooleanPossible values: true or false. Flag showing that java is enabled in the browser.
OptionaljavascriptEnabledBooleanPossible values: true or false. Flag showing that javascript is enabled in the browser.
OptionalpluginsStringComma-separated list of plugins the browser uses.
OptionalscreenHeightInteger [1..6]Screen height, in pixels.
OptionalscreenWidthInteger [1..6]Screen width, in pixels.
OptionalscreenPrintStringData about current screen print including resolution, color depth, display metrics.
OptionaldeviceStringInformation about the cardholder's device (model, version, and so on).
OptionaldeviceTypeStringType of device on which the browser is running (mobile phone, desktop, tablet, and so on).

Example of clientBrowserInfo block:

"clientBrowserInfo":
    {
		"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
		"fingerprint":850891523,
		"OS":"Windows",
		"OSVersion":"10",
		"isMobile":false,
		"screenPrint":"Current Resolution: 1536x864, Available Resolution: 1536x824, Color Depth: 24, Device XDPI: undefined, Device YDPI: undefined",
		"colorDepth":24,
		"screenHeight":"864",
		"screenWidth":"1536",
		"plugins":"PDF Viewer, Chrome PDF Viewer, Chromium PDF Viewer, Microsoft Edge PDF Viewer, WebKit built-in PDF",
		"javaEnabled":false,
		"javascriptEnabled":true,
		"browserLanguage":"it-IT",
		"browserTimeZone":"Europe/Rome",
		"browserTimeZoneOffset":-120,
		"browserAcceptHeader":"gzip",
        "browserIpAddress":"x.x.x.x"
	}

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

The following parameters are also passed during the authentication via the 3DS2 protocol:

RequiredNameTypeDescription
OptionalthreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSVer2FinishUrlString [1..512]URL where Customer should be redirected after authentication on ACS Server.
OptionalthreeDSMethodNotificationUrlString [1..512]URL where notification about performed 3DS-method should be sent to.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalinfoStringIf response is successful. Result of a payment attempt. Below are the possible values.
  • Your payment has been processed, redirecting...
  • Operation declined. Check the entered data and that there are enough funds on the card and repeat the operation. Redirecting...
  • Sorry, payment cannot be completed. Redirecting...
  • Operation declined. Contact the merchant. Redirecting...
  • Operation declined. Contact the bank that issued the card. Redirecting...
  • Impossible operation. Cardholder authentication completed unsuccessfully. Redirecting...
  • No connection with bank. Try again later. Redirecting...
  • Input time expired. Redirecting...
  • No response from bank received. Try again later. Redirecting...
OptionalredirectString [1..512]This parameter is returned if the payment is successful and that payment did not include check for 3-D Secure involvement. Merchants can use it if they want to redirect the user to the payment gateway page. If they have their own response page then this value can be ignored.
OptionaltermUrlString [1..512]In a successful response in case of a 3D-Secure payment. The URL address to which ACS redirects the cardholder after authentication. For details see Redirect to ACS.
OptionalacsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
OptionalpaReqString [1..255]PAReq (Payment Authentication Request) - a message that should be sent to ACS together with redirect. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This message contains the Base64-encoded data necessary for the cardholder authentication. For details see Redirect to ACS.

payerData element contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

When authenticating via the 3DS2 protocol, the following parameters are returned during the initial request:

RequiredNameTypeDescription
Mandatoryis3DSVer2BooleanPossible values: true or false. Flag showing that payment uses 3DS2.
MandatorythreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSMethodUrlString [1..512]URL of ACS Server for gathering browser data.
MandatorythreeDSMethodUrlServerString [1..512]URL of 3DS Server for gathering browser data to be included in the AReq (Authentication Request) from 3DS Server to ACS Server.
OptionalthreeDSMethodDataPackedString [1..1024]Base-64-encoded data of CReq (Challenge Response) to be sent to ACS Server.
OptionalthreeDSMethodURLServerDirectString [1..512]URL of 3dsmethod.do for executing the 3DS method on 3DS Server via Payment Gateway (subject to respective Merchant-level permission).

Below are the parameters to be present in the response, after a repeated request for the payment and the need to redirect the client to the ACS during the authentication via the 3DS2 protocol:

RequiredNameTypeDescription
ConditionalacsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
ConditionalpackedCReqStringPacked challenge request data. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This value should be used as the ACS link creq parameter (acsUrl) to redirect the client to the ACS. For details see Redirect to ACS.

Examples

Request example

Example of the first request:

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/paymentorder.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data MDORDER=64d3b8c2-5d87-7d92-bd20-d8db011b4f5b \
  --data '$PAN=4000001111111118' \
  --data '$CVC=123' \
  --data YYYY=2030 \
  --data MM=12 \
  --data 'TEXT=TEST CARDHOLDER' \
  --data language=en \
  --data 'jsonParams={"param_1_name":"param_1_value","param_2_name":"param_2_value"}'

Example of the second request:

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/paymentorder.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data MDORDER=64d3b8c2-5d87-7d92-bd20-d8db011b4f5b \
  --data '$PAN=4000001111111118' \
  --data '$CVC=123' \
  --data YYYY=2030 \
  --data MM=12 \
  --data 'TEXT=TEST CARDHOLDER' \
  --data language=en \
  --data threeDSServerTransID=5802746e-3393-40c3-929a-dc966ebf08c6

Response examples

Example of the response to the first request:

{
  "errorCode": 0,
  "is3DSVer2": true,
  "threeDSServerTransId": "5802746e-3393-40c3-929a-dc966ebf08c6",
  "threeDSMethodURL": "https://example.com/acs2/acs/3dsMethod",
  "threeDSMethodURLServer": "example.com/3dsserver/api/v1/client/gather?threeDSServerTransID=5802746e-3393-40c3-929a-dc966ebf08c6",
  "threeDSMethodDataPacked": "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9hY3F1aXJlci5jb20vM2Rzc2VydmVyL2FwaS92MS9hY3Mvbm90aWZpY2F0aW9uP3RocmVlRFNTZXJ2ZXJUcmFuc0lEPTNhZmMxNjhhLTk0YjQtNGViMy04ZTJlLTgwZjZjMTg2NjY5ZCIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiM2FmYzE2OGEtOTRiNC00ZWIzLThlMmUtODBmNmMxODY2NjlkIn0="
}

Example of the response to the second request:

{
  "info": "Your order is proceeded, redirecting...",
  "errorCode": 0,
  "acsUrl": "https://example.com/acs2/acs/creq",
  "is3DSVer2": true,
  "packedCReq": "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjU4MDI3NDZlLTMzOTMtNDBjMy05MjlhLWRjOTY2ZWJmMDhjNiIsIm1lc3NhZ2VUeXBlIjoiQ1JlcSIsIm1lc3NhZ2VWZXJzaW9uIjoiMi4xLjAiLCJhY3NUcmFuc0lEIjoiODFmZTU1ODUtZmZhOS00Y2NkLTljMjAtY2QzYWFiZDQwNTllIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1In0"
}

Payment for order (external 3DS Server)

In order to use paymenOrder.do request in external 3DS Server mode, you need to perform 3DS authentication using your own 3DS Server.
Also, you need an additional permission managed by Support.

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatoryMDORDERString [1..36]Order number in the payment gateway.
Mandatory$PANInteger [1..19]Payment card number. Mandatory, if seToken is not passed.
Mandatory$CVCString [3]CVC/CVV2 code on the back of a payment card. Mandatory, if seToken is not passed.
Only digits are allowed.
MandatoryYYYYInteger [4]Payment card expiry year. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
MandatoryMMInteger [2]Payment card expiry month. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
Conditional$EXPIRYInteger [6]Card expiration in the following format: YYYYMM. Overrides YYYY and MM parameters. If seToken is not passed, it is mandatory to pass either $EXPIRY or YYYY and MM.
ConditionalseTokenStringEncrypted card data that replaces $PAN, $CVC, and $EXPIRY (or YYYY,MM) parameters. Must be passed if used instead of the card data.
The mandatory parameters for seToken string are timestamp, UUID, PAN, EXPDATE, MDORDER. Click here for more information about seToken generation.
If seToken contains encrypted data about a stored credential (bindingId), the paymentOrderBinding.do request should be used for payment instead of paymentorder.do.
MandatoryTEXTString [1..512]Cardholder name.
MandatorylanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionalbindingNotNeededBooleanAllowed values:
  • true – storing the credential after the payment is disabled (a stored credential is a customer identifier passed in order registration request — after payment it will be deleted from order details);
  • false – if payment is successful the credential can be stored (if the necessary conditions are met). This is the default value.
OptionaljsonParamsObjectA set of additional free-form attributes, structure: jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}.
These fields can be passed to the Processing Center for further processing (additional setup is needed, please contact Support).
If you use your own 3DS Server the payment gateway expects that every paymentOrder request will include the following additional parameters such as eci, cavv, xid etc. Please refer here for more information.
To initiate 3RI authentication in case when there is no stored credentials, you may need to pass a number of additional parameters (see 3RI authentication for details).
Some pre-defined jsonParams attributes:
  • backToShopUrl - adds checkout page button that will take a cardholder back to the assigned merchant web-site URL
  • backToShopName - customizes default "Back to shop" button text label if used along with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Is required for creating a recurrent or installment stored credential.
  • recurringExpiry - the date after which authorizations are not allowed, in YYYYMMDD format. Recommended for creating a recurrent or installment stored credential (mandatory for 3DS2)
OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values
OptionalthreeDSProtocolVersionString3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.
OptionalclientBrowserInfoObjectA block with the data about the client's browser that is sent to ACS during the 3DS authentication. To pass this block, you should have a special setting (contact the support team). See nested parameters.
OptionalpostAddressString [1..255]Delivery address.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
FUnscheduled CITSubsequentCustomerCustomer selects card instead of manual entryNoAn e-commerce transaction that uses a stored credential.
UUnscheduled MITSubsequentMerchantNo manual entry, Merchant passes the dataNoAn e-commerce transaction that uses a stored credential. Used for one-phase payments only.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
RRecurrent MITSubsequentMerchantNo manual entry, Merchant passes the dataNoA recurrent transaction that uses a stored credential. Used for one-phase payments only.

Below are the parameters of the clientBrowserInfo block (data about the client's browser).

RequiredNameTypeDescription
OptionaluserAgentString [1..2048]Browser agent.
OptionalOSStringOperation system.
OptionalOSVersionStringOperation system version.
OptionalbrowserAcceptHeaderString [1..2048]The Accept header that tells the server what file formats (or MIME-types) the browser accepts.
OptionalbrowserIpAddressString [1..45]Browser IP address.
OptionalbrowserLanguageString [1..8]Browser language.
OptionalbrowserTimeZoneStringBrowser time zone.
OptionalbrowserTimeZoneOffsetString [1..5]The time zone offset in minutes between the user's local time and UTC.
OptionalcolorDepthString [1..2]Screen color depth, in bits.
OptionalfingerprintStringBrowser fingerprint - a unique digital identifier of the browser.
OptionalisMobileBooleanPossible values: true or false. Flag showing that a mobile device is used.
OptionaljavaEnabledBooleanPossible values: true or false. Flag showing that java is enabled in the browser.
OptionaljavascriptEnabledBooleanPossible values: true or false. Flag showing that javascript is enabled in the browser.
OptionalpluginsStringComma-separated list of plugins the browser uses.
OptionalscreenHeightInteger [1..6]Screen height, in pixels.
OptionalscreenWidthInteger [1..6]Screen width, in pixels.
OptionalscreenPrintStringData about current screen print including resolution, color depth, display metrics.
OptionaldeviceStringInformation about the cardholder's device (model, version, and so on).
OptionaldeviceTypeStringType of device on which the browser is running (mobile phone, desktop, tablet, and so on).

Example of clientBrowserInfo block:

"clientBrowserInfo":
    {
		"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
		"fingerprint":850891523,
		"OS":"Windows",
		"OSVersion":"10",
		"isMobile":false,
		"screenPrint":"Current Resolution: 1536x864, Available Resolution: 1536x824, Color Depth: 24, Device XDPI: undefined, Device YDPI: undefined",
		"colorDepth":24,
		"screenHeight":"864",
		"screenWidth":"1536",
		"plugins":"PDF Viewer, Chrome PDF Viewer, Chromium PDF Viewer, Microsoft Edge PDF Viewer, WebKit built-in PDF",
		"javaEnabled":false,
		"javascriptEnabled":true,
		"browserLanguage":"it-IT",
		"browserTimeZone":"Europe/Rome",
		"browserTimeZoneOffset":-120,
		"browserAcceptHeader":"gzip",
        "browserIpAddress":"x.x.x.x"
	}

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalinfoStringIf response is successful. Result of a payment attempt. Below are the possible values.
  • Your payment has been processed, redirecting...
  • Operation declined. Check the entered data and that there are enough funds on the card and repeat the operation. Redirecting...
  • Sorry, payment cannot be completed. Redirecting...
  • Operation declined. Contact the merchant. Redirecting...
  • Operation declined. Contact the bank that issued the card. Redirecting...
  • Impossible operation. Cardholder authentication completed unsuccessfully. Redirecting...
  • No connection with bank. Try again later. Redirecting...
  • Input time expired. Redirecting...
  • No response from bank received. Try again later. Redirecting...

Examples

Request example

curl --request POST \\
  --url https://uat.dskbank.bg/payment/rest/paymentorder.do \\
  --header 'content-type: application/x-www-form-urlencoded' \\
  --data userName=test_user \\
  --data password=test_user_password \\
  --data MDORDER=0140dda0-71ed-7706-a61f-36bd00a7d8c0 \\
  --data '$PAN=4000001111111118' \\
  --data '$CVC=123' \\
  --data YYYY=2030 \\
  --data MM=12 \\
  --data 'TEXT=TEST CARDHOLDER' \\
  --data language=en \\
  --data 'jsonParams={
  "eci": "02",
  "cavv": "AkZO5XQAA0rhBxoaufa+MAABAAA=",
  "xid": "5010857f-8d3f-74e1-9c5a-54a000cc4110",
  "threeDSProtocolVersion": "2.2.0",
  "threeDsType": "5"
}'

Response example

{
  "redirect": "https://uat.dskbank.bg/payment/merchants/temp/finish.html?orderId=01493844-d4d3-703f-9f7e-a73900a7d8c0&lang=en",
  "info": "Your order is proceeded, redirecting...",
  "errorCode": 0
}

Payment for an Industry Practice transaction order

To pay for an order with Industry Practice transaction characteristics, use the request https://uat.dskbank.bg/payment/industryPractice/paymentOrder.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
MandatoryoriginalMdOrderString [1..36]The number of the original order in the Payment Gateway for which Industry Practice payment is made.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
ConditionalamountInteger [0..12]Payment amount in minor currency units (e.g. in cents) of original payment for Incremental, Delayed Charges, No show operations.
The parameter is required for the Incremental, Delayed Charges, No show operations. The parameter must not be specified for Resubmission and Reauthorization.
OptionaljsonParamsObjectObject containing the attributes used to pass additional parameters. See below.
The former params parameter is an alias to this parameter (i.e., the requests with params also work).
MandatorytiiStringThe initiator ID of the transaction. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant).
OptionalfeaturesStringFeatures of the order. To specify multiple features, use this parameter several times in one request. As an example, below are the possible values.
  • VERIFY - If you specify this value in the order registration request, cardholder will be verified however they will not be charged any amount, so in this case amount parameter can be 0. Verification allows to make sure that a payment card is used by its legitimate owner, and further you can charge them without authentication (CVC, 3D-Secure). Even if some amount is passed in the request, the customer will not be charged if VERIFY feature is used. This value can be also used for storing the credential – in this case, the clientId parameter must be passed as well. Read more here.
  • FORCE_TDS - Force 3-D Secure payment. If a payment card does not support 3-D Secure, the transaction will fail.
  • FORCE_SSL - Force SSL payment (without 3-D Secure).
  • FORCE_FULL_TDS - After 3-D Secure authentication, PaRes status must be Y, which guarantees successful user authentication. Otherwise, the transaction will fail.
  • FORCE_CREATE_BINDING - passing this feature in the order registration request forcefully stores the credential. This functionality must be enabled by Merchant level permission in the Gateway. This value cannot be passed in a request with an existing bindingId or bindingNotNeeded = true (will cause validation error). When this feature is passed, the clientId parameter must be passed as well. If you pass both FORCE_CREATE_BINDING and VERIFY features, the order will be created for storing the credential ONLY (without payment).

Possible values of tii:

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionNote
IPIIndustry Practice Incremental (MIT)SubsequentMerchantNot entered, loaded from the corresponding transaction record stored credential in the payment gateway.A transaction to increase the payment amount within an already paid order.
IPSIndustry Practice Resubmission (MIT)SubsequentMerchantNot entered, loaded from the corresponding transaction record stored credential in the payment gateway.A transaction attempting to repay when the original payment failed.
IPDIndustry Practice Delayed Charges (MIT)SubsequentMerchantNot entered, loaded from the corresponding transaction record stored credential in the payment gateway.Delayed charges.
IPAIndustry Practice Reauthorization (MIT)SubsequentMerchantNot entered, loaded from the corresponding transaction record stored credential in the payment gateway.Retry authorization if completion or execution of original order exceeds Visa/MC authorization validity period.
IPNIndustry Practice No Show (MIT)SubsequentMerchantNot entered, loaded from the corresponding transaction record stored credential in the payment gateway.Performed by Merchants to issue fines to the Client for no-show when booking hotels and Car Sharing.

The jsonParams block contains additional information fields for later storage. To pass N parameters, a request must contain N jsonParams tags, where the name attribute contains the parameter name and value attribute contains its value:

RequiredNameTypeDescription
MandatorynameString [1..255]Name of an additional parameter.
MandatoryvalueString [1..1024]Value of an additional parameter - up to 1024 characters.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalmdOrderString [1..36]The number of the order in the payment gateway with the payment completed by Industry Practice.
OptionalactionCodeStringResponse code from the processing bank. Contains a numeric value. See the list of action codes here.
OptionalapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
OptionalrrnInteger [1..12]Reference Retrieval Number - transaction ID assigned by Acquiring Bank.

Examples

Request example

curl --request POST \\
  --url https://uat.dskbank.bg/payment/industryPractice/paymentOrder.do \\
  --header 'content-type: application/x-www-form-urlencoded' \\
  --data '{
    "originalMdOrder":"f252eee4-5598-728a-a023-af6e09078dd0",
    "orderNumber":"testOrderNumber1",
    "tii":"IPI",
    "amount":"10",
    "username":"test_user",
    "password":"test_user_password"
}'

Response example - successfull industry practice payment

{
  "errorCode": "0",
  "errorMessage": "Successful",
  "mdOrder": "d88680c4-54e9-7115-80ae-3cc709017350",
  "actionCode": "0",
  "approvalCode": "000000",
  "rrn": "111111111113"
}

Response example - Unsuccessful industry practice payment (processing returned a failure)

{
  "errorCode": "5",
  "errorMessage": "Unsuccessful",
  "mdOrder": "d88680c4-54e9-7115-80ae-3cc709017350",
  "actionCode": "116",
  "approvalCode": "000000",
  "rrn": "111111111113"
}

Unsuccessful industry practice payment (for example, validation error)

{
  "errorCode": "5",
  "errorMessage": "Operation is not allowed for original order"
}

Instant payment

The request used to register an order and at the same time carry out the payment for it is https://uat.dskbank.bg/payment/rest/instantPayment.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
MandatorycurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionalbindingNotNeededBooleanAllowed values:
  • true – storing the credential after the payment is disabled (a stored credntial is a customer identifier passed in order registration request — after instantPayment.do request it will be deleted from order details);
  • false – if payment is successful the credential can be stored (if the necessary conditions are met). This is the default value.
ConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each merchant registered in the payment gateway . If the Order number is generated on the Payment Gateway side, this parameter is not mandatory.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
ConditionaloriginalSchemeTransactionIdString [1..22]The identifier of the original successful Mastercard transaction.
Is mandatory when using merchant's stored credentials in stored credential transfers.
OptionalpreAuthBooleanParameter that defines the necessity of a pre-authorization (putting the amount on hold on the customer's account until its debiting). The following values are available:
  • true - two-phase payments enabled;
  • false - one-phase payments enabled (money are charged right away).
If the parameter is missing, one-phase payment is made.
OptionalpanString [15..19]Payment card number (mandatory, unless bindinId is passed). pan overrides bindingId.
OptionalcvcString [3]The presence of this parameter is determined by payment type:
  • cvc is provided not for all tokenized payments;
  • cvc is not provided for MIT payments;
  • cvc is mandatory by default for all other payment types; but if permission Can process payments without confirmation of CVC is enabled, cvc becomes optional in that case.

Only digits are allowed.
OptionalcardholderNameString [2..45]Cardholder's name in Latin characters. This parameter is passed only after an order is paid.
Such special characters as space, full stop, hyphen, apostrophe ( . - ') can be used. The use of other characters is prohibited.
OptionalmerchantLoginString [1..255]To register an order and carry out payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
OptionalsessionTimeoutSecsInteger [1..9]Order lifetime in seconds. If the parameter is not specified, the value specified in the merchant settings or the default value (1200 seconds = 20 minutes) will be used. If the request contains expirationDate, the value of sessionTimeoutSecs is not taken into account.
OptionalautocompletionDateString [19]The date and time when the two-phase payment must be completed automatically in the following format: 2025-12-29T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalautoReverseDateString [19]The date and time when the two-phase payment must be reversed automatically in the following format: 2025-06-23T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalexpirationDateString [19]Date and time of the order expiry. Format used: yyyy-MM-ddTHH:mm:ss.
If this parameter is not passed in the request, sessionTimeoutSecs is used to define the expiry of the order.
ConditionalseTokenString [1..8192]Encrypted card data that replaces $PAN, $CVC, and $EXPIRY (or YYYY,MM) parameters. Must be passed if used instead of the card data.
The mandatory parameters for seToken string are timestamp, UUID, bindingId(or PAN,EXPDATE). Click here for more information about seToken generation.
MandatoryreturnUrlString [1..512]The address to which the user will be redirected if the payment is successful. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionalfailUrlString [1..512]The address to which the user is to be redirected in case of a failed payment. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionaljsonParamsObjectA set of additional free-form attributes, structure: jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}.
These fields can be passed to the Processing Center for further processing (additional setup is needed, please contact Support).
If you use your own 3DS Server the payment gateway expects that every paymentOrder request will include the following additional parameters such as eci, cavv, xid etc. Please refer here for more information.
To initiate 3RI authentication in case when there is no stored credentials, you may need to pass a number of additional parameters (see 3RI authentication for details).
Some pre-defined jsonParams attributes:
  • backToShopUrl - adds checkout page button that will take a cardholder back to the assigned merchant web-site URL
  • backToShopName - customizes default "Back to shop" button text label if used along with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Is required for creating a recurrent or installment stored credential.
  • recurringExpiry - the date after which authorizations are not allowed, in YYYYMMDD format. Recommended for creating a recurrent or installment stored credential (mandatory for 3DS2)
OptionalfeaturesStringFeatures of the order. To specify multiple features, use this parameter several times in one request. As an example, below are the possible values.
  • VERIFY - If you specify this value in the order registration request, cardholder will be verified however they will not be charged any amount, so in this case amount parameter can be 0. Verification allows to make sure that a payment card is used by its legitimate owner, and further you can charge them without authentication (CVC, 3D-Secure). Even if some amount is passed in the request, the customer will not be charged if VERIFY feature is used. This value can be also used for storing the credential – in this case, the clientId parameter must be passed as well. Read more here.
  • FORCE_TDS - Force 3-D Secure payment. If a payment card does not support 3-D Secure, the transaction will fail.
  • FORCE_SSL - Force SSL payment (without 3-D Secure).
  • FORCE_FULL_TDS - After 3-D Secure authentication, PaRes status must be Y, which guarantees successful user authentication. Otherwise, the transaction will fail.
  • FORCE_CREATE_BINDING - passing this feature in the order registration request forcefully stores the credential. This functionality must be enabled by Merchant level permission in the Gateway. This value cannot be passed in a request with an existing bindingId or bindingNotNeeded = true (will cause validation error). When this feature is passed, the clientId parameter must be passed as well. If you pass both FORCE_CREATE_BINDING and VERIFY features, the order will be created for storing the credential ONLY (without payment).
OptionalorderBundleObjectObject containing cart of items. The description of the nested elements is given below.
OptionaldynamicCallbackUrlString [1..512]This parameter allows you to use the functionality of sending callback notifications dynamically. Here you can pass the address to which all "payment" callback notifications activated for the merchant will be sent. "Payment" notifications are callback notifications related to the following events: successful hold, payment declined by timeout, cardpresent payment is declined, successful debit, refund, cancellation. At the same time, callback notifications activated for the merchant that are not related to payments (enabling/disabling a stored credential, storing a credential) will be sent to a static address for callbacks. Whether the parameter is mandatory or not depends on the merchant configuration on Payment Gateway side.
OptionalthreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSVer2FinishUrlString [1..512]URL where Customer should be redirected after authentication on ACS Server.
OptionalthreeDSMethodNotificationUrlString [1..512]URL where notification about performed 3DS-method should be sent to.
ConditionalthreeDSVer2MdOrderString [1..36]Order number which was registered in the first part of the request within 3DS2 transaction. Mandatory for 3DS2 authentication.
If this parameter is present in the request, the mdOrder value passed in it overrides, and in this case the order gets paid right away instead of being registered.
This parameter is used only for instant payments, i.e., when the order is registered and payed via the same request.
OptionalthreeDSSDKBooleanPossible values: true or false. Flag showing that payment comes from 3DS SDK.
OptionalthreeDSProtocolVersionString3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
OptionalexpiryInteger [6]Card expiration in the following format: YYYYMM. Mandatory, if neither seToken nor bindingId is passed.
OptionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values
ConditionaloriginalPaymentNetRefNumString [1..36]The identifier of the original or previous successful transaction in the payment system in relation to the performed stored-credential transaction - TRN ID. Is passed when tii = R,U, or F.
Is mandatory when using merchant's stored credentials in stored credential transfers.
ConditionaloriginalPaymentDateStringDate of initiating transaction. The format is Unix timestamp, in milliseconds. Is passed when tii = R,U, or F.
OptionalpostAddressString [1..255]Delivery address.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalexternalScaExemptionIndicatorStringThe type of SCA (Strong Customer Authentication) excemption. If this parameter is specified, the transaction will be processed depending on your settings in the payment gateway: either forced SSL operation will be done, or the issuer bank will get the information about SCA excemption and decide to perform operation with or without 3DS authentication (for details, contact our support team). Allowed values:
  • LVP – Low Value Payments transaction. You can consider a transaction as low risk based on the transaction amount, the client's transactions per day or the client's total daily amount.
  • TRA – Transaction Risk Analysis transaction, i.e., the transaction that has passed successful anti-fraud check.

To pass this parameter, you must have sufficient permissions in the payment gateway.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalclientBrowserInfoObjectA block with the data about the client's browser that is sent to ACS during the 3DS authentication. To pass this block, you should have a special setting (contact the support team). See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.

Description of parameters in orderBundle object:

RequiredNameTypeDescription
OptionalorderCreationDateString [19]Order creation date in the following format: YYYY-MM-DDTHH:MM:SS.
OptionalcustomerDetailsObjectBlock containing customer attributes. The description of the tag attributes is given below.
MandatorycartItemsObjectObject containing cart items attributes. The description of nested elements is given below.

Description of parameters in customerDetails object:

RequiredNameTypeDescription
OptionalcontactString [0..40]Customer's preferred way of communication.
OptionalfullNameString [1..100]Payer's full name.
OptionalpassportString [1..100]Customer's passport serial number in the following format: 2222888888.
OptionaldeliveryInfoObjectObject containing delivery address attributes. The description of the nested elements is given below.

Description of parameters in deliveryInfo object.

RequiredNameTypeDescription
OptionaldeliveryTypeString [1..20]Delivery method.
MandatorycountryString [2]Two letter code of the country of delivery.
MandatorycityString [0..40]City of destination.
MandatorypostAddressString [1..255]Delivery address.

Description of parameters in cartItems object.

RequiredNameTypeDescription
MandatoryitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Description of parameters in itemDetailsParams object.

RequiredNameTypeDescription
MandatoryvalueString [1..2000]Additional item info.
MandatorynameString [1..255]Name of the parameter describing the details of an item

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
FUnscheduled CITSubsequentCustomerCustomer selects card instead of manual entryNoAn e-commerce transaction that uses a stored credential.
UUnscheduled MITSubsequentMerchantNo manual entry, Merchant passes the dataNoAn e-commerce transaction that uses a stored credential. Used for one-phase payments only.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
RRecurrent MITSubsequentMerchantNo manual entry, Merchant passes the dataNoA recurrent transaction that uses a stored credential. Used for one-phase payments only.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Below are the parameters of the clientBrowserInfo block (data about the client's browser).

RequiredNameTypeDescription
OptionaluserAgentString [1..2048]Browser agent.
OptionalOSStringOperation system.
OptionalOSVersionStringOperation system version.
OptionalbrowserAcceptHeaderString [1..2048]The Accept header that tells the server what file formats (or MIME-types) the browser accepts.
OptionalbrowserIpAddressString [1..45]Browser IP address.
OptionalbrowserLanguageString [1..8]Browser language.
OptionalbrowserTimeZoneStringBrowser time zone.
OptionalbrowserTimeZoneOffsetString [1..5]The time zone offset in minutes between the user's local time and UTC.
OptionalcolorDepthString [1..2]Screen color depth, in bits.
OptionalfingerprintStringBrowser fingerprint - a unique digital identifier of the browser.
OptionalisMobileBooleanPossible values: true or false. Flag showing that a mobile device is used.
OptionaljavaEnabledBooleanPossible values: true or false. Flag showing that java is enabled in the browser.
OptionaljavascriptEnabledBooleanPossible values: true or false. Flag showing that javascript is enabled in the browser.
OptionalpluginsStringComma-separated list of plugins the browser uses.
OptionalscreenHeightInteger [1..6]Screen height, in pixels.
OptionalscreenWidthInteger [1..6]Screen width, in pixels.
OptionalscreenPrintStringData about current screen print including resolution, color depth, display metrics.
OptionaldeviceStringInformation about the cardholder's device (model, version, and so on).
OptionaldeviceTypeStringType of device on which the browser is running (mobile phone, desktop, tablet, and so on).

Example of clientBrowserInfo block:

"clientBrowserInfo":
    {
		"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
		"fingerprint":850891523,
		"OS":"Windows",
		"OSVersion":"10",
		"isMobile":false,
		"screenPrint":"Current Resolution: 1536x864, Available Resolution: 1536x824, Color Depth: 24, Device XDPI: undefined, Device YDPI: undefined",
		"colorDepth":24,
		"screenHeight":"864",
		"screenWidth":"1536",
		"plugins":"PDF Viewer, Chrome PDF Viewer, Chromium PDF Viewer, Microsoft Edge PDF Viewer, WebKit built-in PDF",
		"javaEnabled":false,
		"javascriptEnabled":true,
		"browserLanguage":"it-IT",
		"browserTimeZone":"Europe/Rome",
		"browserTimeZoneOffset":-120,
		"browserAcceptHeader":"gzip",
        "browserIpAddress":"x.x.x.x"
	}

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of processing;
  • another positive number value - indicates an error for more details of which error parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorString [1..512]Error message (if response returned an error) in the language passed in the request.
OptionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
OptionalinfoStringIf response is successful. Result of a payment attempt. Below are the possible values.
  • Your payment has been processed, redirecting...
  • Operation declined. Check the entered data and that there are enough funds on the card and repeat the operation. Redirecting...
  • Sorry, payment cannot be completed. Redirecting...
  • Operation declined. Contact the merchant. Redirecting...
  • Operation declined. Contact the bank that issued the card. Redirecting...
  • Impossible operation. Cardholder authentication completed unsuccessfully. Redirecting...
  • No connection with bank. Try again later. Redirecting...
  • Input time expired. Redirecting...
  • No response from bank received. Try again later. Redirecting...
OptionalredirectString [1..512]This parameter is returned if the payment is successful and that payment did not include check for 3-D Secure involvement. Merchants can use it if they want to redirect the user to the payment gateway page. If they have their own response page then this value can be ignored.
OptionaltermUrlString [1..512]In a successful response in case of a 3D-Secure payment. The URL address to which ACS redirects the cardholder after authentication. For details see Redirect to ACS.
OptionalacsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
OptionalpaReqString [1..255]PAReq (Payment Authentication Request) - a message that should be sent to ACS together with redirect. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This message contains the Base64-encoded data necessary for the cardholder authentication. For details see Redirect to ACS.
ConditionalorderStatusObjectContains order status parameters and is returned only if the payment gateway has recognized all request parameters as correct. See the description below.

When authenticating via the 3DS2 protocol, the following parameters are returned during the initial request:

RequiredNameTypeDescription
Mandatoryis3DSVer2BooleanPossible values: true or false. Flag showing that payment uses 3DS2.
MandatorythreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSMethodUrlString [1..512]URL of ACS Server for gathering browser data.
MandatorythreeDSMethodUrlServerString [1..512]URL of 3DS Server for gathering browser data to be included in the AReq (Authentication Request) from 3DS Server to ACS Server.
OptionalthreeDSMethodDataPackedString [1..1024]Base-64-encoded data of CReq (Challenge Response) to be sent to ACS Server.
OptionalthreeDSMethodURLServerDirectString [1..512]URL of 3dsmethod.do for executing the 3DS method on 3DS Server via Payment Gateway (subject to respective Merchant-level permission).

payerData element contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

orderStatus block contains the following elements.

RequiredNameTypeDescription
OptionalErrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of processing;
  • another number value (1-99) - indicates an error for more details of which ErrorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalErrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. ErrorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalOrderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each merchant.
OptionalOrderStatusIntegerThe value of this parameter specifies the status of the order in the payment gateway. It is missing if the order has not been found. Below is the list of available values:
  • 0 - order was registered but not paid;
  • 1 - pre-authorized amount is on hold on the buyer's account (for two-phase payments);
  • 2 - order amount is fully authorized;
  • 3 - authorization canceled;
  • 4 - transaction was refunded;
  • 5 - access control server of the issuing bank initiated authorization procedure;
  • 6 - authorization declined.
  • 7 - pending order payment;
  • 8 - intermediate completion for multiple partial completion.
OptionalexpirationInteger [6]Card expiration date in the following format: YYYYMM.
OptionalcardholderNameString [1..26]Cardholder's name (if available).
OptionalapprovedAmountInteger [0..12]Amount in minimum currency units (e.g. cents) that was put on hold on buyer's account. Used in two-phase payments only.
OptionaldepositAmountInteger [1..12]Charged amount in minimum currency units (e.g., in cents).
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
OptionalauthCodeInteger [6]Deprecated parameter (not used). Its value is always 2 regardless the order status and authorization code of the processing system.
OptionalPanString [1..19]Masked number of the card that has been used for the payment. This parameter is to be specified only after the order has been paid. When paying via Apple Pay, DPAN is used as card number - it is a number linked to customer's mobile device that functions as a payment card number in the Apple Pay system.
OptionalamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalIpString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionaloriginalActionCodeString [1..15]Response code received from the processing system. To enable receiving this field, contact the technical support service.
OptionalrrnInteger [1..12]Reference Retrieval Number - transaction ID assigned by Acquiring Bank.
OptionalpaymentNetRefNumString [1..512]Original Network Reference Number - a unique identifier assigned by the card network (e.g., Mastercard, Visa) to the original transaction (such as a purchase or authorization). When a follow-up transaction is initiated (e.g., refund, recurring payment), this number must be included to:
  • Link the new transaction to the original one
  • Ensure proper tracking and reconciliation
  • Meet network compliance requirements

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/payment/rest/instantPayment.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data amount=100 \
--data currency=975 \
--data description=my_first_order \
--data orderNumber=1218637308 \
--data pan=4000001111111118 \
--data cvc=123 \
--data expiry=203012 \
--data cardholderName="TEST CARDHOLDER" \
--data email="demo@example.com" \
--data phone="+449998887766" \
--data language=en \
--data returnUrl=https://mybestmerchantreturnurl.com \
--data failUrl=https://mybestmerchantreturnurl.com

Response example

{
    "errorCode": "0",
    "orderId": "eee72f6e-b980-79c5-92e8-6f4200b1eae0",
    "info": "Your order is proceeded, redirecting...",
    "redirect": "https://www.test.com/payment/merchants/gateway/finish.html?orderId=eee72f6e-b980-79c5-92e8-6f4200b1eae0&lang=en",
    "orderStatus": {
        "expiration": "202412",
        "cardholderName": "TEST CARDHOLDER",
        "depositAmount": 100,
        "currency": "975",
        "approvalCode": "123456",
        "authCode": 2,
        "originalActionCode": "S1",
        "rrn": "311489272111",
        "ErrorCode": "0",
        "ErrorMessage": "Success",
        "OrderStatus": 2,
        "OrderNumber": "2011",
        "Pan": "500000**1115",
        "Amount": 100,
        "Ip": "x.x.x.x"
    }
}

Redirect to ACS (simplified)

If 3-D Secure is required, then, after receiving payment response, the customer must be redirected to ACS. In this case, the payment response contains the acsUrl parameter that will be used for the redirect.

The https://uat.dskbank.bg/payment/acsRedirect.do?orderId={orderId} request allows to redirect a customer to the ACS authentication page in a simplified way - just using orderId parameter received after an order registration.

It is also possible to redirect a customer to ACS with a POST request (regular redirect). The description of this method can be found here.

Without other actions required from customer, the payment gateway redirects them to the ACS page, where customer authenticates.

Then, depending on the authentication result, the customer is redirected to the following URL:

To redirect a customer to the ACS, use the following URL:

https://uat.dskbank.bg/payment/acsRedirect.do?orderId={Order number in the payment gateway}

Request parameters

RequiredNameTypeDescription
MandatoryorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.

Response parameters

Example

Request example

curl -X GET https://uat.dskbank.bg/payment/acsRedirect.do?orderId=85eb9a84-2a47-7cca-b0ae-662c000016d1

Redirect URL example

https://mybestmerchantreturnurl.com/?orderId=85eb9a84-2a47-7cca-b0ae-662c000016d1

Wallets

Apple Pay order registration

The https://uat.dskbank.bg/payment/applepay/payment.do request is used to register and pay for the order.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
MandatorymerchantString [1..255]To register an order and carry out payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionaladditionalParametersObjectAdditional parameters of the order that are stored in the merchant personal area for the subsequent viewing. Each new pair of a parameter name and its value must be separated by a comma. Below is a usage example.
{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
When storing a credential, this tag can contain parameters that specify the type of the stored credential. See the list of parameters.
OptionalpreAuthBooleanParameter that defines the necessity of a pre-authorization (putting the amount on hold on the customer's account until its debiting). The following values are available:
  • true - two-phase payments enabled;
  • false - one-phase payments enabled (money are charged right away).
If the parameter is missing, one-phase payment is made.
OptionalautocompletionDateString [19]The date and time when the two-phase payment must be completed automatically in the following format: 2025-12-29T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalautoReverseDateString [19]The date and time when the two-phase payment must be reversed automatically in the following format: 2025-06-23T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
MandatorypaymentTokenString [1..8192]The paymentToken parameter must contain a Base64 encoded value of the paymentData property that was received in PKPaymentToken Object from the Apple Pay system (see https://developer.apple.com/library/content/documentation/PassKit/Reference/PaymentTokenJSON/PaymentTokenJSON.html). Thus, to make a request to the payment gateway, the merchant must:
  1. get PKPaymentToken Object containing paymentData from Apple Pay;
  2. extract paymentData value and encode it in Base64;
  3. include the encoded value of the paymentData property as the value of the paymentToken parameter in the payment request that the merchant sends to the payment gateway.
OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values.
ConditionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
ConditionalphoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalthreeDSProtocolVersionString3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
OptionalexternalScaExemptionIndicatorStringThe type of SCA (Strong Customer Authentication) excemption. If this parameter is specified, the transaction will be processed depending on your settings in the payment gateway: either forced SSL operation will be done, or the issuer bank will get the information about SCA excemption and decide to perform operation with or without 3DS authentication (for details, contact our support team). Allowed values:
  • LVP – Low Value Payments transaction. You can consider a transaction as low risk based on the transaction amount, the client's transactions per day or the client's total daily amount.
  • TRA – Transaction Risk Analysis transaction, i.e., the transaction that has passed successful anti-fraud check.

To pass this parameter, you must have sufficient permissions in the payment gateway.

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored. This value is possible to pass only if the "Vendor pays common bindings creation is allowed" permission is enabled.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Response parameters

RequiredNameTypeDescription
MandatorysuccessBooleanMain parameter which indicates directly that the request was successful. The following values are available:
  • true - request processed successfully;
  • false - request failed.

Note that the value true here simply means that the request was proccessed, not that the order was paid.
Read here to find out how to get payment status.
ConditionaldataObjectThis parameter is returned only if the payment is processed successfully. See the description below.
ConditionalerrorObjectThis parameter is returned only if the payment failed. See the description below.
ConditionalorderStatusObjectContains order status parameters and is returned only if the payment gateway has recognized all request parameters as correct. See the description below.

data block contains the following elements.

RequiredNameTypeDescription
MandatoryorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.

error block contains the following elements.

RequiredNameTypeDescription
codeString [1..3]Code as an information parameter stating an error occurred.
descriptionString [1..598]A detailed technical explanation of the error - the contents of this parameter should not to be displayed to the customer.
messageString [1..512]Information parameter that is an error description to be displayed to the user. The parameter may vary, so it should not be hardcoded.

orderStatus block contains the following elements.

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
OptionalorderStatusIntegerThe value of this parameter specifies the status of the order in the payment gateway. It is missing if the order has not been found. Below is the list of available values:
  • 0 - order was registered but not paid;
  • 1 - order was authorized only and wasn't captured yet (for two-phase payments);
  • 2 - order was authorized and captured;
  • 3 - authorization canceled;
  • 4 - transaction was refunded;
  • 5 - access control server of the issuing bank initiated authorization procedure;
  • 6 - authorization declined;
  • 7 - pending order payment;
  • 8 - intermediate completion for multiple partial completion.
OptionalactionCodeStringResponse code from the processing bank. Contains a numeric value. See the list of action codes here.
OptionalactionCodeDescriptionString [1..512]actionCode description returned from the processing bank.
OptionalamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionaldateIntegerOrder registration date as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
ConditionalmerchantOrderParamsObjectObject with attributes in which the merchant's additional parameters are transmitted. See the description below.
ConditionalattributesObjectAttributes of the order in the payment system (order number). See the description below.
ConditionalcardAuthInfoObjectInformation about the buyer's payment card. See the description below.
OptionalauthDateTimeIntegerAuthorization date and time, shown as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
OptionalterminalIdString [1..10]Terminal identifier in the system that processes the payment.
OptionalauthRefNumString [1..24]Reference number of the payment authorization that has been assigned to it upon its registration.
ConditionalpaymentAmountInfoObjectA parameter containing embedded parameters with information about confirmation, debiting and refund amounts. See the description below.
ConditionalbankInfoObjectContains the embedded bankCountryName parameter. See the description below.

payerData element contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

merchantOrderParams block contains the following elements.

RequiredNameTypeDescription
MandatorynameString [1..255]Name of the merchant's additional parameter.
MandatoryvalueString [1..1024]The value of the merchant's additional parameter - up to 1024 characters.

attributes block contains the following elements.

RequiredNameTypeDescription
MandatorynameString [1..255]Name of an additional parameter.
MandatoryvalueString [1..1024]Value of an additional parameter - up to 1024 characters.

cardAuthInfo block contains the following elements.

RequiredNameTypeDescription
MandatoryexpirationInteger [6]Card expiration date in the following format: YYYYMM.
MandatorycardholderNameString [1..26]Cardholder's name in Latin characters. Allowed symbols: Latin characters, period, space.
MandatoryapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
MandatorypanString [1..19]Masked DPAN: a number that is linked to the customer's mobile device and functions as a payment card number in the Apple Pay system.
OptionaldetokenizedPanRepresentationString [1..19]The detokenized card number (the last 4 digits or in a masked form).
OptionaldetokenizedPanExpiryDateStringThe card's detokenized expiration date in the following format: "YYYYMM".

paymentAmountInfo block contains the following elements.

RequiredNameTypeDescription
MandatorypaymentStateStringOrder status, this parameter can have the following values:
  • CREATED - order created (but not paid);
  • APPROVED - order approved (funds are on hold on buyer's account);
  • DEPOSITED - order deposited (buyer is charged);
  • DECLINED - order declined;
  • REVERSED - order canceled;
  • REFUNDED - refund.
MandatoryapprovedAmountInteger [0..12]Amount in minimum currency units (e.g. cents) that was put on hold on buyer's account. Used in two-phase payments only.
MandatorydepositedAmountInteger [1..12]Charged amount in minimum currency units (e.g., in cents).
MandatoryrefundedAmountInteger [1..12]Refunded amount in minimum currency units.

bankInfo block contains the following elements.

RequiredNameTypeDescription
MandatorybankCountryNameString [1..160]Country of the issuing bank.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/payment/applepay/payment.do \
--header 'Content-Type: application/json' \
--data-raw '{
  "additionalParameters" : {
    "phone" : "9521235847",
    "order-pain" : "111",
    "email" : "apple@pay.com"
  },
  "language" : "en",
  "clientId" : "259753456",
  "orderNumber" : "281477871",
  "paymentToken" : "eyJkYXRhIjoiYPhK3M1bEtm...YjM2NWMzZWNmYjE5fIkVDX3YxIn0=",
  "preAuth" : false
}'

Response in case of a successful payment

{
    "success": true,
    "data": {
        "orderId": "b926351f-a634-49cf-9484-ccb0a3b8cfad"
    },
    "orderStatus": {
        "errorCode": "0",
        "orderNumber": "229",
        "orderStatus": 1,
        "actionCode": 0,
        "actionCodeDescription": "",
        "amount": 960000,
        "currency": "975",
        "date": 1478682458102,
        "ip": "x.x.x.x",
        "merchantOrderParams": [
            {
                "name": "param2",
                "value": "param2"
            },
            {
                "name": "param1",
                "value": "param1"
            }
        ],
        "attributes": [
            {
                "name": "mdOrder",
                "value": "b926351f-a634-49cf-9484-ccb0a3b8cfad"
            }
        ],
        "cardAuthInfo": {
            "expiration": "203012",
            "cardholderName": "TEST CARDHOLDER",
            "approvalCode": "123456",
            "pan": "500000**1115"
        },
        "authDateTime": 1478682459082,
        "terminalId": "12345678",
        "authRefNum": "111111111111",
        "paymentAmountInfo": {
            "paymentState": "APPROVED",
            "approvedAmount": 960000,
            "depositedAmount": 0,
            "refundedAmount": 0
        },
        "bankInfo": {
            "bankCountryName": "<UNKNOWN>"
        }
    }
}

Response in case of a failed payment

{
  "error": {
    "code": 10,
    "description": "Processing Error",
    "message": "Auth is invalid"
  },
  "success": false
}

Google Pay order registration

The https://uat.dskbank.bg/payment/google/payment.do request is used to register and pay for the order.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
MandatorymerchantString [1..255]To register an order and carry out payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionaladditionalParametersObjectAdditional parameters of the order that are stored in the merchant personal area for the subsequent viewing. Each new pair of a parameter name and its value must be separated by a comma. Below is a usage example.
{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
When storing a credential, this tag can contain parameters that specify the type of the stored credential. See the list of parameters.
OptionalpreAuthBooleanParameter that defines the necessity of a pre-authorization (putting the amount on hold on the customer's account until its debiting). The following values are available:
  • true - two-phase payments enabled;
  • false - one-phase payments enabled (money are charged right away).
If the parameter is missing, one-phase payment is made.
OptionalautocompletionDateString [19]The date and time when the two-phase payment must be completed automatically in the following format: 2025-12-29T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalautoReverseDateString [19]The date and time when the two-phase payment must be reversed automatically in the following format: 2025-06-23T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
MandatoryclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values.
MandatorypaymentTokenString [1..8192]A token obtained from Google Pay and encoded in Base64.
MandatoryipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalcurrencyCodeString [3]Numeric ISO 4217 code of the payment currency. If this parameter is not specified, it is considered to be equal to the default currency code. Only digits are allowed.
MandatoryreturnUrlString [1..512]The address to which the user will be redirected if the payment is successful. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionalfailUrlString [1..512]The address to which the user is to be redirected in case of a failed payment. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionaldynamicCallbackUrlString [1..512]This parameter allows you to use the functionality of sending callback notifications dynamically. Here you can pass the address to which all "payment" callback notifications activated for the merchant will be sent. "Payment" notifications are callback notifications related to the following events: successful hold, payment declined by timeout, cardpresent payment is declined, successful debit, refund, cancellation. At the same time, callback notifications activated for the merchant that are not related to payments (enabling/disabling a stored credential, storing a credential) will be sent to a static address for callbacks. Whether the parameter is mandatory or not depends on the merchant configuration on Payment Gateway side.
ConditionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.
OptionalclientBrowserInfoObjectA block with the data about the client's browser that is sent to ACS during the 3DS authentication. To pass this block, you should have a special setting (contact the support team). See nested parameters.

If 3DS2 is used, the following parameters should be passed as well:

RequiredNameTypeDescription
ConditionalthreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSVer2FinishUrlString [1..512]URL where Customer should be redirected after authentication on ACS Server.
OptionalthreeDSMethodNotificationUrlString [1..512]URL where notification about performed 3DS-method should be sent to.

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored. This value is possible to pass only if the "Vendor pays common bindings creation is allowed" permission is enabled.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Below are the parameters of the clientBrowserInfo block (data about the client's browser).

RequiredNameTypeDescription
OptionaluserAgentString [1..2048]Browser agent.
OptionalOSStringOperation system.
OptionalOSVersionStringOperation system version.
OptionalbrowserAcceptHeaderString [1..2048]The Accept header that tells the server what file formats (or MIME-types) the browser accepts.
OptionalbrowserIpAddressString [1..45]Browser IP address.
OptionalbrowserLanguageString [1..8]Browser language.
OptionalbrowserTimeZoneStringBrowser time zone.
OptionalbrowserTimeZoneOffsetString [1..5]The time zone offset in minutes between the user's local time and UTC.
OptionalcolorDepthString [1..2]Screen color depth, in bits.
OptionalfingerprintStringBrowser fingerprint - a unique digital identifier of the browser.
OptionalisMobileBooleanPossible values: true or false. Flag showing that a mobile device is used.
OptionaljavaEnabledBooleanPossible values: true or false. Flag showing that java is enabled in the browser.
OptionaljavascriptEnabledBooleanPossible values: true or false. Flag showing that javascript is enabled in the browser.
OptionalpluginsStringComma-separated list of plugins the browser uses.
OptionalscreenHeightInteger [1..6]Screen height, in pixels.
OptionalscreenWidthInteger [1..6]Screen width, in pixels.
OptionalscreenPrintStringData about current screen print including resolution, color depth, display metrics.
OptionaldeviceStringInformation about the cardholder's device (model, version, and so on).
OptionaldeviceTypeStringType of device on which the browser is running (mobile phone, desktop, tablet, and so on).

Example of clientBrowserInfo block:

"clientBrowserInfo":
    {
		"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
		"fingerprint":850891523,
		"OS":"Windows",
		"OSVersion":"10",
		"isMobile":false,
		"screenPrint":"Current Resolution: 1536x864, Available Resolution: 1536x824, Color Depth: 24, Device XDPI: undefined, Device YDPI: undefined",
		"colorDepth":24,
		"screenHeight":"864",
		"screenWidth":"1536",
		"plugins":"PDF Viewer, Chrome PDF Viewer, Chromium PDF Viewer, Microsoft Edge PDF Viewer, WebKit built-in PDF",
		"javaEnabled":false,
		"javascriptEnabled":true,
		"browserLanguage":"it-IT",
		"browserTimeZone":"Europe/Rome",
		"browserTimeZoneOffset":-120,
		"browserAcceptHeader":"gzip",
        "browserIpAddress":"x.x.x.x"
	}

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Response parameters

RequiredNameTypeDescription
MandatorysuccessBooleanMain parameter which indicates directly that the request was successful. The following values are available:
  • true - request processed successfully;
  • false - request failed.

Note that the value true here simply means that the request was proccessed, not that the order was paid.
Read here to find out how to get payment status.
ConditionaldataObjectThis parameter is returned only if the payment is processed successfully. See the description below.
ConditionalerrorObjectThis parameter is returned only if the payment failed. See the description below.

data block contains the following elements.

RequiredNameTypeDescription
MandatoryorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
Conditional*termUrlString [1..512]In a successful response in case of a 3D-Secure payment. The URL address to which ACS redirects the cardholder after authentication. For details see Redirect to ACS.
Conditional*acsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
Conditional*paReqString [1..255]PAReq (Payment Authentication Request) - a message that should be sent to ACS together with redirect. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This message contains the Base64-encoded data necessary for the cardholder authentication. For details see Redirect to ACS.
Conditional**bindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionaldetokenizedPanRepresentationString [1..19]The detokenized card number (the last 4 digits or in a masked form).
OptionaldetokenizedPanExpiryDateStringThe card's detokenized expiration date in the following format: "YYYYMM".

* Only if additional authentication is used on the issuing bank's ACS
** The parameter is returned if the bindings are used

data block can also include payerData element, which contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

If 3DS2 protocol is used, the response to the request also includes the following parameters in the data block:

RequiredNameTypeDescription
Mandatoryis3DSVer2BooleanPossible values: true or false. Flag showing that payment uses 3DS2.
MandatorythreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSMethodUrlString [1..512]URL of ACS Server for gathering browser data.
OptionalthreeDSMethodUrlServerString [1..512]URL of 3DS Server for gathering browser data to be included in the AReq (Authentication Request) from 3DS Server to ACS Server.
OptionalthreeDSMethodDataPackedString [1..1024]Base-64-encoded data of CReq (Challenge Response) to be sent to ACS Server.
OptionalthreeDSMethodURLServerDirectString [1..512]URL of 3dsmethod.do for executing the 3DS method on 3DS Server via Payment Gateway (subject to respective Merchant-level permission).

error block contains the following elements.

RequiredNameTypeDescription
MandatorycodeString [1..3]Code as an information parameter stating an error occurred.
MandatorymessageString [1..512]Information parameter that is an error description to be displayed to the user. The parameter may vary, so it should not be hardcoded.
MandatorydescriptionString [1..598]A detailed technical explanation of the error - the contents of this parameter should not to be displayed to the customer.

You should request getOrderStatusExtended.do and check the status of transaction.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/payment/google/payment.do \
--header 'Content-Type: application/json' \
--data-raw '{
  "merchant": "OurBestMerchantLogin",
  "orderNumber": "UAF-203974-DE",
  "language": "EN",
  "preAuth": true,
  "description" : "Test description",
  "additionalParameters":
  {
      "firstParamName": "firstParamValue",
        "secondParamName": "secondParamValue"
  },
  "paymentToken": "eyJtZXJjaGFudCI6ICJ...FnXCJ9In0=",
  "ip" : "127.0.0.1",
  "amount" : "230000",
  "currencyCode" : 978,
  "failUrl" : "https://mybestmerchantfailurl.com"
  "returnUrl" : "https://mybestmerchantreturnurl.com"
}'

Response example

{
"success":true,
"data": {
 "orderId": "12312312123"
 "is3DSVer2": true,
 "threeDSServerTransId": "f44d6d21-1874-45a5-aeb0-1c710dd6e134",
 "threeDSMethodURLServer": "https://test.com/3dsserver/gatherClientInfo?threeDSServerTransID=f44d6d21-1874-45a5-aeb0-1c710dd6e134"
 }
}

Payment status

The most straightforward way to know the status of the payment is to use a dedicated API call:

  1. Call getOrderStatusExtended.do;
  2. Check the orderStatus field in the response: the order is considered to be payed only if the orderStatus value is 1 or 2.

Another way to check whether the payment was successful or not is to refer to the callback notification.

Order status (short)

The request used to get the order status with main order information is https://uat.dskbank.bg/payment/rest/getOrderStatus.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
YesuserNameString [1..50]Merchant's API account login.
YespasswordString [1..30]Merchant's API account password.
YesorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
NolanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.

Response parameters

RequiredNameTypeDescription
NoerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
NoerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
YesorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each merchant.
NoorderStatusStringThe value of this parameter specifies the status of the order in the payment gateway. It is missing if the order has not been found. Below is the list of available values:
  • 0 - order was registered but not paid;
  • 1 - pre-authorized amount is on hold on the buyer's account (for two-phase payments);
  • 2 - order amount is fully authorized;
  • 3 - authorization canceled;
  • 4 - transaction was refunded;
  • 5 - access control server of the issuing bank initiated authorization procedure;
  • 6 - authorization declined.
YesamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
NocurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
NoIpString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
NoPanString [1..19]Masked number of the card that has been used for the payment. This parameter is to be specified only after the order has been paid. When paying via Apple Pay, DPAN is used as card number - it is a number linked to customer's mobile device that functions as a payment card number in the Apple Pay system.
NoexpirationInteger [6]Card expiration date in the following format: YYYYMM.
NocardholderNameString [1..26]Cardholder's name in Latin characters. Allowed symbols: Latin characters, period, space.
NoapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
NodepositedAmountInteger [1..12]Charged amount in minimum currency units (e.g., in cents).
NoclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
NobindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
NopaymentNetRefNumString [1..512]Original Network Reference Number - a unique identifier assigned by the card network (e.g., Mastercard, Visa) to the original transaction (such as a purchase or authorization). When a follow-up transaction is initiated (e.g., refund, recurring payment), this number must be included to:
  • Link the new transaction to the original one
  • Ensure proper tracking and reconciliation
  • Meet network compliance requirements
This parameter is returned only if the getP2PStatus version is 7 or higher.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/getOrderStatus.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data orderId=092ac72d-a41c-791b-8e05-a35500a8d2e6 \
  --data language=en

Response example

{
  "expiration":"203012",
  "cardholderName":"TEST CARDHOLDER",
  "depositAmount":500000,
  "currency":"975",
  "approvalCode":"123456",
  "authCode":2,
  "clientId":"123",
  "bindingId":"deb8b6a8-0417-79e5-aad4-8d6400a8d2e6",
  "ErrorCode":"0",
  "ErrorMessage":"Success",
  "OrderStatus":2,
  "OrderNumber":"4005",
  "Pan":"400000**1118",
  "Amount":500000,
  "Ip":"x.x.x.x"
}

Order status

The request used to get the order status is https://uat.dskbank.bg/payment/rest/getOrderStatusExtended.do.


When sending the request, you should use the header: Content-type: application/x-www-form-urlencoded

Learn more about Refusal reasons.

Request parameters

RequiredNameTypeDescription
ConditionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
ConditionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
ConditionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.

ConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each merchant.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalmerchantLoginString [1..255]To get the order status of a specific merchant instead of the current user, specify the merchant's API account login.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.

Response parameters

There are several sets of the response parameters. Which set of parameters is returned in the response, depends on the version of getOrderStatusExtended specified in the merchant's settings in the payment gateway.

Description of the versions

VersionAdded parameters
1orderBundle
2
  • authDateTime
  • terminalId
  • authRefNum
3
  • paymentAmountInfo->approvedAmount, depositedAmount, paymentState, refundedAmount
  • bankInfo->bankCountryCode, bankCountryName, bankName
4No changes
5refunds
6No changes
7cardAuthInfo->secureAuthInfo->paResStatus, veResStatus, paResCheckStatus
8cardAuthInfo->paymentSystem, product
9paymentWay
10depositedDate
11No changes
12
  • refundedDate
  • reversedDate
13payerData->email,phone,postAddress
14transactionAttributes
15
  • prepaymentMdOrder
  • partpaymentMdOrders
16feUtrnno
17cardAuthInfo->productCategory
18totalAmount
19avsCode
20bindingInfo->externalCreated
21refunds->externalRefundId
22No changes
23efectyOrderInfo
24ofdOrderBundle
25No changes
26refunds->approvalCode
27authRefNum
28pluginInfo
29No changes
30cardAuthInfo->secureAuthInfo->aResTransStatus, rReqTransStatus, threeDsProtocolVersion
31No changes
32No changes
33displayErrorMessage
34orderBundle->cartItems->items->depostedItemAmount,itemPrice
35cardAuthInfo->corporateCard
36No changes
37
  • tii
  • usedPsdIndicatorValue
38payerData ->paymentAccountReference
39cardAuthInfo -> detokenizedPanRepresentation, detokenizedPanExpiryDate
40No changes
41No changes
42cardAuthInfo->secureAuthInfo->threeDsType
43No parameters added. Removed: cardAuthInfo->secureAuthInfo-> authTypeIndicator
44No changes
45No changes
46mcc, mvv,paymentFacilitator
47cardAuthInfo->secureAuthInfo->aResTransStatusReason, rreqTransStatusReason,rreqChallengeCancel
48payerData ->billingPayerData,shippingPayerData
49schemeTransactionId
VersionRequiredNameTypeDescription
AllOptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
AllOptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
AllConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each merchant registered in the payment gateway . If the Order number is generated on the Payment Gateway side, this parameter is not mandatory.
AllOptional orderStatusIntegerThe value of this parameter specifies the status of the order in the payment gateway. It is missing if the order has not been found. Below is the list of available values:
  • 0 - order was registered but not paid;
  • 1 - order was authorized only and wasn't captured yet (for two-phase payments);
  • 2 - order was authorized and captured;
  • 3 - authorization canceled;
  • 4 - transaction was refunded;
  • 5 - access control server of the issuing bank initiated authorization procedure;
  • 6 - authorization declined;
  • 7 - pending order payment;
  • 8 - intermediate completion for multiple partial completion.
AllMandatoryactionCodeStringResponse code from the processing bank. Contains a numeric value. See the list of action codes here.
AllMandatoryactionCodeDescriptionString [1..512]actionCode description returned from the processing bank.
AllMandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
AllOptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used.
AllMandatorydateIntegerOrder registration date as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
10+OptionaldepositedDateIntegerOrder payment date as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
AllOptionalorderDescriptionString [1..600]Order description passed to the payment gateway during the registration.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
AllMandatoryipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
27+OptionalauthRefNumString [1..24]Reference number of the payment authorization that has been assigned to it upon its registration.
12+ From 27 mandatory.OptionalrefundedDateIntegerRefunded date and time, shown as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
12+OptionalreversedDateIntegerReversed date and time, shown as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
09+MandatorypaymentWayStringPayment method (a payment with entering card data, a stored-credential transaction, etc.). Find more possible values of the parameter.
19+OptionalavsCodeStringA code of the AVS verification response (checking the address and postal code of the cardholder). Possible values:
  • A – postal code and address are the same.
  • B – address matches, postal code doesn't match.
  • C - postal code matches, address doesn't match.
  • D - postal code and address don't match.
  • E - data validation is requested, but the result is unsuccessful.
  • F - invalid format of the AVS/AVV verification request.
02+OptionalauthDateTimeIntegerAuthorization date and time, shown as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
02+OptionalterminalIdString [1..10]Terminal identifier in the system that processes the payment.
01+OptionalorderBundleObjectObject containing cart of items. The description of the nested elements is given below.
03+OptionalpaymentAmountInfoObjectObject containing the information on the confirmation amount, debit amount, and refund amount. See nested parameters below.
05+OptionalrefundsObjectAn object containing information about the refund. Available only if there are refunds in the order. See nested parameters below.
AllOptionalcardAuthInfoObjectBlock with the data about the payer's card. See nested parameters below.
14+OptionaltransactionAttributesObjectA set of additional transaction attributes. See nested parameters below.
15+OptionalprepaymentMdOrderStringThe number of the previous prepayment order in the payment gateway.
15+OptionalpartpaymentMdOrdersArray of StringAn array of subsequent partial payment orders.
16+OptionalfeUtrnnoInteger [1..18]FE transaction number.
AllOptionalbindingInfoObjectObject containing information on the stored credential with which the payment is performed. See the table with the description of bindingInfo.
23+OptionalefectyOrderInfoObjectA block containing information related to EFECTY payment way. See nested parameters below.
28+OptionalpluginInfoObjectPresent in the response if the payment was made through the payment plugin. See nested parameters below.
33+OptionaldisplayErrorMessageStringDisplayed error message.
37+OptionaltiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). See nested parameters below.
37+OptionalusedPsdIndicatorValueStringThe type of SCA (Strong Customer Authentication) excemption. Contains the value passed in externalScaExemptionIndicator parameter during payment.
  • LVP – Low Value Payments transaction. You can consider a transaction as low risk based on the transaction amount, the client's transactions per day or the client's total daily amount.
  • TRA – Transaction Risk Analysis transaction, i.e., the transaction that has passed successful anti-fraud check.
.
46+OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
46+OptionalmvvString [1..10]Merchant verification value from Mastercard for tokenized transactions.
To pass this parameter, a special setting must be enabled (contact technical support).
49+OptionalschemeTransactionIdString [1..22]The identifier of the original successful Mastercard transaction.
46+OptionalpaymentFacilitatorObjectA block with the parameters of a payment facilitator, i.e. a merchant who allows several submerchants to accept payments under its account.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.

Description of parameters in the paymentFacilitator object:

RequiredNameTypeDescription
MandatorypfIdString [1..11]Payment facilitator identifier.
MandatorynameString [1..40]Payment facilitator name.
OptionalisoIdString [1..11]ISO identifier.
MandatorysubMerchantsArray of objectsThe array of objects with the additional information about submerchants. See nested parameters below.

Parameters of an object in subMerchants array:

RequiredNameTypeDescription
MandatorysubMerchantIdString [1..20]Submerchant identifier.
MandatorynameString [1..40]Submerchant name.
MandatoryaddressObjectA block with information about submerchant address. See nested parameters below.

Parameters of the address object:

RequiredNameTypeDescription
MandatorycityString [1..50]Submerchant city.
MandatorypostalCodeString [1..16]Submerchant postal code.
MandatorycountryInteger [2]Submerchant country code in ISO 3166-1 format.
OptionalstreetString [1..40]Submerchant street.

Example of paymentFacilitator object:

"paymentFacilitator" :{
  "pfId": "PF123456",
  "name": "Payment Facilitator Name",
  "isoId": "ISO789",
  "subMerchants": [
    {
      "subMerchantId": "SM001",
      "name": "Sub Merchant 1",
      "address": {
        "city": "City 1",
        "postalCode": "101000",
        "country": "US",
        "street": "Street 1"
      }
    },
    {
      "subMerchantId": "SM002",
      "name": "Sub Merchant 2",
      "address": {
        "city": "City 2",
        "postalCode": "190000",
        "country": "US",
        "street": "Street 2"
      }
    }
  ]
}

Values of paymentWay:

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
EmptyRegularCustomerEntered by CustomerNoAn e-commerce transaction, credential is not stored.
CIInitial Common CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
FUnscheduled CITSubsequentCustomerCustomer selects card instead of manual entryNoAn e-commerce transaction that uses a stored credential.
UUnscheduled MITSubsequentMerchantNo manual entry, Merchant passes the dataNoAn e-commerce transaction that uses a stored credential. Used for one-phase payments only.
RIInitial Recurrent CITInitiatingCustomerEntered by CustomerYesAn e-commerce transaction, credential is stored.
RRecurrent MITSubsequentMerchantNo manual entry, Merchant passes the dataNoA recurrent transaction that uses a stored credential. Used for one-phase payments only.

The refunds block contains the following parameters:

VersionRequiredNameTypeDescription
05+OptionaldateStringOrder refund date
21+OptionalexternalRefundIdString [1..32]The identifier of the refund. When attempting a refund, externalRefundId is checked: if it exists, a successful response with refund data is returned, if not, a refund is held.
26+OptionalapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
05+OptionalactionCodeStringResponse code from the processing bank. Contains a numeric value. See the list of action codes here.
05+OptionalreferenceNumberString [12]Unique identification number that is assigned to the operation on its completion.
05+OptionalamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).

attributes block contains information on the order number in the payment gateway. name parameter contains the word mdOrder, and value parameter contains the actual order number in the payment gateway.

VersionRequiredNameTypeDescription
AllOptionalnameString [1..255]Name of an additional parameter.
AllOptionalvalueString [1..1024]Value of an additional parameter - up to 1024 characters.

transactionAttributes block contains the set of additional attributes of the transaction. Used for version 14 and later. Below is the list of the included parameters.

VersionRequiredNameTypeDescription
14+OptionalnameString [1..255]Name of an additional parameter.
14+OptionalvalueString [1..1024]Value of an additional parameter - up to 1024 characters.

merchantOrderParams block is passed in the response, if the order contains merchant additional parameters. Each additional parameter is passed in a separate merchantOrderParams element.

VersionRequiredNameTypeDescription
AllOptionalnameString [1..255]Name of an additional parameter.
AllOptionalvalueString [1..1024]Value of an additional parameter - up to 1024 characters.

cardAuthInfo element contains a structure consisting of secureAuthInfo element list and the following parameters.

VersionRequiredNameTypeDescription
01+OptionalmaskedPanString [1..19]Masked number of the card used for the payment. It contains real first 6 and last 4 digits of the card number in the format XXXXXX**XXXX.
01+OptionalexpirationInteger [6]Card expiration date in the following format: YYYYMM.
01+OptionalcardholderNameString [1..26]Cardholder's name in Latin characters. Allowed symbols: Latin characters, period, space.
01+OptionalapprovalCodeString [6]IPS authorization code. This field has a fixed length (six symbols) and can contain digits and Latin letters.
08+MandatorypaymentSystemStringPayment system name. The following variants are possible:
  • VISA
  • MASTERCARD
  • AMEX
  • JCB
  • CUP
08+MandatoryproductString [1..255]Additional details on corporate cards. These details are filled in by the technical support service. If such details are missing, an empty value is returned.
17+MandatoryproductCategoryStringAdditional details on category of corporate cards. These details are filled in by the technical support service. If such details are missing, an empty value is returned. Possible values: DEBIT, CREDIT, PREPAID, NON_MASTERCARD, CHARGE, DIFFERED_DEBIT.
35+OptionalcorporateCardString [1..5]Indication of whether the card is a corporate card. Possible values: false - is not a corporate card, true - is a corporate card. May return an empty value, which means that the value was not found.
39+OptionaldetokenizedPanRepresentationString [1..19]The detokenized card number (the last 4 digits or in a masked form).
39+OptionaldetokenizedPanExpiryDateStringThe card's detokenized expiration date in the following format: "YYYYMM".

secureAuthInfo element consists of the following elements (cavv and xid parameters are included into the threeDSInfo element).

VersionRequiredNameTypeDescription
01+OptionaleciInteger [1..4]Electronic commerce indicator. The indicator is specified only after an order has been paid and in case the corresponding permission is present. Below is the explanation of ECI codes.
  • ECI=01 or ECI=06 - merchant supports 3-D Secure, payment card does not support 3-D Secure, payment is processed based on CVV2/CVC code.
  • ECI=02 or ECI=05 - both merchant and payment card support 3-D Secure;
  • ECI=07 - merchant does not support 3-D Secure, payment is processed based on CVV2/CVC code.
01 - 42OptionalauthTypeIndicatorString3DS authentication type (available up to version 42). This parameter is required for payment via your own 3DS Server with 3DS 2. For payments with SSL, this parameter is optional and is defined automatically depending on ECI value.
Allowed values:
  • 0 - SSL authentication
  • 1 - 3DS 1 authentication
  • 2 - 3DS 1 authentication attempt
  • 3 - SCA Cardholder authentication with 3DS 2
  • 4 - RBA Cardholder authentication with 3DS 2
  • 5 - Cardholder authentication attempt with 3DS 2
42+OptionalthreeDsType String3DS authentication type. This parameter is required for payment via your own 3DS Server with 3DS 2. For payments with SSL, this parameter is optional and is defined automatically depending on ECI value.
Allowed values:
  • 0 - SSL authentication
  • 3 - SCA Cardholder authentication with 3DS 2
  • 4 - RBA Cardholder authentication with 3DS 2
  • 5 - Cardholder authentication attempt with 3DS 2
  • 6 - 3DS 2 exemption granted
  • 7 - 3RI authentication with 3DS 2
  • 8 - 3RI authentication attempt with 3DS 2
01+OptionalcavvString [0..200]Cardholder authentication value. The indicator is specified only after an order is paid and if the corresponding permission is enabled.
01+OptionalxidString [1..80]Electronic commerce indicator of the transaction. The indicator is specified only after an order has been paid and in case the corresponding permission is present.
30+OptionalthreeDSProtocolVersionString3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
30+OptionalrreqTransStatusString [1]Transaction status from the request for passing user authentication results from ACS (RReq). Passed when 3DS2 is used.
30+OptionalaresTransStatusStringTransaction status from the ACS response to the authentication request (ARes). Passed when 3DS2 is used.
47+OptionalaResTransStatusReasonStringThe reason of the ACS response to the authentication request (ARes). Passed when 3DS2 is used. This parameter provides additional information about a particular authentication status. It takes 2-digit values like 01, 02 etc. See the full list of allowed values below.
47+OptionalrreqTransStatusReasonStringThe reason of the response to the request for passing user authentication results from ACS (RReq). Passed when 3DS2 is used. This parameter provides additional information about a particular authentication status of the cardholder. It takes 2-digit values like 01, 02 etc. See the full list of allowed values below.
47+OptionalrreqChallengeCancelStringIndicator of cancellation of Challenge process in RReq message from ACS. Passed when 3DS2 is used. This parameter indicates the initiator of authentication cancellation: the cardholder, the merchant, or the card issuer. It takes 2-digit values like 01, 03 etc. See the full list of allowed values below.

Allowed values for aResTransStatusReason and rreqTransStatusReason:

Allowed values for rreqChallengeCancel:

bindingInfo element contains the following parameters.

VersionMandatoryNameTypeDescription
AllOptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
AllOptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
02+OptionalauthDateTimeIntegerAuthorization date and time, shown as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
02+OptionalauthRefNumString [1..24]Reference number of the payment authorization that has been assigned to it upon its registration.
02+OptionalterminalIdString [1..10]Terminal identifier in the system that processes the payment.

paymentAmountInfo element contains the following parameters.

VersionMandatoryNameTypeDescription
03+OptionalapprovedAmountInteger [0..12]Amount in minimum currency units (e.g. cents) that was put on hold on buyer's account. Used in two-phase payments only.
03+OptionaldepositedAmountInteger [1..12]Charged amount in minimum currency units (e.g., in cents).
03+OptionalrefundedAmountInteger [1..12]Refunded amount in minimum currency units.
03+OptionalpaymentStateStringOrder status, this parameter can have the following values:
  • CREATED - order created (but not paid);
  • APPROVED - order approved (funds are on hold on buyer's account);
  • DEPOSITED - order deposited (buyer is charged);
  • DECLINED - order declined;
  • REVERSED - order canceled;
  • REFUNDED - refund.
18+OptionaltotalAmountInteger [1..20]Order amount plus fee, if any.

bankInfo element contains the following parameters.

VersionRequiredNameTypeDescription
03+OptionalbankNameString [1..50]Issuing bank name.
03+OptionalbankCountryCodeString [1..4]Country code of the issuing bank.
03+OptionalbankCountryNameString [1..160]Country of the issuing bank.

payerData element contains the following parameters.

VersionRequiredNameTypeDescription
13+OptionalemailString [1..40]The payer's email address.
13+OptionalphoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.
13+OptionalpostAddressString [1..255]Delivery address.
38+OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).
48+OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
48+OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

The efectyOrderInfo block contains the following parameters.

VersionRequiredNameTypeDescription
23+OptionalreferenceNumberIntegerNumber of Efecty order reference generated by Efecty
23+OptionalreferenceDateIntegerDate/time of the reference creation
23+OptionalreferenceStatusStringStatus of Efecty order
23+OptionalreferenceTermIntegerLifetime of Efecty order (in hours)
23+OptionalnetworkIDIntegerID of the cash payment acceptance network (for Efecty a constant value is 1)
23+OptionalnetworkNameStringName of the cash payment acceptance network (for Efecty a constant value is efecty)

pluginInfo element (which is JSON object) is present in response if payment was made through payment plugin. Contains the following parameters.

VersionRequiredNameTypeDescription
28+OptionalnameString [1..32]Unique name of the payment plugin.
28+OptionalparamsObjectParameters for a specific payment method, must be passed as follows {"param":"value","param2":"value2"}.

Description of parameters in orderBundle object:

RequiredNameTypeDescription
OptionalorderCreationDateString [19]Order creation date in the following format: YYYY-MM-DDTHH:MM:SS.
OptionalcustomerDetailsObjectBlock containing customer attributes. The description of the tag attributes is given below.
MandatorycartItemsObjectObject containing cart items attributes. The description of nested elements is given below.

Description of parameters in the loyalties object:

RequiredNameTypeDescription
OptionalbonusAmountForCreditString [0..18]Total amount of bonuses for all products for this positionId to be added to the customer's bonus account, in minimum currency units.
OptionalbonusAmountForDebitString [0..18]Total amount of bonuses for all products for this positionId to be taken from the customer's bonus account, in minimum currency units.
MandatorybonusAmountRefundedString [0..18]Total amount of returned bonuses for the positionId in minor currency units.

Description of parameters in customerDetails object:

RequiredNameTypeDescription
OptionalcontactString [0..40]Customer's preferred way of communication.
OptionalfullNameString [1..100]Payer's full name.
OptionalpassportString [1..100]Customer's passport serial number in the following format: 2222888888.
OptionaldeliveryInfoObjectObject containing delivery address attributes. The description of the nested elements is given below.

Description of parameters in deliveryInfo object.

RequiredNameTypeDescription
OptionaldeliveryTypeString [1..20]Delivery method.
MandatorycountryString [2]Two letter code of the country of delivery.
MandatorycityString [0..40]City of destination.
MandatorypostAddressString [1..255]Delivery address.

Description of parameters in cartItems object.

RequiredNameTypeDescription
MandatoryitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/getOrderStatusExtended.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data orderId=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \
  --data language=en

Response example

{
  "errorCode": "0",
  "errorMessage": "Success",
  "orderNumber": "7005",
  "orderStatus": 2,
  "actionCode": 0,
  "actionCodeDescription": "",
  "amount": 2000,
  "currency": "975",
  "date": 1617972915659,
  "orderDescription": "",
  "merchantOrderParams": [],
  "transactionAttributes": [],
  "attributes": [
    {
      "name": "mdOrder",
      "value": "01491d0b-c848-7dd6-a20d-e96900a7d8c0"
    }
  ],
  "cardAuthInfo": {
    "maskedPan": "411111**1111",
    "expiration": "203412",
    "cardholderName": "TEST CARDHOLDER",
    "approvalCode": "12345678",	
    "pan": "411111**1111"
  },
  "bindingInfo": {
    "clientId": "259753456",
    "bindingId": "01491394-63a6-7d45-a88f-7bce00a7d8c0"
  },
  "authDateTime": 1617973059029,
  "terminalId": "123456",
  "authRefNum": "714105591198",
  "paymentAmountInfo": {
    "paymentState": "DEPOSITED",
    "approvedAmount": 2000,
    "depositedAmount": 2000,
    "refundedAmount": 0
  },
  "bankInfo": {
    "bankCountryCode": "UNKNOWN",
    "bankCountryName": "Unknown"
  }
}

Order management

Deposit order

To complete a pre-authorized order use https://uat.dskbank.bg/payment/rest/deposit.do request.


When sending the request, you should use the header: content-type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
ConditionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalmerchantLoginString [1..255]To perform certain action with an order payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
Either orderId or orderNumber+merchantLogin must be passed.
MandatoryamountString [0..12]Deposit amount in minor currency units (e.g. in cents). The deposit amount must match the total of amounts of all deposited items. If you specify amount=0 in the request, the entire amount of the order will be deposited.
OptionaldepositItemsObjectObject containing cart items attributes. Below is the description of the contained attributes.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionaljsonParamsObjectA set of additional free-form attributes, structure:
jsonParams={"param_1_name":"param_1_value",...,"param_n_name":"param_n_value"}
Can be passed to the Processing Center for further processing (additional configuration required - contact support).
Some predefined jsonParams attributes:
  • backToShopUrl - adds a button to the payment page that will return the cardholder to the URL passed in this parameter
  • backToShopName - configures the text label of the Return to Shop button by default, if used together with backToShopUrl
  • recurringFrequency - minimum number of days between authorizations. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).
  • recurringExpiry - date after which authorizations are not allowed, in YYYYMMDD format. Required for creating recurring stored credential, recommended for creating installment stored credential (if 3DS2 is used, the parameter is mandatory).

Description of parameters in deposititems object.

RequiredNameTypeDescription
MandatoryitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Description of parameters in itemDetailsParams object.

RequiredNameTypeDescription
MandatoryvalueString [1..2000]Additional item info.
MandatorynameString [1..255]Name of the parameter describing the details of an item

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/deposit.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data currency=975 \
  --data amount=2000 \
  --data orderId=01492437-d2fb-77fa-8db7-9e2900a7d8c0 \
  --data language=en

Response example

{
  "errorCode": 0,
  "errorMessage":"Success"
}

Payment reversal

The request used for reversing an order payment is https://uat.dskbank.bg/payment/rest/reverse.do. Reversals can be done only within a specific time frame after the payment. Contact Support to know the exact period, as it varies.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

The payment can be reversed only once. If it ends with an error, then subsequent payment reversal operations will not work.

Availability of this feature is subject to agreement by the Bank. Reversals can be done only by users to whom the appropriate system permissions have been granted.

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
MandatorypasswordString [1..30]Merchant's API account password.
ConditionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalmerchantLoginString [1..255]To reverse an order payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
Either orderId or orderNumber+merchantLogin must be passed.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionaljsonParamsStringFields for storing additional data, must be passed as follows {"param":"value","param2":"value2"}.
OptionalamountString [0..12]Reversal amount in minor currency units (e.g. in cents). Reversal amount must be less or equal to the authorized order amount (for two-phase payments - less or equal to the total preauthorized order amount.
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/reverse.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data currency=975 \
  --data orderId=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \
  --data language=en

Response example

{
  "errorCode": 0,
  "errorMessage":"Success"
}

Refund

Use https://uat.dskbank.bg/payment/rest/refund.do to make refund requests.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

You cannot refund orders that initialize recurrent payments, as no money are actually charged.

Upon this request, the funds for the specified order are to be returned to the payer. The request will end with an error if the funds have not been debited for this order. The system permits returning funds more than once, but for a total amount not exceeding the initial debit amount.

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
ConditionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
Either orderId or orderNumber+merchantLogin must be passed.
ConditionalmerchantLoginString [1..255]To perform certain action with an order payment on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
Either orderId or orderNumber+merchantLogin must be passed.
MandatoryamountString [0..12]Refund amount in minor currency units (e.g. in cents). If two-phase payment is used, the refund amount must be less or equal to the authorized order amount (for two-phase payments - less or equal to the total deposited order amount. If you specify amount=0 in the request, the entire amount of the order will be refunded.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionaljsonParamsStringFields for storing additional data, must be passed as follows {"param":"value","param2":"value2"}.
OptionalexpectedDepositedAmountInteger [1..12]The parameter serves as a determination that the request is repeated. If the parameter is passed, its value is compared to the current depositedAmount value in the order. The operation will be performed only if the values match. If two returns arrive with the same expectedDepositedAmount, only one return will be executed. This return will change the depositedAmount value and then the second return will be rejected.
OptionalexternalRefundIdString [1..32]The identifier of the refund. When attempting a refund, externalRefundId is checked: if it exists, a successful response with refund data is returned, if not, a refund is held.
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalrefundItemsObjectObject containing information about refunded items — the number of an item in the request, the item name, its details, unit of measurement, quantity, currency, article code, and the agent profit.

refundItems object includes:

RequiredNameTypeDescription
OptionalitemsObjectAn element of the array containing cart item attributes. The description of the nested elements is given below.

Description of parameters in items object.

RequiredNameTypeDescription
MandatorypositionIdInteger [1..12]Unique product identifier in the cart.
MandatorynameString [1..255]Name or the description of an item in any format.
OptionalitemDetailsObjectObject containing the parameters describing an item. The description of the nested elements is given below.
MandatoryquantityObjectElement describing the total of items of one positionId and its unit of measurement. The description of the nested elements is given below.
OptionalitemAmountInteger [1..12]The total cost of all instances of one positionId specified in minor denomination of the currency. itemAmount must be passed only if the itemPrice parameter has not been passed. Otherwise passing of itemAmount is not required. If both parameters itemPrice and itemAmount are passed in the request, then itemAmount shall be equal itemPrice * quantity, otherwise the request will return an error.
OptionalitemPriceInteger [1..18]Total cost of instance of one positionId specified in minor currency units.
OptionalitemCurrencyInteger [3]ISO 4217 currency code. If the parameter is not specified, it is considered to be equal to the Order currency.
OptionalitemCodeString [1..100]Number (identifier) of an item in the store system.

Description of parameters in itemAttributes object:

itemAttributes parameter must include attributes array, where the item attributes should be located (see the example and table below).

"itemAttributes":{"attributes":[{"name":"paymentMethod","value":"1"},{"name":"paymentObject","value":"1"}]}
RequiredNameTypeDescription
MandatorypaymentMethod[1..2]Payment type, the available values are:
  • 1 - full prepayment;
  • 2 - partial prepayment;
  • 3 - advance payment;
  • 4 - full payment;
  • 5 - partial payment with further installment payments;
  • 6 - no payment with further installment payments;
  • 7 - payment with further installment payments.
ConditionalnomenclatureString [1..95]Product code in hexadecimal notation with spaces. Maximum length – 32 bytes. Mandatory if markQuantity is passed.
OptionalmarkQuantityObjectFractional quantity of the marked goods. See nested parameters.
OptionaluserDataString [1..64]User property value. May be transferred only after approval by Federal Tax Service.
Optionalagent_infoObjectObject with data about payment agent for cart item. The description of the nested elements is given below.
Optionalsupplier_infoObjectObject with data about supplier for cart item. The description of the nested elements is given below.

Description of parameters in agent_info object:

RequiredNameTypeDescription
MandatorytypeIntegerAgent type, the available values are:
  • 1 - bank paying agent;
  • 2 - bank paying subagent;
  • 3 - paying agent;
  • 4 - paying subagent;
  • 5 - designated agent;
  • 6 - commission agent;
  • 7 - other agent.
OptionalpayingObjectObject with data about payment agent. The description of the nested elements is given below.
OptionalpaymentsOperatorObjectObject with data about Operator accepting payments.
OptionalMTOperatorObjectObject with data about Operator of the transfer.

Description of parameters in paying object:

RequiredNameTypeDescription
OptionaloperationString [1..24]Name of the transaction of the paying agent.
OptionalphonesArray of stringsPhone numbers array of the payments operator in format +N.

Description of parameters in paymentsOperator object:

RequiredNameTypeDescription
OptionalphonesArray of stringsPhone numbers array of the payments operator in format +N.

Description of parameters in MTOperator object:

RequiredNameTypeDescription
OptionalphonesArray of stringsPhone numbers array of the MT operator in format +N.
OptionalnameString [1..256]Name of the transfer operator.
OptionaladdressString [1..256]Transfer operator's address.
OptionalinnString [10..12]ITN of the transfer operator.

Description of parameters in supplier_info object:

RequiredNameTypeDescription
OptionalphonesArray of stringsSupplier's phone number array in format +N.
OptionalnameString [1..256]Supplier's name.
OptionalinnInteger [10..12]Supplier's ITN

Description of parameters in markQuantity object.

RequiredNameTypeDescription
MandatorynumeratorInteger [1..12]The numerator of the fractional part of the payment object.
MandatorydenominatorInteger [1..12]The denominator of the fractional part of the payment object.

Description of parameters in quantity object.

RequiredNameTypeDescription
MandatoryvalueNumber [1..18]Number of items in one positionId. Use a decimal point as a separator in fractions. Maximal number of decimal places is 3.
MandatorymeasureString [1..20]The unit of measurement for the quantity of item instances.

Possible values of measure parameter:

ValueDescription
0Applied to payment objects that can be implemented individually or in single units as well as if a payment object is an item subject to mandatory identification marking.
10Gram
11Kilogram
12Tonne
20Centimeter
21Decimeter
22Meter
30Square centimeter
31Square decimeter
32Square meter
40Milliliter
41Liter
42Cubic meter
50Kilowatt hour
51Gigacalorie
70Day
71Hour
72Minute
73Second
80Kilobyte
81Megabyte
82Gigabyte
83Terabyte
255Applied to other measures

Description of parameters in itemDetails object.

RequiredNameTypeDescription
OptionalitemDetailsParamsObjectParameter describing additional information regarding a line item. The description of the nested elements is given below.

Description of parameters in itemDetailsParams object.

RequiredNameTypeDescription
MandatoryvalueString [1..2000]Additional item info.
MandatorynameString [1..255]Name of the parameter describing the details of an item

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/refund.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data currency=975 \
  --data orderId=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \
  --data amount=2000 \
  --data language=en

Response example

{
  "errorCode": 0,
  "errorMessage":"Success"
}

Cancel order

To cancel a pending order, use the https://uat.dskbank.bg/payment/rest/decline.do request. Only an order that has not been completed can be cancelled. After successful execution of this request, the status of order is changed to DECLINED.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
OptionalmerchantLoginString [1..255]To cancel an order on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
MandatoryorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
MandatoryerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/decline.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data orderId=8cf0409e-857e-7f95-8ab1-b6810009d884 \
  --data orderNumber=12345678 \
  --data merchantLogin=merch_test418 \
  --data language=en

Response example

{
  "errorCode": 0,
  "errorMessage":"Success"
}

Stored credential

The below API requests allow managing stored credential transactions. Such transactions are used when a cardholder authorizes a merchant to store the payment credentials for further payments. Learn more about storing a credential here.

Stored-credential payment

The request used to make a stored-credential payment is https://uat.dskbank.bg/payment/rest/paymentOrderBinding.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorymdOrderString [1..36]Order number in the payment gateway. Unique within the payment gateway.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalipString [1..39]Buyer's IP address. IPv6 is supported in all requests. (up to 39 characters).
OptionalcvcString [3]The presence of this parameter is determined by payment type:
  • cvc is provided not for all tokenized payments;
  • cvc is not provided for MIT payments;
  • cvc is mandatory by default for all other payment types; but if permission Can process payments without confirmation of CVC is enabled, cvc becomes optional in that case.

Only digits are allowed.
OptionalthreeDSSDKBooleanPossible values: true or false. Flag showing that payment comes from 3DS SDK.
MandatorytiiStringTransaction initiator indicator. A parameter indicating what type of operation will be carried out by the initiator (Customer or Merchant). Possible values: F, U. See the values description.
OptionalemailString [1..40]Email to be displayed on the payment page. Customer's email must be passed if client notification is configured for the merchant. Example: client_mail@email.com.
For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder.
OptionalmccInteger [4]Merchant Category Code.
Using this parameter requires a special permission. You can use only the values from the predefined list of allowed MCC values. Contact the support team for details.
OptionalthreeDSProtocolVersionString3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
OptionalexternalScaExemptionIndicatorStringThe type of SCA (Strong Customer Authentication) excemption. If this parameter is specified, the transaction will be processed depending on your settings in the payment gateway: either forced SSL operation will be done, or the issuer bank will get the information about SCA excemption and decide to perform operation with or without 3DS authentication (for details, contact our support team). Allowed values:
  • LVP – Low Value Payments transaction. You can consider a transaction as low risk based on the transaction amount, the client's transactions per day or the client's total daily amount.
  • TRA – Transaction Risk Analysis transaction, i.e., the transaction that has passed successful anti-fraud check.

To pass this parameter, you must have sufficient permissions in the payment gateway.
ConditionalseTokenString [1..8192]Encrypted card data. Must be passed if used instead of the card data.
The mandatory parameters for seToken string are timestamp, UUID, bindingId, MDORDER. Click here for more information about seToken generation.
OptionalmarketplaceObjectA block with the parameters of a marketplace, i.e. a merchant who offers goods or services from different retailers.
This parameter is used if a special setting is enabled (contact the support team). See nested parameters.
OptionalclientBrowserInfoObjectA block with the data about the client's browser that is sent to ACS during the 3DS authentication. To pass this block, you should have a special setting (contact the support team). See nested parameters.

Possible values of tii (read about the stored credential types supported by the Payment Gateway here):

tii valueDescriptionTransaction typeTransaction initiatorCard data for transactionCard data saved after transactionNote
FUnscheduled CITSubsequentCustomerCustomer selects card instead of manual entryNoAn e-commerce transaction that uses a stored credential.
UUnscheduled MITSubsequentMerchantNo manual entry, Merchant passes the dataNoAn e-commerce transaction that uses a stored credential. Used for one-phase payments only.

Below are the parameters of the clientBrowserInfo block (data about the client's browser).

RequiredNameTypeDescription
OptionaluserAgentString [1..2048]Browser agent.
OptionalOSStringOperation system.
OptionalOSVersionStringOperation system version.
OptionalbrowserAcceptHeaderString [1..2048]The Accept header that tells the server what file formats (or MIME-types) the browser accepts.
OptionalbrowserIpAddressString [1..45]Browser IP address.
OptionalbrowserLanguageString [1..8]Browser language.
OptionalbrowserTimeZoneStringBrowser time zone.
OptionalbrowserTimeZoneOffsetString [1..5]The time zone offset in minutes between the user's local time and UTC.
OptionalcolorDepthString [1..2]Screen color depth, in bits.
OptionalfingerprintStringBrowser fingerprint - a unique digital identifier of the browser.
OptionalisMobileBooleanPossible values: true or false. Flag showing that a mobile device is used.
OptionaljavaEnabledBooleanPossible values: true or false. Flag showing that java is enabled in the browser.
OptionaljavascriptEnabledBooleanPossible values: true or false. Flag showing that javascript is enabled in the browser.
OptionalpluginsStringComma-separated list of plugins the browser uses.
OptionalscreenHeightInteger [1..6]Screen height, in pixels.
OptionalscreenWidthInteger [1..6]Screen width, in pixels.
OptionalscreenPrintStringData about current screen print including resolution, color depth, display metrics.
OptionaldeviceStringInformation about the cardholder's device (model, version, and so on).
OptionaldeviceTypeStringType of device on which the browser is running (mobile phone, desktop, tablet, and so on).

Example of clientBrowserInfo block:

"clientBrowserInfo":
    {
		"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.41",
		"fingerprint":850891523,
		"OS":"Windows",
		"OSVersion":"10",
		"isMobile":false,
		"screenPrint":"Current Resolution: 1536x864, Available Resolution: 1536x824, Color Depth: 24, Device XDPI: undefined, Device YDPI: undefined",
		"colorDepth":24,
		"screenHeight":"864",
		"screenWidth":"1536",
		"plugins":"PDF Viewer, Chrome PDF Viewer, Chromium PDF Viewer, Microsoft Edge PDF Viewer, WebKit built-in PDF",
		"javaEnabled":false,
		"javascriptEnabled":true,
		"browserLanguage":"it-IT",
		"browserTimeZone":"Europe/Rome",
		"browserTimeZoneOffset":-120,
		"browserAcceptHeader":"gzip",
        "browserIpAddress":"x.x.x.x"
	}

Description of parameters in marketplace object:

RequiredNameTypeDescription
MandatorymarketplaceIdString [1..11]Acquirer marketplace identifier.
ConditionalforeignRetailerIndicatorBooleanIndicates if marketplace has foreign retailers. If the retailers block is passed in the marketplace object, this parameter is optional, else – it is mandatory.
OptionalretailersArray of objectsArray containing retailers. Contains only 1 element. The description of nested elements is given below.

Description of parameters of the object that is an element of the retailers array.

RequiredNameTypeDescription
MandatoryforeignRetailerIndicatorBooleanIndicates if a retailer is foreign.

Example of a marketplace object:

"marketplace": {
    "marketplaceId": "MKT12345678",
    "foreignRetailerIndicator": true,
    "retailers": [
        {
            "foreignRetailerIndicator": false
        }
    ]
}

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalredirectString [1..512]This parameter is returned if the payment is successful and that payment did not include check for 3-D Secure involvement. Merchants can use it if they want to redirect the user to the payment gateway page. If they have their own response page then this value can be ignored.
OptionalinfoStringIf response is successful. Result of a payment attempt. Below are the possible values.
  • Your payment has been processed, redirecting...
  • Operation declined. Check the entered data and that there are enough funds on the card and repeat the operation. Redirecting...
  • Sorry, payment cannot be completed. Redirecting...
  • Operation declined. Contact the merchant. Redirecting...
  • Operation declined. Contact the bank that issued the card. Redirecting...
  • Impossible operation. Cardholder authentication completed unsuccessfully. Redirecting...
  • No connection with bank. Try again later. Redirecting...
  • Input time expired. Redirecting...
  • No response from bank received. Try again later. Redirecting...
OptionalerrorString [1..512]Error message (if response returned an error) in the language passed in the request.
OptionalprocessingErrorTypeStringType of processing error. Passed if error occurs on the processing end, and not in the Payment Gateway, while payments attemtps are not exceeded and there's been no redirect to finish page yet.
OptionaldisplayErrorMessageStringDisplayed error message.
Optional *errorTypeNameStringParameter needed by the front-end page to define the error type. Mandatory for unsuccessful payments.
OptionalacsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
OptionalpaReqString [1..255]PAReq (Payment Authentication Request) - a message that should be sent to ACS together with redirect. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This message contains the Base64-encoded data necessary for the cardholder authentication. For details see Redirect to ACS.
OptionaltermUrlString [1..512]In a successful response in case of a 3D-Secure payment. The URL address to which ACS redirects the cardholder after authentication. For details see Redirect to ACS.
OptionalbindingIdString [1..255]Identifier of a stored credential created earlier of used for the payment. Is present only if the merchant has a permission to use stored credentials.

payerData element contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/paymentOrderBinding.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data mdOrder=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \
  --data bindingId=01491394-63a6-7d45-a88f-7bce00a7d8c0 \
  --data cvc=123 \
  --data tii=F \
  --data language=en

Example of a success response for an SSL-payment (no 3-D Secure)

{
  "redirect": "https://uat.dskbank.bg/payment/merchants/temp/finish.html?orderId=01491d0b-c848-7dd6-a20d-e96900a7d8c0&lang=en",
  "info": "Your order is proceeded, redirecting...",
  "errorCode": 0
}

An example of a success response for a 3D-Secure payment

{
  "info": "Your order is proceeded, redirecting...",
  "errorCode": 0,
  "acsUrl": "https://theacsserver.com/acs/auth/start.do",
  "paReq": "eJxVUu9vgjAQ/...4BaHYvAI=",
  "termUrl": "https://uat.dskbank.bg/payment/rest/finish3ds.do?lang=en"
}

Example of a response with an error

{
  "error": "[clientId] is empty",
  "errorCode": 5,
  "is3DSVer2": false,
  "errorMessage": "[clientId] is empty"
}

Get stored credentials

The request used to get the list of client's stored credentials is https://uat.dskbank.bg/payment/rest/getBindings.do.


When sending the request, you should use the header: Content-type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
MandatoryuserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
MandatorypasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionalbindingTypeStringThe type of stored credential that is expected in reponse (if not specified, all types are returned). Possible values:
  • C – common stored credential.
  • R – recurrent stored credential.
OptionalshowExpiredBooleantrue/false parameter defining whether to show stored credentials with expired cards. Default is false.
OptionalmerchantLoginString [1..255]To get the list of client's stored credentials of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant. Both you and the specified merchant should have the permission to work with stored credentials.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalbindingsObjectElement with blocks that contain parameters of the stored credentials. See the description below.

bindings element contains blocks with the following parameters.

RequiredNameTypeDescription
OptionalmaskedPanString [1..19]Masked number of the card used for the payment. It contains real first 6 and last 4 digits of the card number in the format XXXXXX**XXXX.
OptionalpaymentWayStringPayment method (a payment with entering card data, a stored-credential transaction, etc.). Find more possible values of the parameter.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
MandatoryexpiryDateString [6]Card expiration in the following format: YYYYMM.
OptionalbindingCategoryStringThe purpose of the of stored credential that is expected in reponse. Possible values: COMMON, RECURRENT.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionaldisplayLabelString [1..16]The last 4 digits of the original PAN before tokenization .
OptionalpaymentSystemStringPayment system name. The following variants are possible:
  • VISA
  • MASTERCARD
  • AMEX
  • JCB
  • CUP

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/getBindings.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data clientId=dos-clientos \
  --data bindingType=C

Example of a success response

{
    "errorCode": "0",
    "errorMessage": "Success",
    "bindings": [
        {
            "bindingId": "44779116-41a5-7798-b072-c0a30760e2b0",
            "maskedPan": "411111**1111",
            "expiryDate": "203412",
            "paymentWay": "TOKEN_PAY",
            "paymentSystem": "CARD",
            "displayLabel": "XXXXXXXXXXXX1111",
            "bindingCategory": "COMMON"
        }
    ]
}

Get stored credentials by card number

The request used to get the list of all stored credentials of a bank card is https://uat.dskbank.bg/payment/rest/getBindingsByCardOrId.do.


When sending the request, you should use the header: Content-type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
ConditionalpanString [15..19]Payment card number (mandatory, unless bindinId is passed). pan overrides bindingId.
ConditionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionalshowExpiredBooleantrue/false parameter defining whether to show stored credentials with expired cards. Default is false.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalbindingsObjectElement with blocks that contain parameters of the stored credential: bindingId, maskedPan, expiryDate, clientId
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
OptionalmaskedPanString [1..19]Masked number of the card used for the payment. It contains real first 6 and last 4 digits of the card number in the format XXXXXX**XXXX.
OptionalexpiryDateString [6]Card expiration in the following format: YYYYMM.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/getBindingsByCardOrId.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data pan=4000001111111118

Example of a success response

{
"errorCode":"0",
"errorMessage":"Success",
"bindings": [
    {
        "bindingId":"69d6a793-afb5-79be-8ce7-63ff00a8656a",
        "maskedPan":"400000**1118",
        "expiryDate":"203012",
        "clientId":"12"
        }
    {
        "bindingId":"6a8c0738-cc88-4200-acf6-afc264d66cb0",
        "maskedPan":"400000**1118",
        "expiryDate":"203012",
        "clientId":"13"
        }
    ]
 }

Deactivate a stored credential

The request used to deactivate a stored credential is https://uat.dskbank.bg/payment/rest/unBindCard.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/unBindCard.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data bindingId=fd3afc57-c6d0-4e08-aaef-1b7cfeb093dc

Response example (error)

{
"errorCode":"2",
"errorMessage":"Binging isn't active",
}

Enable a stored credential

The request used to activate an existing stored credential that has been deactivated is https://uat.dskbank.bg/payment/rest/bindCard.do.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/bindCard.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data bindingId=fd3afc57-c6d0-4e08-aaef-1b7cfeb093dc

Response example (error)

{
  "errorCode":"2",
  "errorMessage":"Binging is active",
}

Extend a stored credential expiration date

The request used to extend the expiration date of a stored credential is https://uat.dskbank.bg/payment/rest/extendBinding.do.


When sending the request, you should use the header: Content-type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
MandatorynewExpiryInteger [6]New expiration date (year and month) in the following format: YYYYMM.
MandatorylanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/extendBinding.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data bindingId=fd3afc57-c6d0-4e08-aaef-1b7cfeb093dc
  --data newExpiry=202212
  --data language=en

Response example

{
"errorCode":"0",
"errorMessage":"Success",
}

Recurrent payment

The request used to make recurrent payments is https://uat.dskbank.bg/payment/recurrentPayment.do. It is used to register and pay for the order.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatoryorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalfeeInputInteger [0..8]Fee amount in minimum currency units. Must be enabled by respective Merchant-level permission in the Gateway.
MandatorybindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials. If this parameter is passed in this request, it means that:
  • This order can only be paid with a stored credential;
  • The payer will be redirected to a payment page where only CVC entry is required.
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionalpreAuthBooleanParameter that defines the necessity of a pre-authorization (putting the amount on hold on the customer's account until its debiting). The following values are available:
  • true - two-phase payments enabled;
  • false - one-phase payments enabled (money are charged right away).
If the parameter is missing, one-phase payment is made.
OptionalautocompletionDateString [19]The date and time when the two-phase payment must be completed automatically in the following format: 2025-12-29T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalautoReverseDateString [19]The date and time when the two-phase payment must be reversed automatically in the following format: 2025-06-23T13:02:51. The used timezone is UTC+0. To enable sending this field to the processing system, contact your technical support service.
OptionalfeaturesStringFeatures of the order. To specify multiple features, use this parameter several times in one request. As an example, below are the possible values.
  • VERIFY - If you specify this value in the order registration request, cardholder will be verified however they will not be charged any amount, so in this case amount parameter can be 0. Verification allows to make sure that a payment card is used by its legitimate owner, and further you can charge them without authentication (CVC, 3D-Secure). Even if some amount is passed in the request, the customer will not be charged if VERIFY feature is used. This value can be also used for storing the credential – in this case, the clientId parameter must be passed as well. Read more here.
  • FORCE_TDS - Force 3-D Secure payment. If a payment card does not support 3-D Secure, the transaction will fail.
  • FORCE_SSL - Force SSL payment (without 3-D Secure).
  • FORCE_FULL_TDS - After 3-D Secure authentication, PaRes status must be Y, which guarantees successful user authentication. Otherwise, the transaction will fail.
  • FORCE_CREATE_BINDING - passing this feature in the order registration request forcefully stores the credential. This functionality must be enabled by Merchant level permission in the Gateway. This value cannot be passed in a request with an existing bindingId or bindingNotNeeded = true (will cause validation error). When this feature is passed, the clientId parameter must be passed as well. If you pass both FORCE_CREATE_BINDING and VERIFY features, the order will be created for storing the credential ONLY (without payment).
OptionaladditionalParametersObjectAdditional parameters of the order that are stored in the merchant personal area for the subsequent viewing. Each new pair of a parameter name and its value must be separated by a comma. Below is a usage example.
{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Response parameters

RequiredNameTypeDescription
MandatorysuccessBooleanMain parameter which indicates directly that the request was successful. The following values are available:
  • true - request processed successfully;
  • false - request failed.

Note that the value true here simply means that the request was proccessed, not that the order was paid.
Read here to find out how to get payment status.
ConditionaldataN/AThis parameter is returned only if the payment is processed successfully. See the description below.
ConditionalerrorN/AThis parameter is returned only if the payment failed. See the description below.

payerData element contains the following parameters.

RequiredNameTypeDescription
OptionalpaymentAccountReferenceString [1..29]The unique account number of the client, which links all their payment means within the IPS (cards and tokens).

data block contains the following elements.

RequiredNameTypeDescription
MandatoryorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.

error block contains the following elements.

RequiredNameTypeDescription
MandatorycodeString [1..3]Code as an information parameter stating an error occurred.
MandatorydescriptionString [1..598]A detailed technical explanation of the error - the contents of this parameter should not to be displayed to the customer.
MandatorymessageString [1..512]Information parameter that is an error description to be displayed to the user. The parameter may vary, so it should not be hardcoded.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/payment/recurrentPayment.do \
--header 'Content-Type: application/json' \
--data-raw '{
  "userName" : "test_user",
  "password" : "test_user_password",
  "orderNumber" : "UAF-203974-DE-12",
  "language" : "EN",
  "bindingId": "bindingId",
  "amount" : 1200,
  "currency" : "975",
  "description" : "Test description",
  "additionalParameters" : {
    "firstParamName" : "firstParamValue",
    "secondParamName" : "secondParamValue"
    "email" : "email@email.com"
  }
}'

Response examples - Success

{
    "success": true,
    "data": {
        "orderId": "f7beebe4-7c9a-43cf-8e26-67ab741f9b9e"
    },
    "orderStatus": {
        "errorCode": "0",
        "orderNumber": "UAF-203974-DE-12",
        "orderStatus": 2,
        "actionCode": 0,
        "actionCodeDescription": "",
        "amount": 12300,
        "currency": "975",
        "date": 1491333938243,
        "orderDescription": "Test description",
        "merchantOrderParams": [
            {
                "name": "firstParamName",
                "value": "firstParamValue"
            },
            {
                "name": "secondParamName",
                "value": "secondParamValue"
            }
        ],
        "attributes": [],
        "cardAuthInfo": {
            "expiration": "203012",
            "cardholderName": "TEST CARDHOLDER",
            "approvalCode": "12345678",
            "paymentSystem": "VISA",
            "pan": "6777770000**0006"
        },
        "authDateTime": 1491333939454,
        "terminalId": "11111",
        "authRefNum": "111111111111",
        "paymentAmountInfo": {
            "paymentState": "DEPOSITED",
            "approvedAmount": 12300,
            "depositedAmount": 12300,
            "refundedAmount": 0
        },
        "bankInfo": {
            "bankCountryName": "<unknown>"
        },
        "operations": [
            {
                "amount": 12300,
                "cardHolder": "TEST CARDHOLDER",
                "authCode": "123456"
            }
        ]
    }
}

Error

{
  "error": {
    "code": "10",
    "description": "Order with this number is already registered in the system.",
    "message": "Order with this number is already registered in the system."
  },
  "success": false
}

Creating a stored credential without payment

To create a stored credential without performing payment, use the https://uat.dskbank.bg/payment/rest/createBindingNoPayment.do request.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatoryclientIdString [0..255]Customer number (ID) in the merchant's system. Used to implement the functionality of stored-credential transactions.
OptionalbindingStrengthStringThe type of payment on the base of which the credential was stored. It is used for migration of stored credentials from the merchant's system.
Possible values:
  • TDS - credential was stored as a result of full 3DS payment (ECI=02 or 05)
  • SSL - credential was stored as a result of SSL payment (ECI=07)
  • TDS_SSL - credential was stored as a result of SSL payment with a 3DS authentication attempt (ECI=01 or 06)
  • NO_PAYMENT - credential was stored without payment (default value)

All values other than NO_PAYMENT require passing additional parameters:
  • initNetworkReferenceNumber - identifier of initial payment for storing a credential
  • networkReferenceNumber - identifier of the last payment by the stored credential
MandatorycardholderNameString [1..26]Cardholder's name in Latin characters. Allowed symbols: Latin characters, period, space.
MandatoryexpiryDateString [6]Card expiration in the following format: YYYYMM.
MandatorypanString [1..19]Payment card number
OptionaladditionalParametersObjectAdditional parameters of the order that are stored in the merchant personal area for the subsequent viewing. Each new pair of a parameter name and its value must be separated by a comma. Below is a usage example.
{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
OptionalmerchantLoginString [1..255]To create a stored credential for another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
OptionalemailString [1..40]The payer's email address.
OptionalphoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalerrorBooleanA flag indicating that the response contains an error. Allowed values: true or false. Takes the value true, if errorCode value differs from 0.
OptionalbindingIdString [1..255]Identifier of a stored credential created earlier of used for the payment. Is present only if the merchant has a permission to use stored credentials.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionalcardholderNameString [1..26]Cardholder's name in Latin characters. Allowed symbols: Latin characters, period, space.
OptionalexpiryDateString [6]Card expiration in the following format: YYYYMM.
OptionalmaskedPanString [1..19]Masked number of the card used for the payment. It contains real first 6 and last 4 digits of the card number in the format XXXXXX**XXXX.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/createBindingNoPayment.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data clientId=159753456
  --data pan=5555555555555599
  --data expiryDate=203412
  --data cardholderName=TEST CARDHOLDER

Request example for migration of stored credentials

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/createBindingNoPayment.do \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data merchantLogin=some_merchant \
  --data pan=5555555555555599 \
  --data expiryDate=203412 \
  --data 'cardholderName=TEST CARDHOLDER ' \
  --data clientId=client_id \
  --data bindingStrength=TDS \
  --data email=email@test.com \
  --data 'phone=+995555000000' \
  --data 'additionalParameters={
	"networkReferenceNumber": "network_reference_number",
	"initNetworkReferenceNumber": "init_network_reference_number"
}'

Response example

{
  "maskedPan": "555555**5599",
  "expiryDate": "203412",
  "cardholderName": "TEST CARDHOLDER",
  "clientId": "159753456",
  "bindingId": "47dbe208-e531-4997-9c36-25a5707d3cb9",
  "errorCode": 0,
  "error": false
}

3DS utilities

Finishing a 3DS2 payment via API

The method used for finishing a 3DS2 order via API is https://uat.dskbank.bg/payment/rest/finish3dsVer2Payment.do


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorythreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
RequiredNameTypeDescription
OptionalthreeDSVer2MdOrderString [1..36]Order number which was registered in the first part of the request within 3DS2 transaction. Mandatory for 3DS2 authentication.
If this parameter is present in the request, the mdOrder value passed in it overrides, and in this case the order gets paid right away instead of being registered.
This parameter is used only for instant payments, i.e., when the order is registered and payed via the same request.

Response parameters

RequiredNameTypeDescription
MandatoryerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
MandatoryerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalredirectString [1..512]This parameter is returned if the payment is successful and that payment did not include check for 3-D Secure involvement. Merchants can use it if they want to redirect the user to the payment gateway page. If they have their own response page then this value can be ignored.
Optionalis3DSVer2BooleanPossible values: true or false. Flag showing that payment uses 3DS2.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/finish3dsVer2Payment.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data threeDSServerTransId=33b17cb5-b4a5-48ac-a3b8-bc8d6d979a46 \
  --data userName=test_user \
  --data password=test_user_password \

Response example

{
    "redirect": "http://test.com?orderId=f61e2a41-34b9-7a2d-b4d6-83ac00c305c8&lang=en",
    "errorCode": 0,
    "is3DSVer2": true
}

Request example with threeDSVer2MdOrder parameter

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/finish3dsVer2Payment.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data threeDSServerTransId=33b17cb5-b4a5-48ac-a3b8-bc8d6d979a46 \
  --data threeDSVer2MdOrder=fbcb596f-25ba-70e7-a6cf-4fb100c305c8 \
  --data userName=test_user \
  --data password=test_user_password \

Response example

{
    "redirect": "http://test.com?orderId=f61e2a41-34b9-7a2d-b4d6-83ac00c305c8&lang=en",
    "errorCode": 0,
    "is3DSVer2": true
}

Miscellaneous

Card verification

https://uat.dskbank.bg/payment/rest/verifyCard.do method can be used in verification opertaions. The payment is not made and goes directly to REVERSED status.


When sending the request, you should use the header: Content-Type: application/x-www-form-urlencoded

Request parameters

RequiredNameTypeDescription
OptionaluserNameString [1..50]Merchant 's API account login (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
OptionalpasswordString [1..30]Merchant's API account password (mandatory, unless token is passed). If you pass your login and password to authenticate in the payment gateway, do not pass token parameter.
OptionaltokenString [1..256]Value that is used for merchant authentication when requests are sent to the payment gateway (mandatory, unless userName and password are passed). If you pass this parameter, do not pass userName and password.
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalpanString [1..19]Payment card number
OptionalcvcString [3]The presence of this parameter is determined by payment type:
  • cvc is provided not for all tokenized payments;
  • cvc is not provided for MIT payments;
  • cvc is mandatory by default for all other payment types; but if permission Can process payments without confirmation of CVC is enabled, cvc becomes optional in that case.

Only digits are allowed.
OptionalexpiryInteger [6]Card expiration in the following format: YYYYMM. Mandatory, if neither seToken nor bindingId is passed.
OptionalcardholderNameString [2..45]Cardholder's name in Latin characters. This parameter is passed only after an order is paid.
Such special characters as space, full stop, hyphen, apostrophe ( . - ') can be used. The use of other characters is prohibited.
OptionalbackUrlString [1..512]URL the user is to be redirected to if payment is successful.
Use full path with protocol included, like this - https://test.com (not test.com).
Otherwise the user will be redirected to a URL composed like this: http://paymentGatewayURL/merchantURL
OptionalfailUrlString [1..512]The address to which the user is to be redirected in case of a failed payment. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionaldescriptionString [1..598]Order description in any format.
To enable sending this field to the processing system, contact the technical support service.
It is not allowed to fill this parameter with personal data or payment data (card numbers, etc.). This requirement is due to the fact that the order description is not masked in Merchant Portal and log files.
OptionallanguageString [2]ISO 639-1 encoded language key. If the language is not specified, the default language specified in the store settings is used.
Supported languages: en,ru,el,ro,bg,pt,sw,hu,it,pl,de,fr,kh,cn,es,ka,da,et,fi,lt,lv,nl,sv.
OptionalreturnUrlString [1..512]The address to which the user will be redirected if the payment is successful. The address must be specified in full including the protocol used (for example, https://mybestmerchantreturnurl.com instead of mybestmerchantreturnurl.com). Otherwise, the user will be redirected to the address of the following type https://uat.dskbank.bg/payment/<merchant_address>.
OptionalthreeDSServerTransIdString [1..36]Transaction identifier created on 3DS Server. Mandatory for 3DS authentication.
OptionalthreeDSVer2FinishUrlString [1..512]URL where Customer should be redirected after authentication on ACS Server.
ConditionalthreeDSVer2MdOrderString [1..36]Order number which was registered in the first part of the request within 3DS2 transaction. Mandatory for 3DS2 authentication.
If this parameter is present in the request, the mdOrder value passed in it overrides, and in this case the order gets paid right away instead of being registered.
This parameter is used only for instant payments, i.e., when the order is registered and payed via the same request.
OptionalthreeDSSDKBooleanPossible values: true or false. Flag showing that payment comes from 3DS SDK.
OptionalbillingPayerDataObjectA block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side. See nested parameters.
OptionalshippingPayerDataObjectObject containing customer delivery data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalpreOrderPayerDataObjectObject containing pre-order data. It is used for further 3DS authentication of the client. See nested parameters.
OptionalorderPayerDataObjectObject containing data about the order payer. It is used for further 3DS authentication of the client. See nested parameters.
OptionalbillingAndShippingAddressMatchIndicatorString [1]Indicator for matching the cardholder's billing address and shipping address. This parameter is used for further 3DS authentication of the customer.
Possible values:
  • Y - the cardholder's billing address and shipping address match;
  • N - cardholder billing address and shipping address do not match.

Below are the parameters of the billingPayerData block (data about the client registration address).

A block with the client's registration data (address, postal code) necessary for passing the address verification within the AVS/AVV services. Mandatory if the feature is enabled for the merchant on Payment Gateway side.

Description of parameters in shippingPayerData object:

RequiredNameTypeDescription
OptionalshippingCityString [1..50]The customer's city (from the delivery address)
OptionalshippingCountryString [1..50]The customer's country
OptionalshippingAddressLine1String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine2String [1..50]The customer's primary address (from the shipping address)
OptionalshippingAddressLine3String [1..50]The customer's primary address (from the shipping address)
OptionalshippingPostalCodeString [1..16]The customer's zip code for delivery
OptionalshippingStateString [1..50]Customer's state/region (from delivery address)
OptionalshippingMethodIndicatorInteger [2]Shipping Method Indicator.
Possible values:
  • 01 - delivery to the cardholder's billing address
  • 02 - delivery to another address verified by Merchant
  • 03 - delivery to an address other than the cardholder's primary (settlement) address
  • 04 - shipment to the store/self-collection (the store address should be specified in the relevant delivery parameters)
  • 05 - Digital distribution (includes online services and e-gift cards)
  • 06 - travel and event tickets that are not deliverable
  • 07 - Other (e.g. games, non-deliverable digital goods, digital subscriptions, etc.)
OptionaldeliveryTimeframeInteger [2]Product delivery timeframe.
Possible values:
  • 01 - digital distribution
  • 02 - same-day delivery
  • 03 - overnight delivery
  • 04 - delivery within 2 days after payment and later
OptionaldeliveryEmail String [1..254]Target email address for delivery of digital distribution. Note that it is preferrable to pass the email in a separate email parameter of the request. The deliveryEmail parameter specified in this block is only used to fill MerchantRiskIndicator during 3DS authorization.

Description of parameters in preOrderPayerData object:

RequiredNameTypeDescription
OptionalpreOrderDateString [10]Expected date when delivery will be available (for pre-ordered purchases), in the format YYYYYYMMDD.
OptionalpreOrderPurchaseIndInteger [2]Indicator of a customer placing an order for available or future delivery.
Possible values:
  • 01 - delivery available;
  • 02 - future delivery
OptionalreorderItemsIndInteger [2]An indicator that the customer is rebooking a previously paid delivery as part of a new order.
Possible values:
  • 01 - order placed for the first time;
  • 02 - repeated order

Description of parameters in orderPayerData object:

RequiredNameTypeDescription
OptionalhomePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.
OptionalworkPhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

ConditionalmobilePhoneString [7..15]Customer's phone number. It is always necessary to specify the country code, but you can specify or omit the + sign or 00 at the beginning. The number must be 7 to 15 digits long. Thus, the following options are valid:
  • +35799988877;
  • 0035799988877;
  • 35799988877.

For payment by VISA with 3DS authorization, it is necessary to specify either phone or email of the cardholder. If you have a setting to display phone number on the payment page and have specified an invalid number, the customer will have a possibility to correct it on the payment page.

Response parameters

RequiredNameTypeDescription
OptionalerrorCodeString [1..2]Information parameter in case of an error, which may have different code values:
  • 0 value - indicates success of the request processing;
  • another number value (1-99) - indicates an error for more details of which errorMessage parameter must be inspected.
It also can be missing if the result has not caused any error.
OptionalerrorMessageString [1..512]Information parameter that is an error description in a case of error occurance. errorMessage value can vary, so it should not be hardcoded.
Language of the description is set in language parameter of the request.
OptionalorderIdString [1..36]Order number in the payment gateway. Unique within the payment gateway.
OptionalorderNumberString [1..36]Order number (ID) in the merchant's system, must be unique for each order.
OptionalauthCodeInteger [6]Deprecated parameter (not used). Its value is always 2 regardless the order status and authorization code of the processing system.
OptionalactionCodeStringResponse code from the processing bank. Contains a numeric value. See the list of action codes here.
OptionalactionCodeDescriptionString [1..512]actionCode description returned from the processing bank.
OptionaltimeIntegerTime when transaction took place as the amount of milliseconds since 00:00 January 1, 1970 GMT (UNIX time). Example: 1740392720718 (Corresponds to February 24, 2025, 10:25:20 (UTC)).
OptionaleciInteger [1..4]Electronic commerce indicator. The indicator is specified only after an order has been paid and in case the corresponding permission is present. Below is the explanation of ECI codes.
  • ECI=01 or ECI=06 - merchant supports 3-D Secure, payment card does not support 3-D Secure, payment is processed based on CVV2/CVC code.
  • ECI=02 or ECI=05 - both merchant and payment card support 3-D Secure;
  • ECI=07 - merchant does not support 3-D Secure, payment is processed based on CVV2/CVC code.
OptionalamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalcurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalrrnInteger [1..12]Reference Retrieval Number - transaction ID assigned by Acquiring Bank.
OptionalacsUrlString [1..512]The URL address for redirecting to ACS. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. For details see Redirect to ACS.
OptionaltermUrlString [1..512]In a successful response in case of a 3D-Secure payment. The URL address to which ACS redirects the cardholder after authentication. For details see Redirect to ACS.
OptionalpaReqString [1..255]PAReq (Payment Authentication Request) - a message that should be sent to ACS together with redirect. It is returned in a successful response in case of a 3D-Secure payment, when redirect to the ACS is needed. This message contains the Base64-encoded data necessary for the cardholder authentication. For details see Redirect to ACS.

Examples

Request example

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/verifyCard.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data pan=4000001111111118 \
  --data cvc=123 \
  --data expiry=203012

Response example

{
  "errorCode": "0",
  "errorMessage": "Success",
  "orderId": "cfc238ca-68f9-745c-ba7e-eb9100af79e0",
  "orderNumber": "12017",
  "rrn": "111111111115",
  "authCode": "123456",
  "actionCode": 0,
  "actionCodeDescription": "",
  "time": 1595284781180,
  "eci": "07",
  "amount": 0,
  "currency": "975"
}

Recurring tasks API

The below API allows you to configure tasks for recurring payments. The configured payments are futher automatically executed according to the created schedule.

Create task

The request used to create a recurrent task is https://uat.dskbank.bg/recurrent/v1/task/create.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
OptionalmerchantLoginString [1..30]To create a task on behalf of another merchant, specify the merchant's API account login in this parameter.
Can be used only if you have the permission to see the transactions of other merchants or if the specified merchant is your child merchant.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskObjectInformation about the recurring task being created. See nested parameters.

Below are the parameters of the task block (data about the recurrent task being created).

RequiredNameTypeDescription
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials.
OptionalcardHolderString [1..26]The name of the holder of the card in Latin characters.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
MandatorycurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalexpiryIntegerCard expiration in the following format: YYYYMM.
MandatorymerchantTaskUuidStringThe unique identifier of the task being created within the merchant.
OptionalpanString [1..19]Masked number of the card that has been used for the payment.
OptionalattributesObjectA set of task attributes, structure:
{name1:value1,…,nameN:valueN}. The exact list of attributes should be coordinated with the bank.
OptionalparamsObjectA set of additional free-form parameters, structure:
{name1:value1,…,nameN:valueN}
MandatoryscheduleDataObjectA set of task frequency shedule data. See nested parameters.

Below are the parameters of the scheduleData block (data about the task frequency shedule).

RequiredNameTypeDescription
MandatoryscheduledSinceString [26]Date/time from which the task should start. Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ
MandatoryscheduledTillString [26]Date/time before which the task should be completed. Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ
MandatorytimeUnitStringTime unit. Allowed values: Nanos, Micros, Millis, Seconds, Minutes, Hours, HalfDays, Days, Weeks, Months, Years, Decades, Centuries, Millennia, Eras, Forever
MandatoryvalueintegerFrequency value

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the created recurring task. See nested parameters.

Below are the parameters of the task block (data about the created recurrent task).

RequiredNameTypeDescription
MandatorycreatedStringDate/time the task was created.
MandatorymerchantLoginStringMerchant login.
MandatorymerchantTaskUuidStringThe unique identifier of the task being created within the merchant.
MandatorynextPaymentDateStringNext payment date.
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/create \
--header 'Content-Type: application/json' \
--data '{
    "username":"test_user",
    "password":"test_user_password",
    "locale":"en",
    "task":{
        "merchantTaskUuid":"c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82",
        "clientId":"TestClient",
        "bindingId": "5eb094e1-4a96-7b33-af5f-a29407a73a93",
        "scheduleData": {
            "value":"1",
            "timeUnit":"DAYS",
            "scheduledSince":"2024-01-24T00:00:00.000+0300",
            "scheduledTill":"2024-02-24T00:00:00.000+0300"
        },
        "amount":100,
        "currency":170,
        "params":{
            "description":"desc",
            "phone":"576015555556"
        }
    }
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "created": "2024-01-24T10:23:35.434591+03:00",
    "merchantLogin": "testMerch",
    "taskUuid": "8a6a5350-1be3-456e-8e81-e5c7eafbd699",
    "nextPaymentDate": "2024-01-24T00:00:00+03:00",
    "state": "CREATED",
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82"
  }
}

Modify task

The request used to modify an existing recurrent task is https://uat.dskbank.bg/recurrent/v1/task/modify.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskObjectInformation about the recurring task being modified. See nested parameters.

Below are the parameters of the task block (data about the recurrent task being modified).

RequiredNameTypeDescription
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials.
OptionalcardholderStringCardholder's name in Latin characters.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
OptionalexpiryString [6]Card expiration in the following format: YYYYMM.
OptionalpanString [1..19]Masked number of the card that has been used for the payment.
OptionalattributesObjectA set of task attributes, structure:
{name1:value1,…,nameN:valueN}. The exact list of attributes should be coordinated with the bank.
OptionalparamsObjectA set of additional free-form parameters, structure:
{name1:value1,…,nameN:valueN}
MandatorytaskIdentifierObjectThe unique identifier or set of identifiers of the task. See nested parameters.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the created recurring task. See nested parameters.

Below are the parameters of the task block (data about the modified recurrent task).

RequiredNameTypeDescription
MandatoryupdatedStringDate/time of the last update of the task.
MandatorymerchantLoginStringMerchant login.
MandatorymerchantTaskUuidStringThe unique identifier of the task within the merchant.
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/modify \
--header 'Content-Type: application/json' \
--data '{
    "username":"test_user",
    "password":"test_user_password",
    "task":{
        "taskIdentifier": {
           "taskUuid":"9ae9f36d-0ba3-4686-87c4-a5ec77c562a4"
       },
        "bindingId":"5eb094e1-4a96-7b33-af5f-a29407a73a93",
        "clientId":"TestClient",
        "params":{
            "description":"new description",
            "phone":"+576015555558"
        }
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "updated": "2024-01-23T14:10:03.730644+03:00",
    "merchantLogin": "testMerch",
    "taskUuid": "9ae9f36d-0ba3-4686-87c4-a5ec77c562a4",
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c80"
  }
}

Get task information

The request used to get information about a recurrent task is https://uat.dskbank.bg/recurrent/v1/task/get.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskIdentifierObjectThe unique identifier or set of identifiers of the task. See nested parameters.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the recurrent task. See nested parameters.

Below are the parameters of the task block (data about a recurrent task).

RequiredNameTypeDescription
MandatoryamountInteger [0..12]Payment amount in minor currency units (e.g. in cents).
OptionalattemptsHistoryArray of objectsAll payment attempts in chronological order. Each payment attempt is an attemptsHistory object. See nested parameters.
OptionalbindingIdString [1..255]Identifier of an already existing stored credential. This is the card ID tokenized by the Gateway. Can be used only if the merchant has the permission to work with stored credentials.
OptionalcardHolderString [1..26]The name of the holder of the card in Latin characters.
OptionalclientIdString [0..255]Customer number (ID) in the merchant's system — up to 255 characters. Used to implement the functionality of stored-credential transactions. Can be returned in the response if the merchant is allowed to store credentials.
Specifying this parameter in stored-credential transactions is mandatory. Otherwise, a payment will be unsuccessful.
MandatorycreatedStringDate/time the task was created.
MandatorycurrencyString [3]ISO 4217 encoded currency key. If not specified, the default value is used. Only digits are allowed.
OptionalexpiryInteger [6]Card expiration in the following format: YYYYMM.
MandatorylastPaymentDateStringLast payment date.
OptionalmaskedPanStringMasked pan of the card.
MandatorymerchantLoginString [1..30]The login of the merchant.
MandatorymerchantTaskUuidStringThe unique identifier of the task within the merchant.
MandatorynextPaymentDateStringNext payment date.
OptionalparamsObjectA set of additional free-form parameters, structure:
{name1:value1,…,nameN:valueN}
MandatoryscheduleDataObjectA set of task frequency shedule data. See nested parameters.
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.
MandatoryupdatedStringDate/time of the last update of the task.

Below are the parameters of the scheduleData block (data about the task frequency shedule).

RequiredNameTypeDescription
MandatoryscheduledSinceString [26]Date/time from which the task should start. Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ
MandatoryscheduledTillString [26]Date/time before which the task should be completed. Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ
MandatorytimeUnitStringTime unit. Allowed values: Nanos, Micros, Millis, Seconds, Minutes, Hours, HalfDays, Days, Weeks, Months, Years, Decades, Centuries, Millennia, Eras, Forever
MandatoryvalueintegerFrequency value

Below are the parameters of the attemptsHistory block (data about the task frequency shedule).

RequiredNameTypeDescription
MandatoryexecutedStringDate/time of the payment attempt. Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ
OptionalorderIdStringUnique identifier of the transaction in the payment gateway
OptionalorderNumberStringOrder number in the payment gateway
OptionalorderNumberStringOrder number in the payment gateway
MandatorypaymentAttemptUuidStringUnique identifier of the payment attempt
MandatorypaymentUuidStringUnique identifier of the payment
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired
MandatorytechnicalAttemptBooleanFlag indicating whether the attempt was technical

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/get \
--header 'Content-Type: application/json' \
--data '{
    "username":"test_user",
    "password":"test_user_password",
    "taskIdentifier": {
           "taskUuid":"8a6a5350-1be3-456e-8e81-e5c7eafbd699"
     }
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "taskUuid": "8a6a5350-1be3-456e-8e81-e5c7eafbd699",
    "state": "ACTIVE",
    "merchantLogin": "testMerch",
    "bindingId": "5eb094e1-4a96-7b33-af5f-a29407a73a93",
    "clientId": "TestClient",
    "created": "2024-01-24T10:23:35.434591+03:00",
    "updated": "2024-01-24T10:23:35.434591+03:00",
    "lastPaymentDate": "2024-01-24T00:00:00+03:00",
    "nextPaymentDate": "2024-01-25T00:00:00+03:00",
    "scheduleData": {
      "scheduledSince": "2024-01-24T00:00:00.000+0300",
      "scheduledTill": "2024-02-24T00:00:00.000+0300",
      "value": 1,
      "timeUnit": "DAYS"
    },
    "amount": 100,
    "currency": 170,
    "params": {
      "phone": "576015555556",
      "description": "description"
    },
    "attemptsHistory": [
      {
        "paymentAttemptUuid": "6873d7dc-4366-45c5-9de6-bc6e0aa05b3d",
        "paymentUuid": "1a450005-ad46-4474-8940-eb154822296c",
        "state": "SUCCEEDED",
        "executed": "2024-01-24T10:23:41.788436+03:00",
        "technicalAttempt": false,
        "orderId": "d2d56b04-124b-77ab-9034-9f2307a73a93",
        "orderNumber": "E5DFEDE990694FCFB5246AEC2612A355"
      }
    ],
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82"
  }
}

Terminate task

The request used to terminate a recurrent task is https://uat.dskbank.bg/recurrent/v1/task/terminate.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskIdentifierObjectThe unique identifier or set of identifiers of the task. See nested parameters.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the recurrent task. See nested parameters.

Below are the parameters of the task block (data about the terminated recurrent task).

RequiredNameTypeDescription
MandatoryupdatedStringDate/time of the last update of the task.
MandatorymerchantLoginStringMerchant login.
MandatorymerchantTaskUuidStringThe unique identifier of the task within the merchant.
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/terminate \
--header 'Content-Type: application/json' \
--data '{
    "username":"test_user",
    "password":"test_user_password",
    "taskIdentifier": {
        "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82",
        "merchantLogin": "testMerch"
    }
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "updated": "2024-01-24T10:23:35.434591+03:00",
    "merchantLogin": "testMerch",
    "taskUuid": "8a6a5350-1be3-456e-8e81-e5c7eafbd699",
    "state": "TERMINATED",
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82"
  }

Activate task

The request used to activate a recurrent task is https://uat.dskbank.bg/recurrent/v1/task/activate.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskIdentifierObjectThe unique identifier or set of identifiers of the task. See nested parameters.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the recurrent task. See nested parameters.

Below are the parameters of the task block (data about the activated recurrent task).

RequiredNameTypeDescription
MandatoryupdatedStringDate/time of the last update of the task.
MandatorymerchantLoginStringMerchant login.
MandatorymerchantTaskUuidStringThe unique identifier of the task within the merchant.
MandatorynextPaymentDateStringNext payment date.
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/activate \
--header 'Content-Type: application/json' \
--data '{
    "username":"test_user",
    "password":"test_user_password",
    "taskIdentifier": {
        "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82",
        "merchantLogin": "testMerch"
    }
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "updated": "2024-01-24T10:23:35.434591+03:00",
    "merchantLogin": "testMerch",
    "taskUuid": "8a6a5350-1be3-456e-8e81-e5c7eafbd699",
    "state": "ACTIVE",
    "nextPaymentDate": "2024-01-25T00:00:00+03:00",
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82"
  }
}

Terminate tasks

The request used to terminate multiple recurrent tasks is https://uat.dskbank.bg/recurrent/v1/task/batchTerminate.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskIdentifiersArray of ObjectsIdentifiers of tasks to be terminated. Each task is a taskIdentifier object. See nested parameters.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/task/batchTerminate \
--header 'Content-Type: application/json' \
--data '{
    "locale":"EN",
    "username":"testUser",
    "password":"testPwd",
    "tasksIdentifiers":[
        {
            "taskUuid":"0ba73819-65f8-43c4-9dc4-3870cb10416b"
        },
        {
            "taskUuid":"0ba73820-65f8-43c4-9dc4-3870cb10416b"            
        }
    ]
}'

Example of a success response

{   
  "status": "SUCCESS" 
}

Skip payment

The request used to skip a particular payment of a recurrent task is https://uat.dskbank.bg/recurrent/v1/payment/skip.


When sending the request, you should use the header: Content-Type: application/json

Request parameters

RequiredNameTypeDescription
OptionallocaleString [2]Language in ISO 639-1. If not specified, the default language will be used.
MandatoryuserNameString [1..50]Merchant's API account login.
MandatorypasswordString [1..30]Merchant's API account password.
MandatorytaskIdentifierObjectThe unique identifier or set of identifiers of the task. See nested parameters.
MandatorypaymentNumberIntegerNumber of the recurring payment to be skipped.

Below are the parameters of the taskIdentifier block (set of identifiers for a recurrent task).

RequiredNameTypeDescription
OptionalmerchantLoginStringMerchant login. Should be present for searching by merchantTaskUuid.
OptionalmerchantTaskUuidStringThe unique identifier of the task being created within the merchant. Required if taskUuid is not present.
OptionaltaskUuidStringThe unique identifier of the task within the recurring payments service. Required if merchantTaskUuid is not present.

Response parameters

RequiredNameTypeDescription
MandatorystatusStringResponse status. Allowed values: SUCCESS, FAIL.
MandatorytaskObjectInformation about the recurrent task. See nested parameters.

Below are the parameters of the task block (data about the activated recurrent task).

RequiredNameTypeDescription
MandatoryupdatedStringDate/time of the last update of the task.
MandatorymerchantLoginStringMerchant login.
MandatorymerchantTaskUuidStringThe unique identifier of the task within the merchant.
MandatorynextPaymentDateStringNext payment date.
MandatorytaskUuidStringThe unique identifier of the task within the recurring payments service.
MandatorystateStringTask state. Allowed values:
  • CREATED - created, no payments yet
  • ACTIVE - created and at least one payment has been already proceeded
  • FAILED - exceeded max payment attempts and deactivated
  • COMPLETED - reached EOL date, all payments completed
  • TERMINATED - terminated by either client via processing or merchant
  • EXPIRED - card expired

Examples

Request example

curl --request POST \
--url https://uat.dskbank.bg/recurrent/v1/payment/skip \
--header 'Content-Type: application/json' \
--data '{
    "locale":"EN",
    "username":"test_user",
    "password":"test_user_password",
    "taskIdentifier": {
           "taskUuid":"7ae881fb-aee0-4446-883c-8087512bd26a"
     },
    "paymentNumber": 2
}'

Example of a success response

{
  "status": "SUCCESS",
  "task": {
    "updated": "2024-01-24T10:23:35.434591+03:00",
    "merchantLogin": "testMerch",
    "taskUuid": "8a6a5350-1be3-456e-8e81-e5c7eafbd699",
    "state": "ACTIVE",
    "nextPaymentDate": "2024-01-25T00:00:00+03:00",
    "merchantTaskUuid": "c0fdc30e-0ba9-4d14-ac0b-44fe9d4d7c82"
  }
}

Callback notifications

The payment gateway API allows you to receive callback notifications on changes of payment statuses.

General information

Events that can trigger notifications

You can receive notifications about changes in order payment status and other events in the Payment Gateway.

The most common notifications describe changes in order status, such as:

More advanced integrations may make use of additional callback triggers like:

The trigger type is passed in the operation parameter of the callback (see details below). For convenience, the callbacks for addional triggers can be directed to another URL by using the dynamicCallbackUrl parameter in order registration requests.

Integration with callback

Instead of the last step of the Redirect integration you may choose to use one of the following approaches.

Make use of returnUrl

When your web-site code located at returnUrl (for example, https://mybestmerchantreturnurl.com/?back&orderId=61c33664-85a0-7d6b-af26-09ee009c4000&lang=en) identifies a cardholder being redirected back from the gateway after a payment attempt, you can check the order status using the API request getOrderStatusExtended.
This option is the easiest one but it is not completely reliable because the cardholder redirect may fail (for example, as a result of a broken connection or the cardholder closing the browser) and returnUrl may not get the "trigger" to proceed with getOrderStatusExtended.

getOrderStatusExtended.do

curl --request POST \
  --url https://uat.dskbank.bg/payment/rest/getOrderStatusExtended.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data orderId=016b6f47-4628-7ea2-80f5-6c6e00a7d8c0 \
  --data language=en
{
  "errorCode": "0",
  "errorMessage": "Success",
  "orderNumber": "11008",
  "orderStatus": 2,
  "actionCode": 0,
  "actionCodeDescription": "",
  "amount": 2000,
  "currency": "975",
  "date": 1618577250840,
  "orderDescription": "my_first_order",
  "merchantOrderParams": [
    {
      "name": "browser_language_param",
      "value": "en"
    },
    {
      "name": "browser_os_param",
      "value": "UNKNOWN"
    },
    {
      "name": "user_agent",
      "value": "curl/7.75.0"
    },
    {
      "name": "browser_name_param",
      "value": "DOWNLOAD"
    }
  ],
  "transactionAttributes": [],
  "attributes": [
    {
      "name": "mdOrder",
      "value": "016b7747-c4ed-70b3-bc36-fdd400a7d8c0"
    }
  ],
  "cardAuthInfo": {
    "maskedPan": "555555**5599",
    "expiration": "202412",
    "cardholderName": "TEST CARDHOLDER",
    "approvalCode": "123456",
    "pan": "555555**5599"
  },
  "authDateTime": 1618577288377,
  "terminalId": "123456",
  "authRefNum": "931793605827",
  "paymentAmountInfo": {
    "paymentState": "DEPOSITED",
    "approvedAmount": 2000,
    "depositedAmount": 2000,
    "refundedAmount": 0
  },
  "bankInfo": {
    "bankCountryCode": "UNKNOWN",
    "bankCountryName": "&ltUnknown&gt"
  }
}

Make use of a signed gateway callback

If you know how to handle digital certificates and signatures, you can use a digitally signed callback with a checksum that the gateway may be configured to send. A checksum is used for verification and security purposes. After the callback signature has been verified on your side, there is no need to send getOrderStatusExtended because the callback includes the order status.

https://mybestmerchantreturnurl.com/callback/?mdOrder=1234567890-098776-234-522&orderNumber=0987&checksum=DBBE9E54D42072D8CAF32C7F660DEB82086A25C14FD813888E231A99E1220AB3&operation=deposited&status=1

Types of notifications

Notifications without checksums

These notifications contain only information about the order, so potentially, the merchant risks accepting a notification sent by an attacker as genuine.

Notifications with checksums

These notifications contain an authentication code in addition to order information. The authentication code is a checksum of order data. This checksum allows to make sure that the callback notification is genuine and was sent by the payment gateway.
There are two methods of implementing callback notifications with checksums:


The public key can be downloaded from the payment gate Web console. For more security, it is recommended to use asymmetric cryptography.
To enable notifications with checksums as well as to get the relevant cryptographic key, please, contact our technical support.

Requirements for SSL certificates on the store’s website

If a callback is delivered over HTTPS connection, the identity of the merchant's website must be verified with an SSL certificate issued and signed by a trusted certificate authority (check the table below). Self-signed certificates are not allowed.

RequirementDescription
Signature algorithm.Not lower than SHA-256.
Supported certification authorities.Below are examples of organizations that register digital certificates:

URL format for callback notifications

POST and GET requests can be sent.

Below is an example for a default GET request, without additional parameters. The parameters are received in the query.

Notification without a checksum (GET)

https://mybestmerchantreturnurl.com/callback/?mdOrder=
1234567890-098776-234-522&orderNumber=0987&operation=deposited&
callbackCreationDate=Mon Jan 31 21:46:52 UTC 2022&status=0

Notification with a checksum (GET)

https://mybestmerchantreturnurl.com/callback/?mdOrder=1234567890-098776-234-522&
orderNumber=0987&checksum=DBBE9E54D42072D8CAF32C7F660DEB82086A25C14FD813888E231A99E1220AB3&
operation=deposited&callbackCreationDate=Mon Jan 31 21:46:52 UTC 2022&status=0

For POST callbacks, you will receive the same parameters in HTTP body (instead of query parameters).

Notification without a checksum (POST)

https://mybestmerchantreturnurl.com/callback/
mdOrder=
1234567890-098776-234-522&orderNumber=0987&operation=deposited&
callbackCreationDate=Mon Jan 31 21:46:52 UTC 2022&status=0

Notification with a checksum (POST)

https://mybestmerchantreturnurl.com/callback/
mdOrder=1234567890-098776-234-522&
orderNumber=0987&checksum=DBBE9E54D42072D8CAF32C7F660DEB82086A25C14FD813888E231A99E1220AB3&operation=deposited&callbackCreationDate=Mon Jan 31 21:46:52 UTC 2022&status=0

The passed parameters are shown in the table below.

The table contains only basic parameters. You can also use additional parameters if they are configured in Payment Gateway.

ParameterDescription
mdOrderUnique order number stored in the payment gateway.
orderNumberUnique order number (identifier) in merchant's system.
checksumAuthentication code (checksum) resulting from received parameters.
operationType of event that triggered notification:
  • approved - funds are put on hold on buyer's account;
  • deposited - order deposited;
  • reversed - payment was reversed;
  • refunded - order was refunded;
  • bindingCreated - payer's card has been saved (a credential was stored);
  • bindingActivityChanged - an existing stored credential was disabled/enabled;
  • declinedByTimeout - payment was declined because it timed out;
  • ``declinedCardPresent`` - a declined card-present transaction (payment with physical card).
statusIndicates if an operation was successfully processed:
  • 1 - success;
  • 0 - fail.

Custom headers for callback notifications

You can request the technical support service to set custom headers for callback notifications. For example:

'http://mybestmerchantreturnurl.com/callback.php', headers={Authorization=token, Content-type=plain
/text}, params={orderNumber=349002, mdOrder=5ffb1899-cd1e-7c1e-8750-e98500093c43, operation=deposited, status=1}

where {Authorization=token, Content-type=plain/text} is a custom header.

Examples

Example of a notification URL without a checksum

https://mybestmerchantreturnurl.com/callback/?mdOrder=1234567890-098776-234-522&orderNumber=0987&operation=deposited&status=0

Example of a notification URL with a checksum

https://mybestmerchantreturnurl.com/callback/?mdOrder=1234567890-098776-234-522&orderNumber=0987&checksum=DBBE9E54D42072D8CAF32C7F660DEB82086A25C14FD813888E231A99E1220AB3&operation=deposited&status=0

Algorithm for processing callback notifications

Sections below contain notification processing algorithms depending on notification type.

Notification without a checksum

  1. The payment gateway sends to the merchant's server the following request.
    https://mybestmerchantreturnurl.com/callback/?mdOrder=1234567890-098776-234-522&orderNumber=0987&operation=deposited&status=0
  2. The merchant's server returns HTTP 200 OK to the payment gateway.

Notification with a checksum

  1. The payment gateway sends the following HTTPS request to the merchant's server - please, note that:

    • when using symmetric cryptography, the checksum is generated using a key common for the payment gateway and the merchant;
    • when using asymmetric cryptography, the checksum is generated using a private key known only to the payment gateway.
      https://mybestmerchantreturnurl.com/path?amount=123456&orderNumber=10747&checksum=DBBE9E54D42072D8CAF32C7F660DEB82086A25C14FD813888E231A99E1220AB3&mdOrder=3ff6962a-7dcc-4283-ab50-a6d7dd3386fe&operation=deposited&status=1
      The order of the parameters in a notification can be arbitrary.
  2. On the merchant's side checksum and sign_alias parameters are removed from the notification parameters string, and the value of checksum parameter is saved for verification of the notification's authenticity.

  3. The parameters and their values that are left are used for creating the following string.
    parameter_name1;paramenter_value1;parameter_name2;paramenter_value2;…;parameter_nameN;paramenter_valueN;
    In this case pairs name_parameter;value_parameter must be sorted in direct alphabetical order (ascending) by parameter names.
    Here is an example of a generated parameter string
    amount;123456;mdOrder;3ff6962a-7dcc-4283-ab50-a6d7dd3386fe;operation;deposited;orderNumber;10747;status;1;

  4. The checksum is calculated on the merchant's side, the method of calculation depends on the method of its formation:

    • when using symmetric cryptography - with the help of HMAC-SHA256 algorithm and a private key shared with the payment gateway;
    • when using asymmetric cryptography - with the help of a hashing algorithm that depends on how the key pair is created and a public key that is associated with a private key located in the payment gateway.
  5. In the resulting checksum string, all lower-case letters are replaced by upper-case letters.

  6. The resulting value must be compared with the checksum extracted earlier from checksum parameter.

  7. If the checksums match, the server sends an HTTP code 200 OK to the payment gateway.

If the checksums match, this notification is authentic and was sent by the payment gateway. Otherwise, it is likely that the attacker is trying to pass off his notification as a payment gateway notification.

Payment status notification

In order to detect whether the payment run successfully or not you need to:

  1. Check the signature (checksum parameter in callback);
  2. Check two callback parameters: operation and status.

If the operation value is approved or deposited, then the callback refers to the payment.

When notifications fail

If a response other than 200 OK is returned to the payment gateway, the notification is considered unsuccessful. In this case, the payment gateway repeats the notification at intervals of 30 seconds until one of the following conditions is met:

When one of the above conditions is met, attempts to send a callback notification about an event stop.

Additional callback parameters

In callback notifications, you can use the following additional parameters if they are configured in the Payment Gateway. If you need them, contact our support team.

ParameterDescriptionType of event
bindingIdUUIID of created/updated stored credential.BINDING_CREATED, BINDING_ACTIVITY_CHANGED
emailClient's email.BINDING_CREATED
phoneClient's phone number.BINDING_CREATED
panMaskedMasked PAN of the client's card.BINDING_CREATED
panCountryCodeClient's country code.BINDING_CREATED
enabledWhether a store credential is active (true/false).BINDING_ACTIVITY_CHANGED
currentDepositAmountFormattedFormatted amount of the deposit operation.DEPOSITED
currentReverseAmountFormattedFormatted amount of the reversal operation.REVERSED
currentRefundAmountFormattedFormatted amount of the refund operation.REFUNDED
operationRefundedAmountFormattedFormatted amount of the refund operation.REFUNDED
operationRefundedAmountRefund amount in minor currency units (e.g. in cents etc.).REFUNDED
externalRefundIdExternal identifier of the refund operation.REFUNDED
callbackCreationDateCallback notification creation date. Special merchant setting is required. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT, BINDING_CREATED, BINDING_ACTIVITY_CHANGED
statusOperation status: 1 - success, 0 - failure DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
operation Callback type. Possible values: deposited, approved, reversed, refunded, bindingCreated, bindingActivityChanged, declinedByTimeout, declinedCardpresent DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT, BINDING_CREATED, BINDING_ACTIVITY_CHANGED
finishCheckUrlURL for receipt generation DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
sign_aliasName of the key used for signature. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT, BINDING_CREATED, BINDING_ACTIVITY_CHANGED
checksumCallback shecksum (used for callbacks with checksum). DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT, BINDING_CREATED, BINDING_ACTIVITY_CHANGED
cardholderNameCardholder name. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
amountRegistered order amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentAmountRegistered order amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
amountFormattedFormatted registered order amount. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
feeAmountFee amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
approvedAmountPreauthorized amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
depositedAmountDeposited amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
refundedAmountRefund amount in minor currency units. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
approvedAmountFormattedFormatted preauthorized amount. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
depositedAmountFormattedFormatted deposited amount. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
refundedAmountFormattedFormatted refunded amount. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
totalAmountFormattedFormatted total order amount (registered amount + fee). DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
depositedTotalAmountFormattedFormatted total deposited amount (all deposited amounts + all refunded amounts + fee). DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
approvalCodePayment authorization code received from processing. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
authCodeAuthorization code. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
bankNameName of the bank that issued the client's card. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
currencyOrder currency. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
depositFlagThe flag that specifies the type of the operation.
  • 1 - purchase
  • 2 - preauthorization
DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
eciElectronic commerce indicator. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
ipClient's IP address. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
ipCountryCodeCountry code of the client's IP address. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
maskedPanMasked number of the client's card. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
mdOrderOrder number in the payment gateway. Unique within the payment gateway. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
mdorderOrder number in the payment gateway. Unique within the payment gateway. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
merchantFullNameMerchant's full name. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
merchantLoginMerchant's login. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
orderDescriptionOrder description. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
orderNumberOrder number (ID) in the merchant's system. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
threeDSTypeType of transaction in terms of 3 DS. Possible values: SSL, THREE_DS1_FULL, THREE_DS1_ATTEMPT, THREE_DS2_FULL, THREE_DS2_FRICTIONLESS, THREE_DS2_ATTEMPT, THREE_DS2_EXEMPTION_GRANTED, THREE_DS2_3RI, THREE_DS2_3RI_ATTEMPT DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
dateDate of the order creation. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
clientIdCustomer number (ID) in the merchant's system. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT,BINDING_CREATED, BINDING_ACTIVITY_CHANGED
actionCodeCode of the operation execution result. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
actionCodeDescriptionDescription of the code of the operation execution result. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentRefNumReference Retrieval Number - transaction ID assigned by Acquiring Bank. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentStateOrder status. Possible values: started, payment_approved, payment_declined, payment_void, payment_deposited, refunded, pending, partly_deposited DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentWayOrder payment way. Find more possible values of the parameter here. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
processingIdIdentifier of the customer in processing. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
refNumReference Retrieval Number - transaction ID assigned by Acquiring Bank. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
refnumReference Retrieval Number - transaction ID assigned by Acquiring Bank. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
terminalIdTerminal identifier in the system that processes the payment. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentSystemPayment system name. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
currencyNameISO 3-Letter Currency Code. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
transactionAttributesOrder attributes. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
paymentDateOrder payment date.DEPOSITED, APPROVED, REVERSED, REFUNDED
depositedDateDate of order deposit operation.DEPOSITED, APPROVED, REVERSED, REFUNDED
refundedDateDate of order refund operation.REFUNDED
reversedDateDate of order reversal operation.DEPOSITED, REVERSED, REFUNDED
declineDateDate of order cancellation. DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
xidElectronic commerce indicator of the transaction defined by the merchant. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
cavvCardholder authentication value. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
authValueCardholder authentication value. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
sessionExpiredDateDate and time of the order expiration. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
tokenizeCryptogramTokenized cryptogram. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
creditBankNameName of the bank that issued the card to be credited (in P2P).DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
creditPanCountryCodeCountry code of recipient card (in P2P).DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
isInternationalP2PWhether P2P transfer is international.DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
recipientDataInformation about P2P recipient.DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
transactionTypeIndicatorInformation about P2P recipient. Possible values:
  • A - Account to Account (one person)
  • B - Transfer for the purpose of purchasing cryptocurrency
  • C - Transfer for the purpose of purchasing cryptocurrency
  • D - Funds Disbursement
  • ``E`` - Account to Account (one person)
  • F - Transfer for gambling betting
  • G - Online gambling payout
  • L - Card Bill Payment
  • O - Loan payment
  • P - Person to Person (defferent persons)
  • W - Transfer to own account of a staged digital wallet for payment.
DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
operationTypeType of P2P operation: AFT/OCT.DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
debitBankNameName of the bank that issued the card to be debited (in P2P).DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
debitPanCountryCodeCountry code of the card tp be debited (in P2P).DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
p2pDebitRrnRRN (Reference Retrieval Number) of P2P debit operation.DEPOSITED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT
aResTransStatusTransaction status from the ACS response to the authentication request (ARes). Passed when 3DS2 is used. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
aResTransStatusReasonThe reason of the ACS response to the authentication request (ARes). Passed when 3DS2 is used. This parameter provides additional information about a particular authentication status. It takes 2-digit values like 01, 02 etc. See the full list of allowed values below. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
rreqTransStatusTransaction status from the request for passing user authentication results from ACS (RReq). Passed when 3DS2 is used. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
rReqTransStatusReasonThe reason of the response to the request for passing user authentication results from ACS (RReq). Passed when 3DS2 is used. This parameter provides additional information about a particular authentication status of the cardholder. It takes 2-digit values like 01, 02 etc. See the full list of allowed values below. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
threeDSProtocolVersion3DS protocol version. Possible values are "2.1.0", "2.2.0" for 3DS2.
If threeDSProtocolVersion is not passed in the request, then the default value will be used for 3D Secure authorization (2.1.0 - for 3DS 2).
DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
rReqChallengeCancelIndicator of cancellation of Challenge process in RReq message from ACS. Passed when 3DS2 is used. This parameter indicates the initiator of authentication cancellation: the cardholder, the merchant, or the card issuer. It takes 2-digit values like 01, 03 etc. See the full list of allowed values below. DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
cvvResultCodeThe result of CVV (Card Verification Value) verification returned in response to the payment authorization request. Allowed values:
  • M - Match;
  • N - No Match;
  • P - Not Processed;
  • S - CVV should not be present on the card;
  • U - The issuer is not certified / does not participate in the verification;
  • X - No response from the network.
DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT
avsCodeA code of the AVS verification response (checking the address and postal code of the cardholder). Possible values:
  • -1 – postal code and address are the same.
  • 1 – address matches, postal code doesn't match.
  • 2 - postal code matches, address doesn't match.
  • 3 - postal code and address don't match.
  • 50 - data validation is requested, but the result is unsuccessful.
  • 51 - invalid format of the AVS/AVV verification request.
DEPOSITED, APPROVED, REVERSED, REFUNDED, DECLINED_BY_TIMEOUT, DECLINED_CARDPRESENT

Allowed values for aResTransStatusReason and rreqTransStatusReason:

Allowed values for rreqChallengeCancel:

Code examples

Symmetric cryptography

Java
package net.payrdr.test;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collector;

public class SymmetricCryptographyExample {

    private static final String secretToken = "ooc7slpvc61k7sf7ma7p4hrefr";
    private static final Map<String, String> callbackParams = Map.of(
            "checksum", "EAF2FB72CAB99FD5067F4BA493DD84F4D79C1589FDE8ED29622F0F07215AA972",
            "mdOrder", "06cf5599-3f17-7c86-bdbc-bd7d00a8b38b",
            "operation", "approved",
            "orderNumber", "2003",
            "status", "1"
    );

    public static void main(String[] args) throws Exception {
        String signedString = callbackParams.entrySet().stream()
                .filter(entry -> !entry.getKey().equals("checksum"))
                .sorted(Map.Entry.comparingByKey(Comparator.naturalOrder()))
                .collect(Collector.of(
                        StringBuilder::new,
                        (accumulator, element) -> accumulator
                                .append(element.getKey()).append(";")
                                .append(element.getValue()).append(";"),
                        StringBuilder::append,
                        StringBuilder::toString
                ));

        byte[] mac = generateHMacSHA256(secretToken.getBytes(), signedString.getBytes());
        String signature = callbackParams.get("checksum");

        boolean verified = verifyMac(signature, mac);
        System.out.println("signature verification result: " + verified);
    }

    private static boolean verifyMac(String signature, byte[] mac) {
        return signature.equals(bytesToHex(mac));
    }

    public static byte[] generateHMacSHA256(byte[] hmacKeyBytes, byte[] dataBytes) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(hmacKeyBytes, "HmacSHA256");

        Mac hMacSHA256 = Mac.getInstance("HmacSHA256");
        hMacSHA256.init(secretKey);

        return hMacSHA256.doFinal(dataBytes);
    }

    private static String bytesToHex(byte[] bytes) {
        final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
        byte[] hexChars = new byte[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = HEX_ARRAY[v >>> 4];
            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
        }
        return new String(hexChars, StandardCharsets.UTF_8);
    }
}

Asymmetric cryptography

Java
package net.payrdr.test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Base64;
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collector;

public class AsymmetricCryptographyExample {

    private static final Map<String, String> callbackParams = Map.of(
            "amount", "35000099",
            "sign_alias", "SHA-256 with RSA",
            "checksum", "163BD9FAE437B5DCDAAC4EB5ECEE5E533DAC7BD2C8947B0719F7A8BD17C101EBDBEACDB295C10BF041E903AF3FF1E6101FF7DB9BD024C6272912D86382090D5A7614E174DC034EBBB541435C80869CEED1F1E1710B71D6EE7F52AE354505A83A1E279FBA02572DC4661C1D75ABF5A7130B70306CAFA69DABC2F6200A698198F8",
            "mdOrder", "12b59da8-f68f-7c8d-12b5-9da8000826ea",
            "operation", "deposited",
            "status", "1");

    private static final String certificate =
            "MIICcTCCAdqgAwIBAgIGAWAnZt3aMA0GCSqGSIb3DQEBCwUAMHwxIDAeBgkqhkiG9w0BCQEWEWt6" +
                    "bnRlc3RAeWFuZGV4LnJ1MQswCQYDVQQGEwJSVTESMBAGA1UECBMJVGF0YXJzdGFuMQ4wDAYDVQQH" +
                    "EwVLYXphbjEMMAoGA1UEChMDUkJTMQswCQYDVQQLEwJRQTEMMAoGA1UEAxMDUkJTMB4XDTE3MTIw" +
                    "NTE2MDEyMFoXDTE4MTIwNTE2MDExOVowfDEgMB4GCSqGSIb3DQEJARYRa3pudGVzdEB5YW5kZXgu" +
                    "cnUxCzAJBgNVBAYTAlJVMRIwEAYDVQQIEwlUYXRhcnN0YW4xDjAMBgNVBAcTBUthemFuMQwwCgYD" +
                    "VQQKEwNSQlMxCzAJBgNVBAsTAlFBMQwwCgYDVQQDEwNSQlMwgZ8wDQYJKoZIhvcNAQEBBQADgY0A" +
                    "MIGJAoGBAJNgxgtWRFe8zhF6FE1C8s1t/dnnC8qzNN+uuUOQ3hBx1CHKQTEtZFTiCbNLMNkgWtJ/" +
                    "CRBBiFXQbyza0/Ks7FRgSD52qFYUV05zRjLLoEyzG6LAfihJwTEPddNxBNvCxqdBeVdDThG81zC0" +
                    "DiAhMeSwvcPCtejaDDSEYcQBLLhDAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAfRP54xwuGLW/Cg08" +
                    "ar6YqhdFNGq5TgXMBvQGQfRvL7W6oH67PcvzgvzN8XCL56dcpB7S8ek6NGYfPQ4K2zhgxhxpFEDH" +
                    "PcgU4vswnhhWbGVMoVgmTA0hEkwq86CA5ZXJkJm6f3E/J6lYoPQaKatKF24706T6iH2htG4Bkjre" +
                    "gUA=";

    public static void main(String[] args) throws Exception {

        String signedString = callbackParams.entrySet().stream()
                .filter(entry -> !entry.getKey().equals("checksum") && !entry.getKey().equals("sign_alias"))
                .sorted(Map.Entry.comparingByKey(Comparator.naturalOrder()))
                .collect(Collector.of(
                        StringBuilder::new,
                        (accumulator, element) -> accumulator
                                .append(element.getKey()).append(";")
                                .append(element.getValue()).append(";"),
                        StringBuilder::append,
                        StringBuilder::toString
                ));

        InputStream publicCertificate = new ByteArrayInputStream(Base64.getDecoder().decode(certificate));
        String signature = callbackParams.get("checksum");

        boolean verified = checkSignature(signedString.getBytes(), signature.getBytes(), publicCertificate);
        System.out.println("signature verification result: " + verified);
    }

    private static boolean checkSignature(byte[] signedString, byte[] signature, InputStream publicCertificate) throws Exception {
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
        X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(publicCertificate);

        Signature signatureAlgorithm = Signature.getInstance("SHA512withRSA");
        signatureAlgorithm.initVerify(x509Cert.getPublicKey());
        signatureAlgorithm.update(signedString);

        return signatureAlgorithm.verify(decodeHex(new String(signature)));
    }

    private static byte[] decodeHex(String hex) {
        int l = hex.length();
        byte[] data = new byte[l / 2];
        for (int i = 0; i < l; i += 2) {
            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
                    + Character.digit(hex.charAt(i + 1), 16));
        }
        return data;
    }
}

Symmetric cryptography

PHP
<?php
  
$data = 'amount;123456;mdOrder;3ff6962a-7dcc-4283-ab50-a6d7dd3386fe;operation;deposited;orderNumber;10747;status;1;';
$key = 'yourSecretToken';
$hmac = hash_hmac ( 'sha256' , $data , $key);
  
echo "[$hmac]\n";
?>
  1. Assign the string value to data variable.
  2. Assign the private key value to the key variable.
  3. hash_hmac function ( 'sha256', $data, $key) calculates the checksum of the passed string using the private key and SHA-256 algorithm.
  4. Save the function output in hmac variable.
  5. Use echo function to create an output.
  6. Compare this value with the one passed in the callback notification.

Asymmetric cryptography

PHP
<?php
// data from response
$data = 'amount;35000099;mdOrder;12b59da8-f68f-7c8d-12b5-9da8000826ea;operation;deposited;status;1;';
$checksum = '9524FD765FB1BABFB1F42E4BC6EF5A4B07BAA3F9C809098ACBB462618A9327539F975FEDB4CF6EC1556FF88BA74774342AF4F5B51BA63903BE9647C670EBD962467282955BD1D57B16935C956864526810870CD32967845EBABE1C6565C03F94FF66907CEDB54669A1C74AC1AD6E39B67FA7EF6D305A007A474F03B80FD6C965656BEAA74E09BB1189F4B32E622C903DC52843C454B7ACF76D6F76324C27767DE2FF6E7217716C19C530CA7551DB58268CC815638C30F3BCA3270E1FD44F63C14974B108E65C20638ECE2F2D752F32742FFC5077415102706FA5235D310D4948A780B08D1B75C8983F22F211DFCBF14435F262ADDA6A97BFEB6D332C3D51010B';

// your public key (e.g. SHA-512 with RSA)
// if you have a CERT, please see openssl_get_publickey()
$publicKey = <<<EOD
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwtuGKbQ4WmfdV1gjWWys
5jyHKTWXnxX3zVa5/Cx5aKwJpOsjrXnHh6l8bOPQ6Sgj3iSeKJ9plZ3i7rPjkfmw
qUOJ1eLU5NvGkVjOgyi11aUKgEKwS5Iq5HZvXmPLzu+U22EUCTQwjBqnE/Wf0hnI
wYABDgc0fJeJJAHYHMBcJXTuxF8DmDf4DpbLrQ2bpGaCPKcX+04POS4zVLVCHF6N
6gYtM7U2QXYcTMTGsAvmIqSj1vddGwvNGeeUVoPbo6enMBbvZgjN5p6j3ItTziMb
Vba3m/u7bU1dOG2/79UpGAGR10qEFHiOqS6WpO7CuIR2tL9EznXRc7D9JZKwGfoY
/QIDAQAB
-----END PUBLIC KEY-----
EOD;

$binarySignature = hex2bin(strtolower($checksum));
$isVerify = openssl_verify($data, $binarySignature, $publicKey, OPENSSL_ALGO_SHA512);
if ($isVerify == 1) {
    echo "signature ok\n";
} elseif ($isVerify == 0) {
    echo "bad (there's something wrong)\n";
} else {
    echo "error checking signature\n";
}
?>
Categories:
eCommerceAPI V1
Beta
Categories
Search results