Search Overlay

Skrill

Skrill wallet provides a secure and efficient payment solution that allows you to accept payments online via a variety of payment methods. With the Skrill wallet, you can benefit from a hassle-free payment experience, and customers can transact with confidence. Skrill wallet's key strength is its multi-currency support and its focus on user experience, which ensures that you can reach a global audience and increase sales conversion rates.

Skrill wallet is available in over 200 countries and territories worldwide, making it a truly global payment solution. Skrill wallet caters to a wide range of industries, including e-commerce, gaming and gambling, digital goods and services, travel and tourism, and more. 

Features

Transaction Type Payments (2-step, Withdrawals (2-Step), Verification (API Based), Refunds (API Based)
Supported Regions Global
Supported Currency AED, AUD, BGN, BHD, BRL, CAD, CHF, CZK, DKK, EUR, GBP, HKD, HRK, HUF, ILS, INR, ISK, JOD, JPY, KES, KWD, LTL, MAD, MXN, MYR, NOK, NZD, OMR, PEN, PHP, PLN, QAR, RON, RSD, RUB, SAR, SEK, SGD, THB, TND, TRY, TWD, USD, ZAR
Special Features Remember Me functionality, Lock specific users for Payment, Verified withdrawal

Setup Requirements

  1. Get onboarded with Paysafe and receive your credentials as mentioned in Before you Begin.  
  2. Get onboarded with Skrill Wallet as a merchant – Our integrations team can help. 
  3. After the above steps are done, our Integrations team will coordinate with you to get the following details. 

    Parameter Type Requirement Description
    Pay to Email Email Mandatory This is your Skrill Merchant Wallet email ID where the money would debited/credited in transactions. 
    Password AlphaNumeric Mandatory This is a specific password set up by you for API Integrations, called API/MQI password.
    Note: Enure this password is not the same as your wallet login. 
    Secret Word AlphaNumeric Conditional This is a specific secret key that is used only in case when Verification API service is required.
  4. The final step is to finalize how you want to handle incomplete transactions, auto-settlement or auto-refund. 

You can find all the details mentioned above in the Skrill Business Portal.

Typical Scenarios

Payments

In payments, for Skrill wallet solution, Paysafe provides two uses cases:

  1. Customer is free to pay with any Skrill wallet account. 
  2. Customer is restricted to pay with the specific Skrill wallet account which is provided by you during the setup. 

Regular User

To process a payment, follow these steps:

Setup:

  1. Provide the Public API Key:
  2. Provide the following options:
    • currency, amount, merchantRefNum, customer. 
    • paymentMethodDetails object is mandatory, but can be sent empty. 
  3. Create a resultCallback function to capture the details of transaction. 
    • Optional closeCallback to know the status of payment handle before taking the next action. 

Initialization of Checkout

Server-to-Server Calls:

  1. From the resultCallback function in result, capture the amount, paymentHandleToken and transactionType. 
  2. If transactionType matches PAYMENT, trigger Payments API
  3. In the response, you will get transaction and settlement details, which can be used for reconciliation.
  4. The id in Payments API response should be captured as it can be used for refunds.

In case you don't trigger the Payments API call, the paymentHandleToken moves to EXPIRED from PAYABLE state in 15–20 mins, which means the customer has completed the money movement.

For such scenarios, Paysafe offers the auto-settlement and auto-refund options, which you can pre-configure.

  • In auto-settlement, Paysafe will check the status of the transaction and complete the payment.
  • In auto-refund, Paysafe will check the status, complete the transaction and then trigger a refund to the customer.

Payments: No User Restriction

<html>
<head>
<script src="https://api.test.paysafe.com/checkout/v2/paysafe.checkout.min.js"></script>
</head>

<body>
<button onclick="checkout()">Deposit</button>
</body>

<script>
function checkout() {
var API_key = "c3V0LTM0ODg2MDpCLXFhMi0wLTVkM2VjYjMwLTEtMzAyYzAyMTQyYTM3NjgxMmE2YzJhYzRlNmQxMjI4NTYwNGMwNDAwNGU2NWI1YzI4MDIxNDU1N2EyNGFiNTcxZTJhOWU2MDVlNWQzMjk3MjZjMmIzZWNjNjJkNWY=";
options = {
currency: "USD",
amount: 540,
merchantRefNum: "162938285366512",
customer: {
firstName: "Kumar",
lastName: "Priyanshu",
email: "priyanshukumar.0309@gmail.com",
},
paymentMethodDetails: {},
};

paysafe.checkout.setup(
API_key,
options,
function resultCallback(instance, error, result) {
if (result && result.paymentHandleToken) {
instance.showSuccessScreen( "Your goods are now purchased. Expect them to be delivered in next 5 business days.");
if (instance.isOpen()) {
instance.close();
}
// make AJAX call to Payments API
} else {
console.error(error); // Handle the error
instance.showFailureScreen( "The payment was declined. Please, try again with the same or another payment method.");
}
},
function(stage, expired) {
if (stage) {
switch (stage) {
case "PAYMENT_HANDLE_NOT_CREATED" :
case "PAYMENT_HANDLE_CREATED" :
case "PAYMENT_HANDLE_REDIRECT" :
case "PAYMENT_HANDLE_PAYABLE" :
default:
}
}
else {
console.log(expired) //Add action in case Checkout is expired
}
}
);
}
</script>
</html>

Locked User Email

To process a payment, follow these steps:

Setup:

  1. Provide the Public API Key:
  2. Provide these options:
    1. currency, amount, merchantRefNum, customer
    2. paymentMethodDetails object is mandatory it should contain skrill object with consumerId which is the email of the user that needs to be locked for transaction.
  3. Create a resultCallback function to capture the details of transaction. 
    • Optional closeCallback to know the status of payment handle before taking the next action. 

Initialization of Skrill Checkout

Server-to-Server Calls:

  1. From the resultCallback function in the result, capture  the amount, paymentHandleToken and transactionType. 
  2. If transactionType matches PAYMENT, trigger Payments API.
  3. In the response, you will get transaction and settlement details, which can be used for reconciliation.
  4. The id in Payments API response should be captured as it can be used for refunds. 

In case you don't trigger the Payments API call for any reason, the paymentHandleToken moves to EXPIRED from PAYABLE state in 15–20 mins, which means the customer has completed the money movement.

For such scenarios, Paysafe offers the auto-settlement and auto-refund options, which you can pre-configure.

  • In auto-settlement, Paysafe will check the status of the transaction and complete the payment.
  • In auto-refund, Paysafe will check the status, complete the transaction and then trigger a refund to the customer.

Payments : User Email Locked

<html>
<head>
<script src="https://api.test.paysafe.com/checkout/v2/paysafe.checkout.min.js"></script>
</head>

<body>
<button onclick="checkout()">Deposit</button>
</body>

<script>
function checkout() {
var API_key = "c3V0LTM0ODg2MDpCLXFhMi0wLTVkM2VjYjMwLTEtMzAyYzAyMTQyYTM3NjgxMmE2YzJhYzRlNmQxMjI4NTYwNGMwNDAwNGU2NWI1YzI4MDIxNDU1N2EyNGFiNTcxZTJhOWU2MDVlNWQzMjk3MjZjMmIzZWNjNjJkNWY=";
options = {
currency: "USD",
amount: 540,
merchantRefNum: "162938285366512",
customer: {
firstName: "Kumar",
lastName: "Priyanshu",
email: "priyanshukumar.0309@gmail.com",
},
paymentMethodDetails: {
skrill : {
consumerId:"darkknight-team@paysafe.com"
}
}
};

paysafe.checkout.setup(
API_key,
options,
function resultCallback(instance, error, result) {
if (result && result.paymentHandleToken) {
instance.showSuccessScreen( "Your goods are now purchased. Expect them to be delivered in next 5 business days.");
if (instance.isOpen()) {
instance.close();
}
//Check PaymentHandle Stage to initiate next step
} else {
console.error(error); // Handle the error
instance.showFailureScreen( "The payment was declined. Please, try again with the same or another payment method.");
}
},
function(stage, expired) {
if (stage) {
switch (stage) {
case "PAYMENT_HANDLE_NOT_CREATED" :
case "PAYMENT_HANDLE_CREATED" :
case "PAYMENT_HANDLE_REDIRECT" :
case "PAYMENT_HANDLE_PAYABLE" :
default:
}
}
else {
console.log(expired) //Add action in case Checkout is expired
}
}

);
}
</script>
</html>

Withdrawal

For withdrawals, the customer email needs to be locked always to ensure secure payouts.

To process a Withdrawal/Standalone Credit, follow these steps:

Setup:

  1. Provide the Public API key.
  2. Provide these options:
    1. currency, amount, merchantRefNum, customer.
    2. paymentMethodDetails object is mandatory it should contain skrill object with consumerId, which is the email of the user, emailSubject and emailMessage. 
  3. Create a resultCallback function to capture the details of transaction. 
    • Optional closeCallback to know the status of payment handle before taking the next action

Initialization of Checkout:

Server-to-Server Calls :

  1. From the resultCallback function in result capture the amount, paymentHandle and transactionType. 
  2. if transactionType matches STANDALONE_CREDIT, trigger Standalone Credits API
  3. In the response, you will get transaction and settlement details which can be used for reconciliation. 

Withdrawal: User Email Locked

<html>
<head>
<script src="https://api.test.paysafe.com/checkout/v2/paysafe.checkout.min.js"></script>
</head>

<body>
<button onclick="checkout()"> Withdrawal </button>
</body>
<script>
function checkout() {
var API_key = "cTYwNGMwNDAw";
options = {
currency: "USD",
amount: 540,
merchantRefNum: "162938285366512",
payout:true,
customer: {
firstName: "Kumar",
lastName: "Priyanshu",
email: "priyanshukumar.0309@gmail.com",
},
paymentMethodDetails: {
skrill : {
consumerId:"darkknight-team@paysafe.com",
emailSubject: "Payout for Kumar Priyanshu from Gaming ",
emailMessage: "Note for email here"
}
}
};

paysafe.checkout.setup(
API_key,
options,
function resultCallback(instance, error, result) {
if (result && result.paymentHandleToken) {
instance.showSuccessScreen( "Your goods are now purchased. Expect them to be delivered in next 5 business days.");
if (instance.isOpen()) {
instance.close();
}
//Check PaymentHandle Stage to initiate next step
} else {
console.error(error); // Handle the error
instance.showFailureScreen( "The payment was declined. Please, try again with the same or another payment method.");
}
},
function(stage, expired) {
if (stage) {
switch (stage) {
case "PAYMENT_HANDLE_NOT_CREATED" :
case "PAYMENT_HANDLE_CREATED" :
case "PAYMENT_HANDLE_REDIRECT" :
case "PAYMENT_HANDLE_PAYABLE" :
default:
}
}
else {
console.log(expired) //Add action in case Checkout is expired
}
}

);
}
</script>
</html>

Refunds

To process a refund transaction using a Skrill Payment, follow these steps:

A refund transaction can only be initiated by you for a transaction whose Settlement/Payment is completed.

Partial Refunds are also available.

  1. After the payment and then settlement is done, the status changes to COMPLETED in the response of payments information. The refund can be initiated using the Settlement ID which is the same as the Payment ID if settleWithAuth is TRUE.
  2. Create a refund request with the Refunds API
    • POST: /paymenthub/v1/settlements/{settlementId }/refunds
  3. The response will contain the details of the payment done and a unique identifier that could be used to refer to each individual refund, either partial or full.
  4. The status of the refund will initially be in the PENDING state and will move to COMPLETED once the refund is processed to the customer's Skrill Wallet Account, at each step a webhook  will be triggered to you.
  5. The gatewayResponse.id can be used for reconciliation purpose with Skrill system in case of discrepancies. 

Verification

This is a standalone API service that allows you to validate if the customer is registered at Skrill's end and the details provided match or not.

For more details, read the Skrill Verification.

Code Examples

API Calls

Payments API

Payments API Request

{
"amount": 540,
"merchantRefNum": "ce9245a8-17c4-46bd-ae2b-3932f0e14d51",
"currencyCode": "USD",
"paymentHandleToken":"PHYkLq3iI6YZ2PWU"
}

Payments API Response

{
"id": "98315317-0276-4636-a552-e475e34a4897",
"paymentType": "SKRILL",
"paymentHandleToken": "PHYkLq3iI6YZ2PWU",
"merchantRefNum": "ce9245a8-17c4-46bd-ae2b-3932f0e14d51",
"currencyCode": "USD",
"settleWithAuth": true,
"dupCheck": true,
"txnTime": "2023-07-28T13:58:28Z",
"customerIp": "115.114.129.142",
"status": "COMPLETED",
"gatewayReconciliationId": "d087c81f-b438-4a4e-934a-77d9a6c457de",
"amount": 540,
"availableToRefund": 540,
"consumerIp": "115.114.129.142",
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2023-07-28T14:02:40Z",
"statusTime": "2023-07-28T14:02:40Z",
"gatewayResponse": {
"transaction_id": "d087c81f-b438-4a4e-934a-77d9a6c457de",
"amount": "5.40",
"mb_transaction_id": "4921450195",
"pay_from_email": "darkknight-team@paysafe.com",
"pay_to_email": "paysafe-unity@outlook.com",
"currency": "USD",
"merchant_id": "139129672",
"id": "4921450195",
"processor": "SKRILL_QCO",
"status": "2",
"sid": "c6baa2526c63a062089fee27725ae068"
},
"availableToSettle": 0,
"profile": {
"firstName": "Kumar",
"lastName": "Priyanshu",
"email": "priyanshukumar.0309@gmail.com"
},
"settlements": {
"amount": 540,
"txnTime": "2023-07-28T13:58:28.000+0000",
"availableToRefund": 540,
"merchantRefNum": "ce9245a8-17c4-46bd-ae2b-3932f0e14d51",
"id": "98315317-0276-4636-a552-e475e34a4897",
"status": "COMPLETED"
}
}

Standalone Credits API Request

{
"amount": 540,
"merchantRefNum": "ce9245a8-17c4-46bd-ae2b-3932f0e14d51",
"currencyCode": "USD",
"paymentHandleToken":"PHYkLq3iI6YZ2PWU"
}

Standalone Credits API Response

{
"id": "7f2ac605-4833-46f3-83f7-278110fc165f",
"paymentType": "SKRILL",
"paymentHandleToken": "PHYkLq3iI6YZ2PWU",
"merchantRefNum": "ce9245a8-17c4-46bd-ae2b-3932f0e14d51",
"currencyCode": "USD",
"txnTime": "2023-07-27T12:02:24Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"zip": "3000",
"country": "NL"
},
"customerIp": "172.0.0.1",
"status": "COMPLETED",
"gatewayReconciliationId": "AQAAAATRMA",
"amount": 540,

"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2023-07-24T12:02:24Z",
"statusTime": "2023-07-24T12:02:24Z",
"gatewayResponse": {
"status_msg": "processed",
"id": "-1461309521",
"processor": "SKRILL_QCO",
"sid": "55bfdaaaddc94233bba7f649ec322480",
"status": "2"
},
"skrill": {
"consumerId": "darkknight-team@paysafe.com",
"emailSubject": "Payout for Kumar Priyanshu from Gaming X ",
"emailMessage": "Note for email here"
}
}

