Skip to content

Methods for Skip Pay

Daniel Marek edited this page Nov 19, 2024 · 5 revisions

A brief overview

ℹ️ By 6 October 2022 mallpay rebranded to Skip Pay. Except the name everything remains the same. Only in the eAPI section here in the wiki and in API code mallpay is still being used (operations and parameters). Methods for mallpay (Skip Pay) remain functional.

The Skip Pay payment method uses the mallpay/init methods API to initialise a payment at the payment gateway and mallpay/logistics to pass the delivery status to the payment gateway. The payment can be cancelled using the mallpay/cancel method and a partial or full refund of the payment amount can be made using the mallpay/refund method. The general API function payment/status is used to determine the status of a payment.

The Skip Pay payment is processed at the Skip Pay payment gateway, i.e. the customer is redirected from the e-shop to Skip Pay. The redirection parameters are the result of calling mallpay/init. If the Skip Pay already knows the customer and knows that Skip Pay payment is not possible for a particular purchase, the mallpay/init call will be rejected and the customer is not unnecessarily redirected to the Skip Pay gateway. The merchant can offer alternative payment methods.

Method Description
mallpay/init Initialisation of Deferred Payment at the payment gateway for mallpay@shop.
mallpay/logistics Using this operation, the merchant sends data about the delivery of goods to customers or data about cancelled order items.
mallpay/cancel Using this operation, the merchant can cancel the Deferred Payment.
mallpay/refund Making a refund of the amount of the Skip Pay payment.

⚠️ Please note that the Skip Pay method (unlike other methods at the payment gateway) uses the identification of purchase items in almost all calls.

  • When initialising a payment (mallpay/init) it is necessary to identify the items and the customer.
  • When sending/delivering goods (mallpay/logistics), it is necessary to identify the items being sent/delivered.
  • Similarly, in the case of a return (mallpay/refund), it is necessary to send the list of items to which the financial return is linked.
  • Only the mallpay/cancel method does not require item identification, since this method cancels the entire order.

Data structures 

The following basic data structures are used to call Skip Pay methods:

These sections allow compilation of more complex data structures for the mallpay/init operation:

In addition, the mallpay/logistics and mallpay/refund operations refer to order items using data structures:

The following section provides an overview of the above-mentioned basic data structures and their parameters, including an example how these need to be filled out:

The parameters in bold are mandatory for calls.


Address data structure  

Item Type Description
name String Name, max. length 40 characters
country String State, max. length 20 characters
city String City, max. length 50 characters
streetAddress String Street (part of town), max. length 100 characters
streetNumber String Land registry house number., max. length 25 characters
zip String Postal code, max. length 10 characters
addressType String Address type; the address details are completed during the order, allowed values:
DELIVERY (delivery address)
BILLING (billing address)

Example of filling in a billing address

{
  "addressType":"BILLING",
  "streetAddress":"Radlická 333",
  "city":"Praha 5",
  "zip":"15000",
  "country":"CZ"
}

Price data structure  

Item Type Description
amount Number Amount in hundredths of the base currency (eg 12590 corresponds to CZK 125.90)
currency String Currency according to ISO 4217 format; only the CZK is allowed for the Skip Pay payment method

Example of filling in the amount of CZK 125.90

{
  "amount":12590,
  "currency":"CZK"
}

Vat data structure (Tax rate)  

Item Type Description
amount Number The amount of tax in hundredths of the base currency (eg 5000 corresponds to CZK 50.00)
currency String Currency according to ISO 4217 format; only the CZK is allowed for the Skip Pay payment method
vatRate Number Tax rate as natural number (value 15 corresponds to 15% rate)

Example of filling in a 15% tax rate of CZK 50

{
  "amount":5000,
  "currency":"CZK",
  "vatRate":15
}

Order item data structure  

