# Skip Pay Developer Documentation > Skip Pay is a payments and consumer-finance platform offering BNPL, installments, and a revolving card. This file is an LLM-friendly index of our developer docs. What is Skip Pay? A modern BNPL and consumer-finance platform for merchants and customers. Products: Deferred Payment, Pay-in-Three, and Skip Pay Card and other products. This file contains a complete, LLM-ready bundle of our documentation to support integrations. ## API health check API health check If the API back-end services are up and runing, you receive HTTP status code 200 with optional version info. In other cases, you may receive errors similar to the following ones: | Status code | Description | | --- | --- | | 503 | `Service Unavailable` - there is planned service outage | > Note: resource DOES NOT require valid *access_token* in the HTTP header of the requestGet current state of the API ## Request
Header Parameters
Schema
Service is not available
--- ## Cancel application Cancel application If there is need to completely cancel customer's *order*, it is necessary to cancel respective *application*. For this purpose use `/financing/v1/applications/{applicationId}/cancel` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `REJECTED` | NO | | `CANCELLED` | NO | | `PROCESSING` | YES | | `READY` | YES *(available only when the Application's order is not marked as sent (via *Mark order items as sent*) or delivered (via *Mark order items as delivered*)) | If the request was successfully processed, you receive HTTP status code 200 and object of information about cancelled *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `UNPROCESSABLE` | The request was well-formed but was unable to be followed due to semantic errors | | 422 | `APPLICATION_REJECTED` | When you try to cancel `Application` already `REJECTED`, which is not allowed | | 422 | `APPLICATION_ALREADY_CANCELLED` | When you try to cancel `Application` that has been cancelled already | | 422 | `APPLICATION_VALIDATION_IN_PROGRESS` | When you try to cancel `Application` which undergoes validation | | 422 | `APPLICATION_PAID` | When you try to cancel `Application` already paid, which is not allowed | | 422 | `NOT_SUPPORTED` | The request was well-formed but server was not able to change application state due internal rules |Cancel *application*. ## Request
Path Parameters
Body
Application was cancelled
Schema
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
recurrence object
Application can not be cancelled
Schema
errors object[] required Array with errors Array [ ]
--- ## Change application order Change application order When there's some changes within *order* before delivery (e.g. change in order items that impacts the total price of the *order*, or other billing information), use `/financing/v1/applications/{applicationId}/order` resource in order we can adjust everything properly. `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `REJECTED` | NO | | `CANCELLED` | NO | | `PROCESSING` | YES | | `READY` | YES * | > \* Order items can't be changed when some of them are marked as sent (via Mark order items as sent) or delivered (via Mark order items as delivered) Use `/financing/v1/applications/{applicationId}/order` resource with properly filled request that contains (only) changed data (resource allows partial put). If the request was successfully processed, you receive HTTP status code 200 and object of information about changed *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `NOT_SUPPORTED` | Resource is not supported for given financing type |Change *order*. Used to change order items, total amount, billing details etc. ## Request
Path Parameters
Body
order object required
totalPrice object Financial amount
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required oneOf string string
extraData object
]
Order was changed
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
Order can not be changed.
Schema
errors object[] required Array with errors Array [ ]
--- ## Create application Create application Elementary flow starts when customer wants to use one of Skip Pay's payment method for financing his purchase made in partner e-shop. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | Use `/financing/v1/applications` resource with properly filled request that contains at least following data - Customer information - Name (first name and last name - if possible, otherwise full name) - E-mail - Phone number - Order details - Number - Total Price (including VAT) - Total VAT (array of total amounts split by VAT rates) - Order items (array, at least one item is required) - Code - Order item name - Total price (all pieces, including VAT) - Total VAT - Additional information necessary for the continuation and completion of the process - Your URL where the customer should be redirected after application approval - Your URL where the customer should be redirected after application rejection - URL of your notification endpoint you want us to send you notifications about particular application updates For best customer experience request should contain following data: - Customer information - Extra data - Historical count of customer's transactions made in partner's e-shop - Order details - Delivery carrier information - Address (type BILLING) - Country - City - Street - Street number - ZIP - Address type - Order items - Image - Personal data processing and terms and conditions agreement If the request was successfully processed, you receive HTTP status code 201 and *application* object with following important information in the response: - Application unique ID - Application state - Application substate - Gateway redirect URL where you should redirect a customer after processing of the response - Recurrence ID if you sent `isRecurring=true` in request (for recurring orders) If the request was recognized as duplication, you receive HTTP status code 200 and the *application* object created during the first related successful request. __Note__: If the optional *agreementTermsAndConditions* field was not sent with the request (or it was sent with a value of `false`), the *application* will be created with *agreementTermsAndConditions* value set to `false`, *state* `PROCESSING` and *stateReason* `PROCESSING_REDIRECT_NEEDED`. In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 422 | `UNPROCESSABLE` | Request was well-formed but was unable to be followed due to semantic errors |Create new *application* of particular financing type ## Request
Body
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required oneOf string string
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object oneOf string string
unitPrice object Order unit item price including VAT.
unitVat object Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as 1.","minimum":1,"example":1}} > ]
merchantUrls object required Collection of URLs used for redirection of a customer back to a partner website or as a notification endpoint. Services that should be developed and exposed by partner e-shops to allow Skip Pay to asynchronously inform these partners about important changes regarding particular applications and orders.
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
Application data is duplicate. Existing application is returned.
Schema
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
recurrence object
Application was created
Schema
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
recurrence object
There was an error processing request
Schema
errors object[] required Array with errors Array [ ]
--- ## Create application from recurrence Create application from recurrence It allows to create application without customer authorization at Skip Pay gate. It needs the recurrence ID to be received previously. This endpoint doesn't need any data about customer. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | NO | ## Request
Path Parameters
Body
order object Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required oneOf string string
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object oneOf string string
unitPrice object Order unit item price including VAT.
unitVat object Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as 1.","minimum":1,"example":1}} > ]
merchantUrls object required Collection of URLs used for redirection of a customer back to a partner website or as a notification endpoint. Services that should be developed and exposed by partner e-shops to allow Skip Pay to asynchronously inform these partners about important changes regarding particular applications and orders.
Application was created
Schema
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
recurrence object
There was an error processing request
Schema
errors object[] required Array with errors Array [ ]
There is no recurrence
Schema
errors object[] required Array with errors Array [ ]
Recurrence could not be used or invalid input data
Schema
errors object[] required Array with errors Array [ ]
--- ## Get application detail Get application detail If you need to find out current information about particular *application* - primarily its state and other details - use `/financing/v1/applications/{applicationId}` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | If the request was successfully processed, you receive HTTP status code 200 and *application* object. In other cases, you may receive errors similar to the following ones: | Status code | Code | Message | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `APPLICATION_NOT_FOUND` | The requested resource could not be found | | 422 | `UNPROCESSABLE` | The request was well-formed but was unable to be followed due to semantic errors |Get specific *application* detail by ID ## Request
Path Parameters
Actual application data
Schema
customer object required Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object required Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object required Order information, needed to create an application.
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
recurrence object
Application does not exist
Schema
errors object[] required Array with errors Array [ ]
--- ## Get order Get order If you need to find out current information about particular *order* - primarily its state (or its order items' states) and other details - use `/financing/v1/orders{?orderNumber,orderVariableSymbol,applicationId}` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation, `{orderNumber}` is your order's number and `{orderVariableSymbol}` is your order's variable symbol. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `PROCESSING` | YES | | `REJECTED` | YES | | `CANCELLED` | YES | | `READY` | YES | If the request was successfully processed, you receive HTTP status code 200 and object of information about specified *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `UNPROCESSABLE` | The request was well-formed but was unable to be followed due to semantic errors |Search for *order* using specified parameters. use `/financing/v1/orders` with at least one of following parameter: - variable symbol, - order number, - application number. ## Request
Query Parameters
Order data
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
Order not found
Schema
errors object[] required Array with errors Array [ ]
--- ## Get payments on specific application Get payments on specific application Get payments on specific *application* List of realized payments from Skip Pay to partner. In case of multiple invoices, list may contain more items. feature | supported by resource --- | --- pagingheader-paging | yes sortingheader-sorting | no filteringheader-filtering | no This resource supports paging. As a value to `before` and `after` parameters, use `paymentId` attribute. Collection is sorted by paymentId attribute. ## Request
Path Parameters
List of payments. May be empty if no payment was processed yet.
Schema
data object[] required Array [
value object required Financial amount
invoice object Billing information, to be included in invoice.
address object Address
accountNumber object required Account number with bank code.
]
pagingInfo object
Application does not exist
Schema
errors object[] required Array with errors Array [ ]
--- ## Get recurrence Get recurrence It allows to get recurrence detail. You can check if customer authorized your request and if recurrence is ready to be used. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | NO | ## Request
Path Parameters
Actual recurrence data
Schema
There is no recurrence
Schema
errors object[] required Array with errors Array [ ]
--- ## Login partner Login partner Partner authenticate himself and obtain access token. More info about [security and login endpoint](https://developers.skippay.cz/docs/api-reference/security) ## Request
Body required
Partner access token issued
Schema
Unable to authenticate partner
Schema
errors object[] required Array with errors Array [ ]
--- ## Mark order items as cancelled Mark order items as cancelled When some or all order items were cancelled (won't be ever delivered), use `/financing/v1/applications/{applicationId}/order/cancel` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. > ⚠️ If you want to cancel some items after marking those items as sent or delivered, use [Mark order items as returned](https://developers.skippay.cz/docs/api/markorderitemsasreturned) operation. > 📘 For additional examples and more information, please refer to the [Technical guide: Manage your orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `PROCESSING` | NO | | `REJECTED` | NO | | `CANCELLED` | NO | | `READY` | YES | Use `/financing/v1/applications/{applicationId}/order/cancel` resource with an empty request to cancel all order items (the whole *order*) at once. If you want to cancel specific order item/s, use `/financing/v1/applications/{applicationId}/order/cancel` resource with properly filled request that contains cancelled order items info. In this case request should contain array of cancelled order items with one or more particular order item identificators (`code`/`EAN`/`name`/`type`) - `code`, `ean`, `name` and `type` is used for identifying order item sent in `Create application`. > 💡 **TIP**: Use an empty request if marking last (those not yet not marked) item(s) on order as cancelled. > ⚠️ If multiple properties (`code`, `ean`, `name` or `type`) are used for identifying some order item, it all must exact match the item data. If the request was successfully processed, you receive HTTP status code 200 and object of information about changed *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `NOT_SUPPORTED` | Resource is not supported for given financing type |Mark order items as cancelled System notification. Some or all of the order items were cancelled. Based on *application* financing type and partner setting, credit note may be issued. ## Request
Path Parameters
Body
items object[] List of changed items. All items are considered when empty. Array [ = 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as whole item quantity is selected","minimum":1,"example":1,"nullable":true}} > ]
totalPrice object Financial amount
Some order items or the whole order was cancelled
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
Order items can not be canceled.
Schema
errors object[] required Array with errors Array [ ]
--- ## Mark order items as delivered Mark order items as delivered When some or all order items were delivered to the customer, use `/financing/v1/applications/{applicationId}/order/deliver` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. > 📘 For additional examples and more information, please refer to the [Technical guide: Manage your orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `PROCESSING` | NO | | `REJECTED` | NO | | `CANCELLED` | NO | | `READY` | YES | Use `/financing/v1/applications/{applicationId}/order/deliver` resource with an empty request to mark all order items (the whole *order*) as delivered at once. If you want to mark specific order item/s as delivered, use `/financing/v1/applications/{applicationId}/order/deliver` resource with properly filled request that contains delivered order items info. In this case request should contain array of delivered order items with one or more particular order item identificators (`code`/`EAN`/`name`/`type`) - `code`, `ean`, `name` and `type` is used for identifying order item sent in `Create application`. > 💡 **TIP**: Use an empty request if marking last (those not yet not marked) item(s) on order as delivered. > ⚠️ If multiple properties (`code`, `ean`, `name` or `type`) are used for identifying some order item, it all must exact match the item data. If the request was successfully processed, you receive HTTP status code 200 and object of information about changed *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `TOTAL_PRICE_LIMIT_EXCEEDED` | The total price of all subcontracts exceeded the order total price | | 422 | `NOT_SUPPORTED` | Resource is not supported for given financing type |Mark order items as delivered. System notification. Some or all order items were delivered to customer. Based on *application* financing type and partner setting, application payment may be processed. ## Request
Path Parameters
Body
items object[] List of changed items. All items are considered when empty. Array [ = 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as whole item quantity is selected","minimum":1,"example":1,"nullable":true}} > ]
totalPrice object The total financial amount of items (from the `orderItems` array). You can specify the amount if it differs from the sum of the item prices. If this amount is not specified, `application.order.totalPrice` is used.
totalVat object[] Total VAT amounts of items (from `orderItems` array) split by their VAT rates. Array [ ]
document object Attached document (e.g. invoice, credit note etc.)
file object required oneOf string string
extraData object
deliveryCarrier object oneOf
Order items or whole order is marked as delivered
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
State change can not be processed
Schema
errors object[] required Array with errors Array [ ]
--- ## Mark order items as returned (refund) Mark order items as returned (refund) When some or all order items were returned by the customer to you (after delivery), use `/financing/v1/applications/{applicationId}/order/return` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. If you want to cancel some items before marking those items as sent or delivered, use [Mark order items as cancelled](#reference/application-operations/mark-order-items-as-cancelled) operation. > 📘 For additional examples and more information, please refer to the [Technical guide: Manage your orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability | | --- | --- | | `PROCESSING` | NO | | `REJECTED` | NO | | `CANCELLED` | NO | | `READY` | YES | Use `/financing/v1/applications/{applicationId}/order/return` resource with an empty request to mark all order items (the whole *order*) as returned at once. If you want to mark specific order item(s) as returned, you can pass a list of them in the items array, including quantity per item. Each item is identified by the combination of `code`, `ean`, `name`, and `type` — these must match the values used in the original `Create application` request. Alternatively, you can omit the items field and simply include `totalPrice` — in that case, the total refund amount is deducted from the order. > 💡 **TIP**: Optionally, you can specify the amount (in the field `totalPrice`) that should be returned if it differs from the sum of the items' prices. > 💡 **TIP**: Use an empty request if marking last (those not yet not marked) item(s) on order as returned. > ⚠️ If multiple properties (`code`, `ean`, `name` or `type`) are used for identifying some order item, it all must exact match the item data. :::info Partial refunds vs. order state... - `"items": []` present (empty array): We treat this as an amount-only partial refund. The order `totalPrice` is reduced by the refunded amount, but the order state does not change (remains `SENT`/`DELIVERED`). - `items` omitted or empty body `{}`: We treat this as a full return of the remaining items. The order `totalPrice` is reduced accordingly (possibly to zero) and the order state becomes `RETURNED`. This distinction prevents accidental full returns when a partner does not send the items field for partial refunds. ::: If the request was successfully processed, you receive HTTP status code 200 and object of information about changed *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `NOT_SUPPORTED` | The operation is not supported. Check the error response for details. |Mark order items as returned. System notification. Some or all order items were returned by customer back to e-shop. Based on *application* financing type and partner setting, credit note may be issued. ## Request
Path Parameters
Body
items object[] List of changed items. All items are considered when empty. Array [ = 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as whole item quantity is selected","minimum":1,"example":1,"nullable":true}} > ]
totalPrice object The total financial amount of items (from the `orderItems` array). You can specify the amount if it differs from the sum of the item prices. If this amount is not specified, `application.order.totalPrice` is used.
totalVat object[] Total VAT amounts of items (from `orderItems` array) split by their VAT rates. Array [ ]
document object Attached document (e.g. invoice, credit note etc.)
file object required oneOf string string
extraData object
Order items or whole order is marked as returned
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
State change can not be processed
Schema
errors object[] required Array with errors Array [ ]
--- ## Mark order items as sent Mark order items as sent When some or all order items were shipped to the customer, use `/financing/v1/applications/{applicationId}/order/send` resource where `{applicationId}` is the application ID you received in the response of `/financing/v1/applications` after its creation. > 📘 For additional examples and more information, please refer to the [Technical guide: Manage your orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | | Application state | Availability| | --- | --- | | `PROCESSING` | NO | | `REJECTED` | NO | | `CANCELLED` | NO | | `READY` | YES | Use `/financing/v1/applications/{applicationId}/order/send` resource with an empty request to mark all order items (the whole *order*) as sent at once. If you want to mark specific order item/s as sent, use `/financing/v1/applications/{applicationId}/order/send` resource with properly filled request that contains sent order items info. In this case request should contain array of sent order items with one or more particular order item identificators (`code`/`EAN`/`name`/`type`) - `code`, `ean`, `name` and `type` is used for identifying order item sent in `Create application`. > 💡 **TIP**: Use an empty request if marking last (those not yet not marked) item(s) on order as sent. > ⚠️ If multiple properties (`code`, `ean`, `name` or `type`) are used for identifying some order item, it all must exact match the item data. If the request was successfully processed, you receive HTTP status code 200 and object of information about changed *order* plus basic information about respective *application* (ID, state, substate). In other cases, you may receive errors similar to the following ones: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 404 | `OBJECT_NOT_FOUND` | The requested resource could not be found | | 422 | `TOTAL_PRICE_LIMIT_EXCEEDED` | The total price of all subcontracts exceeded the order total price | | 422 | `NOT_SUPPORTED` | Resource is not supported for given financing type |Mark order items as sent System notification. Some or all order items were shipped to customer. Based on *application* financing type and partner setting, application payment may be processed. ## Request
Path Parameters
Body
items object[] List of changed items. All items are considered when empty. Array [ = 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity. If empty, considered as whole item quantity is selected","minimum":1,"example":1,"nullable":true}} > ]
totalPrice object The total financial amount of items (from the `orderItems` array). You can specify the amount if it differs from the sum of the item prices. If this amount is not specified, `application.order.totalPrice` is used.
totalVat object[] Total VAT amounts of items (from `orderItems` array) split by their VAT rates. Array [ ]
document object Attached document (e.g. invoice, credit note etc.)
file object required oneOf string string
extraData object
deliveryCarrier object oneOf
Order items or whole order is marked as shipped
Schema
totalPrice object required Order total price including VAT.
totalVat object[] required Total VAT amounts split by their VAT rates. Array [ ]
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
documents object[] Attached documents (invoices etc.) Array [
file object required
extraData object
]
items object[] required Order items Array [
totalPrice object required Order items total price including VAT.
totalVat object required Order items VAT including VAT rate.
image object
unitPrice object required Order unit item price including VAT.
unitVat object required Financial amount with VAT rate.
= 1`"} schema={{"type":"number","description":"(positive float/decimal up to 3 decimal places) Item quantity.","minimum":1,"example":1}} > ]
applicationInfo object required Financing application base information
State change can not be processed
Schema
errors object[] required Array with errors Array [ ]
--- ## Precheck Precheck Precheck *application* Returns probability of *application's* approval and limits of particular customer, if known to Skip Pay | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | It has to be called with valid access token (see the [Security section](https://developers.skippay.cz/docs/api-reference/security)) from your server. If you plan to integrate it in client flow, you should implement REST endpoint bound to your shopping basket session, that will be used as a proxy to call Skip Pay API - **NEVER put access token directly to client side**. Possible error codes explanation: | Status code | Code | Explanation | | --- | --- | --- | | 400 | `INVALID_REQUEST` | Request was not well formatted (malformed request syntax, size too large, etc.) | | 422 | `PERSONAL_ID_INVALID` | PersonalId is not valid |Returns probability of *application's* approval and limits of particular customer, if known to Skip Pay ## Request
Body
customer object Customer data
addresses object[] Addresses. All types are allowed. Array [ ]
extraData object Additional customer data
transactionsSum object required Historical sum of all paid customer transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
cashlessTransactionsSum object Historical sum of all paid customer cashless transactions made in partner's e-shop prior to current order. The current order should not be included in this indicator.
= 1`"} schema={{"type":"number","description":"Total time spent on partners website (in seconds)","minimum":1,"example":250,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total time spent on partners website in review and comments sections (in seconds)","minimum":1,"example":100,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Total count of removed items form shopping basket during current shopping","minimum":1,"example":2,"nullable":true}} > = 1`"} schema={{"type":"number","description":"Number of viewed pages with products","minimum":1,"example":10,"nullable":true}} >
order object Order information for precheck validation
totalPrice object Financial amount
addresses object[] Addresses. Only `BILLING` and `DELIVERY` types are allowed. Array [ ]
deliveryCarrier object oneOf
items object[] Order items Array [
totalPrice object Financial amount
totalVat object Financial amount
unitPrice object Financial amount
unitVat object Financial amount
]
Probability of approval
Schema
results object[] required Precheck results for each type of product. Array [ The lower is the value, the lower accuracy of the result."}} > ]
limits object Customer's limits
availableLimit object required Financial amount
totalLimit object required Financial amount
Error in processing request
Schema
errors object[] required Array with errors Array [ ]
Error in processing request
Schema
errors object[] required Array with errors Array [ ]
--- ## Skip Pay API for partners Version: 1.0 Skip Pay API for partners API documentation for Skip Pay partners. Authentication Security Scheme Type: http HTTP Authorization Scheme: bearer Contact Skip Pay API: [info@skippay.cz](mailto:info@skippay.cz) URL: [https://www.skippay.cz](mailto:https://www.skippay.cz) --- ## Update recurrence Update recurrence It allows to get recurrence detail. You can check if customer authorized your request and if recurrence is ready to be used. | Financing type | Supported | | --- | --- | | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | NO |At this moment it allows to change the recurrence state only. It's not neccessary but if you want to be sure that nobody can use the recurrence in the future you can cancel it. ## Request
Path Parameters
Body
Recurrence was updated
Schema
There is no recurrence
Schema
errors object[] required Array with errors Array [ ]
Recurrence can not be updated
Schema
errors object[] required Array with errors Array [ ]
--- ## Application states Applications have a state and substates of their own that merchants and Skip Pay can manage. Following is a list of current states: | **Application state** | **Recurrence allowed state(s)** | **Description** | |--|--|--| | `PROCESSING` | `APPROVING` | Application is being processed by Skip Pay | | `READY` | `READY`, `CANCELLED`, `EXPIRED` | Application was approved and is ready for financing | | `REJECTED` | `CANCELLED` | Application was rejected by Skip Pay system | | `CANCELLED` | `CANCELLED` | Application was cancelled by client or by Skip Pay, either before approval or after delivery | Simple diagram that shows a possible transition between states: With the [Get application detail](https://developers.skippay.cz/docs/api/getapplicationdetail) operation, a merchant can always get the status of an application. Skip Pay alerts the merchant in advance of significant state and substate changes so that the merchant can handle Application notification. > :bulb: More info how [Retrieve Application Details](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders#retrieve-application-details) --- ## Conventions ## Naming conventions - we use `camelCase` for all object and attribute names - we use `CAPITAL_UNDERSCORE` for enum values - we use plural in resource names ## Paging Some resources, as stated in the documentation, return a collection of objects that support pagination. We use a technique known as `cursor-based pagination`. **To make a request**: - The query parameter `limit` specifies the maximum number of objects in the returned collection. - The query parameter `after` specifies the last object retrieved in the previous request. Its value is usually the ID of the last object retrieved in the previous call, but this will be stated in the documentation. The 'after' parameter is used when traversing the collection forward. - The query parameter `before` specifies the first object retrieved in the previous request (analogous to the `after` parameter), and is used when traversing the collection backwards. - If `before` and `after` are omitted, the beginning of the collection is returned, using the specified sort order. - Items in the collection are always sorted according to the attribute which could be passed in the `after`/`before` parameters. Even if you specify a different sorting order, this attribute will be the last sorting criterion. If you do not specify a sorting order, the resulting collection will be sorted according to this attribute. **on response**: The `pagingInfo` object is returned as part of the response body with the following attributes: - `nextPage` - a request to retrieve the next page. Either `nextPage` or `previousPage` is returned, depending on whether you specify the `after` or `before` parameter. If you don't specify either `before` or `after` parameters, these attributes will be omitted from the response. - `prevPage` - a request to retrieve the previous page (see `nextPage` attribute description above). - `itemsPerPage` - the number of items per page. ### Example request curl -X GET https://api.partner.skippay.cz/financing/v1/examples?sort=category&limit=10&after=15 ### Example response `pagingInfo` ``` "pagingInfo": { "nextPage": "/examples?sort=category&limit=10&after=15" "itemsPerPage": 10, } ``` ## Sorting Some resources (as stated in documentation) support result sorting. You can specify sorting attributes and order using the `sort` request parameter. For ascending order, specify just the attribute name; for descending order, add the unary `-` in front of the attribute name. You can specify multiple attributes for sorting, separated by a comma. Each resource that supports sorting specifies a list of attributes that can be used for sorting. ### Examples - `/public/fxrates?sort=currencyCode` - get list of FX rates sorted by attribute currencyCode - `/public/branches?sort=-name` - get list of branches, sorted by attribute name in descending order - `/banking/accounts?sort=accountType,-accountCurrency,accountName` - get list of accounts, sorted by type (ascending), then by currency descending and then by account name (ascending) ## Filtering Some resources (as stated in the documentation) support result filtering. These resources have a list of filters specified, including possible operations and values. You can specify filtering by passing the filter attribute. The general pattern for specifying a filter is: `||` - `filterName` - filter name from documentation - `operator` - operator, specified in resource documentation - `values` - one or more values for filter. Multiple values are separated by comma Multiple filters can be specified on each request, separated by semi-colon. They are joined by "AND", so each result item must satisfy all conditions. ### Filtering examples - get a list of partners with category in (1, 5, 10) `GET /general/partners?filter=category|in|1,5,10` - get a list of contracts with contractDate in (2016-02-10, 2016-04-28> `GET /general/contracts?filter=contractDate|gt|2016-02-10;contractDate|lteq|2016-04-28` ### List of operators | Operator | Meaning | |--|--| | `lt` |less than | | `lteq` | less than or equals | | `eq` | equals | | `gteq` | greater than or equals | | `gt` | greater than | | `in` | value in list | ## Request restrictions Please, keep in mind following restrictions regarding requests: - Maximum request size is **10 MB**. - Maximum size of accepted single file is **500 kB**. - Here is the list of suppported files: | MIME type | Example(s) | |--|--| |`application/pdf` | `*.pdf` | | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | `*.xlsx` | |`application/vnd.openxmlformats-officedocument.wordprocessingml.document` | `*.docx` | | `application/vnd.openxmlformats-officedocument.presentationml.presentation` | `*.pptx` | | `application/vnd.ms-excel` | `*.xls, *.xlt, *.xla` | | `application/msword` | `*.doc, *.dot` | | `application/vnd.ms-powerpoint` | `*.ppt, *.pot, *.pps, *.ppa` | | `plain/text` | `*.csv, *.txt` | | `image/jpeg` | `*.jpg, *.jpeg` | | `image/png` | `*.png` | | `image/gif` | `*.gif` | ## API calls limits When you exceed the API call limit (by calling our API more times than your quota allows), you will receive an HTTP error 429. To inform you about your limits, we use the following response headers: - `X-Rate-Limit-Limit` - the number of allowed requests in the current period - `X-Rate-Limit-Remaining` - the number of remaining requests in the current period - `X-Rate-Limit-Reset` - the number of seconds left in the current period ## Formats Date and time are represented using ISO 8601 formatting, for example: - **Date** is represented as `YYYY-mm-dd`, and timezone (local) is added when necessary. - **Week** number 1 is the week with the year's first Thursday in it. - **Day** of the week is represented as a number `1..7`, with 1 being Monday. - **Time** is represented as `Thh:mm:ss`, and timezone is added when necessary. Time with an arbitrary number of digits representing milliseconds is also accepted (when the ISO 8601 format criteria is met), but the time without milliseconds is always returned. - **Phone numbers** use international format starting with `+` and including the country code. An example of a valid number is `+420739111222`. - **Number format** is defined by the JSON standard, for example, decimals are separated by a `'`. - The **money format** follows the ISO 4217 standard, where the value is represented in minor units. For example, the amount 125,90 CZK would be represented as `12590`. --- ## HTTP error status codes We use following status codes throughout the API, except for OAuth flow when response codes are prescribed in RFC | Error code | Error status | Description | Possible fix | |--|--|--|--| | 400| Bad Request | The server was unable to understand the request due to invalid syntax or a missing parameter. | Please review the request parameters and syntax, and make any necessary corrections before resubmitting the request. | | 401| Unauthorized | The user is not authenticated or does not have permission to access the requested resource. | Please check your login credentials and ensure that you have the appropriate permissions to access the resource. If the problem persists, please contact our support team for assistance. | | 403| Forbidden | The user is authenticated, but does not have permission to access the requested resource. | Please contact our support team for assistance, as this error is typically caused by a server-side issue that is outside of your control. | 404| Not Found | The requested resource could not be found on the server.| Please check the URL and input parameters to ensure that they are correct. | 405| Method Not Allowed | The requested HTTP method is not allowed for the specified resource. | Please ensure that the HTTP method is correct for the resource being accessed, and that the URL is correct. | 422| Unprocessable Entity | The server was unable to process the request due to invalid data or parameters. | Please review the request data and parameters, and make any necessary corrections before resubmitting the request. | 429| Too Many Requests | The user has exceeded the rate limit for requests. | Please wait a few moments before resubmitting your request, or consider reducing the frequency of your requests to avoid exceeding the rate limit. | 500| Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request. | Please wait a few moments before resubmitting your request, or contact our support team for assistance if the problem persists. | 503| Service Unavailable | The server is currently unavailable and unable to handle the request. | Please wait a few moments before resubmitting your request, or contact our support team for assistance if the problem persists. ## Error handling Besides HTTP status codes, which are the main indication if something goes wrong, we also use `errors` object to report more details about errors. Errors object example: ```javascript { ... errors: [ { "code": "ERR_100", "message": "Invalid contract number", "severity": "ERROR", "attribute": "partyAccount.accountNumber", // optional "ticketId": "UAT1:AMS:20160516-091658.450:45e4" // optional }, { "code": 352, "message": "Insufficiend funds for payment order realization", "severity": "WARN" }, { "code": 523, "message": "This order will trigger currency exchange operation", "severity": "INFO" } ] } ``` ## Error object attributes | Attribute name | Description | |--|--| | `code` | unique error code | |`message` | human readable error description (non-localized) | | `severity` | error severity | | `attribute` | json path of request attribute that caused the error (optional) | | `ticketId` | internal ticket ID, used for error backtracking | ### Error severity At SkipPay we have three levels of severity: | Level of severity | Description | |--|--| | `ERROR` | critical error, execution cannot continue. This MUST be indicated also by appropriate HTTP status code (`422 Unprocessable Entity`) | | `WARN` | non-critical error, execution can continue but further user interaction is advisable (for request to proceed, you MUST specify this error code in `override` request attribute). This MIGHT be indicated also by appropriate HTTP status code. | | `INFO` | information only, execution can continue without user interaction. | --- ## Overview SkipPay's RESTful API is a powerful tool for developers looking to integrate payment solutions into their applications or platforms. SkipPay's API documentation provides detailed information on the various endpoints available, as well as the parameters and response formats for each endpoint. The documentation also includes code examples in several programming languages to help you get started quickly. Overall, SkipPay's REST API is a flexible and reliable way to add payment functionality to your application or platform. If you have any questions or issues, the SkipPay support team is available to help you out. --- ## SkipPay API Base URLs: https://api.partner.skippay.cz Version - Default: v1.0 ## Making Requests All requests and responses are JSON encoded. Requests must be made over SSL connections using HTTPS. Requests made over HTTP will be redirected to HTTPS. --- ## Security To access our API, you have to obtain *access token* first; this token is a string of arbitrary length (30+ chars) and it has to be included in HTTP header to every request to API. This section describes way to obtain valid access token and use it to access protected resources. - to obtain access token, use `/authentication/v1/partner` resource with appropriate parameters. - access token should be present in every request using request header `Authorization`, with type `Bearer`. If your access token has value `secret_token`, it should be specified as follows: `Authorization: Bearer secret_token` So the real example using curl will look like: ``` curl -H "Authorization: Bearer secret_token" https://api.partner.skippay.cz/financing/v1/applications ``` - access token has limited time validity (for 2 hours). After it is expired, you have to obtain new one using `/authentication/v1/partner` resource. - if you fail to specify access token, you will receive `401 Unauthorized` error and following response body: ``` { "error_description": "The access token is missing", "error": "invalid_request" } ``` - if you provide invalid access token, you will receive `401 Unauthorized` error and following response body: ``` { "error_description":"The access token is invalid or has expired", "error":"invalid_token" } ``` :bulb: See [Login endpoint](https://developers.skippay.cz/docs/api/loginpartner) > IMPORTANT NOTE: You must keep your access token and login credentials safe. NEVER put login credentials nor access token into client page. If you plan to integrate API calls in client flow without submitting the page to server, you should implement REST endpoint bound to your shopping basket session, that will be used as a proxy to call Skip Pay API. > NEVER transfer access token nor login credentials over plain HTTP. Such requests will be refused. --- ## Application notification Services that partner e-shops should create and make public in order to enable Skip Pay to notify these partner e-shops asynchronously of significant changes regarding specific applications and orders. Partner e-shops should create and make available this webhook handlers so that Skip Pay can alert them asynchronously to significant changes affecting specific applications. When there is a need to inform you of significant changes within a specific application, Skip Pay will use this resource. Specifically in the following cases: | Trigger | Corresponding Application.stateReason | Expected reaction | |--|--|--| | Application was rejected | `REJECTED` | You should release the reserved goods and cancel the relevant order. | | Application was cancelled | `CANCELLED_NOT_PAID` | You should release the reserved goods and cancel the relevant order. | | Order to dispatch (we commit to finance customer's order) | `READY_TO_SHIP` | Dispatch the order to the customer | | Order dispatched | `READY_SHIPPED` | None - serves as an acknowledgment (partner should know about this change) | | Order delivered | `READY_DELIVERED` | None - serves as an acknowledgment (partner should know about this change) | | Application was paid to the partner | `READY_PAID` | Financial compensation for the application has been processed - check your bank account | > READY_PAID state is set when at least part of the application price was paid to the partner, not necessarily full application price. This also applies to the Application was paid to the partner application notification trigger. We fill the request with following information: - Application unique ID - Application state - Application substate > IMPORTANT: You should always double check the state of Application on `/financing/v1/applications/{applicationId}` resource due to security reasons. By default, the notification is automatically sent again (retried) after 1, 5, 5, 5, and 5 minutes if it is not processed due to an error or unavailability (5 tries in total). In case of change in changes in application, you will receive notification in JSON format like this: ```json { "id": "11200a0ee1", "state": "PROCESSING", "stateReason": "PROCESSING_REDIRECT_NEEDED" } ``` As a response, we expect to send us confirming message like that: ```json { "statusCode": "200", "status": "OK" } ``` All notifications will be sent to the URL you entered [in the NotificationURL](https://developers.skippay.cz/docs/api/createapplication) parameter when you have created the application. | **Financing type** | **Supported** | |--|--| | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | --- ## Payment notification Services that partner e-shops should create and make public in order to enable Skip Pay to notify these partner e-shops asynchronously of new applications. When there is a need to inform you of new application, Skip Pay will use this resource. Specifically in the following cases: | **Financing type** | **Supported** | |--|--| | `DEFERRED_PAYMENT` | YES | | `PAY_IN_THREE` | YES | > IMPORTANT: Partner e-shops should create and make available this service so that Skip Pay can alert them asynchronously to significant changes affecting specific applications. In case of new application, you will receive notification in JSON format like this: ```json { "paymentId": "1a12", "date": "2017-05-20", "applicationId": "11200a0ee1", "value": { "amount": 12590, "currency": "CZK" }, "variableSymbol": "1234567890", "invoice": { "fullName": "Ing. Jan Novák, Csc.", "address": { "name": "John Doe", "country": "CZ", "city": "Prague", "streetAddress": "Letenská", "streetNumber": "22", "zip": "140 00", "addressType": "PERMANENT" }, "dueDate": "2017-06-20", "accountNumber": { "accountNumber": "123-123456789", "bankCode": "0100" } } } ``` As a response, we expect to send us confirming message like that: ```json { "statusCode": "200", "status": "OK" } ``` > All notifications will be sent to the URL you entered [in the NotificationURL](https://developers.skippay.cz/docs/api/createapplication) parameter when you created the application. --- ## Contact Us If you have any questions or issues related to Skip Pay, you can get in touch with us using the following methods: 1. Check out our [FAQ section](https://skippay.cz/caste-dotazy) on our website, where we have compiled answers to the most commonly asked questions about Skip Pay. 2. Send us an email at integrace@skippay.cz and we will get back to you as soon as possible with a solution to your problem. 3. If you need immediate assistance, please call our support team at +420 226 288 700. We are available during our business hours and will be happy to help you. --- ## Integrating Skip Pay BNPL payment method Skip Pay provides the easiest and fastest integration of BNPL into your online store. ## What is Buy Now Pay Later (BNPL)? Buy Now Pay Later (BNPL) is a payment method that allows customers to make purchases of goods or services and defer payment to a later date. This method enables customers to buy products immediately but delay the payment for a later time, often with no or low interest rates. [Find out more about Skip Pay BNPL products](https://developers.skippay.cz/docs/guides/introduction/getting-started-with-skip-pay-products) At Skip Pay, we believe that the payment process should be as simple and straightforward as possible, so that businesses can focus on what they do best: delivering high-quality products and services to their customers. With our advanced technology and easy-to-use platform, we are committed to providing businesses with the tools and support they need to succeed in today's fast-paced, digital marketplace. ## Integrating Skip Pay BNPL is as easy as other payment methods Integrating Skip Pay (BNPL) into your e-commerce store or payment system is just as simple as integrating any other non BNPL payment method. ### Integration to your platform via REST API Follow the steps below to seamlessly integrate BNPL into your platform: 1. **Customer selects BNPL as the payment method**: When a customer proceeds to checkout on your e-commerce store or payment system, offer them the option to pay using Skip Pay. 2. **Customer is redirected to the payment gateway**: Once the customer selects BNPL, they will be redirected to Skip Pay's payment gateway, which handles BNPL transactions. Follow [Guide: Create Applications](https://developers.skippay.cz/docs/guides/technical-guides/create-application-with-skip-pay) for details on how to create a new BNPL transaction. 3. **Customer provides necessary details**: The customer will provide the required information to complete the BNPL payment on payment gateway. This may include some personal details or other relevant data. 4. **Payment gateway processes the transaction**: Skip Pay's payment gateway will verify the payment and approve or decline the application (transaction) based on internal validation checks. For details on how to retrieve application details, including payment status, refer to [Guide: Manage Your Orders - Retrieve Application Details](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders#retrieve-application-details). 5. **Customer is redirected back to your store**: After successfully completing the payment, the customer will be redirected back to your e-commerce store and receive a payment confirmation. 6. **Financial flows similar to conventional payments**: The financial flows for BNPL payments are similar to other payment methods like card payments. As a merchant, you will receive the full payment upfront, and Skip Pay takes responsibility for managing any potential customer defaults. Additionally, the BNPL system allows for refund and cancellation processes as well. In the event of a refund, the funds are returned to the merchant instead of directly to the customer, ensuring a seamless refund experience. For information on how to proceed the payment, refund the payment or cancel the payment, see [Guide: Create application](https://developers.skippay.cz/docs/guides/technical-guides/create-application-with-skip-pay#step-four-mark-order-item-as-sent-and-delivered) and [Guide: Manage Your Orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). ### Integration using plugins or one-click-solutions In addition to our REST API, we also offer integration with several popular platforms, such as Comgate, Fast Centrik, Shoptet and Shopty. These integrations are click-solutions that make it easy to start using Skip Pay on your website with minimal setup. :::info Good to know... In addition to our REST API, we also offer integration with several popular platforms, such as Comgate, Fast Centrik, Shoptet and Shopty. These integrations are click-solutions that make it easy to start using Skip Pay on your website with minimal setup. ::: :::info Good to know... [Check out all the available integrations on our website.](https://skippay.cz/pro-vyvojare) ::: ## What services are we providing? 1. **Payment Processing**: We provide a comprehensive suite of payment processing services, including **BNPL** (**B**uy **N**ow **P**ay **L**ater), to help businesses accept payments from their customers securely and efficiently. With our BNPL options, customers can purchase items they want and pay for them over time, giving them the flexibility to manage their finances while still enjoying their purchases. For more information see [Guide: Create application](https://developers.skippay.cz/docs/guides/technical-guides/create-application-with-skip-pay#step-four-mark-order-item-as-sent-and-delivered) and [Guide: Manage Your Orders](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders). 2. **Subscription Management**: We offer a flexible subscription management system that allows businesses to set up recurring payments, manage customer accounts, and track subscription metrics all in one place. For more information see [Recurring on demand](https://developers.skippay.cz/docs/api-reference/recurring-demand). 3. **Payment Notifications**: We use this resource to notify you about important changes within a particular application and related transactions. For example, if there is a new update, you will receive a notification. For more information see [Webhooks and notifications - Application Notification](https://developers.skippay.cz/docs/api-reference/webhooks-and-notifications/application-notification) and [Webhooks and notifications - Payment Notification](https://developers.skippay.cz/docs/api-reference/webhooks-and-notifications/payment-notification). :::info Good to know... An application refers to the process by which a customer applies for financing through one of Skip Pay's payment methods. The elementary flow begins when the customer wants to use a Skip Pay payment method to finance their purchase from a partner e-shop. ::: ## Where to start? Before you start the integration process, you have to register to get the necessary access and credentials for the Skip Pay API. ### How does registration work? 1. **Contact us**: Visit Skip Pay's website and fill out the registration form. You will be asked to provide personal information and indicate which of our services you are interested in, such as deferred payments, Pay in three, or both. 2. **Meet us**: After you submit the registration form, Skip Pay will review your application and contact you to schedule a meeting to discuss your needs and answer any questions you may have. 3. **Discuss your needs**: During the meeting, you will have the opportunity to discuss your business requirements and receive guidance on how to integrate Skip Pay's services into your website or application. 4. **Test it out**: Once your application is approved, you will receive your credentials and access to our sandbox environment. This will allow you to test our services in a simulated environment before going live. 5. **Go live**: After you have completed testing and are satisfied with the results, you can start using Skip Pay's services in a production environment to begin processing payments from your customers. ## Need help? If you have any questions or issues related to Skip Pay, you can get in touch with us using the following methods: 1. Check out our [FAQ section](https://skippay.cz/caste-dotazy) on our website, where we have compiled answers to the most commonly asked questions about Skip Pay. 2. Send us an email at [integrace@skippay.cz](mailto:integrace@skippay.cz) and we will get back to you as soon as possible with a solution to your problem. 3. If you need immediate assistance, please call our support team at +420 226 288 700. We are available during our business hours and will be happy to help you. --- ## Getting started with Products ## Overview of Skip Pay products In Skip Pay, we offer a **B**uy **N**ow **P**ay **L**ater (**BNPL**) payment method to provide more flexibility for customers during the checkout process. With BNPL, customers can choose to pay for their purchase in installments instead of paying the full amount upfront. This payment method is divided into two categories: **Deferred Payment** and **Pay in Three**. ## Deferred payment Deferred payment is a payment option that allows customers to defer their payment for a purchase until they receive the product. The customer selects Deferred payment as their payment option at checkout and enters their personal information. Skip Pay then runs a quick credit check on the customer to determine whether they are eligible for Deferred payment. If the customer is approved, Skip Pay pays you upfront for the purchase after order confirmation, and the customer receives their product. The customer then has 30 or 50 days to pay Skip Pay back, depending on their account level. ## Pay in three Pay in Three allows customers to split the cost of their purchase into three equal payments. The first payment is made at checkout, the second payment is due after 30 days, and the final payment is due after 60 days. Like Deferred payment, Skip Pay pays you upfront for the purchase after order confirmation, and the customer receives their product. Pay in Three is particularly popular for more expensive purchases, as it allows customers to spread out their payments over time. :::info Good to know... Once you have implemented our solution, we will not require any additional action from your side. We will handle the processing of the order, no matter which type of payment the customer selected, and you will receive the full amount for the order promptly. As our partner, you don't need to worry about whether the customer pays or not - you will always receive the full amount. ::: ## Benefits of using Skip Pay As a merchant, using Skip Pay's **Deferred payment** and **Pay in Three** products can provide several benefits for your business. By offering flexible payment options to your customers, you can increase sales and attract new customers who may not have been able to afford your products otherwise. Let's check out the benefits in more detail: 1. **Increased sales**: By offering flexible payment options like Deferred payment and Pay in Three, merchants can attract more customers who may not have been able to afford their products otherwise. 2. **Increased AOV** (**A**verage **O**rder **V**alue): By offering flexible payment options like Deferred payment and Pay in Three, merchants can attract more customers who may not have been able to afford their products otherwise. Customers are able to spend more,resulting in increased AOV. 3. **Higher conversion rates**: Providing multiple payment options can reduce cart abandonment rates and increase overall conversion rates for merchants. 4. **Reduced risk**: Skip Pay assumes the risk of non-payment by customers, meaning that merchants can avoid the potential financial losses associated with chargebacks and fraud. 5. **Easy integration**: Skip Pay payment methods are designed to be easy to integrate with existing merchant systems and processes, minimizing the amount of development work required. 6. **Improved cash flow**: Merchants can receive payment for orders more quickly with Skip Pay, potentially improving their cash flow and financial stability. 7. **Enhanced customer loyalty**: Providing flexible payment options can help to build customer loyalty and satisfaction, leading to increased repeat business and positive word-of-mouth referrals. ## How to use our services? ### [REST API](https://developers.skippay.cz/docs/api-reference/overview) Skip Pay's REST API provides a simple and secure way to integrate our payment solutions into your website or application. With our REST API, you can easily process payments, manage transactions, and access real-time data on your customers and their purchases. Our API documentation provides detailed information on how to use each API endpoint, including sample requests and responses. In addition to the API documentation, we also offer SDKs for several popular programming languages to make integration even easier. **Benefits of using Skip Pay REST API** Our primary method of integration is through our robust REST API, which provides a secure and scalable way to integrate Skip Pay into your website or application. Some benefits of using our REST API include: 1. REST API is **easy to use:** Our API is simple to integrate and can be customized to meet your specific business needs. 2. REST API is **secure**: Our API is built with security in mind, and we use industry-standard encryption and tokenization techniques to protect your data. 3. REST API is **scalable**: Our API can handle high transaction volumes, making it ideal for businesses of all sizes. 4. REST API offers **real-time updates**: Our API provides real-time updates on transactions, so you can track payments and respond quickly to any issues. ### Easy-to-integrate solutions In addition to our REST API, we also offer integration with several popular platforms, such as Comgate, Fast Centrik, and Shopty. These integrations are click-solutions that make it easy to start using Skip Pay on your website with minimal setup. :::info Good to know... [Check out all the available integrations on our website.](https://skippay.cz/pro-vyvojare) ::: ## Need help? If you have any questions, send us an email at integrace@skippay.cz --- ## Technical guide: Create application with Skip Pay Welcome to the Skip Pay technical guide on creating a new application. In this guide, we will walk you through the step-by-step process of creating a new application with Skip Pay. By following this guide, you will learn how to create a new application and integrate it with Skip Pay's payment methods. We've designed this guide to be easy to follow and understand, with clear instructions and examples. Whether you're an experienced developer or new to Skip Pay, we're confident that you'll find this guide helpful in creating a successful application with our platform. So let's get started! :::info Good to know... In the Skip Pay world, a financing application represents a specific partner application that will use the Skip Pay payment solution. The application is created and managed by the partner (applicant) and is linked to the partner's account on the Skip Pay platform. The application is identified by a unique application ID and has associated API credentials that allow the partner's application to make API calls to the Skip Pay platform. ::: ## Before you start Before you start, make sure you meet all the essential requirements below before you start creating a new application: - Active Skip Pay registration for partners - Skip Pay API credentials (user name, password and API key) - Postman or software with similar functionality ## Step one: Login to Skip Pay To get started with creating a new application in Skip Pay, the first step is to log in to your Skip Pay account. This will give you access to the tools you need to create and manage your applications. ::: 1. Open Postman and fill: POST [https://api.partner.skippay.cz/authentication/v1/partner](https://api.partner.skippay.cz/authentication/v1/partner) :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/loginpartner), along with additional information. ::: 2. In the **Body** section, fill your `username` and `password`. Your **Body** should look like this: ```json title="Login to Skip Pay Request example" { "username": "yourUsername", "password": "yourSecretPassword" } ``` 3. **Call the REST API**. Your response should look like this: ```json title="Login to Skip Pay Response example" { "accessToken": "TokenForPartnerTokenForPartnerTokenForPartnerTokenForPartner", "expiresIn": 7200 } ``` :::tip 200-OK Response? Great! You have successfully logged in to the Skip Pay portal. You also obtain a bearer_token that you can use on the whole Skip Pay platform. ::: ## Step two: Create Application In the second step, you will create a new application using Skip Pay services. Using our simple API will make it really easy to do so: 1. Open Postman and fill: POST [https://api.partner.skippay.cz/financing/v1/applications](https://api.partner.skippay.cz/financing/v1/applications) :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/createapplication), along with additional information. ::: 2. In the **Body** section, fill in all the details about your application. Make sure that you choose the correct financing type. In Skip Pay, we provide two possible financing types: `DEFERRED_PAYMENT` and `PAY_IN_THREE`. :::info Good to know... Please ensure that you have filled in your merchantUrls, among other required information. This will enable us to communicate with you appropriately in case of any changes in the application's status. ::: 3. Call the REST API. Your response should look like this: ```json title="Create Application Request example" { "type": "DEFERRED_PAYMENT", "agreementTermsAndConditions": true, "customer": { "fullName": "Ing. Jana Nováková, Csc.", "email": "jana.novakakova@email.com", "phone": "+420123456788", "extraData": { "transactionsNumber": 3, "cashlessTransactionsNumber": 1, "transactionsSum": { "currency": "CZK", "amount": 259900 }, "cashlessTransactionsSum": { "currency": "CZK", "amount": 1359900 } } }, "order": { "number": "CZ212235", "reservationDate": "2023-06-10T00:00:00+02:00", "totalPrice": { "currency": "CZK", "amount": 121000 }, "totalVat": [ { "vatRate": 21, "amount": 21000, "currency": "CZK" } ], "items": [ { "code": "EXC4677-1a", "name": "Tefal KO851830", "variant": "Digital Display Black", "producer": "Tefal", "categories": ["home electronic"], "quantity": 1, "unitPrice": { "currency": "CZK", "amount": 121000 }, "totalPrice": { "currency": "CZK", "amount": 121000 }, "unitVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" }, "totalVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" } } ], "addresses": [ { "name": "Jana Nováková", "city": "Prague", "country": "CZ", "streetAddress": "Uličnická", "streetNumber": "22", "zip": "140 00", "addressType": "BILLING" } ], "variableSymbols": ["9988776655"], "deliveryCarrier": { "carrierId": "PPL" }, "channel": "ESHOP" }, "merchantUrls": { "approvedRedirect": "https://yourawesomeeshop.dev/checkout/skippay/approved", "rejectedRedirect": "https://yourawesomeeshop.dev/checkout/skippay/rejected", "notificationEndpoint": "https://api.yourawesomeeshop.dev/skippay/notification/" } } ``` :::tip 201-Created? Your application was created and you are ready for the next step. To make integration easier for partners, a duplicate check is performed during request creation. If the data matches a previous request, the duplicate is returned rather than a new one being created. The API response code is 200 rather than 201 (created). For e-shop, order type, total amount, order number, and variable symbols, exact matching is performed. To avoid unintentional duplicates caused by errors or repeated clicks, the check is performed within a 20-minute window. ::: ## Step three: Redirect user to gateway When a customer creates an application in Skip Pay, it is important to guide them through the entire process to ensure a smooth transaction. One crucial step in this process is redirecting the customer to the Skip Pay gateway after they create their order in your shop. Here is a step-by-step breakdown of how this process works: 1. **Redirect the customer to the Skip Pay gateway**: Once the customer has created their application, the first step is to redirect them to the Skip Pay gateway. This is where the customer will authorize the payment and the customer's application will be processed and either approved or rejected based on SkipPay's algorithms. 2. **SkipPay approves or rejects the application**: Once the customer is redirected to the SkipPay gateway, SkipPay's algorithms will evaluate the application based on a variety of factors, such as the customer's credit history and the merchant's history with SkipPay. 3. **Customer is redirected to approvedRedirect URL or rejectedRedirect URL**: After the customer's application has been evaluated by SkipPay, the customer will be redirected to either the approvedRedirect URL or rejectedRedirect URL that you provided. If the application was approved, the customer will be redirected to the approvedRedirect URL to complete the transaction. If the application was rejected, the customer will be redirected to the rejectedRedirect URL to try again or to seek alternative payment options. 4. **Skip Pay sends you a notification about the status of the application**: You will also receive a notification about the status of the application on the notificationEndpoint URL that you provided when the application was created. This will allow you to take any necessary actions based on the status of the application. By following these steps and ensuring that the customer is properly redirected to the SkipPay gateway, you can help ensure that their customers have a smooth and hassle-free payment experience. ## Step four: Mark order item as sent and delivered The final step in the SkipPay payment process is marking the order items as sent and delivered. While this step is optional, at least one of the actions must be taken, depending on the agreement between you and Skip Pay on when the funds should be transferred in case of a successful application. This step can be broken down into two parts: marking items as sent and marking items as delivered. Let's take a closer look at one of them: Mark order item as sent. :::caution Warning! Without redirection to the gateway and back, and waiting for the outcome, you won't be able to provide information about the delivery of the order to Skip Pay. Until your customer's application is approved or declined, you won't have confirmation that you'll receive payment from Skip Pay. This means you can't dispatch the goods until then. ::: 1. Open Postman and fill: PUT [`https://api.partner.skippay.cz/financing/v1/applications/{applicationId}/order/send`](https://api.partner.skippay.cz/financing/v1/applications/{applicationId}/order/send) :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/markorderitemsassent), along with additional information. ::: 2. In the **Path**, fill in your `applicationId` that you obtained in the response when you created the application. 3. In the **Body** section, fill in all the details about your order item(s). Your **Body** should look like this: ```json title="Mark order as send Request example" { "items": [ { "name": "Tefal KO851830", "quantity": 1 } ], "totalPrice": { "amount": 121000, "currency": "CZK" }, "totalVat": [ { "amount": 21000, "currency": "CZK", "vatRate": 21 } ], "variableSymbol": "1234567890", "sentDate": "2023-06-11", "deliveryTrackingNumber": "EEX1221" } ``` 4. **Call the REST API**. We will return you all the available information about your order(s): ```json title="Mark order as send Response example" { "number": "AA235", "reservationDate": "2023-06-10T00:00:00+02:00", "state": "SENT", "totalPrice": { "currency": "CZK", "amount": 159900 }, "items": [ { "code": "EXC4677-1a", "ean": "888462064002", "name": "Tefal KO851830", "variant": "Digital Display Black", "producer": "Tefal", "categories": ["home electronic"], "quantity": 1, "unitPrice": { "currency": "CZK", "amount": 121000 }, "totalPrice": { "currency": "CZK", "amount": 121000 }, "unitVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" }, "totalVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" }, "productUrl": "https://www.myhomeeshop.cz/tefal-ko851830-digital-display-black-d5782285.htm", "state": "SENT", "sentDate": "2023-06-11", "deliveryTrackingNumber": "EEX1221" } ], "addresses": [ { "name": "Jana Nováková", "city": "Prague", "country": "CZ", "streetAddress": "Uličnická", "streetNumber": "22", "zip": "140 00", "addressType": "BILLING" } ], "variableSymbols": ["1234567890"], "deliveryCarrier": { "carrierId": "PPL" }, "channel": "ESHOP", "totalVat": [ { "vatRate": 21, "amount": 21000, "currency": "CZK" } ], "applicationInfo": { "id": "522154", "state": "READY", "stateReason": "READY_SHIPPED" } } ``` :::tip 2OO Response? Congratulations! You have successfully completed the process of creating a new application with Skip Pay. You have followed all the necessary steps, including ensuring you meet all the essential requirements, logging in to Skip Pay, creating a new application, marking order items as sent. Alternatively you can use [`/financing/v1/applications/{applicationId}/order/send`](https://developers.skippay.cz/docs/api/markorderitemsassent) endpoint with an empty request to mark all order items (the whole order) as sent at once. Please note that this is just the basic flow of the Skip Pay API, and there are many more possibilities to explore with applications. Check our “More?” section. ::: ## More? Once you have successfully created a new application using Skip Pay, there are several other possibilities and features that you can take advantage of through the Skip Pay API. These include: **Changing Application Order**: If you need to modify the details of your application, you can use the API to change the order details or update the financing type. This can be helpful if you need to make changes to your application after it has been created. :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/changeapplicationorder), along with additional information. ::: **Return/Cancellation Handling**: In addition to the basic flow of creating and processing applications, Skip Pay also provides functionality for handling returns or cancellations. This ensures that the financing and payment processes are seamless and efficient for both you and your customers. :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/markorderitemsascancelled), along with additional information. ::: Overall, Skip Pay's API provides a wide range of features and functionality to help you create and manage applications, while ensuring that the financing and payment processes are as smooth and efficient as possible. Whether you need to modify an application or handle returns and cancellations, Skip Pay has you covered. :::info Good to know... [Learn more how manage your orders.](https://developers.skippay.cz/docs/guides/technical-guides/manage-your-orders) ::: ## Need help? If you have any questions or issues related to creating payment, send us an email at [integrace@skippay.cz](integrace@skippay.cz) --- ## Skip Pay solution: From testing to production Welcome to the implementation guide for Skip Pay, the payment solution that simplifies and accelerates payouts for your business. This guide is designed to help you implement Skip Pay smoothly and efficiently, and to ensure that you have all the information you need to get started. Before beginning the implementation process, it is important to note that Skip Pay has a checklist of requirements that must be met before starting to use our services in a production environment. These requirements are in place to ensure that your business is properly set up to use our platform and to ensure a smooth implementation process. In addition to the checklist, there are also technical requirements that must be met before your business can start using Skip Pay. Our technical team can help you ensure that your systems are properly configured to integrate with our platform. Once all requirements are met, we will walk you through the implementation process step by step. This guide will cover everything you need to know to integrate Skip Pay into your business processes, including technical details and best practices. We understand that implementing a new payment solution can be complex and time-consuming, but our goal is to make the process as smooth and easy as possible. By following this guide, you'll be well on your way to using Skip Pay to simplify your applications and improve your operational efficiency. ## General information This section provides an overview of important information related to the implementation and use of Skip Pay services. It includes details on how to access the administration portal for partners as well as technical requirements for using Skip Pay services. Additionally, this section covers key rules and policies related to customer applications and orders. It is recommended that partners review this section thoroughly before implementing Skip Pay services: - As a partner, you'll need to use our back office administration tool to manage your account. You can access the back office at [https://admin.skippay.dev](https://admin.skippay.dev). Please note that skippay.dev is for testing purposes and skippay.cz is a production environment. - To log in, use your unique email address and password. We also require two-factor authentication, which is currently set to the code '**123456**' in the testing environment. - To verify an application, we use a one-time password (OTP) that is sent via SMS. The default OTP is '**123456**'. In test mode, SMS is not sent; therefore, the code '**123456**' is used to demonstrate the OTP function in the testing environment. ### Our important rules Here are some important rules to keep in mind when submitting applications: - Applications are paired internally based on the customer's unique email address and phone number. - We have a "**first unpaid application**" rule: if a customer has a first application (order) that's unpaid, any subsequent applications will be rejected. The customer must pay for their first application before submitting another one. A customer can't have an active (approved but unpaid) application for both deferred payment and third-party financing at the same time. - As a partner, you can access our API endpoint at api.partner.skippay.dev To log in, use your unique email address and password. You can find the API documentation at https://developers.skippay.cz. :::info Testing tip... If you are not creating another order for a known customer, use a unique email and phone number that you can create, for example, using a random nine-digit number generator, where you insert a random number into the randomNumber variable. You can then send the email in the format hello.world+randomNumber@skippay.cz and the phone number in the format +420randomNumber. ::: ### Our technical requirements | **Service** | **Integration environment** | |--|--| | Frontend environment (Web & Self-care) | [skippay.dev](https://skippay.dev) | | Backend (Back office) | [admin.skippay.dev](http://admin.skippay.dev) | | API – for partners | [api.partner.skippay.dev](http://api.partner.skippay.dev) | | Developer portal | [developers.skippay.cz](https://developers.skippay.cz) | ## Our checklist to successfully start Skip Pay services To ensure that you can start using Skip Pay services smoothly, make sure you have successfully completed all the steps below: - Sign up for the API through the REST API user interface and communicate with the API. - Create a new application with the status "**Approved**". - Create a new application with the status "**Cancelled**". - All items in the order can be switched to the "**Sent**", "**Delivered**" or "**Cancelled**" status. - The order is in the "**Sent**", "**Delivered**" or "**Cancelled**" status. - All items in the order can be switched to the "**Returned**" status. - The order is in the "**Returned**" status. - The applications created can be viewed in the administration interface. - Pre-check returns different results (if implemented). - Successfully received notifications using our API for your applications. ## Payment methods available in this guide In this guide, we will discuss two application methods offered by Skip Pay: 1. **Skip Pay Deferred application**: This payment method allows the customer to defer payment for goods for up to 50 days. 2. **Skip Pay in Three application**: This payment method allows the customer to split the payment into three monthly installments. Price ranges vary according to your needs. We are happy to go into as much detail as you would like regarding your unique needs. :::info Good to know... To distinguish between these payment methods in your application, use the "Type" attribute, which can have the values DEFERRED_PAYMENT or PAY_IN_THREE. ::: ## Testing process ### Approved and rejected applications To ensure that Skip Pay is working correctly, it's important to test its functionality. Here are the steps to test the process for applications with the "**Approved**" and "**Rejected**" statuses. :::info Good to know... If you are not sure how to create a new application, please follow [this guide](https://developers.skippay.cz/docs/guides/technical-guides/create-application-with-skip-pay) where we explain the whole process. ::: :::info Good to know If you need to check the status of an application, you can use the API endpoint [/financing/v1/applications/applicationId](https://developers.skippay.cz/docs/api/getapplicationdetail), where 'applicationId' is the unique ID of the application. Simply send an empty GET request to this endpoint to retrieve detailed information about the application. ::: **Approved Deferred application** 1. Use [Skip Pay REST API](https://developers.skippay.cz/docs/api/createapplication) to create applications. 2. Create an application **with a total price of < 1000**. 3. **Verify** the application. 4. The "**state**" parameter should contain the value "**READY**" and the "**stateReason**" parameter should contain the value "**READY_TO_SHIP**". **Rejected Deferred application** 1. Use [Skip Pay REST API](https://developers.skippay.cz/docs/api/createapplication) to create applications. 2. Create an application with an email address containing the string “reject”, for example: *hello.world+reject@skippay.cz*. 3. After verification of the application, the “**state**” parameter must contain the value **REJECTED** and the 'stateReason' parameter must contain the value **REJECTED**. **Approved Pay in three applications** 1. Use [Skip Pay REST API](https://developers.skippay.cz/docs/api/createapplication) to create applications. 2. The application (order) must be **within** the allowed price range of **1000 CZK - 15000 CZK**. 3. For the payment of the first installment, use the test payment card: 1. **Card number**: 4000007000010006 2. **Expiration date**: any valid date 3. **Verification code**: any 3 numbers 4. After completing the process, a page will display with information about the successful completion of the third party. 5. After the application is verified, the state parameter must contain the value **READY** and the stateReason parameter must contain the value **READY_TO_SHIP**. **Rejected Pay in three application** 1. Use [Skip Pay REST API](https://developers.skippay.cz/docs/api/createapplication) to create applications. 2. The application (order) must be **out of** the allowed price range of **1000 CZK - 15000 CZK, for example 1000 CZK**. 3. When passing through, the customer is redirected to a page with information about the rejection of the application. 4. After the application is verified, the state parameter must contain the value **REJECTED** and the stateReason parameter must contain the value **REJECTED**. ### Switching application statuses (Deferred Payment and Pay in three) To update the status of individual items in an order, use the "**Mark order items as cancelled/sent/delivered/returned**" methods. The API endpoints for this method are: - [/financing/v1/applications/applicationId/order/cancel](https://developers.skippay.cz/docs/api/markorderitemsascancelled) - [/financing/v1/applications/applicationId/order/send](https://developers.skippay.cz/docs/api/markorderitemsassent) - [/financing/v1/applications/applicationId/order/deliver](https://developers.skippay.cz/docs/api/markorderitemsasdelivered) - [/financing/v1/applications/applicationId/order/return](https://developers.skippay.cz/docs/api/markorderitemsasreturned) An order is in the "**Cancelled**," "**Sent**," "**Delivered**," or "**Returned**" state when all items in the order are in the same state. :::info Good to know... For example, an order is in the 'Sent' state when the Partner has marked the order or all items in the order as sent. ::: ## Summary Congratulations on completing the testing process for the Skip Pay financing application! During the testing process, you have learned about the different stages of the application process and how to test each stage effectively. You have also become familiar with the different API endpoints and their corresponding functions. As a result of your testing, you have gained valuable insights into the performance and functionality of the Skip Pay financing application. You have identified areas for improvement and have made recommendations for optimizing the application's performance and user experience. --- ## Technical guide: Manage your orders Welcome to our next guide! In our previous guide, you learned how to create a new application and went through the whole process step by step. In this guide, we will take the next step and show you how to manage your orders effectively. Managing orders is essential for businesses that want to stay on top. In this guide, we will cover everything you need to know about managing your orders. We will show you how to get the details about your application, how to change the application order, and how to manage canceled or returned orders. With this guide, you will be able to take full control of your orders and make the necessary changes to keep your business running smoothly. So let's dive into the world of order management with Skip Pay! ## Before you start Before you start, make sure you meet all the essential requirements below before you start creating a new application: - Active Skip Pay registration for partners - Skip Pay API credentials (user name, password and API key) - Postman or software with similar functionality ## Retrieve Application Details In this step, we'll learn how to retrieve the details of an existing application. Once you've created an application using Skip Pay, you may need to access its details for various reasons, such as verifying its status or checking the customer's payment plan. To do so, we'll use the *Get Application Detail* API endpoint, which will provide us with all the relevant information about the application. :::info Good to know... We proactively send updates to keep you informed of any changes. Stay connected with us by enabling notifications for timely information. ::: :bulb: More info about [Application notification](https://developers.skippay.cz/docs/api-reference/webhooks-and-notifications/application-notification) 1. Once your application is created, we can start to get the details about it. Open Postman and fill: GET https://api.partner.skippay.cz/financing/v1/applications/applicationId :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/getapplicationdetail), along with additional information. ::: 2. Fill in your `applicationId` that you got when you created the application in the **Path**. 3. Call the REST API. You will get all the details about your application such as state, stateReason, customer information, order information and much more. :::tip Congratulations! In this step, you have learned how to retrieve the details of your application. This information can be helpful for managing your orders and keeping track of your application's status. In the next step, we will cover how to change the order of your application. ::: ## Cancel Application When it comes to online purchases, sometimes things don't go as planned. Perhaps customers changed their minds, circumstances have changed, or products will never be in stock , and you need to cancel your purchase. With SkipPay, we understand that things can happen, and we've made it easy for you to cancel your application. In this guide, we will walk you through the steps to cancel an application, so you can have peace of mind knowing that your online purchases are always under your control. :::caution Warning! Conditions for using the Cancel Application endpoint Please note that the Cancel Application endpoint is subject to certain conditions, including: 1. It is available for applications that are in a state of "processing." 2. It is also available for applications that are in a state of "ready," but only if the order associated with the application has not been marked as "sent" or "delivered" using the [Mark Order Items as Sent](https://developers.skippay.cz/docs/api/markorderitemsassent) or [Mark Order Items as Delivered](https://developers.skippay.cz/docs/api/markorderitemsasdelivered) endpoints, respectively. 3. It is not available for applications that are in a state of "rejected" or "canceled." If you have any questions or concerns about these conditions, please contact our support team for assistance. ::: 1. If your application meets the conditions, we can start to cancel it. Open Postman and fill: PUT https://api.partner.skippay.cz/financing/v1/applications/applicationId/cancel :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/cancelapplication), along with additional information. ::: 2. Fill in your `applicationId` that you got when you created the application in the **Path**. 3. In the **Body** section, provide us with the reason why you want to cancel your applications. Your **Body** should look like this: ```json title="Cancel application Request example" { "reason": "APPLICATION_CANCELLED_BY_CUSTOMER" } ``` 4. **Call the REST API**. In response, you will get all available details about your cancellation. Note that cancellation requests may not be accepted for every application. The state parameter will show the result of your request, including the following states: |**State**| **State description** | |--|--| | Processing | Application is being processed by Skip Pay | | Ready | Application was approved and is ready for financing | | Rejected | Application was rejected | | Cancelled | Application was canceled by client, either before approval or after delivery | :bulb: More info about [Application states](https://developers.skippay.cz/docs/api-reference/applications-states) :::info Good to know... When the state is set to `Processing`, we provide a `stateReason` to indicate the current status and explain why the application remains in the processing state. ::: ## Change Application Order In this step, we will cover how to change the order details of an existing application to accommodate these changes. Whether you need to change the financing amount, payment date, or other details, our API makes it easy to update your application as needed. :::caution Warning! Please note that if there are any changes within your order before delivery (such as a change in the order items that affects the total price of the order or other billing information), you can only make those changes if none of the items have been marked as `sent` or `delivered`. Once an order item has been marked as `sent` or `delivered`, it cannot be changed. Thank you for your understanding. ::: 1. Once your application is created, we can start to change application order. Open Postman and fill: PUT https://api.partner.skippay.cz/financing/v1/applications/applicationId/order :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/changeapplicationorder), along with additional information. ::: 2. Fill in your `applicationId` that you got when you created the application in the **Path**. 3. In the **Body** section, provide us `reason` to change and update your application according to your needs. Your **Body** should look like this: ```json title="Change Application Order Request example" { "reason": "There has been a change in the items on the order.", "order": { "totalPrice": { "amount": 121000, "currency": "CZK" }, "totalVat": [ { "vatRate": 21, "amount": 21000, "currency": "CZK" } ], "items": [ { "code": "EXC4677-1a", "name": "Tefal KO851830", "variant": "Digital Display Black", "producer": "Tefal", "categories": [ "home electronic" ], "quantity": 1, "unitPrice": { "currency": "CZK", "amount": 121000 }, "totalPrice": { "currency": "CZK", "amount": 121000 }, "unitVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" }, "totalVat": { "vatRate": 21, "amount": 21000, "currency": "CZK" } } ] } } ``` 4. **Call the REST API**. In response, you will get all available details, including your changes. :::tip Congratulations! You have successfully learned how to change an application order using the Skip Pay API. Remember, you can make changes to your order at any time before it is marked as delivered. In the next step, we will show you how to manage canceled orders. ::: ## Manage Canceled Orders In this section, we will cover how to manage canceled orders in Skip Pay. When an order is canceled, it needs to be properly handled to ensure that the order is marked as canceled in Skip Pay. We will walk you through the steps to retrieve details about the canceled order and process the refund. It's important to handle canceled orders promptly and efficiently to maintain customer satisfaction and avoid any potential issues. We have basically two types of cancellations: 1. **To cancel all order items** (the whole order) at once, use the [/financing/v1/applications/applicationId/order/cancel](https://developers.skippay.cz/docs/api/cancelapplication) resource with an empty request. 2. **To cancel specific order items**, use the [/financing/v1/applications/applicationId/order/cancel](https://developers.skippay.cz/docs/api/cancelapplication) resource with a properly filled request that contains canceled order item information. In this case, the request should contain an array of canceled order items with one or more particular order item identifiers (code/EAN/name/type). The code, EAN, name, and type are used to identify the order item sent in "Create application." :::caution Warning! If multiple properties (code, EAN, name, or type) are used to identify an order item, all must match the item data exactly. ::: **In our case, we are going to cancel a single application with one item:** 1. Once your application is created, we can start to manage canceled orders. Open Postman and fill: PUT https://api.partner.skippay.cz/financing/v1/applications/aplicationId/order/cancel :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/cancelapplication), along with additional information. ::: 2. Fill in your `applicationId` that you got when you created the application in the **Path**. 3. In the **Body** section, update your items that you want to cancel according to your needs. Your **Body** should look like this: ```json title="Cancel single application with one item Request example" { "items": [ { "code": "EXC4677-1a", "ean": "888462064002", "name": "iPhone 13 Pro Stříbrný", "type": "PHYSICAL", "quantity": 1 } ], "totalPrice": { "amount": 19900, "currency": "CZK" }, "totalVat": [ { "amount": 19900, "currency": "CZK", "vatRate": 15 } ] } ``` 4. **Call the REST API**. In response, you will get all available details including your changes. :::tip Congratulations! In this step, you have learned how to manage canceled orders in the Skip Pay API. Whether you want to cancel the whole order or just some specific items, the API provides the necessary resources for you to do so. By using these resources, you can easily manage your orders and keep your records up to date. ::: ## Manage Returned Orders (refund) In this step, we will cover how to manage returned orders. If the customer decides to return some or all items from the order, you can use the Skip Pay API to manage this process. We will show you how to use this endpoint to manage the return of items and handle the necessary changes to the application order. :::caution Warning! Please note that returning funds to Skip Pay is required, not to the customer directly. Skip Pay will handle the necessary steps to process the refund for the customer. ::: We have basically two types of return management: 1. **Mark all order items as returned**: Use [/financing/v1/applications/applicationId/order/return](https://developers.skippay.cz/docs/api/markorderitemsasreturned) resource with an empty request to mark all order items (the whole order) as returned at once. Optionally, you can specify the amount (in the field `totalPrice`) that should be returned if it differs from the order's total price. 2. **Mark specific order item/s as returned**: Use [/financing/v1/applications/applicationId/order/return](https://developers.skippay.cz/docs/api/markorderitemsasreturned) return resource with properly filled request that contains returned order items info. In this case, the request should contain an array of returned order items with one or more particular order item identifiers (code/EAN/name/type) - code, EAN, name, and type are used for identifying order items sent in the Create application. Optionally, you can specify the amount (in the field `totalPrice`) that should be returned if it differs from the sum of the items' prices. | Scenario | What to send | Endpoint | State change | |----------------------------------|---------------------------------------|--------------------------|-------------------------------| | Amount-only partial refund | `"items": []` + `totalPrice` | `PUT /.../order/return` | No (stays `SENT`/`DELIVERED`) | | Full return of remaining items | omit `items` or send `{}` | `PUT /.../order/return` | Yes → `RETURNED` | **Conceptual example: Partial refunds and order state behavior** Let’s assume the original total price of the order is 2000 CZK. - A partial refund of 100 CZK is sent with `items: []`. → Remaining amount to refund: 1900 CZK, order state remains `SENT` or `DELIVERED`. - Another refund of 200 CZK is sent with `items: []`. → Remaining amount to refund: 1700 CZK, order state remains unchanged. - Then a refund of 300 CZK is sent with `items: []`. → Remaining amount to refund: 1400 CZK, order state remains unchanged. - Finally, a refund of 1400 CZK is sent without the `items` field (or with an empty body). → Remaining amount to refund: 0 CZK, order state changes to `RETURNED`. **Practical example** In our case, we are going to return a single application with one item. 1. Once your application is created, we can start to manage returned orders. Open Postman and fill: PUT https://api.partner.skippay.cz/financing/v1/applications/applicationId/order :::info Good to know... You can find this endpoint in our [API reference](https://developers.skippay.cz/docs/api/markorderitemsasreturned), along with additional information. ::: 2. Fill in your `applicationId` that you got when you created the application in the **Path**. 3. In the **Body** section, update your items that you want to return according to your needs. You **Body** should look like this: ```json title="Return single application with one item Request example" { "items": [ { "code": "EXC4677-1a", "ean": "888462064002", "name": "iPhone 13 Pro Stříbrný", "type": "PHYSICAL", "quantity": 1 } ], "totalPrice": { "amount": 19900, "currency": "CZK" }, "totalVat": [ { "amount": 19900, "currency": "CZK", "vatRate": 15 } ], "document": { "type": "INVOICE", "file": { "filename": "invoice.pdf", "content": "RmlsZSBjb250ZW50cy4gwq9cXyjjg4QpXy/Crw==" }, "description": "This is an invoice", "extraData": { "variableSymbol": "1234567890" } }, "variableSymbol": "1234567890" } ``` 4. **Call the REST API**. In response, you will get all available details including your changes. :::tip Congratulations! Thank you for completing the final step in managing your orders! We hope this guide has been helpful in teaching you how to manage returned orders. Remember that if you have any further questions or issues, our support team is always available to assist you. ::: ## Need help? If you have any questions or issues related to managing your orders, send us an email at integrace@skippay.cz --- ## Java SDK - Java client for API documentation for Skip Pay partners. - API version: 1.0 - Package version: - Build date: 2023-06-26T12:24:35.068083+02:00[Europe/Prague] For more information, please visit [our Github](https://github.com/skip-pay/skippay-payments-java-sdk) ## Requirements Building the API client library requires: 1. Java 1.8+ 2. Maven/Gradle ## Installation ### For Maven ```bash mvn install:install-file -DgroupId="cz.skippay" -DartifactId="skippay-java-sdk" -Dversion="1.0.0" -Dpackaging="packaging" ``` ### For Gradle ```bash gradle skippay-java-sdk ``` ## Getting Started Please follow the [installation](#installation) instruction and execute the following Java code: ```java package cz.my.skippay; public class SdkDemo { public static void main(String[] args) { ApiClient client = new ApiClient(); SecurityApi authApi = new SecurityApi(client); PartnerLogin credentials = new PartnerLogin(); credentials.setUsername("USERNAME"); credentials.setPassword("PASSWORD"); try { PartnerLoginResult login = authApi.loginpartner(credentials); client.setBearerToken(login.getAccessToken()); SkipPaySdk sdk = new SkipPaySdk(client); ApplicationResponse response = sdk.getApplicationsApi().getapplicationdetail("APPLICATION_ID"); System.out.println(response.getId()); } catch (Exception e) { System.out.println(e.getMessage()); } } } ``` ## Documentation for API Endpoints All URIs are relative to _[https://api.partner.skippay.cz](https://api.partner.skippay.cz)_ | Class | Method | HTTP request | Description | | --------------------------- | ------------------------------------ | ------------------------------------------------------------------ | ------------------------------------ | | _.ApplicationOperationsApi_ | **cancelapplication** | **PUT** `/financing/v1/applications/{applicationId}/cancel` | Cancel application | | _.ApplicationOperationsApi_ | **changeapplicationorder** | **PUT** `/financing/v1/applications/{applicationId}/order` | Change application order | | _.ApplicationOperationsApi_ | **createapplication** | **POST** `/financing/v1/applications` | Create application | | _.ApplicationOperationsApi_ | **createapplicationfromrecurrence** | **POST** `/financing/v1/recurrences/{recurrenceId}/applications` | Create application from recurrence | | _.ApplicationOperationsApi_ | **getapplicationdetail** | **GET** `/financing/v1/applications/{applicationId}` | Get application detail | | _.ApplicationOperationsApi_ | **getorder** | **GET** `/financing/v1/orders` | Get order | | _.ApplicationOperationsApi_ | **getpaymentsonspecificapplication** | **GET** `/financing/v1/applications/{applicationId}/payments` | Get payments on specific application | | _.ApplicationOperationsApi_ | **getrecurrence** | **GET** `/financing/v1/recurrences/{recurrenceId}` | Get recurrence | | _.ApplicationOperationsApi_ | **markorderitemsascancelled** | **PUT** `/financing/v1/applications/{applicationId}/order/cancel` | Mark order items as cancelled | | _.ApplicationOperationsApi_ | **markorderitemsasdelivered** | **PUT** `/financing/v1/applications/{applicationId}/order/deliver` | Mark order items as delivered | | _.ApplicationOperationsApi_ | **markorderitemsasreturned** | **PUT** `/financing/v1/applications/{applicationId}/order/return` | Mark order items as returned | | _.ApplicationOperationsApi_ | **markorderitemsassent** | **PUT** `/financing/v1/applications/{applicationId}/order/send` | Mark order items as sent | | _.ApplicationOperationsApi_ | **updaterecurrence** | **PATCH** `/financing/v1/recurrences/{recurrenceId}` | Update recurrence | | _.HealthCheckApi_ | **aPIhealthcheck** | **GET** `/v1/health` | API health check | | _.SecurityApi_ | **loginpartner** | **POST** `/authentication/v1/partner` | Login partner | ## Documentation for Authorization ### httpBearer - **Type**: Bearer authentication ## Author [info@skippay.cz](info@skippay.cz) --- ## PHP SDK - PHP client for API documentation for Skip Pay partners. - API version: 1.0 For more information, please visit [our Github](https://github.com/skip-pay/skippay-payments-php-sdk) ## Installation ### Requirements PHP 7.4 and later. Should also work with PHP 8.0. ### Composer To install the bindings via [Composer](https://getcomposer.org/), add the following to `composer.json`: ```json { "repositories": [ { "type": "vcs", "url": "https://github.com/skip-pay/skippay-payments-php-sdk.git" } ], "require": { "skippay/skippay-php-sdk": "*@dev" } } ``` Then run `composer install` ### Manual Installation Download the files and include `autoload.php`: ```php loginpartner([ 'username' => $username, 'password' => $password ]); // Configure access token $config->setAccessToken($authResponse['accessToken']); $sdk = new SkipPay\Api\Sdk( // If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`. // This is optional, `GuzzleHttp\Client` will be used as default. new GuzzleHttp\Client(), $config ); $applicationId = 11b00a1ef1; // string | applicationId $applicationCancelRequest = new \SkipPay\Model\ApplicationCancelRequest(); // \SkipPay\Model\ApplicationCancelRequest try { $result = $sdk->ApplicationOperationsApi->cancelapplication($applicationId, $applicationCancelRequest); print_r($result); } catch (Exception $e) { echo 'Exception when calling ApplicationOperationsApi->cancelapplication: ', $e->getMessage(), PHP_EOL; } ``` ## API Endpoints All URIs are relative to _[https://api.partner.skippay.cz](https://api.partner.skippay.cz)_ | Class | Method | HTTP request | Description | | -------------------------- | ------------------------------------ | ------------------------------------------------------------------ | ------------------------------------ | | _ApplicationOperationsApi_ | **cancelapplication** | **PUT** `/financing/v1/applications/{applicationId}/cancel` | Cancel application | | _ApplicationOperationsApi_ | **changeapplicationorder** | **PUT** `/financing/v1/applications/{applicationId}/order` | Change application order | | _ApplicationOperationsApi_ | **createapplication** | **POST** `/financing/v1/applications` | Create application | | _ApplicationOperationsApi_ | **createapplicationfromrecurrence** | **POST** `/financing/v1/recurrences/{recurrenceId}/applications` | Create application from recurrence | | _ApplicationOperationsApi_ | **getapplicationdetail** | **GET** `/financing/v1/applications/{applicationId}` | Get application detail | | _ApplicationOperationsApi_ | **getorder** | **GET** `/financing/v1/orders` | Get order | | _ApplicationOperationsApi_ | **getpaymentsonspecificapplication** | **GET** `/financing/v1/applications/{applicationId}/payments` | Get payments on specific application | | _ApplicationOperationsApi_ | **getrecurrence** | **GET** `/financing/v1/recurrences/{recurrenceId}` | Get recurrence | | _ApplicationOperationsApi_ | **markorderitemsascancelled** | **PUT** `/financing/v1/applications/{applicationId}/order/cancel` | Mark order items as cancelled | | _ApplicationOperationsApi_ | **markorderitemsasdelivered** | **PUT** `/financing/v1/applications/{applicationId}/order/deliver` | Mark order items as delivered | | _ApplicationOperationsApi_ | **markorderitemsasreturned** | **PUT** `/financing/v1/applications/{applicationId}/order/return` | Mark order items as returned | | _ApplicationOperationsApi_ | **markorderitemsassent** | **PUT** `/financing/v1/applications/{applicationId}/order/send` | Mark order items as sent | | _ApplicationOperationsApi_ | **updaterecurrence** | **PATCH** `/financing/v1/recurrences/{recurrenceId}` | Update recurrence | | _HealthCheckApi_ | **APIhealthcheck** | **GET** `/v1/health` | API health check | | _SecurityApi_ | **loginpartner** | **POST** `/authentication/v1/partner` | Login partner | ## Authorization ### httpBearer - **Type**: Bearer authentication ## Author [info@skippay.cz](info@skippay.cz) --- ## Java SDK (About-us) - Java client for API documentation for Skip Pay partners. - API version: 1.0 - Package version: - Build date: 2023-06-26T12:24:35.068083+02:00[Europe/Prague] For more information, please visit [our Github](https://github.com/skip-pay/skippay-payments-java-sdk) ## Requirements Building the API client library requires: 1. Java 1.8+ 2. Maven/Gradle ## Installation ### For Maven ```bash mvn install:install-file -DgroupId="cz.skippay" -DartifactId="skippay-java-sdk" -Dversion="1.0.0" -Dpackaging="packaging" ``` ### For Gradle ```bash gradle skippay-java-sdk ``` ## Getting Started Please follow the [installation](#installation) instruction and execute the following Java code: ```java package cz.my.skippay; public class SdkDemo { public static void main(String[] args) { ApiClient client = new ApiClient(); SecurityApi authApi = new SecurityApi(client); PartnerLogin credentials = new PartnerLogin(); credentials.setUsername("USERNAME"); credentials.setPassword("PASSWORD"); try { PartnerLoginResult login = authApi.loginpartner(credentials); client.setBearerToken(login.getAccessToken()); SkipPaySdk sdk = new SkipPaySdk(client); ApplicationResponse response = sdk.getApplicationsApi().getapplicationdetail("APPLICATION_ID"); System.out.println(response.getId()); } catch (Exception e) { System.out.println(e.getMessage()); } } } ``` ## Documentation for API Endpoints All URIs are relative to _[https://api.partner.skippay.cz](https://api.partner.skippay.cz)_ | Class | Method | HTTP request | Description | | --------------------------- | ------------------------------------ | ------------------------------------------------------------------ | ------------------------------------ | | _.ApplicationOperationsApi_ | **cancelapplication** | **PUT** `/financing/v1/applications/{applicationId}/cancel` | Cancel application | | _.ApplicationOperationsApi_ | **changeapplicationorder** | **PUT** `/financing/v1/applications/{applicationId}/order` | Change application order | | _.ApplicationOperationsApi_ | **createapplication** | **POST** `/financing/v1/applications` | Create application | | _.ApplicationOperationsApi_ | **createapplicationfromrecurrence** | **POST** `/financing/v1/recurrences/{recurrenceId}/applications` | Create application from recurrence | | _.ApplicationOperationsApi_ | **getapplicationdetail** | **GET** `/financing/v1/applications/{applicationId}` | Get application detail | | _.ApplicationOperationsApi_ | **getorder** | **GET** `/financing/v1/orders` | Get order | | _.ApplicationOperationsApi_ | **getpaymentsonspecificapplication** | **GET** `/financing/v1/applications/{applicationId}/payments` | Get payments on specific application | | _.ApplicationOperationsApi_ | **getrecurrence** | **GET** `/financing/v1/recurrences/{recurrenceId}` | Get recurrence | | _.ApplicationOperationsApi_ | **markorderitemsascancelled** | **PUT** `/financing/v1/applications/{applicationId}/order/cancel` | Mark order items as cancelled | | _.ApplicationOperationsApi_ | **markorderitemsasdelivered** | **PUT** `/financing/v1/applications/{applicationId}/order/deliver` | Mark order items as delivered | | _.ApplicationOperationsApi_ | **markorderitemsasreturned** | **PUT** `/financing/v1/applications/{applicationId}/order/return` | Mark order items as returned | | _.ApplicationOperationsApi_ | **markorderitemsassent** | **PUT** `/financing/v1/applications/{applicationId}/order/send` | Mark order items as sent | | _.ApplicationOperationsApi_ | **updaterecurrence** | **PATCH** `/financing/v1/recurrences/{recurrenceId}` | Update recurrence | | _.HealthCheckApi_ | **aPIhealthcheck** | **GET** `/v1/health` | API health check | | _.SecurityApi_ | **loginpartner** | **POST** `/authentication/v1/partner` | Login partner | ## Documentation for Authorization ### httpBearer - **Type**: Bearer authentication ## Author [info@skippay.cz](info@skippay.cz) --- ## Java SDK (About-us-2) - Java client for API documentation for Skip Pay partners. - API version: 1.0 - Package version: - Build date: 2023-06-26T12:24:35.068083+02:00[Europe/Prague] For more information, please visit [our Github](https://github.com/skip-pay/skippay-payments-java-sdk) ## Requirements Building the API client library requires: 1. Java 1.8+ 2. Maven/Gradle ## Installation ### For Maven ```bash mvn install:install-file -DgroupId="cz.skippay" -DartifactId="skippay-java-sdk" -Dversion="1.0.0" -Dpackaging="packaging" ``` ### For Gradle ```bash gradle skippay-java-sdk ``` ## Getting Started Please follow the [installation](#installation) instruction and execute the following Java code: ```java package cz.my.skippay; public class SdkDemo { public static void main(String[] args) { ApiClient client = new ApiClient(); SecurityApi authApi = new SecurityApi(client); PartnerLogin credentials = new PartnerLogin(); credentials.setUsername("USERNAME"); credentials.setPassword("PASSWORD"); try { PartnerLoginResult login = authApi.loginpartner(credentials); client.setBearerToken(login.getAccessToken()); SkipPaySdk sdk = new SkipPaySdk(client); ApplicationResponse response = sdk.getApplicationsApi().getapplicationdetail("APPLICATION_ID"); System.out.println(response.getId()); } catch (Exception e) { System.out.println(e.getMessage()); } } } ``` ## Documentation for API Endpoints All URIs are relative to _[https://api.partner.skippay.cz](https://api.partner.skippay.cz)_ | Class | Method | HTTP request | Description | | --------------------------- | ------------------------------------ | ------------------------------------------------------------------ | ------------------------------------ | | _.ApplicationOperationsApi_ | **cancelapplication** | **PUT** `/financing/v1/applications/{applicationId}/cancel` | Cancel application | | _.ApplicationOperationsApi_ | **changeapplicationorder** | **PUT** `/financing/v1/applications/{applicationId}/order` | Change application order | | _.ApplicationOperationsApi_ | **createapplication** | **POST** `/financing/v1/applications` | Create application | | _.ApplicationOperationsApi_ | **createapplicationfromrecurrence** | **POST** `/financing/v1/recurrences/{recurrenceId}/applications` | Create application from recurrence | | _.ApplicationOperationsApi_ | **getapplicationdetail** | **GET** `/financing/v1/applications/{applicationId}` | Get application detail | | _.ApplicationOperationsApi_ | **getorder** | **GET** `/financing/v1/orders` | Get order | | _.ApplicationOperationsApi_ | **getpaymentsonspecificapplication** | **GET** `/financing/v1/applications/{applicationId}/payments` | Get payments on specific application | | _.ApplicationOperationsApi_ | **getrecurrence** | **GET** `/financing/v1/recurrences/{recurrenceId}` | Get recurrence | | _.ApplicationOperationsApi_ | **markorderitemsascancelled** | **PUT** `/financing/v1/applications/{applicationId}/order/cancel` | Mark order items as cancelled | | _.ApplicationOperationsApi_ | **markorderitemsasdelivered** | **PUT** `/financing/v1/applications/{applicationId}/order/deliver` | Mark order items as delivered | | _.ApplicationOperationsApi_ | **markorderitemsasreturned** | **PUT** `/financing/v1/applications/{applicationId}/order/return` | Mark order items as returned | | _.ApplicationOperationsApi_ | **markorderitemsassent** | **PUT** `/financing/v1/applications/{applicationId}/order/send` | Mark order items as sent | | _.ApplicationOperationsApi_ | **updaterecurrence** | **PATCH** `/financing/v1/recurrences/{recurrenceId}` | Update recurrence | | _.HealthCheckApi_ | **aPIhealthcheck** | **GET** `/v1/health` | API health check | | _.SecurityApi_ | **loginpartner** | **POST** `/authentication/v1/partner` | Login partner | ## Documentation for Authorization ### httpBearer - **Type**: Bearer authentication ## Author [info@skippay.cz](info@skippay.cz) --- ## Java SDK (3) - Java client for API documentation for Skip Pay partners. - API version: 1.0 - Package version: - Build date: 2023-06-26T12:24:35.068083+02:00[Europe/Prague] For more information, please visit [our Github](https://github.com/skip-pay/skippay-payments-java-sdk) ## Requirements Building the API client library requires: 1. Java 1.8+ 2. Maven/Gradle ## Installation ### For Maven ``` mvn install:install-file -DgroupId="cz.skippay" -DartifactId="skippay-java-sdk" -Dversion="1.0.0" -Dpackaging="packaging" ``` ### For Gradle ```bash gradle skippay-java-sdk ``` ## Getting Started Please follow the [installation](#installation) instruction and execute the following Java code: ```java package cz.my.skippay; public class SdkDemo { public static void main(String[] args) { ApiClient client = new ApiClient(); SecurityApi authApi = new SecurityApi(client); PartnerLogin credentials = new PartnerLogin(); credentials.setUsername("USERNAME"); credentials.setPassword("PASSWORD"); try { PartnerLoginResult login = authApi.loginpartner(credentials); client.setBearerToken(login.getAccessToken()); SkipPaySdk sdk = new SkipPaySdk(client); ApplicationResponse response = sdk.getApplicationsApi().getapplicationdetail("APPLICATION_ID"); System.out.println(response.getId()); } catch (Exception e) { System.out.println(e.getMessage()); } } } ``` ## Documentation for API Endpoints All URIs are relative to _[https://api.partner.skippay.cz](https://api.partner.skippay.cz)_ | Class | Method | HTTP request | Description | | --------------------------- | ------------------------------------ | ------------------------------------------------------------------ | ------------------------------------ | | _.ApplicationOperationsApi_ | **cancelapplication** | **PUT** `/financing/v1/applications/{applicationId}/cancel` | Cancel application | | _.ApplicationOperationsApi_ | **changeapplicationorder** | **PUT** `/financing/v1/applications/{applicationId}/order` | Change application order | | _.ApplicationOperationsApi_ | **createapplication** | **POST** `/financing/v1/applications` | Create application | | _.ApplicationOperationsApi_ | **createapplicationfromrecurrence** | **POST** `/financing/v1/recurrences/{recurrenceId}/applications` | Create application from recurrence | | _.ApplicationOperationsApi_ | **getapplicationdetail** | **GET** `/financing/v1/applications/{applicationId}` | Get application detail | | _.ApplicationOperationsApi_ | **getorder** | **GET** `/financing/v1/orders` | Get order | | _.ApplicationOperationsApi_ | **getpaymentsonspecificapplication** | **GET** `/financing/v1/applications/{applicationId}/payments` | Get payments on specific application | | _.ApplicationOperationsApi_ | **getrecurrence** | **GET** `/financing/v1/recurrences/{recurrenceId}` | Get recurrence | | _.ApplicationOperationsApi_ | **markorderitemsascancelled** | **PUT** `/financing/v1/applications/{applicationId}/order/cancel` | Mark order items as cancelled | | _.ApplicationOperationsApi_ | **markorderitemsasdelivered** | **PUT** `/financing/v1/applications/{applicationId}/order/deliver` | Mark order items as delivered | | _.ApplicationOperationsApi_ | **markorderitemsasreturned** | **PUT** `/financing/v1/applications/{applicationId}/order/return` | Mark order items as returned | | _.ApplicationOperationsApi_ | **markorderitemsassent** | **PUT** `/financing/v1/applications/{applicationId}/order/send` | Mark order items as sent | | _.ApplicationOperationsApi_ | **updaterecurrence** | **PATCH** `/financing/v1/recurrences/{recurrenceId}` | Update recurrence | | _.HealthCheckApi_ | **aPIhealthcheck** | **GET** `/v1/health` | API health check | | _.SecurityApi_ | **loginpartner** | **POST** `/authentication/v1/partner` | Login partner | ## Documentation for Authorization ### httpBearer - **Type**: Bearer authentication ## Author [info@skippay.cz](info@skippay.cz) --- ## Demo ### Pay in Three - With landing link, with thirds calculation, Czech language ### Pay in Three - Without landing link, with thirds calculation, Slovak language ### Pay in Three - With landing link, Czech language, no Amount ### Pay in Three - Without landing link, Slovak language, no Amount ### Deferred payment - Without landing link, text variant 1, Czech language ### Deferred payment - With landing link, text variant 2, Czech language ### Deferred payment - Without landing link, text variant 1, Slovak language --- ## Implementation To implement the Skip Pay widget on your website, you need to include the following script tag in the `` section of your website: ```html ... ... Price: {price} ... ``` ### Shoptet If you are using Shoptet, you can add the Skip Pay widget to your website by following these steps: #### Edit your Shoptet template 1. Go to the Shoptet administration. 2. Navigate to the `Templates` (_Vzhled a šablony_) -> `Editor` (_Editor_) -> `HTML code` (_HTML kód_). 3. Find the `Footer` (_Zápatí_) section of your website. 4. Add the following code: #### PAY IN THREE For the PAY IN THREE product, you can use the following code: If you specify both the `amount` and `currency` attributes (both are required for this functionality), the widget will automatically calculate and display the three future payments: the first payment is due today, the second payment will be due in one month, and the third payment will be due in two months. If either the `amount` or `currency` attribute is missing, the widget will display a version without the payment calculation. ```html ``` Do not insert this code directly into your website. This is a source code for the implementation of the Skip Pay widget for Shoptet. ```html ``` #### DEFERRED PAYMENT For the DEFERRED PAYMENT product, you can use the following code: ```html ``` Do not insert this code directly into your website. This is a source code for the implementation of the Skip Pay widget for Shoptet. ```html ``` ## Troubleshooting Most common issues that you may encounter while implementing the Skip Pay widget on your website: 1. **Widget not displaying**: If the widget is not displaying on your website, make sure that you have included the Skip Pay script tag in the `` section of your website. Also try open website in new incognito mode. 2. **Widget overlapping with other elements**: If the widget is overlapping with other elements on your website or is too wide, you can adjust container styles to make sure that the widget is displayed correctly. Widget is fully responsive and should work on all devices. If you encounter any issues while implementing the Skip Pay widget on your website, you can contact our [support team](mailto:integrace@skippay.cz) for assistance. --- ## Widgets ### Create your customised product detail page with Skip Pay widgets A widget is an intelligent pre-made element for your e-shop that displays specific information using a simple code or script. Placements act as containers for different messaging assets, with recommendations based on type. To integrate a placement, add a small HTML snippet with the necessary attributes in your store’s source code. For optimal visibility, place the widget on your product detail page to highlight key information directly where customers view product details. Widget is available in two languages: Czech and Slovak. ## Why to use Widgets? Implementing widgets like this on your e-shop is highly beneficial. Widgets enhance user experience by presenting relevant information directly where it’s needed, increasing customer engagement and boosting conversions. By integrating them thoughtfully, you can streamline communication, showcase promotions, or provide additional product insights, making the shopping experience smoother and more engaging. ## Demo #### Result: #### Code: ```html ``` #### Result: #### Code: ```html ``` Want to see more examples? Check out our [Demo page](/docs/widgets/demo). ## Properties Overview ### 1. `product` _(required)_ - **Description**: Selects the type of payment product to show (Pay in Three or Deferred Payment). - **Options**: "PAY_IN_THREE" or "DEFFERED_PAYMENT". ### 2. `currency` - **Description**: Sets the currency for the amount (e.g., EUR, CZK). - **Default**: CZK (Czech Koruna). - **Example**: `currency="CZK"` ### 3. `language` - **Description**: Sets the display language for the component (currently supports Czech (`cs`) and Slovak (`sk`)). - **Default**: `cs` (Czech). - **Example**: `language="cs"` ### 4. `with-landing-link` - **Description**: Adds a link to a landing page with more information about the payment option. - **Usage**: Include this attribute to show the link (no value needed). - **Example**: `` ### 5. `text-variant` - **Description**: Controls which style variant to use for the banner text. - **Options**: Accepts numbers, like `1` or `2`, where each corresponds to a different text style. (for merchants with fashion or other specialized stores we recommend using `text-variant="2"`) - **Example**: `text-variant="2"`