Refunds API Request

{
"merchantRefNum": "ead5981f-ba7f-42d0-809f-f67948d58c09",
"amount": 140
}

Refunds API Response

{
"id": "7b85013a-f093-4944-a494-f18e87644566",
"paymentType": "SKRILL",
"merchantRefNum": "0af48e6a-fc71-4768-9090-282238f15cb5",
"currencyCode": "USD",
"txnTime": "2023-07-28T14:11:09Z",
"status": "COMPLETED",
"gatewayReconciliationId": "4921472201",
"amount": 140,
"updatedTime": "2023-07-28T14:11:09Z",
"statusTime": "2023-07-28T14:11:09Z",
"liveMode": false,
"simulator": "EXTERNAL",
"gatewayResponse": {
"id": "4921472201",
"status": "2",
"merchant_id": "139129672",
"processor": "SKRILL_QCO"
},
"source": "CheckoutV2"
}

Webhooks

Payment Handles

No Event Description
1 PAYMENT_HANDLE_PAYABLE  This webhook signifies that the Payment Handle token created for the required purpose can now be executed, and the preliminary requirements are completed, the next API call with the payment handle can be done.
2 PAYMENT_HANDLE_PROCESSING  This webhook is triggered when the customer is successfully redirected to the payment platform page and operation has started for the payment by the customer.
3 PAYMENT_HANDLE_COMPLETED  This webhook is triggered when the process of the payment handle is token is completed after triggering the next API, Payments or Standalone Credit API.
4  PAYMENT_HANDLE_EXPIRED   This webhook is triggered when the next step is not initiated after the payment handle is created within the given time frame, the duration can be seen in the response to/paymenthub/v1/paymenthandles API under the tag timeToLiveSeconds.
5  PAYMENT_HANDLE_FAILED This webhook is triggered when the event or transaction is failed at VIP Preferred end
6 PAYMENT_HANDLE_ERRORED This webhook is triggered when SSN is missing in the request