Item Type Description
code String Item code (internal for e-shop). It is used for better identification of the item in case of performing the follow up operations (mallpay/logistics, mallpay/refund). Neither the payment gateway nor the Skip Pay validates this code, max. length 50 characters
ean String EAN code, max. length 15 characters
name String Item name, max. length 200 characters
type String Item type. Allowed values:
PHYSICAL for physical goods that the trader delivers to or collects from the customer;
DISCOUNT is used if the discount is listed as a separate item on the invoice;
DIGITAL use for digital items, such as electronic licenses or media;
GIFT_CARD use when selling gift cards;
STORE_CREDIT use if you are selling or giving a customer a gift card that can only be used in your store;
SALES_TAX use if you provide tax amount (eg. VAT) as a separate item on the invoice (in the Czech environment this is not typically used);
SHIPPING_FEE is used for freight;
INSURANCE use if you list the insurance as a separate item on the invoice;
FEE use for other fees.
quantity Number Amount. If empty, it corresponds to a value of 1.
variant String Product variant (e.g. colour, package size, memory size, etc.) - for iPhone 7 this is a "64 GB Space grey" (it does not appear anywhere in the Skip Pay system to the customer), max. length 50 characters
description String Short product description, max. length 100 characters
producer String Manufacturer (producer), max. length 50 characters
categories Array List of categories into which the item can be included (may correspond to categories in the e-shop, it does not appear anywhere in the Skip Pay system to the customer).
unitPrice Object Unit price of one piece of item, see data structure price, stated as price including tax (VAT). The tax is calculated in a separate parameter unitVat.
unitVat Object Unit tax per item, see data structure VAT
totalPrice Object The total price of the item, see data structure Amount, stated as the total price for the purchased number of items including tax (VAT). The tax is calculated in a separate parameter totalVat.
totalVat Object Total tax for the number of items purchased, see data structure VAT.
productUrl String URL corresponding to the description of the item in the e-shop, max. length 250 characters

Example of an order item

{
  "code":"X123",
  "name":"iPhone XS",
  "totalPrice": {
    "amount":1452000,
    "currency":"CZK"
  },
  "totalVat": {
    "amount":252000,
    "currency":"CZK",
    "vatRate":21
  }
}

The following section provides an overview of the above-mentioned more complex data structures and their parameters, including an example how these should be filled out:


Customer data structure  

Item Type Description
firstName String Customer's first name. Mandatory if fullName is empty, max. length 40 characters.
lastName String Customer's surname. Mandatory if fullName is empty, max. length 40 characters.
fullName String The customer's full name (as opposed to firstName and lastName as a single entry), including academic degrees. Required only if firstName and lastName are empty, max. length 100 characters.
titleBefore String Academic title before the name, max. length 20 characters.
titleAfter String Academic title after the name, max. length 20 characters.
email String Customer e-mail address, max. length 50 characters.
phone String Telephone number including international prefix (including the introductory character +), max. length 16 characters.
tin String Customer Identification number, max. length 10 characters.
vatin String Customer tax identification number, max. length 12 characters.

Example of filling customer data (filling in separate fields for name and surname):

{
  "firstName":"Adam",
  "lastName":"Beran",
  "email": "[email protected]",
  "phone": "+420800300300"
}

Example of filling in the customer data (filling in the fullName item for name and surname):

{
  "fullName":"Adam Beran",
  "email": "[email protected]",
  "phone": "+420800300300"
}

Data structure order  

Item Type Description
totalPrice Object The total price including VAT, this amount will be sent to the merchant’s account, description see data structure price.
totalVat Array Breakdown of the total price into one or more tax rates, description see data structure VAT.
addresses Array Address list. As of version 1.9, both the billing address (type BILLING) and the delivery address (type DELIVERY) are optional. It is recommended to complete the billing address and only send an additional delivery address (if this is different from the billing address).
deliveryType String Delivery type. In the case of the value DELIVERY_CARRIER, it is possible to specify the delivery in the parameter carrierId or carrierCustom.
Allowed values:
DELIVERY_CARRIER (shipping by the carrier to the address specified by the customer)
PERSONAL_BRANCH (personal pickup at the e-shop)
PERSONAL_PARTNER (personal pickup at the e-shop distribution partner's premises)
ONLINE (electronic delivery - e.g. for electronic licences, gift cards, etc.)
carrierId String Carrier identification, Allowed values:
CZ_POST_HAND
CZ_POST_OFFICE
CZ_POST_OTHER
PPL
DPD
GEIS
IN_TIME
TOP_TRANS
GEBRUDER_WEISS
LOCAL_COURIER
TNT
GLS
HDS_COMFORT
HDS_STANDARD
MALL_DEPOSIT.
carrierCustom String Specify the carrier if it cannot be specified with carrierId.
items Array Order items, description -see order item data structure.

There is a limit for order items count. Max length of serialized JSON data of order structure must not exceed 4000 chars.

Example of the order completion (one item, billing address):

{
  "totalPrice": {
    "amount":1452000,
    "currency":"CZK"
  },
  "totalVat": [{
    "amount":252000,
    "currency":"CZK",
    "vatRate":21
  }],
  "addresses": [{
    "addressType":"BILLING",
    "streetAddress":"Radlická 333",
    "city":"Praha 5",
    "zip":"15000",
    "country":"CZ"
  }],
  "items": [{
    "code":"X123",
    "name":"iPhone XS",
    "totalPrice": {
      "amount":1452000,
      "currency":"CZK"
    },
    "totalVat": {
      "amount":252000,
      "currency":"CZK",
      "vatRate":21
    }
  }]
}

Example of filling out an order (two items, each at a different tax rate, without a billing or shipping address):

{
  "totalPrice": {
    "amount":3047400,
    "currency":"CZK"
  },
  "totalVat": [{
    "amount":522900,
    "currency":"CZK",
    "vatRate":21
  },
  {
    "amount":4500,
    "currency":"CZK",
    "vatRate":15
  }],
  "items": [{
    "code":"A456",
    "name":"Canon EOS 80D",
    "totalPrice": {
      "amount":3012900,
      "currency":"CZK"
    },
    "totalVat": {
      "amount":522900,
      "currency":"CZK",
      "vatRate":21
    }
  },
  {
    "code":"Y987",
    "name":"Fotografická příručka",
    "totalPrice": {
      "amount":34500,
      "currency":"CZK"
    },
    "totalVat": {
      "amount":4500,
      "currency":"CZK",
      "vatRate":15
    }
  }]
}

The following section provides an overview of the above-mentioned data structures for mallpay/logistics and mallpay/refund and their parameters, including an example:


Item reference data structure  

This data structure is used to pass a reference to the delivered, shipped or cancelled order items in a mallpay/logistics call or to pass a reference to the returned order items in a mallpay/refund call. Attention! The same item code must be entered in the order item reference data structure as when creating an order in the OrderItem data structure in the mallpay/init call. If it is not the same, the Skip Pay validation system will fail the call.

Item Type Description
code String Item code (internal for e-shop). Used to identify the order item, max. length 50 characters.
ean String EAN code, max. length 15 characters.
name String Item name, max. length 200 characters.
type String Item type, Allowed values:
PHYSICAL
DISCOUNT
SHIPPING_FEE
SALES_TAX
DIGITAL
GIFT_CARD
STORE_CREDIT
FEE
INSURANCE.
quantity Number Amount. If empty, it corresponds to a value of 1.

Example of filling out the reference to an order item:

{
  "code":"X123",
  "name":"iPhone XS"
}

Order reference data structure  

This data structure is used in the mallpay/logistics call to transmit data on the total price of delivered or sent goods, including the breakdown into tax rates and delivered or sent items of the order. Via this structure, the merchant can also pass on the data about the cancelled part of the order within mallpay/logistics.

Item Type Description
totalPrice Object Total price including VAT, description see data structure Price.
totalVat Array Tax rate, description see data structure VAT.
items Array An array of "order item reference" objects by which the merchant references order items, description see data structure Item reference.

Example of filling in an order reference:

{
  "totalPrice": {
    "amount":1452000,
    "currency":"CZK"
  },
  "totalVat": [{
    "amount":252000,
    "currency":"CZK",
    "vatRate":21
  }],
  "items": [{
    "code":"X123",
    "name":"iPhone XS"
  }]
}

mallpay/init method  

POST https://api.platebnibrana.csob.cz/api/v1.9/mallpay/init

This operation creates a Deferred Payment (mallpay@shop). The payment gateway transmits customer and order data to the Skip Pay system. The Skip Pay system performs a pre-check of the customer, and if payment is possible for the given customer, the result of this operation is primarily the URL for redirection to the Skip Pay.

Item Type Description
merchantId String Merchant ID assigned by the payment gateway.
orderNo String The reference number of the order used for matching payments, which will also be stated on the bank statement. Numeric value, max. length 10 digits.
customer Object Customer information that will be used to process the Deferred Payment at Skip Pay. Description of parameters see data structure Customer.
order Object Order details that will be used to process Deferred Payment at Skip Pay. Description of parameters see data structure Order.
agreeTC Boolean Customer consents to Skip Pay terms and conditions. Allowed values: true, false. It is not necessary to display the conditions on the e-shop - in this case, please send false and the Skip Pay system will ensure that the conditions are agreed. If you display the conditions, consent in the sense of checking the checkbox is not required. This is an informed consent that you just need to display.
dttm String Date and time the request was sent in the format YYYYMMDDHHMMSS.
clientIp String IP address of the customer (his browser) accessing the merchant's e-shop, ipv4 or ipv6 format.
returnUrl String URL address to which the client will be redirected back to the e-shop in case of cancellation by the customer. Maximum length 300 characters. When redirecting back to the e-shop, the same parameter set is passed as in the case of returning from the payment gateway when paying by card.
returnMethod String The method of returning to the e-shop URL. Allowed values POST, GET. The recommended method is POST.
merchantData String Any auxiliary data that the merchant passes to the gateway, must be BASE64 encoded. The maximum length after encoding is 255 characters. In case of the "Marketplace" business model, the merchant must identify his retailer using the ID company number. This identifier must be enclosed in square brackets [] and can be placed arbitrarily within the merchantData item. If several retailers participate in the purchase, the ID number values are separated by a comma - e.g. [12345678,87654321].
ttlSec Number Payment life setting, in seconds, min. allowed value 600, max. allowed value 43200 (10 min - 12 hours). Payment lifetime is calculated from the moment of mallpay/init call.
signature String Request signature, encoded in BASE64.

Example of request:

{
  "merchantId":"M1MIPS0000",
  "orderNo":"51966",
  "customer": {
    "firstName": "Adam",
    "lastName": "Malý",
    "email": "[email protected]",
    "phone": "+420800300300"
  },
  "order": {
    "totalPrice": {
    	"amount":1210000,
    	"currency":"CZK"
    },
    "totalVat": [{
    	"amount":210000,
    	"currency":"CZK",
    	"vatRate":21
    }],
    "addresses": [
    	{
    	"addressType":"BILLING",
    	"streetAddress":"Radlická 333",
    	"city":"Praha 5",
    	"zip":"15000",
    	"country":"CZ"
    	}
    ],
    "items": [
    	{
    	"code":"ABC123",
    	"name":"iPhone 8S",
	    "totalPrice": {
	    	"amount":1210000,
	    	"currency":"CZK"
	    },
	    "totalVat": {
	    	"amount":210000,
	    	"currency":"CZK",
	    	"vatRate":21
	    }
      }
    ]
  },
  "agreeTC":true,
  "dttm":"20220125131559",
  "clientIp":"192.0.2.2",
  "returnUrl":"https://shop.example.com/return",
  "returnMethod":"POST",
  "merchantData":"some-base64-encoded-merchant-data",
  "signature":"base64-encoded-signature-of-payment-request"
}

Return values  

Item Type Description
payId String Unique payment ID (assigned by the payment gateway in the mallpay/init operation, contains a 15-character string).
dttm String Date and time of the response in the format YYYYMMDDHHMMSS.
resultCode Number The result of the operation, see list.
resultMessage String Text description of the operation result.
paymentStatus Number Payment status, see payment lifecycle.
mallpayUrl String URL for redirecting the customer to Skip Pay, filled in if resultCode is 0.
signature String Response signature, encoded in BASE64.

Example of return values for mallpay/init operation -- payment successfully initialised:

{
  "payId":"be36dc0c6229@HA",
  "dttm":"20220125131601",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 2,
  "mallpayUrl": "https://www.mallpay.cz/...",
  "signature":"base64-encoded-response-signature"
 }

Example of return values for mallpay/init operation - rejected payment (invalid input parameters):

{
  "payId":"be36dc0c6229@HA",
  "dttm":"20220125131601",
  "resultCode": 110,
  "resultMessage":"Missing 'customer' parameter",
  "paymentStatus": 6,
  "signature":"base64-encoded-response-signature"
 }

mallpay/logistics method  

PUT https://api.platebnibrana.csob.cz/api/v1.9/mallpay/logistics

Using this operation, the merchant transmits the delivery or dispatch data (according to the contractual settings with Skip Pay) of the individual items of the order to the customer. If the merchant has not sent / delivered all the original items of the order (passed to the payment gateway in operation mallpay/init), these items must be listed in the cancelled items.

Item Type Description
merchantId String Merchant ID assigned by the payment gateway.
payId String PayID of payment.
event String Method of delivery of goods, Allowed values: delivered, sent.
date String Date of delivery or dispatch of the goods, format YYYYMMDD.
fulfilled Object Information about the delivered/sent items of the order, including the total amount and breakdown of tax rates, description see data structure Order reference.
cancelled Object Details of cancelled order items, including the total amount and breakdown of tax rates, description see data structure Order reference, filled in in case of cancelled orders at Skip Pay.
deliveryTrackingNumber String Tracking number at the carrier.
dttm String Date and time the request was sent in the format YYYYMMDDHHMMSS.
signature String Request signature, encoded in BASE64.

Example of request:

{
  "merchantId":"M1MIPS0000",
  "payId":"be36dc0c6229@HA",
  "event":"delivered",
  "date":"20191020",
  "fulfilled": {
    "totalPrice": { "amount":24200, "currency":"CZK" },
    "totalVat": [ { "amount":4200, "currency":"CZK", "vatRate":21 } ],
    "items":[
      { 
        "code":"AX1255c",
        "name":"Obal na iPhone XS",
        "type":"PHYSICAL",
        "quantity":1
      }
    ]
  },
  "dttm":"20220125131610",
  "signature":"base64-encoded-request-signature"
}

Return values  

Item Type Description
payId String Unique payment ID (assigned by the payment gateway in the mallpay/init operation, contains a 15-character string).
dttm String Date and time of the response in the format YYYYMMDDHHMMSS.
resultCode Number The result of the operation, see list.
resultMessage String Text description of the operation result.
paymentStatus Number Payment status, see payment lifecycle.
statusDetail String Detailed status of payment (detailed status), contains, for example, the reason for rejecting the payment, for possible values see list.
signature String Response signature, encoded in BASE64.

Example of the return values for mallpay/logistics operation:

{
  "payId":"be36dc0c6229@HA",
  "dttm":"20220125131612",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 7,
  "signature":"base64-encoded-response-signature"
 }

mallpay/cancel method  

PUT https://api.platebnibrana.csob.cz/api/v1.9/mallpay/cancel

Using this operation, the merchant will cancel the Deferred Payment, stating the reason for the cancellation in the input parameters. The entire order is cancelled, so references to the order items are not passed in this call.

Item Type Description
merchantId String Merchant ID assigned by the payment gateway.
payId String PayID of payment.
reason String Reason for cancellation of payment by the merchant, Allowed values:
aborted for a cancelled order by the customer;
other_payment for a situation where the customer has decided to change the method of payment;
undeliverable in case the order was cancelled due to non-delivery (for example an uncollected parcel);
unavailable in case of order cancellation due to unavailability of goods;
abandoned in case the customer does not complete the order (only if the e-shop requires additional steps to complete the order after confirming the Skip Pay payment);
changed in case the customer has changed the order and it has therefore expired;
unprocessed for other reasons on the part of the e-shop, which led to the impossibility to complete/fulfil the order.
dttm String Date and time the request was sent in the format YYYYMMDDHHMMSS.
signature String Request signature, encoded in BASE64.

Example of request:

{
  "merchantId":"M1MIPS0000",
  "payId":"be36dc0c6229@HA",
  "reason":"aborted",
  "dttm":"20220125131620",
  "signature":"base64-encoded-request-signature"
}

Return values  

Item Type Description
payId String Unique payment ID (assigned by the payment gateway in the mallpay/init operation, contains a 15-character string).
dttm String Date and time of the response in the format YYYYMMDDHHMMSS.
resultCode Number The result of the operation, see list.
resultMessage String Text description of the operation result.
paymentStatus Number Payment status, see payment lifecycle.
statusDetail String Detailed status of payment (detailed status), contains, for example, the reason for rejecting the payment, for possible values see list.
signature String Response signature, encoded in BASE64.

Example of thereturn values for mallpay/cancel operation:

{
  "payId":"be36dc0c6229@HA",
  "dttm":"20220125131622",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 3,
  "signature":"base64-encoded-response-signature"
 }

mallpay/refund method  

PUT https://api.platebnibrana.csob.cz/api/v1.9/mallpay/refund

By calling the operation, it is requested that the funds are returned to the payer. This applies to already posted payments. It is also possible to make a so-called partial return by filling in the optional parameter amount. The partial refund can be performed repeatedly, provided that the amount in the amount parameter must be less than the difference between the original authorised amount and the amount of the partial returns made (approved) so far.

Item Type Description
merchantId String Merchant ID assigned by the payment gateway.
payId String Unique payment ID (assigned by the payment gateway in the mallpay/init operation).
dttm String Date and time the request was sent in the format YYYYMMDDHHMMSS.
amount Number Required amount for a partial return in hundredths of the base currency; optional for full return.
refundedItems Array Details of returned order items, description see data structure Item reference; mandatory for partial and full return.
signature String Request signature, encoded in BASE64.

Example of request:

{
  "merchantId":"M1MIPS0000",
  "payId":"be36dc0c6229@HA",
  "refundedItems":[
    { 
      "code":"AX1255c",
      "name":"Obal na iPhone XS"
    }],
  "dttm":"20220125131710",
  "signature":"base64-encoded-request-signature"
}

Return values  

Item Type Description
payId String Unique payment ID (assigned by the payment gateway in the mallpay/init operation, contains a 15-character string).
dttm String Date and time of the response in the format YYYYMMDDHHMMSS.
resultCode Number The result of the operation, see list.
resultMessage String Text description of the operation result.
paymentStatus Number Payment status, see payment lifecycle.
statusDetail String Detailed status of payment (detailed status), contains, for example, the reason for rejecting the payment, for possible values see list.
signature String Response signature, encoded in BASE64.

Processing of this operation is asynchronous, the parameter paymentStatus in the return values therefore contain the current status of the payment request (* Payment settled *), the status of the payment request can be monitored via payment/status.

Example of return values for mallpay/refund operation:

{
  "payId":"be36dc0c6229@HA",
  "dttm":"20220125131713",
  "resultCode": 0,
  "resultMessage":"OK",
  "paymentStatus": 8,
  "signature":"base64-encoded-response-signature"
 }

Detailed status of Skip Pay payment method  

The Skip Pay payment method supports detailed status in states 3, 6 and 10 only.

Detailed status of Skip Pay payment method | state 3 "payment cancelled"

For payments cancelled by the merchant (after the merchant called the operation mallpay/cancel) the payment gateway distinguishes the following detailed statuses:

statusDetail Description
canceled.aborted#mallpay cancelled by the customer
canceled.other_payment#mallpay change of payment method and cancelation of the order
canceled.undeliverable#mallpay undeliverable
canceled.unavailable#mallpay goods unavailable
canceled.abandoned#mallpay order abandoned by customer
canceled.changed#mallpay the order has changed and expired
canceled.unprocessed#mallpay otherwise unprocessed order

Detailed status of Skip Pay payment method | state 6 "Payment declined"

For rejected payments, the payment gateway distinguishes the following detailed statuses:

statusDetail Description
declined.abandoned#mallpay abandoned in request - timeout of the payId
declined.rejected#mallpay general rejection - rejection of an application in Skip Pay
declined.shipping_timeout#mallpay the merchant did not hand over the logistics status within the limit

Detailed status of Skip Pay payment method | state 10 "Payment refunded"

For payments that have been refunded, the payment gateway distinguishes between the following detailed statuses:

statusDetail Description
refunded.full#mallpay full refund made (one or several partial refunds)
refunded.partial#mallpay partial refund made (one or several partial refunds, where the amount of the original payment has not been reached)
Clone this wiki locally