Payments

No. Event Description
1 PAYMENT_PROCESSING The payment is in progress. In some cases, there might be delays due to an action pending by the customer or you.
2 PAYMENT_PENDING The payment is pending because the transaction hasn't been completed from the Bank Account to Skrill Wallet to Merchant.
3  PAYMENT_COMPLETED/SETTLEMENT_COMPLETED   The payment was completed successfully.
4  PAYMENT_FAILED   This webhook is triggered when the payment fails during the process.
5 PAYMENT_RECEIVED Our system has received the payment request and is waiting for the downstream processor’s response.
6 PAYMENT_COMPLETED The payment request is completed.

Withdrawals/Standalone Credits

No. Event Description
1 SA_CREDIT_PROCESSING The credit request is being processed.
2 SA_CREDIT_RECEIVED Our system has received the credit request and is waiting for the downstream processor’s response.
3 SA_CREDIT_COMPLETED The credit request is completed.
4 SA_CREDIT_FAILED  This webhook is triggered in case the transaction was initially completed and later failed due to some settlement error.
5 SA_CREDIT_HELD The credit request is placed on hold due to risk considerations.
6 SA_CREDIT_CANCELLED  This webhook is triggered when the transaction was cancelled after it was completed
7  SA_CREDIT_ERRORED   This webhook is used when there is a technical error during the initiation of a transaction.
8  SA_CREDIT_PENDING   This webhook is triggered when the withdrawal has been initiated but due to various bank delay reasons or time zone issues the actual money transfer has not happened.

Refunds

S.no Event Description
1 REFUND_FAILED   This webhook is triggered when the refund is initiated but failed due to a functional error for e.g. Refund amount is more than the payment amount.
2 REFUND_COMPLETED   This webhook is triggered when the refund has been successfully transferred from the merchant account to the user's chosen bank account. 
3 REFUND_PENDING   This webhook is triggered when refund has been initiated but due to various bank delay reasons or time zone issues the actual money transfer has not happened.